| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | using System;using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;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>(100);        BetterList<Matrix4x4> animtionStata = new BetterList<Matrix4x4>(100);        BetterList<float> enableAnimations = new BetterList<float>(100);        BetterList<Vector4> edgeColor = new BetterList<Vector4>(100);        BetterList<float> edgeStrength = new BetterList<float>(100);        BetterList<float> injuriedStrength = new BetterList<float>(100);        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();            int rendCombat = 0;            for (int i = 0; i < count; i++)            {                HeroGPUMono heroGPUMono = gpuMonoList[i];                if (!heroGPUMono.gameObject.activeSelf)                {                    continue;                }                rendCombat++;                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(true));            _materialPropertyBlock.SetMatrixArray(shader_animtionStateId, animtionStata.ToArray(true));            _materialPropertyBlock.SetVectorArray(shader_edgeColor, edgeColor.ToArray(true));            _materialPropertyBlock.SetFloatArray(shader_edgeStrength, edgeStrength.ToArray(true));            _materialPropertyBlock.SetFloatArray(shader_injuriedStrength, injuriedStrength.ToArray(true));            Graphics.RenderMeshInstanced(rp, Mesh, 0, instData.ToArray(true), rendCombat, 0);        }    }}
 |