android opengl-es 中的顶点数组对象

vertex array objects in android opengl-es

我听说最近发布的大多数 android 设备都支持 opengl-es 的 VAO。我正在尝试在 opengl-es 2.0 环境中开发应用程序。但是,我想知道

(Q1)大多数 Android 正在使用的设备(可能是几年前生产的)是否支持 VAO?如果不是,最好不要使用 VAO,因为我们必须为支持和不支持 VAO 的设备编写单独的代码

(Q2)采用它们真的会给我们带来很大的性能优势(与仅使用顶点缓冲对象(VBO)相比)吗?如果可以,我们如何在 opengl-es2.0 环境中使用它们?

根据 delphigl.de (*), 65% of all devices they have data for support the GL_OES_vertex_array_object 扩展的能力数据库,截至 2015 年 5 月 22 日,有 459 台设备的数据。

请注意,这是设备 型号 的百分比,而不是设备售出 件数 的百分比。

如果您按覆盖范围对分机列表进行排序,它会在所有分机中排在第 16 位。所以我认为可以公平地说扩展得到广泛支持,但不是普遍可用。

您当然可以在运行时检查扩展,并使用不同的代码路径。这值得么?这显然取决于用例,您需要自己测试和比较才能确定。

我的感觉是它可能对大多数用例没有太大帮助。特别是如果你想支持几年前的设备,其中许多没有非常强大的 GPU。 VAO 有助于减少顶点设置的 CPU 开销,但如果您受到 GPU 片段处理的限制,这不太可能非常重要,这通常是图形密集型应用程序的情况。

如果您查看桌面系统,情况就会有所不同,现代高端 GPU 已变得如此强大,几乎您所做的任何事情都会很快成为瓶颈。

您最好将时间花在更通用的性能优化上。确保您的绘制调用足够大,不要比需要更频繁地更改状态等。

当然,正如我提到的,如果您有 time/resources,测试和比较始终是最好的方法。

(*) 除了作为用户,我与该网站没有关联。