我想将一个类传递给包含某些数据的片段着色器。问题是我无法传递大小为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,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_MAX_VARYING_FLOATS_ARB)
的数量受到一定限制。有什么办法可以避免这种情况?