テクスチャを 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 ランタイムは、バインドしたテクスチャが定義したサンプラーであることをどのように「認識」しますか? 複数のテクスチャが必要な場合、どうすればよいでしょうか?