Что хранит sampler2D?
Я прочитал пример текстуры в OpenGL 2.1
. Фрагмент шейдера выглядит следующим образом:
#version 120
uniform sampler2D texture;
varying vec2 texcoord;
void main(void)
{
gl_FragColor = texture2D(texture, texcoord);
}
texcoord
передается из вершинного шейдера.
Используется следующий код рендеринга C++:
void render()
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id);
glUniform1i(unf_texture, 0);
}
Я запутался в некоторых вещах. У меня есть вопрос:
В фрагментном шейдере текстуре передается нулевое значение (по glUniform1i()
). Значение действительно ноль? Является ли ценность чем-то другим?
Нужен ли вызов glActiveTexture()
?
Почему мы передаем нулевое значение в glUniform1i()
?
Ответы
Ответ 1
sampler2D
связан с текстурным блоком. Вызов glUniform
связывает его с нулевой единицей текстуры. Вызов glActiveTexture()
необходим только в том случае, если вы собираетесь использовать несколько текстурных блоков (поскольку в любом случае GL_TEXTURE0
используется по умолчанию).