1234567891011121314151617181920212223242526272829303132333435 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using UnityEngine;
- using UnityEngine.Rendering;
- using UnityEngine.UI;
- public class HoleImage : Image
- {
- public override Material GetModifiedMaterial(Material baseMaterial)
- {
- var toUse = baseMaterial;
- if (m_ShouldRecalculateStencil)
- {
- var rootCanvas = MaskUtilities.FindRootSortOverrideCanvas(transform);
- m_StencilValue = maskable ? MaskUtilities.GetStencilDepth(transform, rootCanvas) : 0;
- m_ShouldRecalculateStencil = false;
- }
- // if we have a enabled Mask component then it will
- // generate the mask material. This is an optimisation
- // it adds some coupling between components though :(
- Mask maskComponent = GetComponent<Mask>();
- if (m_StencilValue > 0 && (maskComponent == null || !maskComponent.IsActive()))
- {
- var maskMat = StencilMaterial.Add(toUse, (1 << m_StencilValue) - 1, StencilOp.Keep, CompareFunction.NotEqual, ColorWriteMask.All, (1 << m_StencilValue) - 1, 0);
- StencilMaterial.Remove(m_MaskMaterial);
- m_MaskMaterial = maskMat;
- toUse = m_MaskMaterial;
- }
- return toUse;
- }
- }
|