如何组织opengl es 2.0程序?

问题描述 投票:1回答:1

我想过两种方式来编写我的opengl es 2.0代码。

首先,我编写了许多调用以在屏幕上绘制具有许多VAO和VBO或仅一个VAO和许多VBO的元素。

第二,将所有元素的坐标保存在一个列表中,并将这些坐标的所有顶点写入一个VAO和一个VBO中,并在屏幕上绘制所有顶点。

我应该遵循的更好的方法是什么?

这些是我想的,还有其他方法吗?

opengl-es-2.0
1个回答
1
投票

VAO旨在在设置顶点属性指针并启用/禁用与该设置相关的管线状态时为您节省一些设置调用。仅拥有一个VAO并不能为您节省任何费用,因为您将反复重新绑定顶点缓冲区并更改某些设置。因此,您应该争取有多个VAO,每个“静态”渲染批次一个,但不一定每个绘制对象一个。

关于在单个VBO或多个VBO中具有所有顶点-这实际上取决于任务。

如果在多个调用中都提取全部数据,则将所有数据保存在单个VBO中没有任何好处。但是为每个子画面分配一个VBO也没有意义。总是要在建立管道的不同调用的成本之间取得平衡,因此理想情况下,您应尝试不同的方法,并确定在特定情况下最适合您的方法。

可能对缓冲区的大小有所限制,并且特定实现肯定首选​​“合理的”大小。我记得旧的英特尔驱动程序存在一些问题,当渲染缓冲区的一部分时,它将处理整个缓冲区,并跳过不需要的顶点。

© www.soinside.com 2019 - 2024. All rights reserved.