关于索引三角形或三角形条带之间的渲染性能一直存在很多嗡嗡声。但我认为有一个案例还不够充分。
索引三角形在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的三分之一)。
答案 0 :(得分:-1)
glDrawElements需要在调用时将数据从CPU传递到GPU。具体来说,最后一个参数是指向该数据的指针。
glDrawArrays不需要在调用时将数据传递给GPU。这可能是您在卡上存储顶点/索引数据时通常不考虑glDrawElements的原因。