c++ - 带图像存储的 bindTextureUnit
问题描述
我无法找到任何文档,但可以这样做:
layout(RGBA8, binding = 1) uniform image3D voxels;
在片段着色器中并在 C++ 中使用glBindTextureUnit(1, myTexture);
?
还是我必须手动查询统一位置?
解决方案
我无法找到任何文档,但是否可以这样做 [...]
是的。
还是我必须手动查询统一位置?
不。
但是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;