我有点困惑如何在GLSL中将纹理绑定到槽位。以下是我的着色器代码:
#version 330
layout(location=0) in vec4 in_Position;
layout(location=1) in vec4 texCoords;
out vec4 ex_texCoords;
uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;
void main(void)
{
gl_Position = (ProjectionMatrix * ViewMatrix * ModelMatrix) * in_Position;
ex_texCoords = texCoords;
}
#version 330
in vec4 ex_texCoords;
out vec4 out_Color;
uniform sampler2D textureSampler;
void main(void)
{
out_Color = texture(textureSampler2, ex_texCoords.xy);
}
当我设置矩阵时,需要查询统一位置,然后手动设置该位置的值,操作类似于:
modelMatrixUniformLocation = glGetUniformLocation(ShaderIds[0], "ModelMatrix");
...
glUniformMatrix4fv(modelMatrixUniformLocation, 1, GL_FALSE, modelMatrix.data);
然而,就我所知,我不需要这样做来初始化我的纹理采样器。在设置时,我似乎只需要这样做:
glGenTextures(1, &TextureID);
glBindTexture(GL_TEXTURE_2D, TextureID);
glTexImage2D(...);
所以,我的问题是,为什么我需要对矩阵进行的操作却不需要对纹理进行相同的过程?OpenGL运行时如何“知道”我绑定的纹理应该是我定义的采样器?如果我想要有多个纹理,我该怎么做呢?