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:
@@ -1,14 +1,14 @@
|
||||
[ParticleEmitterSettings]
|
||||
|
||||
MaxParticles = 8096
|
||||
MaxParticles = 1024
|
||||
EmitRadius = 128
|
||||
Explosiveness = 1.0
|
||||
LifeTime = 1.0
|
||||
Direction = [0.0, 1.0]
|
||||
LifeTime = 2.0
|
||||
Direction = [0.0, -1.0]
|
||||
LinearVelocity = 200
|
||||
Gravity = [0.0, 0.0]
|
||||
LinearVelocityRandom = 0.5
|
||||
ScaleBegin = 1.0
|
||||
ScaleEnd = 0.0
|
||||
ColorBegin = [255, 0, 255, 255]
|
||||
ColorEnd = [0, 0, 0, 0]
|
||||
ScaleEnd = 5.0
|
||||
ColorBegin = [255, 0, 0, 0]
|
||||
ColorEnd = [0, 255, 0, 255]
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user