Вопрос по c++, opengl – Одинаковые значения остаются в шейдере GLSL, если они не связаны?

20

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

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();
    }
}

Ваш Ответ

1   ответ
27

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

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

ОтOpenGL 4.1 Спецификация:

2.11.7 Uniform Variables ... Uniforms are program object-specific state. They retain their values once loaded, and their values are restored whenever a program object is used, as long as the program object has not been re-linked. ...

Error: User Rate Limit Exceededkhronos.org/opengl/wiki/…
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Sebastian Mendez
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы