Skip to content

Commit 701a8d2

Browse files
[Rendering] Fixes to render target handling;
[Rendering] Fixed accidentally removed scissor code from SDL GPU Render Command;
1 parent 5330f46 commit 701a8d2

7 files changed

Lines changed: 75 additions & 52 deletions

File tree

Engine/Staple.Core/Rendering/Animation/SkinnedMeshRenderSystem.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,7 @@ public void Submit()
253253
var lastLighting = MaterialLighting.Unlit;
254254
var lastTopology = MeshTopology.Triangles;
255255

256-
var renderState = new RenderState()
257-
{
258-
enableDepth = true,
259-
depthWrite = true,
260-
};
256+
var renderState = RenderState.Default;
261257

262258
var l = renderers.Length;
263259

Engine/Staple.Core/Rendering/Graphics.cs

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,16 @@ public static void RenderGeometry(VertexBuffer vertex, IndexBuffer index,
4040
throw new Exception("Invalid arguments passed");
4141
}
4242

43-
var renderState = new RenderState()
44-
{
45-
cull = material.CullingMode,
46-
primitiveType = topology,
47-
depthWrite = true,
48-
enableDepth = true,
49-
indexBuffer = index,
50-
vertexBuffer = vertex,
51-
startVertex = startVertex,
52-
startIndex = startIndex,
53-
indexCount = indexCount,
54-
world = transform,
55-
};
43+
var renderState = RenderState.Default;
44+
45+
renderState.cull = material.CullingMode;
46+
renderState.primitiveType = topology;
47+
renderState.indexBuffer = index;
48+
renderState.vertexBuffer = vertex;
49+
renderState.startVertex = startVertex;
50+
renderState.startIndex = startIndex;
51+
renderState.indexCount = indexCount;
52+
renderState.world = transform;
5653

5754
if(materialSetupCallback != null)
5855
{
@@ -91,11 +88,10 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
9188
throw new Exception("Invalid arguments passed");
9289
}
9390

94-
var renderState = new RenderState()
95-
{
96-
primitiveType = topology,
97-
world = transform,
98-
};
91+
var renderState = RenderState.Default;
92+
93+
renderState.primitiveType = topology;
94+
renderState.world = transform;
9995

10096
if (materialSetupCallback != null)
10197
{
@@ -134,11 +130,10 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
134130
throw new Exception("Invalid arguments passed");
135131
}
136132

137-
var renderState = new RenderState()
138-
{
139-
primitiveType = topology,
140-
world = transform,
141-
};
133+
var renderState = RenderState.Default;
134+
135+
renderState.primitiveType = topology;
136+
renderState.world = transform;
142137

143138
if (materialSetupCallback != null)
144139
{

Engine/Staple.Core/Rendering/Mesh/MeshCombineSystem.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -332,17 +332,14 @@ void SetupMaterial()
332332
LightSystem.Instance.ApplyMaterialLighting(material, lighting);
333333
}
334334

335-
var renderState = new RenderState()
336-
{
337-
cull = material.CullingMode,
338-
primitiveType = mesh.MeshTopology,
339-
depthWrite = true,
340-
enableDepth = true,
341-
indexBuffer = mesh.indexBuffer,
342-
vertexBuffer = mesh.vertexBuffer,
343-
indexCount = mesh.IndexCount,
344-
world = item.transform.Matrix,
345-
};
335+
var renderState = RenderState.Default;
336+
337+
renderState.cull = material.CullingMode;
338+
renderState.primitiveType = mesh.MeshTopology;
339+
renderState.indexBuffer = mesh.indexBuffer;
340+
renderState.vertexBuffer = mesh.vertexBuffer;
341+
renderState.indexCount = mesh.IndexCount;
342+
renderState.world = item.transform.Matrix;
346343

347344
if (needsChange)
348345
{

Engine/Staple.Core/Rendering/Mesh/MeshRenderSystem.cs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,9 @@ public static void RenderMesh(Mesh mesh, Vector3 position, Quaternion rotation,
9393

9494
var matrix = Matrix4x4.TRS(position, scale, rotation);
9595

96-
var renderState = new RenderState()
97-
{
98-
enableDepth = true,
99-
depthWrite = true,
100-
world = matrix,
101-
};
96+
var renderState = RenderState.Default;
97+
98+
renderState.world = matrix;
10299

103100
mesh.SetActive(ref renderState);
104101

@@ -308,11 +305,7 @@ void Add(Material material, int submeshIndex)
308305

309306
public void Submit()
310307
{
311-
var renderState = new RenderState()
312-
{
313-
depthWrite = true,
314-
enableDepth = true,
315-
};
308+
var renderState = RenderState.Default;
316309

317310
if(instanceBuffer?.Disposed ?? true)
318311
{

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,22 @@ public void Update()
123123
}
124124
}
125125

126+
if (state.scissor != default)
127+
{
128+
scissor.X = state.scissor.left;
129+
scissor.Y = state.scissor.top;
130+
scissor.W = state.scissor.Width;
131+
scissor.H = state.scissor.Height;
132+
}
133+
else
134+
{
135+
scissor.X = scissor.Y = 0;
136+
scissor.W = backend.renderSize.X;
137+
scissor.H = backend.renderSize.Y;
138+
}
139+
140+
SDL.SetGPUScissor(renderPass, in scissor);
141+
126142
if (vertexSamplers.IsEmpty == false)
127143
{
128144
unsafe

Engine/Staple.Core/Rendering/RenderSystem/Backend/RenderState.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,21 @@ internal struct RenderState
3333
public int instanceOffset;
3434
public int instanceCount;
3535

36+
public static RenderState Default
37+
{
38+
get
39+
{
40+
return new()
41+
{
42+
renderTarget = RenderTarget.Current,
43+
vertexStorageBuffers = [],
44+
fragmentStorageBuffers = [],
45+
enableDepth = true,
46+
depthWrite = true,
47+
};
48+
}
49+
}
50+
3651
public readonly RenderState Clone()
3752
{
3853
var vertexTextures = this.vertexTextures != null ? new Texture[this.vertexTextures.Length] : null;

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,15 @@ public T Get<T>() where T: IRenderSystem
139139
public static void Render(RenderTarget target, CameraClearMode clearMode, Color clearColor, Vector4 viewport,
140140
Matrix4x4 cameraTransform, Matrix4x4 projection, Action callback)
141141
{
142+
var previous = RenderTarget.Current;
143+
144+
RenderTarget.Current = target;
145+
142146
PrepareRender(target, clearMode, clearColor, viewport, cameraTransform, projection);
143147

144148
callback?.Invoke();
149+
150+
RenderTarget.Current = previous;
145151
}
146152

147153
/// <summary>
@@ -320,6 +326,11 @@ void Handle(Entity e, Transform t)
320326

321327
foreach (var pair in systemQueues)
322328
{
329+
if(pair.Value.Count == 0)
330+
{
331+
continue;
332+
}
333+
323334
pair.Key.system.Process(CollectionsMarshal.AsSpan(pair.Value), camera, cameraTransform);
324335

325336
pair.Key.system.Submit();
@@ -338,6 +349,8 @@ public void RenderAccumulator(Entity cameraEntity, Camera camera, Transform came
338349
{
339350
CurrentCamera = (camera, cameraTransform);
340351

352+
PrepareCamera(cameraEntity, camera, cameraTransform);
353+
341354
var systems = new List<RenderSystemInfo>();
342355

343356
lock (lockObject)
@@ -400,8 +413,6 @@ public void RenderAccumulator(Entity cameraEntity, Camera camera, Transform came
400413
}
401414
}
402415

403-
PrepareCamera(cameraEntity, camera, cameraTransform);
404-
405416
foreach (var systemInfo in systems)
406417
{
407418
systemInfo.system.Submit();

0 commit comments

Comments
 (0)