From f32afcbeffa0e8b947457c67c73566da4ebf33cc Mon Sep 17 00:00:00 2001 From: skal Date: Tue, 3 Feb 2026 08:18:13 +0100 Subject: 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. --- assets/final/shaders/particle_spray_compute.wgsl | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 assets/final/shaders/particle_spray_compute.wgsl (limited to 'assets/final/shaders/particle_spray_compute.wgsl') 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, + vel: vec4, + rot: vec4, + color: vec4, +}; + +struct Uniforms { + intensity: f32, + aspect_ratio: f32, + time: f32, + beat: f32, +}; + +@group(0) @binding(0) var particles: array; +@group(0) @binding(1) var 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) { + 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(0.0, 0.0, 0.0, 1.0); + p.vel = vec4(cos(angle), sin(angle), 0.0, 0.0) * (0.5 + hash(r) * 0.5) * (1.0 + uniforms.intensity * 2.0); + p.color = vec4(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(new_pos, p.pos.w - 0.01 * (1.0 + uniforms.beat)); + p.vel.y = p.vel.y - 0.01; + particles[i] = p; +} -- cgit v1.2.3