Skip to content

Commit dbbb36e

Browse files
[Rendering] Fix for Render Passes not updating render data in time;
[Rendering] Fixes to depth and stencil handling;
1 parent bb9301e commit dbbb36e

File tree

7 files changed

+33
-25
lines changed

7 files changed

+33
-25
lines changed

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPUBeginRenderPassCommand.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ public void Update(IRendererBackend rendererBackend)
9696
},
9797
store_op = SDL.SDL_GPUStoreOp.SDL_GPU_STOREOP_STORE,
9898
texture = depthTextureResource.texture,
99+
stencil_load_op = clearMode switch
100+
{
101+
CameraClearMode.None => SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_LOAD,
102+
_ => SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_CLEAR,
103+
},
104+
stencil_store_op = SDL.SDL_GPUStoreOp.SDL_GPU_STOREOP_STORE,
99105
};
100106

101107
backend.renderPass = SDL.SDL_BeginGPURenderPass(backend.commandBuffer, [colorTarget], 1, in depthTarget);

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderCommand.cs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using SDL3;
22
using System;
33
using System.Collections.Generic;
4-
using System.Runtime.InteropServices;
54

65
namespace Staple.Internal;
76

@@ -51,28 +50,18 @@ state.indexBuffer is not SDLGPUIndexBuffer index ||
5150
buffer = indexBuffer.buffer,
5251
};
5352

54-
var scissor = new SDL.SDL_Rect();
55-
5653
if (state.scissor != default)
5754
{
58-
scissor = new()
55+
var scissor = new SDL.SDL_Rect()
5956
{
6057
x = state.scissor.left,
6158
y = state.scissor.top,
6259
w = state.scissor.Width,
6360
h = state.scissor.Height,
6461
};
65-
}
66-
else
67-
{
68-
scissor = new()
69-
{
70-
w = backend.renderSize.X,
71-
h = backend.renderSize.Y,
72-
};
73-
}
7462

75-
SDL.SDL_SetGPUScissor(renderPass, in scissor);
63+
SDL.SDL_SetGPUScissor(renderPass, in scissor);
64+
}
7665

7766
SDL.SDL_BindGPUVertexBuffers(renderPass, 0, [vertexBinding], 1);
7867

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/SDLGPURendererBackend.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Numerics;
66
using System.Runtime.InteropServices;
77
using System.Text;
8-
using static System.Runtime.InteropServices.JavaScript.JSType;
98

109
namespace Staple.Internal;
1110

@@ -809,9 +808,19 @@ internal void ResumeRenderPass()
809808
var depthTarget = new SDL.SDL_GPUDepthStencilTargetInfo()
810809
{
811810
clear_depth = 1,
812-
load_op = SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_LOAD,
811+
load_op = viewData.clearMode switch
812+
{
813+
CameraClearMode.None => SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_LOAD,
814+
_ => SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_CLEAR,
815+
},
813816
store_op = SDL.SDL_GPUStoreOp.SDL_GPU_STOREOP_STORE,
814817
texture = depthTextureResource.texture,
818+
stencil_load_op = viewData.clearMode switch
819+
{
820+
CameraClearMode.None => SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_LOAD,
821+
_ => SDL.SDL_GPULoadOp.SDL_GPU_LOADOP_CLEAR,
822+
},
823+
stencil_store_op = SDL.SDL_GPUStoreOp.SDL_GPU_STOREOP_STORE,
815824
};
816825

817826
renderPass = SDL.SDL_BeginGPURenderPass(commandBuffer, [colorTarget], 1, in depthTarget);
@@ -837,6 +846,13 @@ internal void ResumeRenderPass()
837846
public void BeginRenderPass(RenderTarget target, CameraClearMode clear, Color clearColor, Vector4 viewport,
838847
in Matrix4x4 view, in Matrix4x4 projection)
839848
{
849+
viewData.renderTarget = target;
850+
viewData.clearMode = clear;
851+
viewData.clearColor = clearColor;
852+
viewData.viewport = viewport;
853+
viewData.renderData.view = view;
854+
viewData.renderData.projection = projection;
855+
840856
AddCommand(new SDLGPUBeginRenderPassCommand(target, clear, clearColor, viewport, view, projection));
841857
}
842858

@@ -1084,7 +1100,7 @@ instance.program is not SDLGPUShaderProgram shader ||
10841100
{
10851101
pitch = (uint)vertexLayout.Stride,
10861102
slot = 0,
1087-
input_rate = SDL.SDL_GPUVertexInputRate.SDL_GPU_VERTEXINPUTRATE_VERTEX
1103+
input_rate = SDL.SDL_GPUVertexInputRate.SDL_GPU_VERTEXINPUTRATE_VERTEX,
10881104
};
10891105

10901106
var sourceBlend = state.sourceBlend switch
@@ -1181,7 +1197,7 @@ instance.program is not SDLGPUShaderProgram shader ||
11811197
{
11821198
num_color_targets = 1,
11831199
color_target_descriptions = &colorTargetDescription,
1184-
has_depth_stencil_target = depthStencilFormat.HasValue,
1200+
has_depth_stencil_target = state.enableDepth && depthStencilFormat.HasValue,
11851201
depth_stencil_format = sdlDepthFormat,
11861202
}
11871203
};

Engine/Staple.Core/Rendering/RenderSystem/RenderSystem+Internal.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ private static void PrepareRender(RenderTarget target, CameraClearMode clearMode
496496
{
497497
Matrix4x4.Invert(cameraTransform, out var view);
498498

499-
Backend.BeginRenderPass(target, clearMode, clearColor, viewport, view, projection);
499+
Backend.BeginRenderPass(target, clearMode, clearColor, viewport, in view, in projection);
500500
}
501501
}
502502

Engine/Staple.Editor/ImGuiProxy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,8 +571,8 @@ private void Render(ImDrawDataPtr drawData)
571571
indexBuffer.Update(indices);
572572
}
573573

574-
RenderSystem.Instance.Render(null, CameraClearMode.None, StapleEditor.ClearColor, new(0, 0, 1, 1),
575-
Matrix4x4.Identity, ortho,
574+
RenderSystem.Instance.Render(null, Scene.current == null ? CameraClearMode.SolidColor : CameraClearMode.None, StapleEditor.ClearColor,
575+
new(0, 0, 1, 1), Matrix4x4.Identity, ortho,
576576
() =>
577577
{
578578
currentVertex = 0;

Engine/Staple.Editor/StapleEditor+Render.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public void RenderScene()
204204
}
205205
}
206206

207-
RenderSystem.Instance.Render(null, CameraClearMode.Depth, ClearColor, new(0, 0, 1, 1),
207+
RenderSystem.Instance.Render(null, CameraClearMode.SolidColor, ClearColor, new(0, 0, 1, 1),
208208
cameraTransform.Matrix, projection, () =>
209209
{
210210
wireframeMaterial?.SetVector4("cameraPosition", new Vector4(cameraTransform.Position, 1));

Engine/Staple.Editor/StapleEditor.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -850,9 +850,6 @@ private void NormalEditorLoop()
850850
return;
851851
}
852852

853-
RenderSystem.Instance.Render(null, CameraClearMode.SolidColor, ClearColor, new(0, 0, 1, 1), Matrix4x4.Identity,
854-
Matrix4x4.Identity, null);
855-
856853
io.DisplaySize = new Vector2(window.width, window.height);
857854
io.DisplayFramebufferScale = new Vector2(1, 1);
858855

0 commit comments

Comments
 (0)