Glsl 使用取样器而不传递值

Glsl 使用取样器而不传递值,glsl,Glsl,我在片段着色器中处理纹理,我使用sampler2D获取2D纹理,但我没有在OpenGL程序中传递该值。但是,该采样器2D的值是正确的 我对这一点以及对此的任何解释感到非常困惑?采样器变量的默认值为0。根据GLSL 3.30规范第4.3.5节“制服”: 链接时间初始值要么是变量初始值设定项的值(如果存在),要么是0(如果不存在初始值设定项)。采样器类型不能有初始值设定项 由于值为0意味着它是从纹理单元0进行采样的,因此只要将纹理绑定到单元0,它就可以在不设置该值的情况下工作。这是定义明确的行为 由

我在片段着色器中处理纹理,我使用
sampler2D
获取2D纹理,但我没有在OpenGL程序中传递该值。但是,该采样器2D的值是正确的


我对这一点以及对此的任何解释感到非常困惑?

采样器变量的默认值为0。根据GLSL 3.30规范第4.3.5节“制服”:

链接时间初始值要么是变量初始值设定项的值(如果存在),要么是0(如果不存在初始值设定项)。采样器类型不能有初始值设定项

由于值为0意味着它是从纹理单元0进行采样的,因此只要将纹理绑定到单元0,它就可以在不设置该值的情况下工作。这是定义明确的行为

由于纹理单元0也是默认值,直到您使用非
GL_TEXTURE0
的值调用
glActiveTexture()
,因此只要着色器不需要多个纹理,就通常使用单元0。这意味着,对于简单的应用程序,设置采样器制服通常是多余的


我仍然希望始终设置值。如果没有其他内容,那么阅读您的代码的任何人都会清楚地知道,您确实想从纹理单元0进行采样,并且没有忘记设置值。

如何验证该值是否确实正确?@Bartek Banachewicz,我得到的结果是正确的,这并不一定意味着采样器的值是正确的。那么,默认绑定纹理是当前活动的帧缓冲区颜色附件吗?