gpt4 book ai didi

OpenGL 从未绑定(bind)的纹理单元读取

转载 作者:行者123 更新时间:2023-12-01 23:47:20 24 4
gpt4 key购买 nike

OpenGL 标准是否规定了 texture2d 操作的结果应该被赋予程序未绑定(bind)到纹理单元的统一采样器 2D?

例如在像素着色器中:

layout(binding=0) uniform sampler2D Map_Diffuse;
...
texture2D(Map_Diffuse, attrib_Fragment_Texture)

程序中的位置:

::glActiveTexture(GL_TEXTURE0); 
::glBindTexture(GL_TEXTURE_2D, 0);

对于上下文,我想知道我是否可以对纹理和非纹理实体使用相同的着色器,其中(希望如此)我只需要确保没有任何东西绑定(bind)到 GL_TEXTURE_2D 以便 texture2d() 返回 0, 0, 0 , 1. 否则我需要为每个排列使用一个着色器。

最佳答案

按照我阅读规范的方式,它保证返回黑色。以下引用是从 3.3 规范中复制的。

在第 81 页的“顶点着色器”下的 2.11.7 节“着色器执行”中:

Using a sampler in a vertex or geometry shader will return (R,G,B,A) = (0,0,0,1) if the sampler’s associated texture is not complete, as defined in section 3.8.14.

以及第 188 页“片段着色器”下的第 3.9.2 节“着色器执行”中的等效项:

Using a sampler in a fragment shader will return (R,G,B,A) = (0,0,0,1) if the sampler’s associated texture is not complete, as defined in section 3.8.14.

在第 3.8.14 节“纹理完整性”中,它说:

A texture is said to be complete if all the image arrays and texture parameters required to utilize the texture for texture application are consistently defined.

现在,它没有明确说明甚至不存在的纹理对象。但是由于不引用纹理对象(包括 0)的纹理名称肯定没有“一致定义的所有图像数组和纹理参数”,我认为它们属于上述定义中的“不完整”。

关于OpenGL 从未绑定(bind)的纹理单元读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com