При загрузке текстур в текстурные блоки мне обычно приходится находить расположение текстурного блока и загружать блок в unform, что выглядит примерно так:
glActiveTexture(GL_TEXTURE0 + texture_unit);
glBindTexture(target, textureID);
//Get the uniform location in the program and attach the texture unit
GLuint location = program->get_uniform_location(uniform);
glUniform1i(location,texture_unit);
Однако у меня есть программа, котораяиспользует image3D, и единственная строка, которую я вызываю, чтобы связать текстуру с изображением:
glBindImageTexture(image_unit, textureID, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA8);
А затем в шейдере я сэмплирую его как:
uniform layout(rgba8) image3D image;
vec3 c = vec3(imageLoad(image, ivec3(v_uv,0)));
.Ожидаемые значения, независимо от того, какие изменения я делаю, поэтому, кажется, работает просто отлично.Это подводит меня к моему вопросу, как OpenGL может определить, что униформа uniform layout(rgba8) image3D image;
должна быть присоединена к блоку изображений с помощью:
glBindImageTexture(image_unit, textureID, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA8);
Что бы произошло, если бы у меня было несколько изображений?