我通常使用shaderStorageBuffer读取着色器中的一些中间结果以进行调试。最近我在代码中发现了问题。当我渲染到屏幕外FBO时,shaderStorageBuffer不起作用。 这里列出了部分代码:
glBindBuffer(GL_SHADER_STORAGE_BUFFER, shaderTempBuffer);
glBufferData(GL_SHADER_STORAGE_BUFFER, 100 * sizeof(float4), NULL, GL_STATIC_DRAW);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, bindingIndex2, shaderTempBuffer);
glShaderStorageBlockBinding(render3DfluidProg, m_ShaderStorageBlockIndex2, bindingIndex2);
/* glBindFramebuffer(GL_FRAMEBUFFER, nextFboBuffer);
glViewport(0, 0, 800, 600);
glClearBufferfv(GL_COLOR, 0, black);
glClearBufferfv(GL_DEPTH, 0, white);*/
....
我使用glMapBuffer来获取返回结果,它们都是零。但是,当我删除带有批注的代码以渲染到默认的FBO中时,缓冲区可以获得正确的结果。我只是不知道为什么?似乎只能在渲染到默认FBO的着色器中更改shaderStorageBuffers的结果。