Improve debug shapes drawing

#2833
This commit is contained in:
Wojtek Figat
2024-08-15 15:31:04 +02:00
parent 6065c3ec11
commit 7ded585c0b

View File

@@ -63,6 +63,7 @@ namespace FlaxEditor.Viewport
private UpdateDelegate _update; private UpdateDelegate _update;
private readonly ViewportDebugDrawData _debugDrawData = new ViewportDebugDrawData(32); private readonly ViewportDebugDrawData _debugDrawData = new ViewportDebugDrawData(32);
private readonly List<Actor> _debugDrawActors = new List<Actor>();
private PrefabSpritesRenderer _spritesRenderer; private PrefabSpritesRenderer _spritesRenderer;
private IntPtr _tempDebugDrawContext; private IntPtr _tempDebugDrawContext;
@@ -624,22 +625,25 @@ namespace FlaxEditor.Viewport
DebugDraw.DrawActors(new IntPtr(actors), _debugDrawData.ActorsCount, false); DebugDraw.DrawActors(new IntPtr(actors), _debugDrawData.ActorsCount, false);
} }
} }
// Debug draw all actors in prefab and collect actors // Debug draw all actors in prefab and collect actors
List<Actor> pActors = new List<Actor>(); var viewFlags = Task.ViewFlags;
var collectActors = (viewFlags & ViewFlags.PhysicsDebug) != 0 || (viewFlags & ViewFlags.LightsDebug) != 0;
_debugDrawActors.Clear();
foreach (var child in SceneGraphRoot.ChildNodes) foreach (var child in SceneGraphRoot.ChildNodes)
{ {
if (child is not ActorNode actorNode) if (child is not ActorNode actorNode)
continue; continue;
var actor = actorNode.Actor; var actor = actorNode.Actor;
Utils.GetActorsTree(pActors, actor); if (collectActors)
Utils.GetActorsTree(_debugDrawActors, actor);
DebugDraw.DrawActorsTree(actor); DebugDraw.DrawActorsTree(actor);
} }
// Draw physics debug // Draw physics debug
if ((Task.ViewFlags & ViewFlags.PhysicsDebug) != 0) if ((viewFlags & ViewFlags.PhysicsDebug) != 0)
{ {
foreach (var actor in pActors) foreach (var actor in _debugDrawActors)
{ {
if (actor is Collider c && c.IsActiveInHierarchy) if (actor is Collider c && c.IsActiveInHierarchy)
{ {
@@ -647,16 +651,18 @@ namespace FlaxEditor.Viewport
} }
} }
} }
// Draw lights debug // Draw lights debug
if ((Task.ViewFlags & ViewFlags.LightsDebug) != 0) if ((viewFlags & ViewFlags.LightsDebug) != 0)
{ {
foreach (var actor in pActors) foreach (var actor in _debugDrawActors)
{ {
if (actor is Light l && l.IsActiveInHierarchy) if (actor is Light l && l.IsActiveInHierarchy)
DebugDraw.DrawLightDebug(l, renderContext.View); DebugDraw.DrawLightDebug(l, renderContext.View);
} }
} }
_debugDrawActors.Clear();
} }
} }
} }