27

異なるプリミティブに対して2つの異なるシェーダーを使用するプログラムを作成しています。私の質問は、プログラムをバインドし、それに均一な変数を送信してから、別のシェーダープログラムを使用して最初のプログラムに戻った場合、渡された均一な値は残りますか?ここにいくつかの擬似コードがあります:

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

1 に答える 1

34

はい、ユニフォームはプログラムに固有であり、バインドを解除して再バインドすると永続的になります。

また、必要に応じて、 glGetUniformを使用して、そのサンプルでこれを自分で簡単に確認できます。

OpenGL 4.1仕様から:

2.11.7均一変数

...ユニフォームは、プログラムオブジェクト固有の状態です。それらはロードされると値を保持し、プログラムオブジェクトが再リンクされていない限り、プログラムオブジェクトが使用されるたびにそれらの値が復元されます。..。

于 2012-06-01T21:33:00.570 に答える