带图像存储的 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的主要内容,如果未能解决你的问题,请参考以下文章

Avr atmega 16 带网络摄像头

用户无权访问此对象。带储藏火库

带字节的着色器存储缓冲区对象

使用PHP生成二维码的两种方法(带logo图像)

图像隐写基于LSB+DCT实现数字水印嵌入提取带攻击测试matlab源码含GUI

图像隐写基于matlab GUI DCT+FFT数字水印嵌入+攻击+提取(带面板)含Matlab源码 1760期