diff --git a/Source/Editor/Gizmo/GridGizmo.cs b/Source/Editor/Gizmo/GridGizmo.cs
index a36bb8da1..4b8dec2de 100644
--- a/Source/Editor/Gizmo/GridGizmo.cs
+++ b/Source/Editor/Gizmo/GridGizmo.cs
@@ -12,19 +12,98 @@ namespace FlaxEditor.Gizmo
[HideInEditor]
public class GridGizmo : GizmoBase
{
- private bool _enabled = true;
+ [HideInEditor]
+ private sealed class Renderer : PostProcessEffect
+ {
+ private IntPtr _debugDrawContext;
+
+ public Renderer()
+ {
+ Order = -100;
+ UseSingleTarget = true;
+ Location = PostProcessEffectLocation.BeforeForwardPass;
+ }
+
+ ~Renderer()
+ {
+ if (_debugDrawContext != IntPtr.Zero)
+ {
+ DebugDraw.FreeContext(_debugDrawContext);
+ _debugDrawContext = IntPtr.Zero;
+ }
+ }
+
+ public override void Render(GPUContext context, ref RenderContext renderContext, GPUTexture input, GPUTexture output)
+ {
+ Profiler.BeginEventGPU("Editor Grid");
+
+ if (_debugDrawContext == IntPtr.Zero)
+ _debugDrawContext = DebugDraw.AllocateContext();
+ DebugDraw.SetContext(_debugDrawContext);
+ DebugDraw.UpdateContext(_debugDrawContext, 1.0f / Mathf.Max(Engine.FramesPerSecond, 1));
+
+ var viewPos = (Vector3)renderContext.View.Position;
+ var plane = new Plane(Vector3.Zero, Vector3.UnitY);
+ var dst = CollisionsHelper.DistancePlanePoint(ref plane, ref viewPos);
+
+ float space, size;
+ if (dst <= 500.0f)
+ {
+ space = 50;
+ size = 8000;
+ }
+ else if (dst <= 2000.0f)
+ {
+ space = 100;
+ size = 8000;
+ }
+ else
+ {
+ space = 1000;
+ size = 100000;
+ }
+
+ Color color = Color.Gray * 0.7f;
+ int count = (int)(size / space);
+
+ Vector3 start = new Vector3(0, 0, size * -0.5f);
+ Vector3 end = new Vector3(0, 0, size * 0.5f);
+
+ for (int i = 0; i <= count; i++)
+ {
+ start.X = end.X = i * space + start.Z;
+ DebugDraw.DrawLine(start, end, color);
+ }
+
+ start = new Vector3(size * -0.5f, 0, 0);
+ end = new Vector3(size * 0.5f, 0, 0);
+
+ for (int i = 0; i <= count; i++)
+ {
+ start.Z = end.Z = i * space + start.X;
+ DebugDraw.DrawLine(start, end, color);
+ }
+
+ DebugDraw.Draw(ref renderContext, input.View(), null, true);
+ DebugDraw.SetContext(IntPtr.Zero);
+
+ Profiler.EndEventGPU();
+ }
+ }
+
+ private Renderer _renderer;
///
/// Gets or sets a value indicating whether this is enabled.
///
public bool Enabled
{
- get => _enabled;
+ get => _renderer.Enabled;
set
{
- if (_enabled != value)
+ if (_renderer.Enabled != value)
{
- _enabled = value;
+ _renderer.Enabled = value;
EnabledChanged?.Invoke(this);
}
}
@@ -42,55 +121,13 @@ namespace FlaxEditor.Gizmo
public GridGizmo(IGizmoOwner owner)
: base(owner)
{
+ _renderer = new Renderer();
+ owner.RenderTask.AddCustomPostFx(_renderer);
}
- ///
- public override void Draw(ref RenderContext renderContext)
+ ~GridGizmo()
{
- if (!Enabled)
- return;
-
- var viewPos = Owner.ViewPosition;
- var plane = new Plane(Vector3.Zero, Vector3.UnitY);
- var dst = CollisionsHelper.DistancePlanePoint(ref plane, ref viewPos);
-
- float space, size;
- if (dst <= 500.0f)
- {
- space = 50;
- size = 8000;
- }
- else if (dst <= 2000.0f)
- {
- space = 100;
- size = 8000;
- }
- else
- {
- space = 1000;
- size = 100000;
- }
-
- Color color = Color.Gray * 0.7f;
- int count = (int)(size / space);
-
- Vector3 start = new Vector3(0, 0, size * -0.5f);
- Vector3 end = new Vector3(0, 0, size * 0.5f);
-
- for (int i = 0; i <= count; i++)
- {
- start.X = end.X = i * space + start.Z;
- DebugDraw.DrawLine(start, end, color);
- }
-
- start = new Vector3(size * -0.5f, 0, 0);
- end = new Vector3(size * 0.5f, 0, 0);
-
- for (int i = 0; i <= count; i++)
- {
- start.Z = end.Z = i * space + start.X;
- DebugDraw.DrawLine(start, end, color);
- }
+ FlaxEngine.Object.Destroy(ref _renderer);
}
}
}
diff --git a/Source/Engine/Debug/DebugDraw.cpp b/Source/Engine/Debug/DebugDraw.cpp
index 891792d79..97422b9e2 100644
--- a/Source/Engine/Debug/DebugDraw.cpp
+++ b/Source/Engine/Debug/DebugDraw.cpp
@@ -466,7 +466,7 @@ inline void DrawText3D(const DebugText3D& t, const RenderContext& renderContext,
Matrix::Multiply(fw, vp, m);
Render2D::Begin(context, target, depthBuffer, viewport, m);
const StringView text(t.Text.Get(), t.Text.Count() - 1);
- Render2D::DrawText(DebugDrawFont->CreateFont(t.Size), text, t.Color, Vector2::Zero);
+ Render2D::DrawText(DebugDrawFont->CreateFont((float)t.Size), text, t.Color, Vector2::Zero);
Render2D::End();
}
@@ -777,7 +777,7 @@ void DebugDraw::Draw(RenderContext& renderContext, GPUTextureView* target, GPUTe
context->BindSR(0, renderContext.Buffers->DepthBuffer);
const bool enableDepthWrite = data.EnableDepthTest;
- context->SetRenderTarget(depthBuffer ? depthBuffer : *renderContext.Buffers->DepthBuffer, target);
+ context->SetRenderTarget(depthBuffer ? depthBuffer : (data.EnableDepthTest ? nullptr : renderContext.Buffers->DepthBuffer->View()), target);
// Lines
if (depthTestLines.VertexCount)
@@ -859,12 +859,12 @@ void DebugDraw::Draw(RenderContext& renderContext, GPUTextureView* target, GPUTe
for (auto& t : Context->DebugDrawDefault.DefaultText2D)
{
const StringView text(t.Text.Get(), t.Text.Count() - 1);
- Render2D::DrawText(DebugDrawFont->CreateFont(t.Size), text, t.Color, t.Position);
+ Render2D::DrawText(DebugDrawFont->CreateFont((float)t.Size), text, t.Color, t.Position);
}
for (auto& t : Context->DebugDrawDefault.OneFrameText2D)
{
const StringView text(t.Text.Get(), t.Text.Count() - 1);
- Render2D::DrawText(DebugDrawFont->CreateFont(t.Size), text, t.Color, t.Position);
+ Render2D::DrawText(DebugDrawFont->CreateFont((float)t.Size), text, t.Color, t.Position);
}
Render2D::End();
}