glUniform fails to set sampler value

Я использую OpenGL и GLSL для рисования текстуры на простой сетке.

Моя проблема в том, что когда я использую glUniform1i для установки значения формы sampler2D, оно не было установлено. Например, в этом коде:

glUseProgram(programObject);

glUniform1i(glGetUniformLocation(programObject, "texture"), 1);
GLint val;
glGetUniformiv(programObject, 
               glGetUniformLocation(programObject, "texture"), 
               &val);
printf("Value is %d\n", val);

Значение, выводимое в командной строке, равно 0. Я проверил, что шейдеры скомпилированы правильно и программа скомпонована правильно. glGetUniformLocation выводит индекс > 0. Более того, glGetError не выводит никакой ошибки ни в одной точке.

Это происходит только тогда, когда форма является сэмплером. Поскольку текстура не задана, запрос ее в шейдере всегда возвращает (0, 0, 0, 0, 1). (Я также проверил, используя apitrace, что моя текстура правильно привязана к GL_TEXTURE1, что делается сразу после показанного кода).

Я много искал по этой проблеме и нашел только один случай чего-то подобного здесь. Решением было инициализировать GLEW, но мне это не помогло.

Я буду рад предоставить любую необходимую расширенную информацию (или трассировку из apitrace).

Edit

Вот шейдер:

uniform sampler2D texture;

varying vec2 textureCoord;

void main() {
    gl_FragColor = texture2D(texture, textureCoord);
}

Solution

Мне удалось решить проблему после некоторой работы.

Как выяснилось, проблема не связана с тем, что форма не была установлена, так как возврат 0 для сэмплеров независимо от фактического значения, похоже, является причудой реализации gl. Это происходило только в драйвере Intel для Sandy Bridge. Тестирование кода в других реализациях всегда возвращало правильное значение сэмплера.

Проблема с тем, что текстура всегда возвращала (0, 0, 0, 0, 1), была вызвана ошибкой, которую я допустил при генерации текстуры.

Теперь glGerUniformiv по-прежнему возвращает 0, но текстура используется правильная.

5
задан Rabbid76 17 August 2017 в 07:40
поделиться