0

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

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

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

4

1 回答 1

1

根据delphigl.de (*) 上的能力数据库,截至 2015 年 5 月 22 日,有65% 的设备有数据支持GL_OES_vertex_array_object扩展,有 459 台设备的数据。

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

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

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

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

如果您查看的是台式机系统,情况会有所不同,现代高端 GPU 已经变得如此强大,以至于您所做的几乎任何事情都会很快成为瓶颈。

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

但是,当然,正如我所提到的,如果您有时间/资源,测试和比较始终是最好的方法。

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

于 2015-05-23T02:58:32.963 回答