Opengl es 处理OpenGL ES 2.0驱动程序错误 我目前正在使用NDK移植一个3D iC++游戏。渲染是使用GLES2完成的。当我重写完所有特定于平台的内容并第一次运行整个游戏时,我注意到渲染错误——有时只渲染部分几何体,有时巨大的三角形会在屏幕上闪烁,等等
我在运行4.1.2的Galaxy Nexus上测试了它Opengl es 处理OpenGL ES 2.0驱动程序错误 我目前正在使用NDK移植一个3D iC++游戏。渲染是使用GLES2完成的。当我重写完所有特定于平台的内容并第一次运行整个游戏时,我注意到渲染错误——有时只渲染部分几何体,有时巨大的三角形会在屏幕上闪烁,等等,opengl-es,android-ndk,opengl-es-2.0,Opengl Es,Android Ndk,Opengl Es 2.0,我在运行4.1.2的Galaxy Nexus上测试了它glGetError()未返回任何内容。此外,这款游戏在所有iOS设备上都运行良好。我开始怀疑一个驱动程序错误,在搜寻了好几个小时后,我发现使用VAOs(GL\u OES\u vertex\u array\u object)导致了这个问题。相同的渲染器在没有VAOs的情况下工作良好,并使用VAOs生成垃圾 我找到了这个。我还看到了同一份报告,一名工作人员证实这确实是一个驱动程序错误 所有这些都让我思考——我该如何处理已确认的驱动程序错误案例?
glGetError()
未返回任何内容。此外,这款游戏在所有iOS设备上都运行良好。我开始怀疑一个驱动程序错误,在搜寻了好几个小时后,我发现使用VAOs(GL\u OES\u vertex\u array\u object
)导致了这个问题。相同的渲染器在没有VAOs的情况下工作良好,并使用VAOs生成垃圾
我找到了这个。我还看到了同一份报告,一名工作人员证实这确实是一个驱动程序错误
所有这些都让我思考——我该如何处理已确认的驱动程序错误案例?我看到两种选择:
选项1将惩罚所有拥有优秀驱动程序的用户。VAOs确实提高了性能,我认为忽略它们是一件非常糟糕的事情,因为一台设备有一个bug。
第二个选择是很难做对的。我无法测试每台Android设备是否有损坏的驱动程序,我希望列表会不断变化,难以跟上
有什么建议吗?是否有一种方法可以在运行时检测此类驱动程序错误,而不必手动测试每台设备?Android上OpenGL ES驱动程序中的错误是众所周知的,因此完全有可能在驱动程序中存在错误。特别是如果您使用一些高级(未经良好测试)功能,如GL扩展 在大型Android项目中,我们通常使用以下检查表来解决此问题:
OpenGL驱动程序错误可能是一个主要的PITA。我遇到过着色器优化和纹理格式错误的问题。已设法修改代码,以便以正确的方式在所有GPU上工作。在您的情况下,很难找到比硬编码设备/驱动程序版本检查更好的解决方案——否则您将不得不放弃使用VAO。我在第三方库中看到过一些这样的检查。我想到的一件事是黑名单,但有一个菜单选项,可以让你进入“兼容模式”,并禁用危险的功能,如VAOs。。。如果您这样做,我强烈建议(a)收集关于选择该选项的用户正在使用的设备/版本的分析,以及(b)与我和社区其他人共享该列表,以便我们可以从一个更好的黑名单开始未来的项目!