【发布时间】:2015-02-27 22:53:00
【问题描述】:
我的顶点着色器代码在 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 清零了吗?
谢谢。
【问题讨论】:
标签: opengl glsl shader vertex-shader opengl-4