OpenGL ES 2.0:頂点シェーダーにバインドされていない属性
-
29-09-2019 - |
質問
Androidアプリケーションを開発しています。
次の頂点シェーダーがあります。
"attribute vec4 vertexPosition;
attribute vec4 vertexNormal;
attribute vec2 vertexTexCoord;
varying vec2 texCoord;
varying vec4 normal;
uniform mat4 modelViewProjectionMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * vertexPosition;
normal = vertexNormal;
texCoord = vertexTexCoord;
}
";
そして、これはフラグメントシェーダーです:
precision mediump float;
varying vec2 texCoord;
varying vec4 normal;
uniform sampler2D texSampler2D;
void main()
{
gl_FragColor = texture2D(texSampler2D, texCoord);
}
";
vertextexcoordをアンバウンドしたままにした場合、問題はありますか?モデルにテクスチャがない場合は、別の頂点とフラグメントシェーダーを使用する必要があると思いますか?
ありがとう。
解決
はい、テクスチャのないモデル用の別のシェーダーが必要です。そうでなければ、実装依存行動を経験すると思います。
それに関連して、OpenGLドキュメントは次のように述べています
明示的にバインドされていないアクティブな属性は、GllinkProgramが呼び出されると、リンカーによってバインドされます。割り当てられた場所は、Gletattriblocationを呼び出すことでクエリをすることができます。
したがって、Vertex属性が有効になっている場合、属性の1つからVertextExcoordを取得しようとします。未解像度モデルに必要な属性の数以上が有効になっていない場合、何が起こるかわかりません。別のシェーダーを使用します。
所属していません StackOverflow