|
|
- using UnityEngine;
- using UnityEngine.UI;
- using System.Collections;
- using UnityEngine.Rendering;
- using System;
- using UnityEngine.Serialization;
-
- public class EffectMask : Mask {
-
- [NonSerialized]
- private Material c_MaskMaterial;
-
- [NonSerialized]
- private Material c_UnmaskMaterial;
-
- protected override void OnDisable()
- {
- // we call base OnDisable first here
- // as we need to have the IsActive return the
- // correct value when we notify the children
- // that the mask state has changed.
- base.OnDisable();
- if (graphic != null)
- {
- graphic.SetMaterialDirty();
- graphic.canvasRenderer.hasPopInstruction = false;
- graphic.canvasRenderer.popMaterialCount = 0;
- }
-
- StencilMaterial.Remove(c_MaskMaterial);
- c_MaskMaterial = null;
- StencilMaterial.Remove(c_UnmaskMaterial);
- c_UnmaskMaterial = null;
-
- MaskUtilities.NotifyStencilStateChanged(this);
- }
-
- public override Material GetModifiedMaterial(Material baseMaterial)
- {
- if (!MaskEnabled())
- return baseMaterial;
-
- var maskMaterial = StencilMaterial.Add(baseMaterial, 1, StencilOp.Replace, CompareFunction.Always, showMaskGraphic ? ColorWriteMask.All : 0);
- StencilMaterial.Remove(c_MaskMaterial);
- c_MaskMaterial = maskMaterial;
-
- return c_MaskMaterial;
- }
- }
|