我多次调用glBindVertexArray
和glDrawElements
来绘制 VAO / VBO对,发现无论每个网格的VBO /索引大小如何,调用glDrawElements
太多次都会导致很大的瓶颈,所以我开始研究glMultiDrawElements
。
我想,太酷了,我将直接调用这个函数而不是使用for循环!不,似乎我必须创建一个新的合并VBO和索引。再一次,从我在网上找到的几个例子中,似乎索引引用了整个VBO。我期待索引的多个偏移,每一个都从0开始,在VBO中每个网格的开始的相应偏移。现在我必须在第一个网格之后的每个索引中添加偏移。
在这一点上,我可以为所有的网格创建一个大的 VAO / VBO /索引,并调用glDrawElements
一次。如果网格是相同的,那么我就使用glDrawElementsInstanced
。
所以,我的结论是glMultiDrawElements
是没有意义的,更不用说那个糟糕的 indices 参数了,它真的可以改进。我错过了什么,这个函数的意义是什么?
1条答案
按热度按时间68bkxrlz1#
绘制命令可以通过函数
glDrawElementsBaseVertex
获得一个基本顶点索引。“基本顶点”是一个索引,它被添加到从索引缓冲区读取的每个索引中 *,然后 * 使用它从顶点缓冲区获取顶点。这应该允许您在将所有网格推入同一个缓冲区时不必手动增加索引。有一个与此等价的multidraw:
glMultiDrawElementsBaseVertex
,其中multidraw操作中的每个绘制调用都有自己的基顶点。当然,多重绘制的间接渲染版本附带了作为多重绘制数据一部分的基本顶点。