Skip to content

Commit 623de8d

Browse files
[Player] Removed focus flag reset as it was causing performance drops;
[Rendering] Move SDLGPU Command Buffer handling to EndFrame; [Rendering] Fixes to RenderWindow logic; [UI] Fixed text rendering using the wrong amount of vertices;
1 parent f93ec35 commit 623de8d

File tree

8 files changed

+63
-96
lines changed

8 files changed

+63
-96
lines changed

Engine/Staple.Core/Player/AppPlayer.cs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,6 @@ public AppPlayer(string[] args, bool shouldConsoleLog, bool skipFlow)
5454
}
5555
}
5656

57-
public void ResetRendering(bool hasFocus)
58-
{
59-
var flags = RenderSystem.RenderFlags(playerSettings.videoFlags);
60-
61-
if(hasFocus == false && AppSettings.Current.runInBackground == false)
62-
{
63-
flags |= RenderModeFlags.Suspend;
64-
}
65-
66-
AppEventQueue.instance.Add(AppEvent.ResetFlags(flags));
67-
}
68-
6957
public void Create()
7058
{
7159
playerSettings = PlayerSettings.Load(AppSettings.Current);
@@ -119,13 +107,6 @@ public void Create()
119107

120108
Time.fixedDeltaTime = 1 / (float)AppSettings.Current.fixedTimeFrameRate;
121109

122-
bool hasFocus = renderWindow.window.IsFocused;
123-
124-
if (AppSettings.Current.runInBackground == false && hasFocus == false)
125-
{
126-
ResetRendering(hasFocus);
127-
}
128-
129110
if(skipFlow == false)
130111
{
131112
Scene.sceneList = ResourceManager.instance.LoadSceneList();
@@ -284,8 +265,6 @@ void HandleTypes<T>(string caption, Func<Type, bool> check, Action<T> callback)
284265
playerSettings.monitorIndex = renderWindow.MonitorIndex;
285266
playerSettings.maximized = renderWindow.Maximized;
286267

287-
ResetRendering(focus);
288-
289268
PlayerSettings.Save(playerSettings);
290269
};
291270

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

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,11 @@ public void BeginFrame()
751751
return;
752752
}
753753

754+
frameAllocator.Clear();
755+
}
756+
757+
public void EndFrame()
758+
{
754759
commandBuffer = SDL.AcquireGPUCommandBuffer(device);
755760

756761
if (commandBuffer == nint.Zero)
@@ -773,11 +778,6 @@ public void BeginFrame()
773778

774779
UpdateDepthTextureIfNeeded(false);
775780

776-
frameAllocator.Clear();
777-
}
778-
779-
public void EndFrame()
780-
{
781781
foreach (var pair in transientBuffers)
782782
{
783783
pair.Value.CreateBuffers();
@@ -809,51 +809,48 @@ public void EndFrame()
809809
shader.ClearUniformHashes();
810810
}
811811

812-
if (commandBuffer != nint.Zero)
813-
{
814-
var fences = new nint[1];
812+
var fences = new nint[1];
815813

816-
fences[0] = SDL.SubmitGPUCommandBufferAndAcquireFence(commandBuffer);
814+
fences[0] = SDL.SubmitGPUCommandBufferAndAcquireFence(commandBuffer);
817815

818-
if (SDL.WaitForGPUFences(device, true, fences, (uint)fences.Length) == false)
819-
{
820-
Log.Error($"[SDL GPU] Failed to wait for GPU Fences: {SDL.GetError()}");
821-
}
816+
if (SDL.WaitForGPUFences(device, true, fences, (uint)fences.Length) == false)
817+
{
818+
Log.Error($"[SDL GPU] Failed to wait for GPU Fences: {SDL.GetError()}");
819+
}
822820

823-
SDL.ReleaseGPUFence(device, fences[0]);
821+
SDL.ReleaseGPUFence(device, fences[0]);
824822

825-
for(var i = readTextureQueue.Count - 1; i >= 0; i--)
826-
{
827-
var item = readTextureQueue[i];
823+
for(var i = readTextureQueue.Count - 1; i >= 0; i--)
824+
{
825+
var item = readTextureQueue[i];
828826

829-
readTextureQueue.RemoveAt(i);
827+
readTextureQueue.RemoveAt(i);
830828

831-
if (item.Item1 == null ||
832-
item.Item1.Disposed ||
833-
TryGetTexture(item.Item1.handle, out var resource) == false ||
834-
resource.used == false ||
835-
resource.transferBuffer == nint.Zero)
836-
{
837-
continue;
838-
}
829+
if (item.Item1 == null ||
830+
item.Item1.Disposed ||
831+
TryGetTexture(item.Item1.handle, out var resource) == false ||
832+
resource.used == false ||
833+
resource.transferBuffer == nint.Zero)
834+
{
835+
continue;
836+
}
839837

840-
unsafe
841-
{
842-
var buffer = new byte[resource.length];
838+
unsafe
839+
{
840+
var buffer = new byte[resource.length];
843841

844-
var map = SDL.MapGPUTransferBuffer(device, resource.transferBuffer, false);
842+
var map = SDL.MapGPUTransferBuffer(device, resource.transferBuffer, false);
845843

846-
var from = new Span<byte>((void *)map, buffer.Length);
847-
var to = new Span<byte>(buffer);
844+
var from = new Span<byte>((void *)map, buffer.Length);
845+
var to = new Span<byte>(buffer);
848846

849-
from.CopyTo(to);
847+
from.CopyTo(to);
850848

851-
SDL.UnmapGPUTransferBuffer(device, resource.transferBuffer);
849+
SDL.UnmapGPUTransferBuffer(device, resource.transferBuffer);
852850

853-
resource.transferBuffer = nint.Zero;
851+
resource.transferBuffer = nint.Zero;
854852

855-
item.Item2?.Invoke(buffer);
856-
}
853+
item.Item2?.Invoke(buffer);
857854
}
858855

859856
commandBuffer = nint.Zero;
@@ -912,6 +909,11 @@ internal void ResumeRenderPass()
912909
{
913910
FinishPasses();
914911

912+
if(commandBuffer == nint.Zero)
913+
{
914+
return;
915+
}
916+
915917
var texture = nint.Zero;
916918
var width = 0;
917919
var height = 0;

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

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,8 @@ public override void Update(nint data, int lengthInBytes)
3434
if (Disposed ||
3535
data == nint.Zero ||
3636
lengthInBytes == 0 ||
37-
lengthInBytes % layout.Stride != 0)
38-
{
39-
return;
40-
}
41-
42-
if (IsValid == false || backend.commandBuffer == nint.Zero)
37+
lengthInBytes % layout.Stride != 0 ||
38+
IsValid == false)
4339
{
4440
return;
4541
}
@@ -58,18 +54,14 @@ public override void Update<T>(Span<T> data)
5854

5955
if (Disposed ||
6056
data.Length == 0 ||
61-
size % layout.Stride != 0)
57+
size % layout.Stride != 0 ||
58+
IsValid == false)
6259
{
6360
return;
6461
}
6562

6663
var byteSize = data.Length * size;
6764

68-
if (IsValid == false || backend.commandBuffer == nint.Zero)
69-
{
70-
return;
71-
}
72-
7365
unsafe
7466
{
7567
fixed(void *ptr = data)
@@ -85,12 +77,8 @@ public override void Update(Span<byte> data)
8577
{
8678
if (Disposed ||
8779
data.Length == 0 ||
88-
data.Length % layout.Stride != 0)
89-
{
90-
return;
91-
}
92-
93-
if (IsValid == false || backend.commandBuffer == nint.Zero)
80+
data.Length % layout.Stride != 0 ||
81+
IsValid == false)
9482
{
9583
return;
9684
}

Engine/Staple.Core/Rendering/Text/TextRenderer.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -445,15 +445,9 @@ public Rect MeasureTextLines(IEnumerable<string> lines, TextParameters parameter
445445

446446
public void DrawText(string text, Matrix4x4 transform, TextParameters parameters, Material material, float scale, bool flipY)
447447
{
448-
if(text == null)
449-
{
450-
throw new ArgumentNullException("text");
451-
}
448+
ArgumentNullException.ThrowIfNull(text);
452449

453-
if(material == null)
454-
{
455-
throw new ArgumentNullException("material");
456-
}
450+
ArgumentNullException.ThrowIfNull(material);
457451

458452
var font = ResourceManager.instance.LoadFont(parameters.font)?.font ?? DefaultFont;
459453

Engine/Staple.Core/Rendering/Windowing/RenderModeFlags.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ internal enum RenderModeFlags
77
TripleBuffering = (1 << 2),
88
sRGB = (1 << 3),
99
HDR10 = (1 << 6),
10-
Suspend = (1 << 7),
1110
}

Engine/Staple.Core/Rendering/Windowing/RenderWindow.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,21 @@ private void SingleThreadLoop()
131131

132132
CheckEvents();
133133

134-
RenderSystem.Backend.BeginFrame();
135-
136134
lock (renderLock)
137135
{
138-
shouldRender = window.Unavailable == false && (AppSettings.Current.runInBackground == true || window.IsFocused == true);
136+
shouldRender = window.Unavailable == false && (AppSettings.Current.runInBackground || window.IsFocused);
139137
}
140138

141139
if (window.Unavailable)
142140
{
143-
RenderSystem.Backend.EndFrame();
144-
145141
continue;
146142
}
147143

144+
if(Paused == false)
145+
{
146+
RenderSystem.Backend.BeginFrame();
147+
}
148+
148149
var size = window.Size;
149150

150151
if ((size.X != width || size.Y!= height) && window.ShouldClose == false)
@@ -317,7 +318,7 @@ private void MultiThreadedLoop()
317318

318319
lock (renderLock)
319320
{
320-
shouldRender = window.Unavailable == false && (AppSettings.Current.runInBackground == true || window.IsFocused == true);
321+
shouldRender = window.Unavailable == false && (AppSettings.Current.runInBackground || window.IsFocused);
321322
}
322323

323324
if (window.Unavailable)
@@ -662,8 +663,6 @@ internal void RenderFrame(ref DateTime lastTime)
662663
{
663664
lastTime = current;
664665

665-
RenderSystem.Backend.EndFrame();
666-
667666
return;
668667
}
669668

@@ -729,7 +728,10 @@ private void RenderThread()
729728
continue;
730729
}
731730

732-
RenderSystem.Backend.BeginFrame();
731+
if(Paused == false)
732+
{
733+
RenderSystem.Backend.BeginFrame();
734+
}
733735

734736
RenderFrame(ref last);
735737
}

Engine/Staple.Core/UI/UIPanel+API.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,10 @@ protected void RenderText(string str, TextParameters parameters)
191191

192192
material.MainTexture = texture;
193193

194-
Graphics.RenderSimple(textVertices, TextRenderer.VertexLayout.Value, textIndices, material, Vector3.Zero,
194+
var vertexSpan = new Span<TextRenderer.PosTexVertex>(textVertices, 0, vertexCount);
195+
var indexSpan = new Span<ushort>(textIndices, 0, indexCount);
196+
197+
Graphics.RenderSimple(vertexSpan, TextRenderer.VertexLayout.Value, indexSpan, material, Vector3.Zero,
195198
Matrix4x4.Identity, MeshTopology.Triangles, MaterialLighting.Unlit);
196199
}
197200
}

TestProject/Assets/UI/HUD.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
},
1616
"Stats": {
1717
"control": "UIRenderStats",
18-
"wide": "400",
18+
"wide": "600",
1919
"tall": "100",
2020
"y": "50",
2121
"properties": {

0 commit comments

Comments
 (0)