使用统一步幅时,替代glMultiDrawArrays?

时间:2013-03-19 21:29:56

标签: c++ opengl glsl opengl-3

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

问题:我绘制的所有这些体积线都包含10个顶点。但是,{{1}}需要一组起始索引和计数大小,它们基本上描述了每个基元的起点和计数(在元素中)。因为我的原始人不会在规模上有所不同,所以我将制作一个看似不必要的起始指数列表。计数。是否有任何OpenGL提供的功能允许我简单地指定一个strid(在元素中),原始重启会发生在哪一步?

1 个答案:

答案 0 :(得分:3)

没有这样的功能,但是根据您的需要,您不需要它。转换反馈无法输出三角形条带。它仅输出基本基元:单个点,线或三角形。这就是为什么glBeginTransformFeedback只需要GL_POINTSGL_LINESGL_TRIANGLES

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