Android CustomROM上的OpenGL不起作用

Android CustomROM上的OpenGL不起作用,android,opengl-es,Android,Opengl Es,目前,我正在为Android编写一个简单的OpenGL游戏。今天我把很多矩阵运算移到了GPU上,因为它比CPU快得多。在我之前,这一切都很好,但现在如果我运行我的应用程序,渲染场景如下所示: uniform mat4 uProjectionMatrix; uniform mat4 uModelMatrix; uniform mat4 uViewMatrix; attribute vec4 aPosition; void main() { mat4 VM_Matrix = uProj

目前,我正在为Android编写一个简单的OpenGL游戏。今天我把很多矩阵运算移到了GPU上,因为它比CPU快得多。在我之前,这一切都很好,但现在如果我运行我的应用程序,渲染场景如下所示:

uniform mat4 uProjectionMatrix;
uniform mat4 uModelMatrix;
uniform mat4 uViewMatrix;

attribute vec4 aPosition;

void main()
{
    mat4 VM_Matrix  = uProjectionMatrix * uViewMatrix * uModelMatrix;    
    gl_Position = VM_Matrix * aPosition;
}
红线应该是一个立方体。奇怪的是,它只在我的手机上看起来像这样。我在另外三台设备上进行了测试,效果非常好。所有这些其他设备都运行在制造商的库存ROM上,我的手机上安装了CustomROM SlimKat。有没有可能这就是为什么我手机上的输出如此奇怪的原因?我不在着色器中执行任何复杂的计算。我的VertexShader代码如下所示:

uniform mat4 uProjectionMatrix;
uniform mat4 uModelMatrix;
uniform mat4 uViewMatrix;

attribute vec4 aPosition;

void main()
{
    mat4 VM_Matrix  = uProjectionMatrix * uViewMatrix * uModelMatrix;    
    gl_Position = VM_Matrix * aPosition;
}

你知道我该如何解决这个问题吗?或者你可以解决这个问题吗?

也许这是驱动程序的问题。自定义ROM可能包含错误的驱动程序,特别是当android版本的自定义ROM高于最新版本的库存ROM时。硬件抽象层随着时间的推移而改变,有时ROM Cook没有更新的驱动程序


只是一个问题-你确定这会更快吗?在CPU上,每个对象只需相乘一次矩阵,相乘ProjectionMatrix*ViewMatrix每帧仅执行一次。在GPU上,每个顶点做一次乘法。

在我的项目的所有文件中搜索了整整一天之后,我发现了我的错误。屏幕看起来像这样的原因是,当我移动矩阵操作时,我注释了一些代码以及其他内容:

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

真的,真的很愚蠢,但现在我发现了,我希望我能从中学习。所以没有驱动程序错误,现在一切都很好。我要问你的最后一个问题是,为什么它在其他库存ROM设备上正常工作。制造商是否可以为其驱动程序设置一个位或提供一些代码,以便自动调用该行

谢谢你。最奇怪的是,在我将所有矩阵乘法移到着色器之前,它就已经工作了。但是如果我把它回滚,它也不再适用于旧代码了。。。因此,我并不真的认为是定制ROM造成了错误,但我对这种现象没有其他的想法。对于你的问题,我讨论了这个,也许这对你有帮助。但我也不相信它更快,但我不太了解GPU,所以我相信作者。