关于索引三角形或三角形条带之间的渲染性能一直存在争议。但我相信有一个案例没有被充分考虑。
索引三角形在 OpenGL 中呈现如下:
glDrawElements(GL_TRIANGLES, ...);
但是由于某种原因,很多人只考虑以这种方式渲染条带:
glDrawArrays(GL_TRIANGLE_STRIP, ...);
有一些非常好的索引器(Forsyth、Tipsify 等等)可以优化您的网格,以便在 GL_TRIANGLES 模式下渲染 GPU 变换缓存。理想情况下,它们可以实现每个三角形 0.5 个渲染顶点或类似的东西。
但为什么不这样做呢?
glDrawElements(GL_TRIANGLE_STRIP, ...);
我的意思是,您将条带渲染的低索引带宽与上述索引器提供的高效 GPU 转换缓存使用结合起来。只需进行少量修改,我是否正确地说,将条带优化为对 Tcache 友好的条带索引器可能是个好主意?
可能不会达到 0.5 的目标,但至少可能达到 0.6?此外,不要忘记巨大的索引带宽增益(可能是 GL_TRIANGLES 的三分之一)。