索引GL_TRIANGLES与索引GL_TRIANGLE_STRIP

时间:2013-11-05 12:17:46

标签: performance opengl gpu gl-triangle-strip

关于索引三角形或三角形条带之间的渲染性能一直存在很多嗡嗡声。但我认为有一个案例还不够充分。

索引三角形在OpenGl中呈现如下:

glDrawElements(GL_TRIANGLES, ...);

但由于某些原因,很多人都认为只是以这种方式渲染条带:

glDrawArrays(GL_TRIANGLE_STRIP, ...);

在那里有一些非常好的索引器(Forsyth,Tipsify,仅举几例),它们可以优化网格,以便于在GL_TRIANGLES模式下渲染GPU转换缓存。理想情况下,它们可以实现每个三角形的0.5个渲染顶点或类似的东西。

但为什么不这样做?

glDrawElements(GL_TRIANGLE_STRIP, ...);

我的意思是,您将条带渲染的低索引带宽与上述索引器提供的高效GPU转换缓存使用相结合。经过很少的修改,我是否正确地说,一个优化条带的条带索引器也可以是一个好主意?

可能它不会达到0.5的目标,但至少可能达到0.6?另外,不要忘记大量索引带宽增益(可能是GL_TRIANGLES的三分之一)。

1 个答案:

答案 0 :(得分:-1)

glDrawElements需要在调用时将数据从CPU传递到GPU。具体来说,最后一个参数是指向该数据的指针。

glDrawArrays不需要在调用时将数据传递给GPU。这可能是您在卡上存储顶点/索引数据时通常不考虑glDrawElements的原因。