【问题标题】:GLSL 4.50 messed up my Shader Storage Buffer ObjectsGLSL 4.50 搞砸了我的着色器存储缓冲区对象
【发布时间】: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


    【解决方案1】:

    我最终使用 glMapBuffer 而不是 glBufferSubData,并使用动态绑定而不是硬编码绑定,如 this page 中所述 有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多