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

Сохраняются ли единообразные значения в шейдере GLSL, если они не связаны?

Я делаю программу, которая использует два разных шейдера для разных разных примитивов. Мой вопрос в том, что если я свяжу программу, отправлю ее равномерным переменным, а затем использую другую программу шейдера и вернемся к первому, будут ли сохранены одинаковые значения? Вот несколько псевдокодов:

glUseProgram(shader1);
glUniform(shader1,...);
//stuff

for(elements in a list) {
    if(element.type = 1) {
        glUseProgram(shader2);
        element.draw();
    } else {
        glUseProgram(shader1); //Here, do the uniforms from above remain, if shader2 was bound before?
        element.draw();
    }
}
4b9b3361

Ответ 1

Да, униформа специфична для программы и будет постоянной, если вы отвяжете и переустановите ее.

Кроме того, если вы хотите, вы можете легко проверить это самостоятельно в этом примере с помощью glGetUniform.

Из Спецификация OpenGL 4.1:

2.11.7 Единые переменные

... Униформа - это состояние, зависящее от объекта программы. Они сохраняют свои значения после загрузки, и их значения восстанавливаются всякий раз, когда используется программный объект, если программный объект не был повторно связан....