当使用统一步幅时,可选择glMultiDrawArrays

Alternative to glMultiDrawArrays when using uniform stride?

本文关键字:一步 glMultiDrawArrays 可选择      更新时间:2023-10-16

Background:我正在开发一个应用程序,本质上是绘制一个巨大的3D图形的节点和边。节点被绘制为实例立方体,而边缘是用GL_LINE绘制的,并用几何着色器扩展成由三角形带组成的3D体积"线"。目前,我每次重画边时都要执行这个扩展。然而,由于我的图形完全是静态的(节点不能移动,因此也不能边缘),我认为我只需要将GL_LINE定义扩展到三角形带一次,将扩展的顶点捕获到缓冲区(使用变换反馈),然后从该点上使用GL_TRIANGLE_STRIP的原始类型使用glMutliDrawArrays捕获的顶点绘制边缘。

问题:我画的所有这些体积线都包含10个顶点。然而,glMultiDrawArrays需要一个包含起始索引和计数大小的数组,这些数组本质上描述了每个原语的起始点和计数(以元素为单位)。由于我的原语大小都没有变化,我将创建一个看似不必要的起始索引列表&计数。是否有OpenGL提供的任何功能,将允许我简单地指定一个跨步(元素)在原始重启将发生?

没有这样的函数,但是对于您的需要,您不需要一个。变换反馈不能输出三角条。它只输出基本的原语:单独的点、线或三角形。这就是为什么glBeginTransformFeedback只取GL_POINTSGL_LINESGL_TRIANGLES

你所要做的就是一次渲染所有的边缘,通过反馈将结果收集到一个缓冲区中,然后用一个调用glDrawArrays来渲染整个东西。