From 39994764d18ccddf20047824688841bb7fb27764 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 16 Jun 2026 11:57:44 +0200 Subject: [PATCH] Don't return matrix by value due to perf #4136 --- Source/Editor/Gizmo/GridGizmo.cs | 2 +- Source/Engine/Graphics/RenderView.cs | 5 +++-- Source/Engine/UI/UICanvas.cs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/Editor/Gizmo/GridGizmo.cs b/Source/Editor/Gizmo/GridGizmo.cs index 37cbd20ab..a50636932 100644 --- a/Source/Editor/Gizmo/GridGizmo.cs +++ b/Source/Editor/Gizmo/GridGizmo.cs @@ -113,7 +113,7 @@ namespace FlaxEditor.Gizmo if (cb != IntPtr.Zero) { var data = new Data(); - var projection = renderContext.View.GetOverlayProjection(); + renderContext.View.GetOverlayProjection(out var projection); Matrix.Multiply(ref renderContext.View.View, ref projection, out var viewProjection); Matrix.Transpose(ref viewProjection, out data.ViewProjectionMatrix); data.ViewPos = renderContext.View.WorldPosition; diff --git a/Source/Engine/Graphics/RenderView.cs b/Source/Engine/Graphics/RenderView.cs index 66e3546ff..eee4ca677 100644 --- a/Source/Engine/Graphics/RenderView.cs +++ b/Source/Engine/Graphics/RenderView.cs @@ -36,9 +36,10 @@ namespace FlaxEngine /// /// Gets projection matrix for overlay geometry rendered after temporal anti-aliasing has been resolved. /// - public Matrix GetOverlayProjection() + /// Projection matrix valid for rendering before or after (matches current TAA jitter stage). + public void GetOverlayProjection(out Matrix projection) { - return IsTaaResolved ? NonJitteredProjection : Projection; + projection = IsTaaResolved ? NonJitteredProjection : Projection; } /// diff --git a/Source/Engine/UI/UICanvas.cs b/Source/Engine/UI/UICanvas.cs index a4cf2fd78..d5a18a58b 100644 --- a/Source/Engine/UI/UICanvas.cs +++ b/Source/Engine/UI/UICanvas.cs @@ -90,7 +90,7 @@ namespace FlaxEngine Matrix.Multiply(ref worldMatrix, ref renderContext.View.View, out Matrix viewMatrix); Matrix projectionMatrix = renderContext.View.Projection; if (worldSpace && (Canvas.RenderLocation == PostProcessEffectLocation.Default || Canvas.RenderLocation == PostProcessEffectLocation.AfterAntiAliasingPass)) - projectionMatrix = renderContext.View.GetOverlayProjection(); // Fix TAA jittering when rendering UI in world after TAA resolve + renderContext.View.GetOverlayProjection(out projectionMatrix); // Fix TAA jittering when rendering UI in world after TAA resolve Matrix.Multiply(ref viewMatrix, ref projectionMatrix, out Matrix viewProjectionMatrix); // Pick a depth buffer