【问题标题】:bindTextureUnit with Image storage带图像存储的 bindTextureUnit
【发布时间】:2020-04-04 09:24:30
【问题描述】:

我无法找到任何文档,但可以这样做:

layout(RGBA8, binding = 1) uniform image3D voxels;

在片段着色器中并在 C++ 中使用 glBindTextureUnit(1, myTexture); 绑定它?

还是必须手动查询统一位置?

【问题讨论】:

    标签: c++ opengl glsl shader


    【解决方案1】:

    我无法找到任何文档,但是否可以这样做 [...]

    是的。

    还是必须手动查询统一位置?

    没有。

    但是glBindTextureUnit 是错误的指令。图像统一通过texture image unit 链接到纹理对象。

    在着色器程序中可以设置binding points

    layout(RGBA8, binding = 1) uniform image3D voxels;
    

    这相当于获取“体素”的统一位置并将其统一值设置为“1”。因此,图像统一voxels,与纹理图像单元“1”相关联。

    纹理对象必须通过glBindImageTexture绑定到相应的纹理图像单元。例如:

    glBindImageTexture(1, myTexture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA8); 
    

    这条指令将myTexture绑定到纹理图像单元1。


    注意,glBindTextureUnit(1, myTexture); 会将一个纹理对象绑定到一个纹理单元,该单元可由相应的纹理采样器制服使用。例如:

    layout(binding = 1) uniform sampler3D voxels;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多