123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System.Collections.Generic;
- using UnityEngine;
- namespace Coffee.UIParticleExtensions
- {
- internal class CombineInstanceEx
- {
- private int count;
- public long hash = -1;
- public int index = -1;
- private readonly List<CombineInstance> combineInstances = new List<CombineInstance>(32);
- public Mesh mesh;
- public Matrix4x4 transform;
- public void Combine()
- {
- switch (count)
- {
- case 0:
- return;
- case 1:
- mesh = combineInstances[0].mesh;
- transform = combineInstances[0].transform;
- return;
- default:
- {
- var cis = CombineInstanceArrayPool.Get(combineInstances);
- mesh = MeshPool.Rent();
- mesh.CombineMeshes(cis, true, true);
- transform = Matrix4x4.identity;
- cis.Clear();
- return;
- }
- }
- }
- public void Clear()
- {
- for (var i = 0; i < combineInstances.Count; i++)
- {
- var inst = combineInstances[i];
- MeshPool.Return(inst.mesh);
- inst.mesh = null;
- combineInstances[i] = inst;
- }
- combineInstances.Clear();
- MeshPool.Return(mesh);
- mesh = null;
- count = 0;
- hash = -1;
- index = -1;
- }
- public void Push(Mesh mesh, Matrix4x4 transform)
- {
- combineInstances.Add(new CombineInstance {mesh = mesh, transform = transform});
- count++;
- }
- }
- }
|