我听说最近发布的大部分Android设备都支持opengl-es的VAO。我正在尝试在opengl-es 2.0环境中开发一个应用程序。但是,我想知道
(Q1)使用的大多数Android设备(可能是几年前生产的)是否支持VAO?如果不是最好不使用VAO,因为我们必须为支持VAO的设备和那些不支持VAO的设备编写单独的代码
(Q2)它是否真的给了我们一个很大的优势(与仅使用顶点缓冲对象(VBO)相比)来使用它们?如果是这样,我们如何在opengl-es2.0环境中使用它们?
答案 0 :(得分:0)
根据delphigl.de(*)的功能数据库,截至2015年5月22日,他们拥有支持GL_OES_vertex_array_object扩展的数据的所有设备中有65%拥有459台设备的数据。 / p>
请注意,这是设备型号的百分比,而非设备单元的百分比。
如果按覆盖范围对扩展名列表进行排序,则会在所有扩展名中的16位上进行计时。所以我认为扩展得到广泛支持是公平的,但不普遍可用。
您当然可以在运行时检查扩展,并使用不同的代码路径。这值得么?这显然取决于用例,你需要自己测试和比较以确定。
我的感觉是,对于大多数用例来说,它可能没有多大帮助。特别是如果您想要支持几年前的设备,其中许多设备将没有非常强大的GPU。 VAO有助于降低顶点设置的CPU开销,但如果受到GPU片段处理的限制,那么这不太可能非常重要,这通常适用于图形密集型应用程序。
如果您正在研究桌面系统,那么情况会有所不同,现代高端GPU已经变得非常强大,几乎任何您做的事情都可能很快成为瓶颈。
您可能最好将时间花在更通用的性能优化上。确保您的绘制调用足够大,不要更频繁地更改状态等等。
但是,正如我所提到的,如果你有时间/资源,测试和比较总是最好的方法。
(*)除了作为用户之外,我与此网站没有任何关联。