まず、プログラムに両方のシェーダーをアタッチしてから、呼び出しglGetUniformBlockIndex
て均一なバッファーをバインドします。ユニフォームを見つけるために解析するシェーダーを関数で指定できると期待しglBindShader
ていますが、そのようなことはありません。どのシェーダーを調べる必要があるかを OpenGL に伝えるにはどうすればよいですか?
1147 次
1 に答える
4
プログラムが完全にリンクされていれば問題ありません。可能性glGetUniformBlockIndex
とその結果は次のとおりです。
- 指定された統一ブロック名は、どのシェーダにもありません。その後、戻ってき
GL_INVALID_INDEX
ます。 - 指定された統一ブロック名は、シェーダーの 1 つで使用されます。次に、 で使用するブロック インデックスを取得します
glUniformBlockBinding
。 - 指定された統一ブロック名は、複数のシェーダーで使用されます。次に、それらすべてを意味するブロック インデックスを取得し、 で使用し
glUniformBlockBinding
ます。
最後の部分が重要です。2 つのシェーダーで同じ名前のユニフォーム ブロックを指定する場合、GLSL ではそれらのユニフォーム ブロックの定義が同じである必要があります。そうでない場合は、 でエラーが発生しglLinkProgram
ます。それらは同じであるため (そうでなければ、ここに到達することはありません)、GLSL はそれらを同じ均一なブロックと見なします。
2 つのシェーダー ステージにある場合でも、同じ均一なブロックです。そのため、ステージ間で均一なブロックを共有でき、すべて 1 つのブロック バインドで済みます。それが本当に同じ均一なブロックである限り。
于 2012-04-04T23:53:41.130 に答える