带图像存储的 bindTextureUnit
Posted
技术标签:
【中文标题】带图像存储的 bindTextureUnit【英文标题】:bindTextureUnit with Image storage 【发布时间】:2020-04-04 09:24:30 【问题描述】:我无法找到任何文档,但可以这样做:
layout(RGBA8, binding = 1) uniform image3D voxels;
在片段着色器中并在 C++ 中使用 glBindTextureUnit(1, myTexture);
绑定它?
还是必须手动查询统一位置?
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于带图像存储的 bindTextureUnit的主要内容,如果未能解决你的问题,请参考以下文章