Opengl 使用GL_shader_STORAGE_BUFFER将数组传递给片段着色器

Opengl 使用GL_shader_STORAGE_BUFFER将数组传递给片段着色器,opengl,glsl,fragment-shader,Opengl,Glsl,Fragment Shader,我想将一个类传递给包含一些数据的片段着色器。问题是我无法传递大小为100的数组 我通过类作为数据: struct MetaData { int rows; int columns; float cellSizeX; float cellSizeY; int mask[10][10]; }metaData; glGenBuffers(1, &ssbo); glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);

我想将一个类传递给包含一些数据的片段着色器。问题是我无法传递大小为100的数组

我通过类作为数据:

struct MetaData {
    int rows;
    int columns;

    float cellSizeX;
    float cellSizeY;

    int mask[10][10];
}metaData;

glGenBuffers(1, &ssbo);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(metaData), &metaData, GL_DYNAMIC_COPY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo);

glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
GLvoid* p = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY);
memcpy(p, &metaData, sizeof(metaData));
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
在着色器中,在顶点着色器中接受它为:

layout (std430, binding=3) buffer shader_data
{ 
    int rows;
    int columns;

    float cellSizeX;
    float cellSizeY;

    int mask[10][10];
};

flat out int Mask[10][10];

int main(){
    ...some code...

    Mask = mask;

    ...some code...
}
并在片段着色器中接受它,但会显示以下错误,我不知道如何解决

cannot locate suitable resource to bind variable "Mask". Possibly large array.

我从互联网上的搜索中了解到,
glGet(GL\u MAX\u variable\u float\u ARB)
的数量有一定的限制。有什么方法可以避免这种情况吗?

嗯,您知道可以访问着色器中的着色器存储缓冲区,对吗? “片段着色器”属于总括术语“着色器”,因此,与其复制每个顶点的结构,不如将以下内容添加到片段着色器中,并直接访问数据:p


//添加到片段着色器源。。。。。
布局(std430,绑定=3)缓冲区着色器_数据
{ 
int行;
int列;
漂浮细胞;
漂浮细胞;
整数掩码[10][10];
};