如何组织opengl es 2.0程序?
How to organize opengl es 2.0 program?
我想了两种方法来编写我的 opengl es 2.0 代码。
首先,我编写了很多调用来在具有许多 VAO 和 VBO 或只有一个 VAO 和许多 VBO 的屏幕中绘制元素。
其次,我将所有元素的坐标保存在一个列表中,并将这些坐标的所有顶点写入一个唯一的 VAO 和一个唯一的 VBO 中,并在屏幕上绘制所有顶点。
我应该遵循什么更好的方法?
我想到的就这些,还有什么办法吗?
VAO 旨在为您在设置顶点属性指针和enabling/disabling 与该设置相关的管道状态时节省一些设置调用。只有一个 VAO 不会为您节省任何东西,因为您将反复重新绑定顶点缓冲区并更改一些设置。因此,您的目标应该是拥有多个 VAO,每个 "static" 个渲染批处理一个,但不一定每个绘制的对象一个。
至于在单个 VBO 或多个 VBO 中拥有所有顶点 - 这实际上取决于任务。
如果您在多次调用中绘制所有数据,则将所有数据都放在单个 VBO 中没有任何好处。但也没有必要为每个精灵分配一个 VBO。它始终是关于设置管道的不同调用成本之间的平衡,因此理想情况下,您可以尝试不同的方法并根据您的特定情况决定最适合您的方法。
缓冲区大小可能有限制,并且肯定有 "reasonable" 特定实现首选的大小。我记得旧的 Intel 驱动程序存在一些问题,渲染缓冲区的一部分会处理整个缓冲区,跳过不需要的顶点。
我想了两种方法来编写我的 opengl es 2.0 代码。
首先,我编写了很多调用来在具有许多 VAO 和 VBO 或只有一个 VAO 和许多 VBO 的屏幕中绘制元素。
其次,我将所有元素的坐标保存在一个列表中,并将这些坐标的所有顶点写入一个唯一的 VAO 和一个唯一的 VBO 中,并在屏幕上绘制所有顶点。
我应该遵循什么更好的方法?
我想到的就这些,还有什么办法吗?
VAO 旨在为您在设置顶点属性指针和enabling/disabling 与该设置相关的管道状态时节省一些设置调用。只有一个 VAO 不会为您节省任何东西,因为您将反复重新绑定顶点缓冲区并更改一些设置。因此,您的目标应该是拥有多个 VAO,每个 "static" 个渲染批处理一个,但不一定每个绘制的对象一个。
至于在单个 VBO 或多个 VBO 中拥有所有顶点 - 这实际上取决于任务。
如果您在多次调用中绘制所有数据,则将所有数据都放在单个 VBO 中没有任何好处。但也没有必要为每个精灵分配一个 VBO。它始终是关于设置管道的不同调用成本之间的平衡,因此理想情况下,您可以尝试不同的方法并根据您的特定情况决定最适合您的方法。
缓冲区大小可能有限制,并且肯定有 "reasonable" 特定实现首选的大小。我记得旧的 Intel 驱动程序存在一些问题,渲染缓冲区的一部分会处理整个缓冲区,跳过不需要的顶点。