使用多个纹理时统一的目的

Purpose of uniform while using multiple texture

我正在尝试理解这段代码:

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.The 我不明白的部分是,为什么我们需要使用 glUniform 调用。

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

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

(DatenWolf 稍后会来纠正我:)。