Use bytes for internal RGBA components of Color, iterate particles sequentially in ParticleEmitters, increase limit for CPU particles, reduce size of Particle struct.

This commit is contained in:
2024-10-16 00:28:39 +02:00
parent 692fdf8ef0
commit 7c7c61fd56
7 changed files with 71 additions and 78 deletions

View File

@@ -63,6 +63,8 @@ public class TestGame : Game
_particleSystem!.Update(Renderer.FrameTime);
_particleSimStopwatch.Stop();
_renderStopwatch = Stopwatch.StartNew();
Renderer.BeginFrame();
Renderer.ClearBackground(Color.Black);
foreach (var emitter in _particleSystem!.Emitters)
@@ -70,13 +72,17 @@ public class TestGame : Game
DrawEmitter(emitter);
}
Renderer.SetTransform(Renderer.WindowSize / 2, Vector2.Zero);
Renderer.DrawTexture(_icon, Color.White);
Renderer.ResetTransform();
Renderer.DrawText(_font, $"Particle Sim: {TimeSpan.FromTicks(_particleSimStopwatch.ElapsedTicks).TotalMilliseconds} ms", Color.White);
Renderer.SetTransform(new Vector2(0.0f, 16.0f), Vector2.Zero);
Renderer.DrawText(_font, $"Render: {TimeSpan.FromTicks(_lastRenderTime).TotalMilliseconds} ms", Color.White);
Renderer.EndFrame();
_lastRenderTime = _renderStopwatch.ElapsedTicks;
_renderStopwatch.Restart();
_particleSimStopwatch.Restart();
}
}
@@ -90,14 +96,16 @@ public class TestGame : Game
{
Renderer.BeginBlended(Voile.Rendering.BlendMode.BlendAlpha);
for (int i = 0; i < emitter.Settings.MaxParticles; i++)
var maxParticles = emitter.Settings.MaxParticles;
for (int i = maxParticles - 1; i > 0; i--)
{
var particle = emitter.GetParticle(i);
var color = new Color(particle.ColorArgb);
Renderer.SetTransform(emitter.OriginPosition + particle.Position, Vector2.Zero);
Renderer.DrawCircle(16f * particle.Scale, color);
Renderer.DrawRectangle(Vector2.One * 16.0f * particle.Scale, color);
}
Renderer.EndBlended();
@@ -105,7 +113,8 @@ public class TestGame : Game
[NotNull] private ParticleSystem _particleSystem;
private Stopwatch _particleSimStopwatch;
private Stopwatch _particleSimStopwatch, _renderStopwatch;
private long _lastRenderTime;
private int _emitterId;
private ResourceRef<ParticleEmitterSettingsResource> _emitterSettings;
private ResourceRef<Font> _font;