我已经绑定shader storage buffer
到shader storage block
这样的
GLuint index = glGetProgramResourceIndex(myprogram, GL_SHADER_STORAGE_BLOCK, name);
glShaderStorageBlockBinding(myprogram, index, mybindingpoint);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, mybuffer)
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, mybindingpoint, mybuffer, 0, 48);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, 48, &mydata);
mydata
指向一个std::vector
包含 4 个glm::vec3
对象。
因为我绑定48 bytes
了我期望lights[]
持有的缓冲区范围48/(4*3) = 4 vec3s
。
layout(std430) buffer light {
vec3 lights[];
};
1
my中 index 处的元素std::vector
保存数据x=1.0, y=1.0, z=1.0
。
但是通过执行查看输出
gl_FragColor = vec4(lights[1], 1.0);
我看到黄色( x=1.0, y=1.0, z=0.0
) 像素。这不是我加载到缓冲区中的内容。
有人可以告诉我我做错了什么吗?
编辑
我只是将着色器存储块更改为
layout(std430) buffer light {
float lights[];
};
和输出
gl_FragColor = vec4(lights[3],lights[4],lights[5],1.0);
它可以工作(白色像素)。
如果有人可以解释这一点,那仍然很棒。