新しい SGS3 (I9300 - LTEではない) を購入したばかりで、OpenGL ES (2) アプリケーションの開発を続けたいと思っていました。残念ながら、コンパイルすると何も表示されません。
次の LogCat エラー メッセージが表示されます。
D/libEGL(6890): loaded /system/lib/egl/libEGL_mali.so
D/libEGL(6890): loaded /system/lib/egl/libGLESv1_CM_mali.so
D/libEGL(6890): loaded /system/lib/egl/libGLESv2_mali.so
E/(6890): Device driver API match
E/(6890): Device driver API version: 23
E/(6890): User space API version: 23
E/(6890): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct 9 21:05:57 KST 2013**
D/OpenGLRenderer(6890): Enabling debug mode 0
カスタム ROM (cyanogenmod 11 - スナップショット M4) もインストールしましたが、同じ問題が発生します。
アプリを起動すると、頂点がラスタライズされていない空白の画面が表示されます。これまでのところ、クリア カラーは機能するので、OpenGL の基本機能は機能しています。
確かに、GLES 1 と GLES 2 を使用して、Google Developers ページの基本的なチュートリアルで試してみました。どちらも機能しません。スクリーンショットは次のとおりです。
http://developer.android.com/training/graphics/opengl/index.html
プロジェクト自体は私の古いGalaxy S1 (Cyanogenmod でも) で正常に動作しますが、SGS3 では空白の画面以外は何も表示されません。
Mali-400 MP4グラフィックス ドライバー/システムが GL コマンドを異なる方法で解釈する可能性はありますか? SGS1 からHummingbird GPUを使用する以外に呼び出す方法はありますか?
何をすべきか考えている人はいますか?これは私の電話または日食の問題ですか? それとも、これは正常ですか - 私の理解不足ですか?この問題を解決するにはどうすればよいですか?
------- 編集: 解決策が見つかりました -------
わかりました、エラーを見つけました。Google ドキュメントは、頂点シェーダーでの行列の乗算が「間違っている」ことを示しています。
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
gl_Position = uMVPMatrix * vPosition;
}
これは私の古い Galaxy S1 にとっては問題ではないようですが、どういうわけか S3 (または Mali GPU) はこれについてうるさいです。乗算の順序を次のように変更しました。
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
gl_Position = vPosition * uMVPMatrix;
}
そして、それは機能します(S1でも)。S1 が両方のバージョンで正常に動作する理由はまだわかりませんが、これで問題は解決しました。
ご協力いただきありがとうございます!