2017-07-13 7 views
1

私は、次の頂点と頂点シェーダ属性を持っていると仮定しますと、その後頂点属性バインディング

glBindVertexArray(vao1); 
... 
glVertexAttribPointer(0, ...); 
glVertexAttribPointer(1, ...); 

glBindVertexArray(vao2); 
... 
glVertexAttribPointer(2, ...); 
glVertexAttribPointer(3, ...); 

layout(location = 0) in vec4 foo1; 
layout(location = 1) in vec4 bar1; 
layout(location = 2) in vec4 foo2; 
layout(location = 3) in vec4 bar2; 

そして、このように初期化された2つのVAOs私はそれらを連続して縛ります:

glBindVertexArray(vao1); 
glBindVertexArray(vao2); 
glDrawArrays(...); 

foo1から得られるデータbar1頂点属性? vao1が指し示すバッファから値を取得することが期待できますか、または状態は未定義ですか?

答えて

2

OpenGLオブジェクトは、実際にはマクロのような表示リストを除いて、マクロと似ていません。彼らは状態を保存します。新しいオブジェクトを前のオブジェクトと同じターゲットにバインドすると、すべての統制状態が新しいオブジェクトによって占有されます。古いものはバインディングポイントからバインドされていません。

各VAOには、使用可能な頂点属性のすべての状態が含まれています。属性はデフォルトで無効になっています。そのため、VAOで属性2と3のみを有効にした場合、そのVAOをバインドすると、属性2と3だけが有効になります。

関連する問題