TargetPool.cs 988 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Collections.Generic;
  2. namespace UnityEngine.Rendering.PostProcessing
  3. {
  4. class TargetPool
  5. {
  6. readonly List<int> m_Pool;
  7. int m_Current;
  8. internal TargetPool()
  9. {
  10. m_Pool = new List<int>();
  11. Get(); // Pre-warm with a default target to avoid black frame on first frame
  12. }
  13. internal int Get()
  14. {
  15. int ret = Get(m_Current);
  16. m_Current++;
  17. return ret;
  18. }
  19. int Get(int i)
  20. {
  21. int ret;
  22. if (m_Pool.Count > i)
  23. {
  24. ret = m_Pool[i];
  25. }
  26. else
  27. {
  28. // Avoid discontinuities
  29. while (m_Pool.Count <= i)
  30. m_Pool.Add(Shader.PropertyToID("_TargetPool" + i));
  31. ret = m_Pool[i];
  32. }
  33. return ret;
  34. }
  35. internal void Reset()
  36. {
  37. m_Current = 0;
  38. }
  39. }
  40. }