使用单个 vertex/index 缓冲区的多个绘制调用?
Multiple draw calls with single vertex/index buffer?
我想实现简单的子弹轨迹(在 OpenGL-ES 2-3 中)系统,它允许对不同的轨迹使用不同的纹理或材料,所以这意味着,轨迹意味着在不同的绘制调用中呈现并且每个顶点都可以在渲染前修改。
实际上,我不知道,每次更新会进行多少绘制调用,以及将多少顶点传递给此绘制调用,所以我尝试对所有的都使用单顶点缓冲区和单索引缓冲区轨迹,并在每一帧用不同的轨迹数据填充顶点缓冲区。索引缓冲区填充了简单的 (0, 1, 2, 3, 3, 4, 4, 5, 6....) 值一次,不会再改变。
您能否建议一些最佳做法,如何做到这一点?我可以为每个批次使用不同的渲染状态和不同的顶点区域进行绘制调用吗?每次绘制调用应该使用哪些索引区域?索引偏移量是否必须考虑顶点偏移量,或者索引可能应用于顶点区域而不是整个缓冲区,因此我可以将每次绘制调用的索引缓冲区偏移量设置为 0?或者,也许,我完全错了,应该做点别的?
谢谢!
好的,那么我是如何做到的:
我仍然对所有批次使用单个大缓冲区
对于每个批次,我只映射缓冲区的一部分(每个批次的新部分)并更改这部分中的数据。
索引必须考虑这部分的偏移量。因此,当您使用第 4、5、6、7 个顶点渲染部分缓冲区时,您必须使用具有 {4、5、6、7} 数据的部分索引缓冲区。
我想实现简单的子弹轨迹(在 OpenGL-ES 2-3 中)系统,它允许对不同的轨迹使用不同的纹理或材料,所以这意味着,轨迹意味着在不同的绘制调用中呈现并且每个顶点都可以在渲染前修改。
实际上,我不知道,每次更新会进行多少绘制调用,以及将多少顶点传递给此绘制调用,所以我尝试对所有的都使用单顶点缓冲区和单索引缓冲区轨迹,并在每一帧用不同的轨迹数据填充顶点缓冲区。索引缓冲区填充了简单的 (0, 1, 2, 3, 3, 4, 4, 5, 6....) 值一次,不会再改变。
您能否建议一些最佳做法,如何做到这一点?我可以为每个批次使用不同的渲染状态和不同的顶点区域进行绘制调用吗?每次绘制调用应该使用哪些索引区域?索引偏移量是否必须考虑顶点偏移量,或者索引可能应用于顶点区域而不是整个缓冲区,因此我可以将每次绘制调用的索引缓冲区偏移量设置为 0?或者,也许,我完全错了,应该做点别的?
谢谢!
好的,那么我是如何做到的:
我仍然对所有批次使用单个大缓冲区
对于每个批次,我只映射缓冲区的一部分(每个批次的新部分)并更改这部分中的数据。
索引必须考虑这部分的偏移量。因此,当您使用第 4、5、6、7 个顶点渲染部分缓冲区时,您必须使用具有 {4、5、6、7} 数据的部分索引缓冲区。