「OpenGL シェーダーの明示的 vs 自動属性位置バインディング」を参照してください。
を使用して属性を明示的にバインドしない場合glVertexAttribPointer
、どのデフォルトの場所が使用されますか?
公式リンクはどこにありますか?
「OpenGL シェーダーの明示的 vs 自動属性位置バインディング」を参照してください。
を使用して属性を明示的にバインドしない場合glVertexAttribPointer
、どのデフォルトの場所が使用されますか?
公式リンクはどこにありますか?
いくつかの異なる概念を混同している可能性があると思います。リンクする質問は、頂点シェーダーの属性に場所がどのように割り当てられるかについてです。glBindAttribLocation()
またはglGetAttribLocation()
その目的で使用されます。
glVertexAttribPointer()
一方、属性のデータがどこから来るかを、属性の関連する状態 (タイプ、ストライドなど) と共に指定します。動作する特定の属性は、呼び出しの最初の引数として渡される場所によって指定されます。
属性をまったく呼び出さない場合glVertexAttribPointer()
は、いくつかのシナリオが考えられます。
属性に対して属性配列が有効になっていません。これはglEnableVertexAttribArray()
、属性に対して呼び出されたことがない場合、またはglDisableVertexAttribArray()
最後に呼び出された場合に発生します。この場合、属性の現在の値が使用されます。これは、 のような呼び出しで設定された値glVertexAttrib4f()
であり、デフォルト値は(0.0f, 0.0f, 0.0f, 1.0f)
です。
属性配列が有効な場合、デフォルト値は次の呼び出しに対応します。
glVertexAttribPointer(location, 4, GL_FLOAT, GL_FALSE, 0, NULL);
これらはすべて、 https://www.opengl.org/registry/でアクセスできる公式の OpenGL 仕様ドキュメントに記載されています。