我目前正在使用 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 确实提高了性能,我认为忽略它们是一件非常糟糕的事情,因为一个设备有错误。
选项 2 很难做对。我无法针对损坏的驱动程序测试每个 Android 设备,我希望列表会不断变化,因此很难跟上。
有什么建议?是否有一种方法可以在运行时检测此类驱动程序错误,而无需手动测试每个设备?
最佳答案
Android 上的 OpenGL ES 驱动程序中的错误是众所周知的事情,因此驱动程序中完全有可能存在错误。特别是如果您正在使用一些高级(未经充分测试)的功能,如 GL 扩展。
在一个大型 Android 项目中,我们通常使用以下 list 来解决这个问题:
关于opengl-es - 处理 OpenGL ES 2.0 驱动程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185609/