我正在处理片段着色器中的纹理,我使用sampler2D
来获取2D纹理,但我没有通过OpenGL程序中的值。但是,该sampler2D的值是正确的。
我对此感到困惑,对此有何解释?
答案 0 :(得分:3)
采样器变量的默认值为0.从GLSL 3.30规范,“4.3.5 Uniforms”部分:
链接时间初始值是变量初始化程序的值(如果存在),如果没有初始化程序则为0。采样器类型不能有初始化器。
因为值0表示它是从纹理单元0中采样的,所以只要将纹理绑定到单元0,它就可以在不设置值的情况下工作。这是明确定义的行为。
由于纹理单元0也是默认值,直到您使用glActiveTexture()
以外的值调用GL_TEXTURE0
,因此只要着色器不需要多个纹理,通常使用单位0是很常见的。这意味着,对于简单的应用程序来说,设置采样器制服通常是多余的。
我仍然希望始终设置值。如果没有别的,那么任何阅读你的代码的人都会明白你真正想要从纹理单元0中采样,并且不会忘记设置值。