public virtual Material GetModifiedMaterial(Material baseMaterial)
{
if (!this.MaskEnabled())
{
return baseMaterial;
}
Transform stopAfter = MaskUtilities.FindRootSortOverrideCanvas(base.transform);
int stencilDepth = MaskUtilities.GetStencilDepth(base.transform, stopAfter);
if (stencilDepth >= 8)
{
Debug.LogError("Attempting to use a stencil mask with depth > 8", base.gameObject);
return baseMaterial;
}
int num2 = ((int) 1) << stencilDepth;
if (num2 == 1)
{
Material material2 = StencilMaterial.Add(baseMaterial, 1, StencilOp.Replace, CompareFunction.Always, !this.m_ShowMaskGraphic ? ((ColorWriteMask) 0) : ColorWriteMask.All);
StencilMaterial.Remove(this.m_MaskMaterial);
this.m_MaskMaterial = material2;
Material material3 = StencilMaterial.Add(baseMaterial, 1, StencilOp.Zero, CompareFunction.Always, 0);
StencilMaterial.Remove(this.m_UnmaskMaterial);
this.m_UnmaskMaterial = material3;
this.graphic.canvasRenderer.popMaterialCount = 1;
this.graphic.canvasRenderer.SetPopMaterial(this.m_UnmaskMaterial, 0);
return this.m_MaskMaterial;
}
Material material4 = StencilMaterial.Add(baseMaterial, num2 | (num2 - 1), StencilOp.Replace, CompareFunction.Equal, !this.m_ShowMaskGraphic ? ((ColorWriteMask) 0) : ColorWriteMask.All, num2 - 1, num2 | (num2 - 1));
StencilMaterial.Remove(this.m_MaskMaterial);
this.m_MaskMaterial = material4;
this.graphic.canvasRenderer.hasPopInstruction = true;
Material material5 = StencilMaterial.Add(baseMaterial, num2 - 1, StencilOp.Replace, CompareFunction.Equal, 0, num2 - 1, num2 | (num2 - 1));
StencilMaterial.Remove(this.m_UnmaskMaterial);
this.m_UnmaskMaterial = material5;
this.graphic.canvasRenderer.popMaterialCount = 1;
this.graphic.canvasRenderer.SetPopMaterial(this.m_UnmaskMaterial, 0);
return this.m_MaskMaterial;
}