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);
- }
- }
- }
- }
|