5 using System.Runtime.InteropServices;
6 using System.Threading.Tasks;
8 using SiliconStudio.Paradox;
9 using SiliconStudio.Paradox.Effects;
10 using SiliconStudio.Paradox.Engine;
11 using SiliconStudio.Paradox.Games;
12 using SiliconStudio.Core.Extensions;
13 using SiliconStudio.Paradox.Graphics;
14 using SiliconStudio.Paradox.Graphics.Data;
15 using SiliconStudio.Paradox.Games.Mathematics;
16 using Paradox.Framework.Shaders;
25 [StructLayout(LayoutKind.Explicit, Size = 48)]
53 public static async
Task Run(EngineContext engineContext)
56 if (!engineContext.DataContext.RenderPassPlugins.TryGetValueCast(
"ParticlePlugin", out particlePlugin))
59 var
count = particlePlugin.CapacityCount;
61 var particlesBuffer =
new ParticleData[
count];
62 var random =
new Random();
63 for (
int i = 0; i < particlesBuffer.Length; i++)
65 particlesBuffer[i] =
new ParticleData
67 Position =
new Vector3(1000.0f - (
float)random.NextDouble() * 6000, 1500.0f - (float)random.NextDouble() * 3000.0f, 0),
68 Velocity =
new Vector3(0, 0, 2.0f + 10.0f * (
float)random.NextDouble()),
69 Time = 5000.0f * (float)random.NextDouble(),
70 Size = 1.0f + (float)random.NextDouble() * 10.0f,
71 Factors =
new Vector3(1.0f + ((i & 255) == 0 ? (25.0f + 50.0f * (
float)random.NextDouble()) : -(
float)random.NextDouble() * ((i & 3) == 0 ? 2.0f : 1.0f)), 0, 0),
74 particlesBuffer[i].Position.Z = particlesBuffer[i].Velocity.Z * particlesBuffer[i].Time / 100.0f;
79 Type = ParticleEmitterType.GpuStatic,
81 Shader =
new ShaderClassSource(
"ParticleUpdaterTest1"),
83 particleUpdater.ParticleData = particlesBuffer;
84 particleUpdater.ParticleElementSize = Utilities.SizeOf<ParticleData>();
87 particlePlugin.Updaters.Add(particleUpdater);
SiliconStudio.Paradox.Games.Mathematics.Vector2 Vector2
SiliconStudio.Paradox.Games.Mathematics.Vector3 Vector3
SiliconStudio.Core.Mathematics.Vector3 Vector3
static async Task Run(EngineContext engineContext)