2011-01-17 6 views
4

可能性の重複:
Explicit vs Automatic attribute location binding for OpenGL shaders
Why should I use glBindAttribLocation?GLSLでglBindAttributeLocationを使用する目的は何ですか?

私は、任意のATTRIBの場所を結合することなくglGetAttribLocationを呼び出そうとしました、動作するように見えました。だから私は即座にアクセスしたい場合は、attribの場所を配列にキャッシュすることができます。次に、glBindAttribLocationを使用する目的は何ですか?

[OpenGLの2.0]

+1

参照[明示的対OpenGLシェーダの自動属性ロケーションバインディング](http://stackoverflow.com/questions/4635913/explicit-vs-automatic-attribute-location-binding-for-opengl-shaders)これについての良い議論。 –

答えて

7

glBindAttribLocationは、属性名にインデックスを "結合します"。これにより、異なるシェーダー間で同じアトリビュートに対して同じインデックスを使用することができます。たとえば、頂点座標= 0、テクスチャ座標= 1、法線= 2です。これにより、シェイダーをコードに適合させることでコードの描画を簡略化します(属性位置の要求)。私は、共通の頂点のために列挙型を作成して自分のコードで

属性:それらバインド

enum 
{ 
    GRAPHICS_ATTRIB_VERTEX = 0, 
    GRAPHICS_ATTRIB_NORMAL, 
    GRAPHICS_ATTRIB_TEXTURE, 
}; 

glBindAttribLocationを使用して、その後、私はこのようにそれらを使用することができます。

glVertexAttribPointer(GRAPHICS_ATTRIB_VERTEX, ....); 

これはすべて私のシェーダで動作しますglGetAttribLocationへの呼び出しはありません。

関連する問題