Opengl 使用GL_shader_STORAGE_BUFFER将数组传递给片段着色器
我想将一个类传递给包含一些数据的片段着色器。问题是我无法传递大小为100的数组 我通过类作为数据: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);
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];
};