我正在开发一款只有 2D 精灵的 3D 世界游戏(比如饥荒游戏)。(带有 C++ 的 OpenGL ES2)
目前,我在没有批处理的情况下将元素重新排序(因此 1 个元素 = 1 个绘制调用)。我想在我的框架中实现批处理以减少绘制调用。
这是我目前所拥有的:
- 将我场景的所有元素重新排列到前面。
- 将元素的顺序列表发送到渲染器。
渲染器在他的批处理管理器中查看给定元素是否存在带有其材质的批处理。
- 批次不存在:创建一个新批次。
- 具有此材质的元素的批次存在:将精灵添加到批次中。
计算每批包含所有精灵的大网格(1 种材料类型 = 1 批)。
当所有批次都正常时,批次管理器为渲染器计算绘制命令。
渲染器处理绘制命令(绑定着色器、绑定纹理、绑定缓冲区、绘制元素)
图片在这里显示我的问题:图片
但是我遇到了一些问题,因为对象可以在另一个批次中的另一个对象后面。
我怎么能做这样的事情?