首页 > 解决方案 > 带图像存储的 bindTextureUnit

问题描述

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

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

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

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

标签: c++openglglslshader

解决方案


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

是的。

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

不。

但是glBindTextureUnit是错误的指令。图像统一由纹理图像单元链接到纹理对象。

在着色器程序中可以设置绑定点:

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

这相当于获取“体素”的统一位置并将其统一值设置为“1”。因此,图像 uniformvoxels与纹理图像单元“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;

推荐阅读