相关疑难解决方法(0)

OpenGL4.5 - 绑定多个纹理和采样器

在此输入图像描述

我正在尝试理解OpenGL 4.5中的纹理,纹理单元和采样器.我附上了一张我想弄清楚的图片.我认为在我的例子中一切都是正确的,但我不太确定右侧带有问号的1D采样器.

所以,我知道OpenGL提供了许多纹理单元/绑定点,纹理和采样器可以绑定在一起,因此它们可以协同工作.

这些绑定点中的每一个都可以支持每个纹理目标中的一个(在我的情况下,我是绑定目标GL_TEXTURE_2DGL_TEXTURE_1D绑定点0,另一个GL_TEXTURE_2D绑定到绑定点1).

另外,采样器可以以相同的方式绑定到这些绑定点(我已经将2D采样器绑定0到pic中的绑定点).

执行这些操作的功能是glBindTextureUnitglBindSampler.

我最初的想法是将1D采样器绑定到绑定点0,并且在着色器中根据绑定点和采样器的类型进行匹配:

layout (binding = 0) uniform sampler1D tex1D;
layout (binding = 0) uniform sampler2D tex2D;
Run Code Online (Sandbox Code Playgroud)

引用来源:

每个纹理图像单元都支持绑定到所有目标.因此,2D纹理和阵列纹理可以绑定到同一图像单元,或者不同的2D纹理可以绑定在两个不同的图像单元中而不会相互影响.那么在渲染时会使用哪种纹理?在GLSL中,这取决于使用此纹理图像单元的采样器的类型.

但我发现了以下声明:

[..]听起来很可疑,就像你可以为不同的采样器使用相同的纹理图像单元,只要它们具有不同的纹理类型.不要这样做.该规范明确禁止它; 如果两个不同的GLSL采样器具有不同的纹理类型,但是与相同的纹理图像单元相关联,则渲染将失败.为每个采样器提供不同的纹理图像单元.

所以,我的问题是,如果最终单个采样器将被绑定到该绑定点,强制您选择,那么将不同纹理目标绑定到同一个绑定点的目的是什么?

我引用的信息:https://www.khronos.org/opengl/wiki/Texture#Texture_image_units

c++ opengl textures texture-mapping opengl-4

11
推荐指数
1
解决办法
1904
查看次数

标签 统计

c++ ×1

opengl ×1

opengl-4 ×1

texture-mapping ×1

textures ×1