执行流程:
在SpriteMask::InitializeClass时执行,注册模板测试的状态SpriteMaskInitializeStencilStates,如果开启了则模板测试要开启
然后执行SpriteMaskJobs.cpp的SetupSpriteMaskPrepareCallbacks,执行mask的回调SpriteMaskPrepareRendererNodes,在这里会拿到spritemask的node和render执行SpriteMaskSetupRenderNode,并在这里注册了渲染mask和清理mask的回调
在DrawSpriteMaskRawFromNodeQueue里面执行PrepareSpriteMeshBuffersAndDrawRange准备数据,然后执行SetStencilState来设置模板测试数据
然后执行device.DrawBuffers,比如opengles会执行GfxDeviceGLES::DrawBuffers执行渲染。
他的材质在SpriteMask.cpp中InitializeMaterial设置到render中
绑定的shader是Sprites-Mask.shader,遮罩的区域方式就是裁剪。
模板测试是在设置材质时写好的。