Skip to content

Commit

Permalink
Fix RenderInRenderTarget
Browse files Browse the repository at this point in the history
See the linked issue for what happens.
  • Loading branch information
metalgearsloth committed Oct 2, 2024
1 parent f40ccb7 commit 6016932
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
13 changes: 13 additions & 0 deletions Robust.Client/Graphics/Clyde/Clyde.HLR.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions Robust.Client/Graphics/Clyde/Clyde.Rendering.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 6016932

Please sign in to comment.