我刚买了一台新的 SGS3 (I9300 -NOT 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 - snapshot M4),但我遇到了同样的问题。
当我启动应用程序时,我看到空白屏幕,没有任何顶点光栅化。到目前为止,清晰的颜色可以正常工作,因此 OpenGL 的基本功能可以正常工作。
可以肯定的是我尝试过来自 Google Developers 页面的基本教程与 GLES 1 和 GLES 2 一起使用。两者都不起作用!以下是截图:
http://developer.android.com/training/graphics/opengl/index.html http://developer.android.com/training/graphics/opengl/index.html
该项目本身在我的旧设备上运行良好银河S1(也在 Cyanogenmod 上)但在我的 SGS3 上除了空白屏幕外没有显示任何其他内容。
是否有可能马里-400 MP4图形驱动程序/系统对 GL 命令的解释不同吗?是否有与以下方式不同的调用方式蜂鸟我的 SGS1 的 GPU?
有人知道该怎么做吗?这是我手机的问题还是eclipse的问题?或者这是正常的——只是我缺乏理解?我该如何解决这个问题?
------- 编辑:找到解决方案 -------
好吧,我发现了错误。谷歌文档显示了顶点着色器中矩阵乘法的“错误”:
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 在两个版本上都能正常工作,但这解决了问题。
感谢您的帮助!