| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | using UnityEngine;using Utility;namespace GameLogic.Combat.Hero.HeroGPU{    public class HeroGPURenderManager : Singleton<HeroGPURenderManager>    {        protected Map<string, BetterList<HeroGPUMono>> gpuRenderMap = new Map<string, BetterList<HeroGPUMono>>();       protected Map<string, GPURender> gpuRender = new Map<string, GPURender>();        // MaterialPropertyBlock _materialPropertyBlock = new MaterialPropertyBlock();        public HeroGPURenderManager()        {            StaticUpdater.Instance.AddRenderUpdateCallBack(Update);        }        public void AddHeroGpuRender(HeroGPUMono gpuMono)        {            if (gpuRenderMap.TryGetValue(gpuMono.gameObject.name, out BetterList<HeroGPUMono> list))            {                list.Add(gpuMono);            }            else            {                list = new BetterList<HeroGPUMono>();                list.Add(gpuMono);                gpuRenderMap.Add(gpuMono.gameObject.name, list);            }        }        public void RemoveHeroGpuRender(HeroGPUMono gpuMono)        {            if (gpuRenderMap.TryGetValue(gpuMono.gameObject.name, out BetterList<HeroGPUMono> list))            {                list.Remove(gpuMono);            }        }        public void Update()        {            for (gpuRenderMap.Begin(); gpuRenderMap.Next();)            {                int count = gpuRenderMap.Value.Count;                if (count <= 0)                {                    continue;                }                if (!gpuRender.TryGetValue(gpuRenderMap.Key, out GPURender render))                {                    render = new GPURender();                    render.Init(gpuRenderMap.Value[0].Material,gpuRenderMap.Value[0].Mesh);                    gpuRender.Add(gpuRenderMap.Key, render);                }                render.Render(gpuRenderMap.Value);                // RenderParams rp = new RenderParams(gpuRenderMap.Value[0].Material);                // rp.matProps = _materialPropertyBlock;                // rp.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;                // rp.receiveShadows = false;                // Matrix4x4[] instData = new Matrix4x4[count];                // Matrix4x4[] animtionStata = new Matrix4x4[count];                // float[] enableAnimations = new float[count];                // Vector4[] edgeColor = new Vector4[count];                // float[] edgeStrength = new float[count];                // float[] injuriedStrength = new float[count];                // for (int i = 0; i < count; i++)                // {                //     HeroGPUMono heroGPUMono = gpuRenderMap.Value[i];                //     instData[i] = heroGPUMono.rootTrans.localToWorldMatrix;                //     animtionStata[i] = heroGPUMono.animtionState;                //     edgeColor[i] = heroGPUMono.edgecolor;                //     edgeStrength[i] = heroGPUMono.edgeStength;                //     injuriedStrength[i] = heroGPUMono.injuriedStrength;                //     enableAnimations[i] = 1;                // }                //                // _materialPropertyBlock.SetFloatArray(enableShaderId, enableAnimations);                // _materialPropertyBlock.SetMatrixArray(animtionStateId, animtionStata);                // _materialPropertyBlock.SetVectorArray(this.edgeColor, edgeColor);                // _materialPropertyBlock.SetFloatArray(this.edgeStrength, edgeStrength);                // _materialPropertyBlock.SetFloatArray(this.injuriedStrength, injuriedStrength);                // Graphics.RenderMeshInstanced(rp, gpuRenderMap.Value[0].Mesh, 0, instData);            }        }    }}
 |