Update DebugX.base.cs

This commit is contained in:
DCFApixels 2025-03-04 13:36:25 +08:00
parent cc14a4f3f4
commit 8bcca6d839

View File

@ -444,15 +444,10 @@ namespace DCFApixels
public readonly Vector3 Start; public readonly Vector3 Start;
public readonly Vector3 End; public readonly Vector3 End;
} }
private readonly struct DrawData private struct DrawData
{ {
public readonly Matrix4x4 Matrix; public Matrix4x4 Matrix;
public readonly Color Color; public Color Color;
public DrawData(Matrix4x4 matrix, Color color)
{
Matrix = matrix;
Color = color;
}
} }
private struct PrepareJob : IJobParallelFor private struct PrepareJob : IJobParallelFor
{ {
@ -464,21 +459,21 @@ namespace DCFApixels
{ {
ref readonly var item = ref Items[index]; ref readonly var item = ref Items[index];
Vector3 halfDiff = (item.Value.End - item.Value.Start) * 0.5f; Vector3 halfDiff = new Vector3(
Vector3 position = item.Value.Start + halfDiff; (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 IStaticMesh _mesh = default(WireLineMesh);
private readonly IStaticMaterial _material; private readonly IStaticMaterial _material;
private readonly MaterialPropertyBlock _materialPropertyBlock; private readonly MaterialPropertyBlock _materialPropertyBlock;
private readonly uint[] _args = new uint[5] { 0, 0, 0, 0, 0 };
private readonly GraphicsBuffer _argsBuffer;
private GraphicsBuffer _graphicsBuffer; private GraphicsBuffer _graphicsBuffer;
private int _buffersLength = 0; private int _buffersLength = 0;
private PinnedArray<DrawData> _drawDatas; private PinnedArray<DrawData> _drawDatas;
private PinnedArray<Gizmo<GizmoData>> _gizmos; private PinnedArray<Gizmo<GizmoData>> _gizmos;
@ -491,34 +486,27 @@ namespace DCFApixels
_materialPropertyBlock = new MaterialPropertyBlock(); _materialPropertyBlock = new MaterialPropertyBlock();
_drawDatas = PinnedArray<DrawData>.Pin(DummyArray<DrawData>.Get()); _drawDatas = PinnedArray<DrawData>.Pin(DummyArray<DrawData>.Get());
_argsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 1, _args.Length * sizeof(uint));
} }
public virtual int ExecuteOrder => _material.GetExecuteOrder(); public virtual int ExecuteOrder => _material.GetExecuteOrder();
public virtual bool IsStaticRender => true; public virtual bool IsStaticRender => true;
public void Prepare(GizmosList rawList) public void Prepare(GizmosList rawList)
{ {
var list = rawList.As<GizmoData>(); var list = rawList.As<GizmoData>();
_prepareCount = list.Count;
var items = list.Items; var items = list.Items;
var count = list.Count; var count = list.Count;
_prepareCount = count;
if (_buffersLength < count) if (_buffersLength < count)
{ {
if (_drawDatas.Array != null) int capacity = DebugXUtility.NextPow2(count);
{ _drawDatas.Dispose();
_drawDatas.Dispose(); _drawDatas = PinnedArray<DrawData>.Pin(new DrawData[capacity]);
} AllocateGraphicsBuffer(capacity);
_drawDatas = PinnedArray<DrawData>.Pin(new DrawData[DebugXUtility.NextPow2(count)]);
AllocateGraphicsBuffer(DebugXUtility.NextPow2(count));
_buffersLength = count; _buffersLength = count;
} }
if (ReferenceEquals(_gizmos.Array, items) == false) if (ReferenceEquals(_gizmos.Array, items) == false)
{ {
if (_gizmos.Array != null) _gizmos.Dispose();
{
_gizmos.Dispose();
}
_gizmos = PinnedArray<Gizmo<GizmoData>>.Pin(items); _gizmos = PinnedArray<Gizmo<GizmoData>>.Pin(items);
} }
@ -536,25 +524,14 @@ namespace DCFApixels
{ {
Mesh mesh = _mesh.GetMesh(); Mesh mesh = _mesh.GetMesh();
_materialPropertyBlock.Clear(); _materialPropertyBlock.Clear();
_jobHandle.Complete(); _jobHandle.Complete();
if (IsSupportsComputeShaders) if (IsSupportsComputeShaders)
{ {
Material material = _material.GetMaterial_SupportCumputeShaders(); 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); _graphicsBuffer.SetData(_drawDatas.Array);
_materialPropertyBlock.SetBuffer(_BufferPropertyID, _graphicsBuffer); _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); cb.DrawMeshInstancedProcedural(mesh, 0, material, -1, _prepareCount, _materialPropertyBlock);
} }
else else
@ -567,13 +544,10 @@ namespace DCFApixels
} }
} }
} }
private void AllocateGraphicsBuffer(int capacity) private void AllocateGraphicsBuffer(int capacity)
{ {
_graphicsBuffer?.Dispose(); _graphicsBuffer?.Dispose();
_graphicsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, Marshal.SizeOf<DrawData>()); _graphicsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, Marshal.SizeOf<DrawData>());
} }
} }
#endregion #endregion