2012-03-13 8 views
1

私は、均一な属性 "diffuseColor"を持つOpenGLプログラムを持っているとしましょう。私は次のように設定しました:OpenGLプログラムの統一属性値をデフォルトにリセットする方法は?

GLint location = glGetUniformLocation(handle, "diffuseColor"); 
glUniform3f(location, 1, 0, 0); 

これをシェーダコードでエンコードされたデフォルト値に戻したいと思います。私はソースコードにアクセスできませんが、コンパイルされたプログラムでOpenGL API関数を呼び出すことができます。デフォルト値を読み込み、glUniform3fと設定する方法はありますか?それとも、さらに良いのですか?glResetUniform3f(GLint loc)のようなものがありますか?

答えて

3

プログラムをリンクするときに、統一イニシャライザが適用されます。値はglGetUniformfv/glGetUniformivを使用して読み取ることができます。一様な値を変更した後、統一の初期値を読み取る方法はありません。

1つのユニフォームを初期値にリセットする方法はありませんが、プログラムを再リンクすると、そのユニフォームがすべてリセットされます。プログラムをリンクするのはコストのかかる操作であり、フレーム間では避ける必要があります。

+0

Cool。私はちょうどCPUに値を格納し、glUniformXYを使用して必要に応じて設定し直すことができます。ありがとうございました。 –

関連する問題