12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using System;
- using UnityEngine;
- namespace GameLogic.Combat.Hero.HeroGPU
- {
- public class GPURender
- {
- private static readonly int shader_enableShaderId = Shader.PropertyToID("_EnableAnimation");
- readonly int shader_animtionStateId = Shader.PropertyToID("_AnimationState");
- readonly int shader_edgeColor = Shader.PropertyToID("_edgeColor");
- readonly int shader_edgeStrength = Shader.PropertyToID("_edgeStrength");
- readonly int shader_injuriedStrength = Shader.PropertyToID("_injuriedStrength");
- public Material Material;
- public Mesh Mesh;
- public MaterialPropertyBlock _materialPropertyBlock;
- BetterList<Matrix4x4> instData = new BetterList<Matrix4x4>();
- BetterList<Matrix4x4> animtionStata = new BetterList<Matrix4x4>();
- BetterList<float> enableAnimations = new BetterList<float>();
- BetterList<Vector4> edgeColor = new BetterList<Vector4>();
- BetterList<float> edgeStrength = new BetterList<float>();
- BetterList<float> injuriedStrength = new BetterList<float>();
- private RenderParams rp;
- public void Init(Material Material, Mesh Mesh)
- {
- this.Material = Material;
- this.Mesh = Mesh;
- _materialPropertyBlock = new MaterialPropertyBlock();
- rp = new RenderParams(Material);
- rp.matProps = _materialPropertyBlock;
- rp.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
- rp.receiveShadows = false;
- }
- public void Render(BetterList<HeroGPUMono> gpuMonoList)
- {
- int count = gpuMonoList.Count;
- if (count <= 0)
- {
- return;
- }
- _materialPropertyBlock.Clear();
- // 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];
- instData.Clear();
- animtionStata.Clear();
- enableAnimations.Clear();
- edgeColor.Clear();
- edgeStrength.Clear();
- injuriedStrength.Clear();
- for (int i = 0; i < count; i++)
- {
- HeroGPUMono heroGPUMono = gpuMonoList[i];
- instData.Add(heroGPUMono.rootTrans.localToWorldMatrix);
- animtionStata.Add( heroGPUMono.animtionState);
- edgeColor.Add(heroGPUMono.edgecolor);
- edgeStrength.Add( heroGPUMono.edgeStength);
- injuriedStrength.Add( heroGPUMono.injuriedStrength);
- enableAnimations.Add( 1);
- }
-
- _materialPropertyBlock.SetFloatArray(shader_enableShaderId, enableAnimations.ToArray());
- _materialPropertyBlock.SetMatrixArray(shader_animtionStateId, animtionStata.ToArray());
- _materialPropertyBlock.SetVectorArray(shader_edgeColor, edgeColor.ToArray());
- _materialPropertyBlock.SetFloatArray(shader_edgeStrength, edgeStrength.ToArray());
- _materialPropertyBlock.SetFloatArray(shader_injuriedStrength, injuriedStrength.ToArray());
- Graphics.RenderMeshInstanced(rp, Mesh, 0, instData.ToArray(), count,0);
- }
- }
- }
|