を使用してシェーダー コードで頂点属性の位置を指定する場合、C++ プログラムでlayout(location = ...)
を使用して位置をフェッチする必要はありません。glGetAttribLocation
レイアウト修飾子を使用してシェーダーで位置を定義したり、C++ プログラムでそれらを取得したりしない場合、それらは自動的に割り当てられます。質問は、この自動割り当てについてです。この順序は、シェーダー コードでの定義の順序と同じですか?
たとえば、最初のシェーダー コードでは、位置が 2 番目のシェーダー コードと同じであることが保証されていますか?
// first shader code
#version 330
in vec3 position;
in vec3 normal;
in vec2 texcoord;
// second shader code
#version 330
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec2 texcoord;
また、フラグメント シェーダーの出力にも同じ規則が適用されますか? 今のところ、私はglBindFragDataLocation
それらを取得するために使用します。