Mask实现原理:在每一个像素上都用模板缓存了值,是1就绘制,是-1就不绘制
首先,设置了当前的一个材质,第二模板缓存的枚举类型
比如这是屏幕,这里有一个长方形,我们希望它,这里设置了一个正方形的mask,我们希望上面和下面的部分是隐藏掉的,在设置模板缓存的过程中,就把需要上下两个地方的模板缓存的值设置为0,中间的模板缓存的值设置为1,在之后显示过程中,只显示为1的值的地方。就是这样用模板缓存实现遮罩的功能。
实际上,我们在渲染的过程中,每一个部分是相互独立的,我们没有办法主动获取另一部分的数据。我们设置模板部分,我们通过设置把数据存储在了每一个像素点,我们就创建了一个数据缓存,在下一个部分提取数据,看模板缓存值看是不是需要显示的。每一个模板缓存都是像素级的,一个一个像素操作。这样我们才能知道显示不显示。
所以呢,这里就产生了两次DrawCall,第一是因为我把所有的像素设置上值,这里会产生第一次DrawCall,然后之后材质会完成子物体的渲染,之后我们就要把当前的模板缓存还原,还原之后又要产生一次DrawCall。

网友评论