diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-03 08:18:13 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-03 08:18:13 +0100 |
| commit | f32afcbeffa0e8b947457c67c73566da4ebf33cc (patch) | |
| tree | 8860e7c319b687871e6b9692dc0053eb4b1d583d /assets/final/shaders/particle_spray_compute.wgsl | |
| parent | 7cbebea3a0cce82f3a756c26ab0e1323bbf1d169 (diff) | |
refactor: Shader Asset Integration (Task #24)
Extracted all hardcoded WGSL shaders into external assets. Updated AssetManager to handle shader snippets. Refactored Renderer3D, VisualDebug, and Effects to load shaders via the AssetManager, enabling better shader management and composition.
Diffstat (limited to 'assets/final/shaders/particle_spray_compute.wgsl')
| -rw-r--r-- | assets/final/shaders/particle_spray_compute.wgsl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/assets/final/shaders/particle_spray_compute.wgsl b/assets/final/shaders/particle_spray_compute.wgsl new file mode 100644 index 0000000..55fa8e9 --- /dev/null +++ b/assets/final/shaders/particle_spray_compute.wgsl @@ -0,0 +1,40 @@ +struct Particle { + pos: vec4<f32>, + vel: vec4<f32>, + rot: vec4<f32>, + color: vec4<f32>, +}; + +struct Uniforms { + intensity: f32, + aspect_ratio: f32, + time: f32, + beat: f32, +}; + +@group(0) @binding(0) var<storage, read_write> particles: array<Particle>; +@group(0) @binding(1) var<uniform> uniforms: Uniforms; + +fn hash(p: f32) -> f32 { + return fract(sin(p) * 43758.5453); +} + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) id: vec3<u32>) { + let i = id.x; + if (i >= arrayLength(&particles)) { + return; + } + var p = particles[i]; + if (p.pos.w <= 0.0) { + let r = hash(f32(i) + uniforms.time); + let angle = r * 6.28318; + p.pos = vec4<f32>(0.0, 0.0, 0.0, 1.0); + p.vel = vec4<f32>(cos(angle), sin(angle), 0.0, 0.0) * (0.5 + hash(r) * 0.5) * (1.0 + uniforms.intensity * 2.0); + p.color = vec4<f32>(hash(r + 0.1), hash(r + 0.2), 1.0, 1.0); + } + let new_pos = p.pos.xyz + p.vel.xyz * 0.016; + p.pos = vec4<f32>(new_pos, p.pos.w - 0.01 * (1.0 + uniforms.beat)); + p.vel.y = p.vel.y - 0.01; + particles[i] = p; +} |
