Подтвердить что ты не робот

Что хранит 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);
}

Я запутался в некоторых вещах. У меня есть вопрос:

  1. В фрагментном шейдере текстуре передается нулевое значение (по glUniform1i()). Значение действительно ноль? Является ли ценность чем-то другим?

  2. Нужен ли вызов glActiveTexture()?

  3. Почему мы передаем нулевое значение в glUniform1i()?

4b9b3361

Ответ 1

sampler2D связан с текстурным блоком. Вызов glUniform связывает его с нулевой единицей текстуры. Вызов glActiveTexture() необходим только в том случае, если вы собираетесь использовать несколько текстурных блоков (поскольку в любом случае GL_TEXTURE0 используется по умолчанию).