目前我正在为Android编写一个简单的OpenGL游戏。今天我将大量的矩阵数学运算到GPU,因为它比CPU快得多。在我这样做之前一切都很好但现在如果我运行我的应用程序,渲染的场景看起来像这样:
红线应该是一个立方体。奇怪的是它只能在我的手机上看起来像这样。我在其他三个设备上进行了测试,并且效果很好。所有这些其他设备都在制造商库存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;
}
你有什么想法我可以解决这个问题,或者你可以解决这个问题吗?
答案 0 :(得分:0)
也许这是一个驱动程序问题。自定义ROM可能包含错误的驱动程序,尤其是如果自定义ROM的Android版本高于最新版本的库存ROM。硬件抽象层随着时间的推移而发生了变化,有时候“ROM”会使用#c;没有更新的驱动程序。
只是一个问题 - 你确定这更快吗?在CPU上,每个对象只需乘以一次矩阵(并且每帧只执行一次乘法ProjectionMatrix * ViewMatrix
)。在GPU上,每个顶点都会进行一次乘法运算。
答案 1 :(得分:0)
我在项目的所有文件中搜索了整整一天后发现了我的错误。屏幕看起来像这样的原因是,当我移动矩阵操作时,我评论了一些代码:
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
真的,真的很傻但现在我找到了它,我希望我能从中吸取教训。所以没有驱动程序错误,现在一切都很好。我对你的最后一个问题是为什么它在其他(股票ROM)设备上正常工作。制造商可以设置一些或为其驱动程序提供一些代码,以便自动调用此行吗?