From 60169325e91105a74f624918e56cd21d346c8fdb Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Wed, 2 Oct 2024 17:38:40 +1000 Subject: [PATCH 1/2] Fix RenderInRenderTarget See the linked issue for what happens. --- Robust.Client/Graphics/Clyde/Clyde.HLR.cs | 13 +++++++++++++ Robust.Client/Graphics/Clyde/Clyde.Rendering.cs | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Robust.Client/Graphics/Clyde/Clyde.HLR.cs b/Robust.Client/Graphics/Clyde/Clyde.HLR.cs index ea9271562a3..0af9afa08d7 100644 --- a/Robust.Client/Graphics/Clyde/Clyde.HLR.cs +++ b/Robust.Client/Graphics/Clyde/Clyde.HLR.cs @@ -423,6 +423,11 @@ private void RenderInRenderTarget(RenderTargetBase rt, Action a, Color? clearCol var oldTransform = _currentMatrixModel; var oldScissor = _currentScissorState; + var oldMatrixProj = _currentMatrixProj; + var oldMatrixView = _currentMatrixView; + var oldBoundTarget = _currentBoundRenderTarget; + var oldRenderTarget = _currentRenderTarget; + var oldShader = _queuedShaderInstance; // Have to flush the render queue so that all commands finish rendering to the previous framebuffer. FlushRenderQueue(); @@ -452,6 +457,14 @@ private void RenderInRenderTarget(RenderTargetBase rt, Action a, Color? clearCol SetScissorFull(oldScissor); _currentMatrixModel = oldTransform; + + DebugTools.Assert(_currentMatrixModel.Equals(oldTransform)); + DebugTools.Assert(_currentScissorState.Equals(oldScissor)); + DebugTools.Assert(_currentMatrixProj.Equals(oldMatrixProj)); + DebugTools.Assert(oldMatrixView.Equals(_currentMatrixView)); + DebugTools.Assert(oldRenderTarget.Equals(_currentRenderTarget)); + DebugTools.Assert(oldBoundTarget.Equals(_currentBoundRenderTarget)); + DebugTools.Assert(oldShader.Equals(_queuedShaderInstance)); } private void RenderViewport(Viewport viewport) diff --git a/Robust.Client/Graphics/Clyde/Clyde.Rendering.cs b/Robust.Client/Graphics/Clyde/Clyde.Rendering.cs index af19a2c1a2e..160c9aea270 100644 --- a/Robust.Client/Graphics/Clyde/Clyde.Rendering.cs +++ b/Robust.Client/Graphics/Clyde/Clyde.Rendering.cs @@ -859,13 +859,13 @@ private void BreakBatch() private FullStoredRendererState PushRenderStateFull() { - return new FullStoredRendererState(_currentMatrixProj, _currentMatrixView, _currentRenderTarget); + return new FullStoredRendererState(_currentMatrixProj, _currentMatrixView, _currentBoundRenderTarget); } private void PopRenderStateFull(in FullStoredRendererState state) { SetProjViewFull(state.ProjMatrix, state.ViewMatrix); - BindRenderTargetFull(state.RenderTarget); + BindRenderTargetImmediate(state.RenderTarget); var (width, height) = state.RenderTarget.Size; GL.Viewport(0, 0, width, height); From a6a6e17a2925285f7bb304af8280379bbdc36a32 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Thu, 3 Oct 2024 13:51:24 +1000 Subject: [PATCH 2/2] Also this one --- Robust.Client/Graphics/Clyde/Clyde.HLR.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Robust.Client/Graphics/Clyde/Clyde.HLR.cs b/Robust.Client/Graphics/Clyde/Clyde.HLR.cs index 0af9afa08d7..fcb88d60af3 100644 --- a/Robust.Client/Graphics/Clyde/Clyde.HLR.cs +++ b/Robust.Client/Graphics/Clyde/Clyde.HLR.cs @@ -452,6 +452,7 @@ private void RenderInRenderTarget(RenderTargetBase rt, Action a, Color? clearCol FenceRenderTarget(rt); + _currentRenderTarget = oldRenderTarget; PopRenderStateFull(state); _updateUniformConstants(_currentRenderTarget.Size);