我刚买了一台新的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 - 快照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相比,是否有不同的呼叫方式?
有谁知道该怎么办?这是我手机或日食的问题吗?或者这是正常的 - 只是我缺乏理解?我该如何解决这个问题?
-------编辑:解决方案发现-------
好的,我发现了错误。谷歌文档显示顶点着色器中矩阵的乘法“错误”:
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工作正常,但这解决了这个问题。
感谢您的帮助!
答案 0 :(得分:1)
刚刚离开我的头顶,您是否检查了投影设置?这些形状可能被绘制出来,而不是你想象的那样。
另外,检查着色器加载步骤的返回值。如果存在编译问题,您将获得着色器程序的无效句柄。
答案 1 :(得分:0)
您的代码中可能存在一些警告或错误,这些警告或错误没有冒泡到LogCat。我发现使用LibGDX的原生OpenGL包装器实际上向我显示了这些错误,并且非常有助于调试。
您可以在此处找到有关设置LibGDX库的一些有用的指示 - http://www.learnopengles.com/android-lesson-seven-an-introduction-to-vertex-buffer-objects-vbos/