CombineInstanceEx.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace Coffee.UIParticleExtensions
  4. {
  5. internal class CombineInstanceEx
  6. {
  7. private int count;
  8. public long hash = -1;
  9. public int index = -1;
  10. private readonly List<CombineInstance> combineInstances = new List<CombineInstance>(32);
  11. public Mesh mesh;
  12. public Matrix4x4 transform;
  13. public void Combine()
  14. {
  15. switch (count)
  16. {
  17. case 0:
  18. return;
  19. case 1:
  20. mesh = combineInstances[0].mesh;
  21. transform = combineInstances[0].transform;
  22. return;
  23. default:
  24. {
  25. var cis = CombineInstanceArrayPool.Get(combineInstances);
  26. mesh = MeshPool.Rent();
  27. mesh.CombineMeshes(cis, true, true);
  28. transform = Matrix4x4.identity;
  29. cis.Clear();
  30. return;
  31. }
  32. }
  33. }
  34. public void Clear()
  35. {
  36. for (var i = 0; i < combineInstances.Count; i++)
  37. {
  38. var inst = combineInstances[i];
  39. MeshPool.Return(inst.mesh);
  40. inst.mesh = null;
  41. combineInstances[i] = inst;
  42. }
  43. combineInstances.Clear();
  44. MeshPool.Return(mesh);
  45. mesh = null;
  46. count = 0;
  47. hash = -1;
  48. index = -1;
  49. }
  50. public void Push(Mesh mesh, Matrix4x4 transform)
  51. {
  52. combineInstances.Add(new CombineInstance {mesh = mesh, transform = transform});
  53. count++;
  54. }
  55. }
  56. }