CustomROM 上的 OpenGL 不工作
OpenGL on CustomROM does not work
目前我正在为 Android 编写一个简单的 OpenGL 游戏。今天我将大量矩阵数学移至 GPU,因为它比 CPU 快得多。在我这样做之前一切都很好但是现在如果我 运行 我的应用程序渲染的场景看起来像这样:
红线应该是一个立方体。奇怪的是,它只在我的 phone 上看起来是这样的。我在其他三台设备上对其进行了测试,并且效果很好。所有这些其他设备 运行 在制造商库存 ROM 和我的 phone 上我已经安装了 CustomROM (SlimKat)。这可能是我 phone 上的输出如此奇怪的原因吗?我不在我的着色器中做任何复杂的计算。我的 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 可能包含错误的驱动程序,特别是如果自定义 ROM 的 android 版本高于最新版本的库存 ROM。硬件抽象层随着时间的推移发生了变化,有时 "ROM cooks" 没有更新的驱动程序。
只是一个问题 - 你确定这样更快吗?在 CPU 上,每个对象只需将矩阵相乘一次(乘法 ProjectionMatrix * ViewMatrix
每帧只执行一次)。在 GPU 上,您对每个顶点执行一次乘法。
我在项目的所有文件中搜索了一整天后发现了我的错误。屏幕看起来像这样的原因是,当我移动矩阵运算时,我注释掉了一些代码:
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
真的,真的很蠢,但现在我找到了,我希望我能从中吸取教训。所以没有驱动程序错误,现在一切正常。我要问你的最后一个问题是为什么它在其他(库存 ROM)设备上工作正常。制造商是否可以设置位或向其驱动程序提供一些代码,以便自动调用该行?
目前我正在为 Android 编写一个简单的 OpenGL 游戏。今天我将大量矩阵数学移至 GPU,因为它比 CPU 快得多。在我这样做之前一切都很好但是现在如果我 运行 我的应用程序渲染的场景看起来像这样:
红线应该是一个立方体。奇怪的是,它只在我的 phone 上看起来是这样的。我在其他三台设备上对其进行了测试,并且效果很好。所有这些其他设备 运行 在制造商库存 ROM 和我的 phone 上我已经安装了 CustomROM (SlimKat)。这可能是我 phone 上的输出如此奇怪的原因吗?我不在我的着色器中做任何复杂的计算。我的 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 可能包含错误的驱动程序,特别是如果自定义 ROM 的 android 版本高于最新版本的库存 ROM。硬件抽象层随着时间的推移发生了变化,有时 "ROM cooks" 没有更新的驱动程序。
只是一个问题 - 你确定这样更快吗?在 CPU 上,每个对象只需将矩阵相乘一次(乘法 ProjectionMatrix * ViewMatrix
每帧只执行一次)。在 GPU 上,您对每个顶点执行一次乘法。
我在项目的所有文件中搜索了一整天后发现了我的错误。屏幕看起来像这样的原因是,当我移动矩阵运算时,我注释掉了一些代码:
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
真的,真的很蠢,但现在我找到了,我希望我能从中吸取教训。所以没有驱动程序错误,现在一切正常。我要问你的最后一个问题是为什么它在其他(库存 ROM)设备上工作正常。制造商是否可以设置位或向其驱动程序提供一些代码,以便自动调用该行?