我的顶点着色器代码在GLSL 4.30中工作正常但在升级到GLSL 4.50之后,它似乎无法从SSBO中读取值。 以下是将数据卸载到缓冲区的代码:
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buf_plumeX);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(GLFrame->PlumeSetP->plX), GLFrame->PlumeSetP->plX);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 7, buf_plumeX);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buf_plumeY);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(GLFrame->PlumeSetP->plY), GLFrame->PlumeSetP->plY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, buf_plumeY);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buf_plumeZ);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(GLFrame->PlumeSetP->plZ), GLFrame->PlumeSetP->plZ);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, buf_plumeZ);
在着色器中,我使用以下代码读取这些缓冲区:
layout ( std140, binding = 7) buffer PlumeBufferX {
float plumeX[];
};
layout ( std140, binding = 6) buffer PlumeBufferY {
float plumeY[];
};
layout ( std140, binding = 5) buffer PlumeBufferZ {
float plumeZ[];
};
我计算一个偏移并获取该特定偏移处的数据:
vec3 p = vec3(plumeX[offset], plumeY[offset], plumeZ[ offset] );
现在无论我如何计算基于此p位置渲染点的偏移量,看起来它们都在零值附近! 我确信这不是我用GLSL 4.30获得的行为,因为我录制了我的渲染视频。 知道是什么导致了这个问题,为什么我的SSBO被GLSL 4.50清零了?
感谢。