HighlightingBlitter.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace HighlightingSystem
  5. {
  6. [RequireComponent(typeof(Camera))]
  7. [AddComponentMenu("Highlighting System/Highlighting Blitter", 3)]
  8. public class HighlightingBlitter : MonoBehaviour
  9. {
  10. protected List<HighlightingBase> renderers = new List<HighlightingBase>();
  11. #region MonoBehaviour
  12. //
  13. protected virtual void OnRenderImage(RenderTexture src, RenderTexture dst)
  14. {
  15. bool oddEven = true;
  16. for (int i = 0; i < renderers.Count; i++)
  17. {
  18. HighlightingBase renderer = renderers[i];
  19. if (oddEven)
  20. {
  21. renderer.Blit(src, dst);
  22. }
  23. else
  24. {
  25. renderer.Blit(dst, src);
  26. }
  27. oddEven = !oddEven;
  28. }
  29. // Additional blit because final result should be in dst RenderTexture
  30. if (oddEven)
  31. {
  32. Graphics.Blit(src, dst);
  33. }
  34. }
  35. #endregion
  36. #region Public Methods
  37. //
  38. [UnityEngine.Internal.ExcludeFromDocs]
  39. public virtual void Register(HighlightingBase renderer)
  40. {
  41. if (!renderers.Contains(renderer))
  42. {
  43. renderers.Add(renderer);
  44. }
  45. enabled = renderers.Count > 0;
  46. }
  47. //
  48. [UnityEngine.Internal.ExcludeFromDocs]
  49. public virtual void Unregister(HighlightingBase renderer)
  50. {
  51. int index = renderers.IndexOf(renderer);
  52. if (index != -1)
  53. {
  54. renderers.RemoveAt(index);
  55. }
  56. enabled = renderers.Count > 0;
  57. }
  58. #endregion
  59. }
  60. }