| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- /**
 
-  * Copyright(c) Live2D Inc. All rights reserved.
 
-  *
 
-  * Use of this source code is governed by the Live2D Open Software license
 
-  * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
 
-  */
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using UnityEngine.Rendering;
 
- namespace Live2D.Cubism.Rendering.Masking
 
- {
 
-     /// <summary>
 
-     /// Singleton buffer for Cubism mask related draw commands.
 
-     /// </summary>
 
-     [ExecuteInEditMode]
 
-     public sealed class CubismMaskCommandBuffer : MonoBehaviour
 
-     {
 
-         /// <summary>
 
-         /// Draw command sources.
 
-         /// </summary>
 
-         private static List<ICubismMaskCommandSource> Sources { get; set; }
 
-         /// <summary>
 
-         /// Command buffer.
 
-         /// </summary>
 
-         private static CommandBuffer Buffer { get; set; }
 
-         /// <summary>
 
-         /// True if <see cref="Sources"/> are empty.
 
-         /// </summary>
 
-         private static bool ContainsSources
 
-         {
 
-             get { return Sources != null && Sources.Count > 0; }
 
-         }
 
-         /// <summary>
 
-         /// Makes sure class is initialized for static usage.
 
-         /// </summary>
 
-         private static void Initialize()
 
-         {
 
-             // Initialize containers.
 
-             if (Sources == null)
 
-             {
 
-                 Sources = new List<ICubismMaskCommandSource>();
 
-             }
 
-             if (Buffer == null)
 
-             {
 
-                 Buffer = new CommandBuffer
 
-                 {
 
-                     name = "cubism_MaskCommandBuffer"
 
-                 };
 
-             }
 
-             // Spawn update proxy.
 
-             const string proxyName = "cubism_MaskCommandBuffer";
 
-             var proxy = GameObject.Find(proxyName);
 
-             if (proxy == null)
 
-             {
 
-                 proxy = new GameObject(proxyName)
 
-                 {
 
-                      hideFlags = HideFlags.HideAndDontSave
 
-                 };
 
-                 if (!Application.isEditor || Application.isPlaying)
 
-                 {
 
-                     DontDestroyOnLoad(proxy);
 
-                 }
 
-                 proxy.AddComponent<CubismMaskCommandBuffer>();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Registers a new draw command source.
 
-         /// </summary>
 
-         /// <param name="source">Source to add.</param>
 
-         internal static void AddSource(ICubismMaskCommandSource source)
 
-         {
 
-             // Make sure singleton is initialized.
 
-             Initialize();
 
-             // Prevent same source from being added twice.
 
-             if (Sources.Contains(source))
 
-             {
 
-                 return;
 
-             }
 
-             // Add source and force refresh.
 
-             Sources.Add(source);
 
-         }
 
-         /// <summary>
 
-         /// Deregisters a draw command source.
 
-         /// </summary>
 
-         /// <param name="source">Source to remove.</param>
 
-         internal static void RemoveSource(ICubismMaskCommandSource source)
 
-         {
 
-             // Make sure singleton is initialized.
 
-             Initialize();
 
-             // Remove source and force refresh.
 
-             Sources.RemoveAll(s => s == source);
 
-         }
 
-         /// <summary>
 
-         /// Forces the command buffer to be refreshed.
 
-         /// </summary>
 
-         private static void RefreshCommandBuffer()
 
-         {
 
-             // Clear buffer.
 
-             Buffer.Clear();
 
-             // Enqueue sources.
 
-             for (var i = 0; i < Sources.Count; ++i)
 
-             {
 
-                 Sources[i].AddToCommandBuffer(Buffer);
 
-             }
 
-         }
 
-         #region Unity Event Handling
 
-         /// <summary>
 
-         /// Executes <see cref="Buffer"/>.
 
-         /// </summary>
 
-         private void LateUpdate()
 
-         {
 
-             if (!ContainsSources)
 
-             {
 
-                 return;
 
-             }
 
-             // Refresh and execute buffer.
 
-             RefreshCommandBuffer();
 
-             Graphics.ExecuteCommandBuffer(Buffer);
 
-         }
 
-         #endregion
 
-     }
 
- }
 
 
  |