【发布时间】:2014-01-16 15:01:03
【问题描述】:
在使用计算着色器时,我看到大多数示例只是创建了 GL_SHADER_STORAGE_BUFFERS,就像普通缓冲区一样:
glGenBuffers, glBindBuffer, glBufferData
然后它们被这样使用:
glUseProgram(computeShader);
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, **3**, bufferA, 0, bufferSize);
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, **4**, bufferB, 0, bufferSize);
glDispatchCompute(computeShader);
在计算着色器中,缓冲区是这样声明的:
layout ( **binding = 3** ) buffer
buffer1
{
vec4 data1[];
};
layout ( **binding = 4** ) buffer
buffer2
{
vec4 data2[];
};
然后我得到一些建议,在初始化之后我应该做这样的事情:
GLuint index = glGetProgramResourceIndex(computeShader, GL_SHADER_STORAGE_BLOCK, "buffer1");
glShaderStorageBlockBinding(shader, index, index);
为什么这是必要的?
既然 glBindBufferRange 需要 layout(binding = x) 指定的索引,它有什么目的?
【问题讨论】:
-
代码中那些随机的**在做什么?
-
我只是想把它们加粗...