From 8bcca6d839343aafc603095bd8e0e9d64c9dc4cd Mon Sep 17 00:00:00 2001 From: DCFApixels <99481254+DCFApixels@users.noreply.github.com> Date: Tue, 4 Mar 2025 13:36:25 +0800 Subject: [PATCH] Update DebugX.base.cs --- Runtime/Gizmos/DebugX.base.cs | 58 ++++++++++------------------------- 1 file changed, 16 insertions(+), 42 deletions(-) diff --git a/Runtime/Gizmos/DebugX.base.cs b/Runtime/Gizmos/DebugX.base.cs index 481e80f..fd1cf06 100644 --- a/Runtime/Gizmos/DebugX.base.cs +++ b/Runtime/Gizmos/DebugX.base.cs @@ -444,15 +444,10 @@ namespace DCFApixels public readonly Vector3 Start; public readonly Vector3 End; } - private readonly struct DrawData + private struct DrawData { - public readonly Matrix4x4 Matrix; - public readonly Color Color; - public DrawData(Matrix4x4 matrix, Color color) - { - Matrix = matrix; - Color = color; - } + public Matrix4x4 Matrix; + public Color Color; } private struct PrepareJob : IJobParallelFor { @@ -464,21 +459,21 @@ namespace DCFApixels { ref readonly var item = ref Items[index]; - Vector3 halfDiff = (item.Value.End - item.Value.Start) * 0.5f; - Vector3 position = item.Value.Start + halfDiff; + Vector3 halfDiff = new Vector3( + (item.Value.End.x - item.Value.Start.x) * 0.5f, + (item.Value.End.y - item.Value.Start.y) * 0.5f, + (item.Value.End.z - item.Value.Start.z) * 0.5f); - ResultData[index] = new DrawData(Matrix4x4.TRS(position, Quaternion.identity, halfDiff), item.Color); + (ResultData + index)->Matrix = Matrix4x4.TRS(item.Value.Start + halfDiff, Quaternion.identity, halfDiff); + (ResultData + index)->Color = item.Color; } } private readonly IStaticMesh _mesh = default(WireLineMesh); private readonly IStaticMaterial _material; private readonly MaterialPropertyBlock _materialPropertyBlock; - private readonly uint[] _args = new uint[5] { 0, 0, 0, 0, 0 }; - private readonly GraphicsBuffer _argsBuffer; private GraphicsBuffer _graphicsBuffer; private int _buffersLength = 0; - private PinnedArray _drawDatas; private PinnedArray> _gizmos; @@ -491,34 +486,27 @@ namespace DCFApixels _materialPropertyBlock = new MaterialPropertyBlock(); _drawDatas = PinnedArray.Pin(DummyArray.Get()); - - _argsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 1, _args.Length * sizeof(uint)); } public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual bool IsStaticRender => true; public void Prepare(GizmosList rawList) { var list = rawList.As(); - _prepareCount = list.Count; var items = list.Items; var count = list.Count; + _prepareCount = count; if (_buffersLength < count) { - if (_drawDatas.Array != null) - { - _drawDatas.Dispose(); - } - _drawDatas = PinnedArray.Pin(new DrawData[DebugXUtility.NextPow2(count)]); - AllocateGraphicsBuffer(DebugXUtility.NextPow2(count)); + int capacity = DebugXUtility.NextPow2(count); + _drawDatas.Dispose(); + _drawDatas = PinnedArray.Pin(new DrawData[capacity]); + AllocateGraphicsBuffer(capacity); _buffersLength = count; } if (ReferenceEquals(_gizmos.Array, items) == false) { - if (_gizmos.Array != null) - { - _gizmos.Dispose(); - } + _gizmos.Dispose(); _gizmos = PinnedArray>.Pin(items); } @@ -536,25 +524,14 @@ namespace DCFApixels { Mesh mesh = _mesh.GetMesh(); _materialPropertyBlock.Clear(); + _jobHandle.Complete(); if (IsSupportsComputeShaders) { Material material = _material.GetMaterial_SupportCumputeShaders(); - //_materialPropertyBlock.SetVectorArray(ColorPropertyID, _colors.Array); - //cb.DrawMeshInstanced(mesh, 0, material, -1, _matrices.Array, _prepareCount, _materialPropertyBlock); - - //uint[] args = new uint[5] { mesh.GetIndexCount(0), (uint)_prepareCount, 0, 0, 0 }; - //_argsBuffer.SetData(args); - _graphicsBuffer.SetData(_drawDatas.Array); _materialPropertyBlock.SetBuffer(_BufferPropertyID, _graphicsBuffer); - - //cb.DrawMeshInstancedIndirect(mesh, 0, material, -1, _argsBuffer, _prepareCount, _materialPropertyBlock); - // _prepareCount, _materialPropertyBlock - //cb.DrawMeshInstancedIndirect(mesh, 0, material, new Bounds(Vector3.zero, new Vector3(100.0f, 100.0f, 100.0f)), _argsBuffer); - - cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock); } else @@ -567,13 +544,10 @@ namespace DCFApixels } } } - - private void AllocateGraphicsBuffer(int capacity) { _graphicsBuffer?.Dispose(); _graphicsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, Marshal.SizeOf()); - } } #endregion