NDK の OGLES2 をマスターしようとしていますが、GLSL シェーダーに固執しています。状況はすでにここで強調されている状況と似ていますが、その背後にある理由は多少異なるようです。
私は可能な限り単純なシェーダーを持っています。
バーテックス:
#version 110
attribute vec3 vPosition;
void main(void)
{
gl_Position = vec4(vPosition, 1.0);
gl_FrontColor = gl_BackColor = vec4(0.3, 0.3, 0.3, 1); // ***
}
断片:
#version 110
void main(void)
{
gl_FragColor = gl_Color;
}
簡単でわかりやすい。クリップ スペースで三角形をまっすぐに定義することもできます。Android 403 デバイスでアプリを実行すると***
、VS ソースの starred( ) 行がglUseProgram
呼び出しを行い、エラーをスローしGL_INVALID_OPERATION
ます (その後の呼び出しはすべて同じです)。FS (ハードコードされた値) にglGetAttribLocation
書き込むことはできますが、VSの/値に触れることさえできません。gl_FragColor
vec4
gl_FrontColor
gl_BackColor
E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
シェーダーのコンパイルとリンク中に発生する可能性のあるすべてのエラー (glGetError
およびglGetShaderInfoLog
) を確認しましたが、すべて明確です。
OGL 実装を JOGL 実装に切り替えると、アプリケーションは Windows で正常に動作します (すべてのブートストラップとレンダリング コードは同じままです)。色を含む頂点属性でも問題なく使用できます。
この動作を修正する方法はありますか? Android OGLES の実装がそれほど悪くないと思います。おそらく、その機能の一部が欠けているだけです...