HeroGPURenderManager.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using UnityEngine;
  2. using Utility;
  3. namespace GameLogic.Combat.Hero.HeroGPU
  4. {
  5. public class HeroGPURenderManager : Singleton<HeroGPURenderManager>
  6. {
  7. protected Map<string, BetterList<HeroGPUMono>> gpuRenderMap = new Map<string, BetterList<HeroGPUMono>>();
  8. protected Map<string, GPURender> gpuRender = new Map<string, GPURender>();
  9. // MaterialPropertyBlock _materialPropertyBlock = new MaterialPropertyBlock();
  10. public HeroGPURenderManager()
  11. {
  12. StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
  13. }
  14. public void AddHeroGpuRender(HeroGPUMono gpuMono)
  15. {
  16. if (gpuRenderMap.TryGetValue(gpuMono.gameObject.name, out BetterList<HeroGPUMono> list))
  17. {
  18. list.Add(gpuMono);
  19. }
  20. else
  21. {
  22. list = new BetterList<HeroGPUMono>();
  23. list.Add(gpuMono);
  24. gpuRenderMap.Add(gpuMono.gameObject.name, list);
  25. }
  26. }
  27. public void RemoveHeroGpuRender(HeroGPUMono gpuMono)
  28. {
  29. if (gpuRenderMap.TryGetValue(gpuMono.gameObject.name, out BetterList<HeroGPUMono> list))
  30. {
  31. list.Remove(gpuMono);
  32. }
  33. }
  34. public void Update()
  35. {
  36. for (gpuRenderMap.Begin(); gpuRenderMap.Next();)
  37. {
  38. int count = gpuRenderMap.Value.Count;
  39. if (count <= 0)
  40. {
  41. continue;
  42. }
  43. if (!gpuRender.TryGetValue(gpuRenderMap.Key, out GPURender render))
  44. {
  45. render = new GPURender();
  46. render.Init(gpuRenderMap.Value[0].Material,gpuRenderMap.Value[0].Mesh);
  47. gpuRender.Add(gpuRenderMap.Key, render);
  48. }
  49. render.Render(gpuRenderMap.Value);
  50. // RenderParams rp = new RenderParams(gpuRenderMap.Value[0].Material);
  51. // rp.matProps = _materialPropertyBlock;
  52. // rp.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
  53. // rp.receiveShadows = false;
  54. // Matrix4x4[] instData = new Matrix4x4[count];
  55. // Matrix4x4[] animtionStata = new Matrix4x4[count];
  56. // float[] enableAnimations = new float[count];
  57. // Vector4[] edgeColor = new Vector4[count];
  58. // float[] edgeStrength = new float[count];
  59. // float[] injuriedStrength = new float[count];
  60. // for (int i = 0; i < count; i++)
  61. // {
  62. // HeroGPUMono heroGPUMono = gpuRenderMap.Value[i];
  63. // instData[i] = heroGPUMono.rootTrans.localToWorldMatrix;
  64. // animtionStata[i] = heroGPUMono.animtionState;
  65. // edgeColor[i] = heroGPUMono.edgecolor;
  66. // edgeStrength[i] = heroGPUMono.edgeStength;
  67. // injuriedStrength[i] = heroGPUMono.injuriedStrength;
  68. // enableAnimations[i] = 1;
  69. // }
  70. //
  71. // _materialPropertyBlock.SetFloatArray(enableShaderId, enableAnimations);
  72. // _materialPropertyBlock.SetMatrixArray(animtionStateId, animtionStata);
  73. // _materialPropertyBlock.SetVectorArray(this.edgeColor, edgeColor);
  74. // _materialPropertyBlock.SetFloatArray(this.edgeStrength, edgeStrength);
  75. // _materialPropertyBlock.SetFloatArray(this.injuriedStrength, injuriedStrength);
  76. // Graphics.RenderMeshInstanced(rp, gpuRenderMap.Value[0].Mesh, 0, instData);
  77. }
  78. }
  79. }
  80. }