我想过两种方式来编写我的opengl es 2.0代码。
首先,我编写了许多调用以在屏幕上绘制具有许多VAO和VBO或仅一个VAO和许多VBO的元素。
第二,将所有元素的坐标保存在一个列表中,并将这些坐标的所有顶点写入一个VAO和一个VBO中,并在屏幕上绘制所有顶点。
我应该遵循的更好的方法是什么?
这些是我想的,还有其他方法吗?
VAO旨在在设置顶点属性指针并启用/禁用与该设置相关的管线状态时为您节省一些设置调用。仅拥有一个VAO并不能为您节省任何费用,因为您将反复重新绑定顶点缓冲区并更改某些设置。因此,您应该争取有多个VAO,每个“静态”渲染批次一个,但不一定每个绘制对象一个。
关于在单个VBO或多个VBO中具有所有顶点-这实际上取决于任务。
如果在多个调用中都提取全部数据,则将所有数据保存在单个VBO中没有任何好处。但是为每个子画面分配一个VBO也没有意义。总是要在建立管道的不同调用的成本之间取得平衡,因此理想情况下,您应尝试不同的方法,并确定在特定情况下最适合您的方法。
可能对缓冲区的大小有所限制,并且特定实现肯定首选“合理的”大小。我记得旧的英特尔驱动程序存在一些问题,当渲染缓冲区的一部分时,它将处理整个缓冲区,并跳过不需要的顶点。