我是 OpenGL 新手,对这些功能感到困惑。我认为 glActiveTexture 激活纹理“槽”或类似的东西,并且您绑定的下一个纹理绑定到该槽。但现在我看到 glBindImageTexture (call:) glBindImageTexture(0, texHandle, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_R32F);,我看不出这个函数与 glActiveTexture 和 glTexImage2D 之间的区别。
实际上我什至不知道纹理和图像之间的区别,所以你能解释一下它们的区别吗?
glActiveTexture且彼此glBindImageTexture无关。尽管它们的命名相似,但它们代表的是两种完全不同的事物。
glActiveTexture设置当前活动的“纹理图像单元”。
glBindImageTexture将纹理中的图像绑定到特定的“图像单元”。注意引文中的关键短语。“图像单元”用于着色器图像加载/存储操作。它们不用于着色器采样器访问;这是为“纹理图像单元”保留的。是的,它们的名称相似,但它们不是同一件事。
图像加载/存储用于从着色器任意读取和(主要)写入图像数据。在 GLSL 中,这些是由uniform带有前缀image(image2D例如 )的变量定义的。sampler常规纹理访问由前缀为(如)的统一变量处理sampler2D。
采样器纹理访问允许您执行过滤、自动 mipmap 选择等操作。图像加载/存储不会。它只是从特定纹理内的特定图像读取内存。
要将纹理与采样器一起使用,请将纹理绑定到纹理图像单元(通常使用glActiveTexture/ glBindTexture)。要使用来自纹理的图像进行图像加载/存储,您可以使用glBindImageTexture. 纹理图像单元的集合与“图像单元”的集合没有任何关系。
两个功能都不能替代另一个,也没有任何冲突。“图像单元”的数量与“纹理图像单元”的数量无关。并且当前的“纹理图像单元”对 没有影响glBindImageTexture。或与“图像单位”有关的任何其他内容。
| 归档时间: |
|
| 查看次数: |
2840 次 |
| 最近记录: |