H1
PrimitiveRestart 有什么用
PrimitiveRestart 可以减少 DrawCall 的调用次数,即把多个 DrawCall 合并成一个。由于每调用一次 DrawCall 都会有额外的开销,因此如果减少了 DrawCall 的调用次数,就相当于提升了渲染效率。
比如,有两个 DrawCall 都是画三角形,第一个三角形的顶点索引是 2、3、4,第二个三角形的顶点索引是 6、7、8。使用 PrimitiveRestart 之后,两个 DrawCall 变成一个,顶点索引变成 2、3、4、255、6、7、8,可以看到,中间多了个 255,这是一个标记,告诉 GPU 遇到这个索引的时候结束上一个图元,准备开始新的图元。当然,255 这个值可以通过 API 指定为其他值。
有的童鞋会问,上例中的两个 DrawCall 直接合并成 2、3、4、6、7、8 不就好了。
是的,对于上例,那样确实要香一些。
但是,
如果上述第一个三角形的索引是 2、3、4、5,那么简单合并就会出现问题了。还有,如果图元类型是 GL_TRIANGLE_STRIP 之类的,那么简单合并就更加不可行了。