让我们说三个不同的纹理对象,它们上面有不同的图像数据。这三个纹理对象都绑定到纹理单元0。
我的场景中有三个模型,每个都使用其中一个纹理。
在我的片段着色器中,我有一个sampler2D变量。并且所有模型都使用相同的着色器程序进行渲染。
现在我按顺序执行以下操作
渲染模型1
绑定纹理对象2
渲染模型2
绑定纹理对象3
想要问的是,您使用不同纹理对不同模型进行纹理处理,并且片段着色器中的采样器是否从当前绑定的纹理中读取数据。如果纹理绑定到不同的纹理单元会发生什么,我是否需要不同的采样器。
答案 0 :(得分:2)
采样器始终从设置为的纹理单元的当前绑定纹理中读取。由于默认的活动纹理单元是单位0,并且采样器的默认值也是0,因此除非更改采样器或活动纹理单元,否则代码应该有效。
如果将纹理绑定到另一个纹理单元,则必须确保活动纹理单元(glActiveTexture
)与为采样器设置的值(glUniform1i
)匹配。如果绑定,例如,纹理为GL_TEXTURE2
,则必须将采样器设置为glUniform1i(sampler_location, 2)
。