【问题标题】:Android OpenGL ES not rasterizing - Matrix multiplication switchedAndroid OpenGL ES 不光栅化 - 矩阵乘法切换
【发布时间】:2014-04-18 12:29:55
【问题描述】:

我刚刚购买了一个新的 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 开发者页面中的基本教程 进行了尝试。两者都不起作用!以下是截图:

http://developer.android.com/training/graphics/opengl/index.html

该项目本身在我的旧 Galaxy S1 上运行良好(也在 Cyanogenmod 上),但在我的 SGS3 上只显示空白屏幕。

Mali-400 MP4 图形驱动程序/系统是否可能以不同方式解释 GL 命令?有没有与我的 SGS1 中的 Hummingbird 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 在两个版本上都能正常工作,但这解决了问题。

感谢您的帮助!

【问题讨论】:

  • OpenGL ES 驱动程序之间存在许多差异,并且在许多情况下存在导致额外问题的驱动程序错误。您需要发布更多代码和着色器代码。
  • 我使用了谷歌页面中的 OpenGL ES2 示例(参见上面的链接)。所以一切都应该是标准的。

标签: android opengl-es mali


【解决方案1】:

您的代码中可能有一些警告或错误不会出现在 LogCat 中。我发现使用来自 LibGDX 的原生 OpenGL 包装器实际上向我显示了这些错误,并且对调试很有帮助。

您可以在此处找到一些有关设置 LibGDX 库的有用指南 - http://www.learnopengles.com/android-lesson-seven-an-introduction-to-vertex-buffer-objects-vbos/

【讨论】:

    【解决方案2】:

    就在我头上,你检查投影设置了吗?可能正在绘制这些形状,而不是在您期望的位置。

    另外,检查着色器加载步骤的返回值。如果存在编译问题,您将获得着色器程序的无效句柄。

    【讨论】:

    • 好吧,我使用了谷歌页面中的基本项目。它仍然可以在我的 S1 上使用,所以我想我不会错过任何基本的东西。我发布了代码。你有什么发现吗?
    • 也许尝试不同的教程或示例项目?不管出于什么原因,我想我记得有人说开发网站上的那些例子已经过时了。但我不能肯定地说。
    • 这里有一组很棒的教程,一切都在 GitHub 上:learnopengles.com/android-lesson-one-getting-started
    • 啊,哦,好吧,我明白我的错了。我混合了矩阵相乘的顺序。
    • 我猜你不知道为什么这是“切换”?奇怪的是,即使是谷歌教程也是如此。
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多