使用多个纹理时均匀的目的

时间:2015-10-26 18:16:32

标签: opengl textures fragment-shader

我想了解这段代码:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture1"), 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture2"), 1);

这是相关的着色器代码:

#version 330 core
...

uniform sampler2D ourTexture1;
uniform sampler2D ourTexture2;

void main()
{
    color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.2);
}

因此,据我所知,在激活GL_TEXTURE0后,我们将texture1绑定到它。我的理解是,这会将texture1绑定到第一个sampler2d。我不明白的部分是,为什么我们需要使用glUniform调用。

1 个答案:

答案 0 :(得分:1)

这是间接的。您选择在GL_TEXTURE0位置输入的纹理,然后告诉着色器中的制服从同一位置获取其纹理。它有点像这样(对图表表示道歉)。

第一行是纹理单元位置,第二行是着色器均匀位置。例如,您可能希望将纹理单元4绑定到着色器采样器2。

enter image description here

(DatenWolf会在一瞬间纠正我:)。