Я уже узнал, что юниформ-значения хранятся в состоянии шейдерной программы.
// GLSL code
uniform mat4 projection;
// C++ code
GLuint location = glGetUniformLocation(program, "projection");
glUniformMatrix4fv(location, 1, GL_FALSE, pointer);
Но, похоже, это не относится к униформам текстур, поскольку они привязаны к номеру слота текстуры, а не к их идентификатору.
// GLSL code
uniform sampler2D albedo;
// C++ code
int slot = 3;
glActiveTexture(GL_TEXTURE0 + slot);
glBindTexture(GL_TEXTURE_2D, id);
GLuint location = glGetUniformLocation(program, "albedo");
glUniform1i(location, slot);
Есть ли способ привязать идентификатор текстуры к форме sampler2D
шейдера? Таким образом, мне не пришлось бы привязывать все текстуры вручную для каждого прохода.