【发布时间】:2014-12-28 08:44:28
【问题描述】:
我正在实现一个 2D 游戏,其中包含许多不同尺寸的独立矩形游戏块。每件作品的尺寸在帧之间不会改变。大多数片段将显示图像并共享相同的片段着色器。我是 WebGL 的新手,我不清楚在这种情况下管理顶点缓冲区的最佳策略是什么。
使用单个顶点缓冲区(四边形)来表示所有游戏片段,然后在顶点着色器中为每个片段重新缩放这些顶点是否更好?或者,我应该为每个片段定义一个单独的静态顶点缓冲区吗?
【问题讨论】:
标签: webgl
我正在实现一个 2D 游戏,其中包含许多不同尺寸的独立矩形游戏块。每件作品的尺寸在帧之间不会改变。大多数片段将显示图像并共享相同的片段着色器。我是 WebGL 的新手,我不清楚在这种情况下管理顶点缓冲区的最佳策略是什么。
使用单个顶点缓冲区(四边形)来表示所有游戏片段,然后在顶点着色器中为每个片段重新缩放这些顶点是否更好?或者,我应该为每个片段定义一个单独的静态顶点缓冲区吗?
【问题讨论】:
标签: webgl
GPU 是一个状态机,切换状态的成本很高(通过 WebGL 完成时更是如此,因为 WebGL 实现引入了额外的检查层),因此绑定顶点缓冲区的成本很高。
将 API 调用降至最低的良好做法。
即使有多个不同对象,您仍然希望使用单个顶点缓冲区并使用drawArrays 或drawElements 方法的偏移参数。
这里是 API 调用列表,按照成本降序排列(顶部是最昂贵的):
有关这方面的更多信息,您可以观看 Cass Everitt 和 John McDonald 的精彩演讲 Beyond Porting: How Modern OpenGL can Radically Reduce Driver Overhead,这也是上面列表的来源。
虽然这些基准测试是在 Nvidia 硬件上完成的,但它也适用于 AMD 和 Intel 图形硬件。
【讨论】: