背景主题文章:【Metal引擎剖析(二):传统延迟渲染和TBDR】
1. Raster Order Groups的作用
ROG是干什么的呢?官方解释:准确的控制并行的fragment shader线程访问同一个像素的顺序。
通俗点说,就是我们在渲染场景物体的时候,有些前后重叠遮挡的物体身上的fragment shader可能会同时访问同一个坐标的那个像素数据,造成竞争,导致结果错误。而ROG就是用来同步这个像素的访问次序,防止竞争的发生。
这样解释可能还是不够直观,这里来看官方给出的一个例子。
假设有下面这种情况,镜头场景中有两个重叠的三角形,开发者代码中绘制的时候对于这种透明物体会按照从后往前的顺序绘制,也就是先调用后面蓝色三角形的draw call,然后再调用前面绿色三角形的draw call,Metal也会按照我们代码的顺序去执行draw call指令,这样看似乎这两次draw call是依次串行执行,但实际上并不是这样,GPU上的运算过程是高度并行的,虽然CPU发出的指令