我目前正在使用NDK将3D C ++游戏从iOS移植到Android。渲染是使用GLES2完成的。当我完成重写所有平台特定的东西并且第一次运行完整游戏时,我注意到渲染错误 - 有时只有部分几何体会渲染,有时巨大的三角形会在屏幕上闪烁,依此类推......
我在运行4.1.2的Galaxy Nexus上进行了测试。 glGetError()
没有返回任何内容。此外,游戏在所有iOS设备上运行得非常漂亮。我开始怀疑一个驱动程序错误,并且在打猎了好几个小时之后我发现使用VAO(GL_OES_vertex_array_object
)导致了麻烦。相同的渲染器在没有VAO的情况下工作正常,并且与VAO产生垃圾。
我发现了bug report at Google Code。我也看到同样的报告at IMG forums,一名工作人员证实这确实是一个驱动程序错误。
这一切让我想到 - 如何处理确认的驱动程序错误?我看到两个选项:
我不喜欢这两种选择 选项编号1将惩罚所有拥有良好驾驶员的用户。 VAO确实提升了性能,我认为忽略它们是非常糟糕的,因为一个设备有一个bug 选项编号2很难做到。我无法测试每个Android设备是否存在损坏的驱动程序,我希望该列表不断变化,这使得它很难跟上。
有什么建议吗?是否有办法在运行时检测此类驱动程序错误而无需手动测试每个设备?
答案 0 :(得分:1)
Android上的OpenGL ES驱动程序中的错误是一个众所周知的事情,因此完全有可能在驱动程序中出现错误。特别是如果您正在使用一些高级(未经过良好测试)的功能,如GL扩展。
在一个大型Android项目中,我们通常使用以下清单来解决这个问题: