Opengl 使用GLSL可以使用哪些方法处理二维阵列?

Opengl 使用GLSL可以使用哪些方法处理二维阵列?,opengl,glsl,vulkan,Opengl,Glsl,Vulkan,我的具体例子是一个计算着色器,用于在n×m矩阵和n legnth向量之间进行矩阵乘法(其中n和m在编译时未知)。或者使用二维图像(请参阅): 布局(r32f)统一图像2D矩阵最大值; void main() { // [...] ivec2大小=ivec2(图像大小(矩阵最大值)); int n=大小.x; int m=大小.y; 对于(int j=0;j

我的具体例子是一个计算着色器,用于在
n×m矩阵
n legnth向量
之间进行矩阵乘法(其中
n
m
在编译时未知)。

或者使用二维图像(请参阅):

布局(r32f)统一图像2D矩阵最大值;
void main()
{
// [...]
ivec2大小=ivec2(图像大小(矩阵最大值));
int n=大小.x;
int m=大小.y;
对于(int j=0;j
或将数据写入着色器存储缓冲区对象中的一维开放大小数组:

布局(std430)缓冲区TMatrix
{
int n;
int m;
浮动数据[];
}基质;
布局(r32f)均匀图像2D矩阵最大值;
void main()
{
// [...]
对于(int j=0;j

如果在编译时知道大小,则无需使用开放大小的数组():

const int n=10;
常数int m=10;
布局(std430)缓冲区TMatrix
{
浮动数据[n][m];
}基质;
void main()
{
// [...]
对于(int j=0;j
使用二维图像(请参阅):

布局(r32f)统一图像2D矩阵最大值;
void main()
{
// [...]
ivec2大小=ivec2(图像大小(矩阵最大值));
int n=大小.x;
int m=大小.y;
对于(int j=0;j
或将数据写入着色器存储缓冲区对象中的一维开放大小数组:

布局(std430)缓冲区TMatrix
{
int n;
int m;
浮动数据[];
}基质;
布局(r32f)均匀图像2D矩阵最大值;
void main()
{
// [...]
对于(int j=0;j

如果在编译时知道大小,则无需使用开放大小的数组():

const int n=10;
常数int m=10;
布局(std430)缓冲区TMatrix
{
浮动数据[n][m];
}基质;
void main()
{
// [...]
对于(int j=0;j
使用2D纹理(图像)或着色器存储缓冲区Object@Rabbid76我不太明白这是怎么回事,能举个例子吗?我不知道你想达到什么目的。到目前为止你试过什么?看见基本上,你正在寻找一个教程。你想用Vulkan还是OpenGL?我不明白你的问题。几乎每个计算着色器都从一个图像或SSBO读取数据,处理数据,并将其存储在另一个图像或SSBO中。这是计算着色器的工作。您的案例有什么特别之处?@rabbi76使用非常量大小的矩阵进行“矩阵乘法”。我知道这些不起作用,但它们说明了我正在尝试做的事情。使用2D纹理(图像)或着色器存储缓冲区Object@Rabbid76我不太明白这是怎么回事,能举个例子吗?我不知道你想达到什么目的。到目前为止你试过什么?看见基本上,你正在寻找一个教程。你想用Vulkan还是OpenGL?我不明白你的问题。几乎每个计算着色器都从一个图像或SSBO读取数据,处理数据,并将其存储在另一个图像或SSBO中。这是计算着色器的工作。您的案例有什么特别之处?@rabbi76使用非常量大小的矩阵进行“矩阵乘法”。我知道这些不起作用,但它们说明了我正在努力做的事情。