From e38be0dbf5816338ff97e2ee2f9adfff2902dc2b Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 14 Feb 2026 15:13:09 +0100 Subject: refactor(wgsl): modularize common shader functions Extracted common WGSL functions into separate files in `common/shaders/` to improve reusability and maintainability. - Created `common/shaders/render/fullscreen_vs.wgsl` for a reusable fullscreen vertex shader. - Created `common/shaders/math/color.wgsl` for color conversion and tone mapping functions. - Created `common/shaders/math/utils.wgsl` for general math utilities. - Created `common/shaders/render/raymarching.wgsl` for SDF raymarching logic. - Updated multiple shaders to use these new common snippets via `#include`. - Fixed the shader asset validation test to correctly handle shaders that include the common vertex shader. This refactoring makes the shader code more modular and easier to manage. --- workspaces/test/assets.txt | 4 ++++ workspaces/test/shaders/chroma_aberration.wgsl | 9 +-------- workspaces/test/shaders/distort.wgsl | 9 +-------- workspaces/test/shaders/solarize.wgsl | 9 +-------- workspaces/test/shaders/vignette.wgsl | 10 +--------- 5 files changed, 8 insertions(+), 33 deletions(-) (limited to 'workspaces/test') diff --git a/workspaces/test/assets.txt b/workspaces/test/assets.txt index ed81885..b717e15 100644 --- a/workspaces/test/assets.txt +++ b/workspaces/test/assets.txt @@ -54,6 +54,10 @@ SHADER_RENDER_LIGHTING_UTILS, NONE, ../../common/shaders/render/lighting_utils.w SHADER_MESH, NONE, shaders/mesh_render.wgsl, "Mesh Rasterization Shader" MESH_CUBE, NONE, obj/test_mesh.obj, "A simple cube mesh" DODECAHEDRON, NONE, obj/dodecahedron.obj, "A dodecahedron mesh" +SHADER_RENDER_FULLSCREEN_VS, NONE, ../../common/shaders/render/fullscreen_vs.wgsl, "Fullscreen Vertex Shader" +SHADER_MATH_COLOR, NONE, ../../common/shaders/math/color.wgsl, "Color Functions" +SHADER_MATH_UTILS, NONE, ../../common/shaders/math/utils.wgsl, "Math Utilities" +SHADER_RENDER_RAYMARCHING, NONE, ../../common/shaders/render/raymarching.wgsl, "Raymarching Functions" SHADER_VIGNETTE, NONE, shaders/vignette.wgsl, "Vignette Shader" SHADER_COMPUTE_GEN_NOISE, NONE, ../../common/shaders/compute/gen_noise.wgsl, "GPU Noise Compute Shader" SHADER_COMPUTE_GEN_PERLIN, NONE, ../../common/shaders/compute/gen_perlin.wgsl, "GPU Perlin Noise Compute Shader" diff --git a/workspaces/test/shaders/chroma_aberration.wgsl b/workspaces/test/shaders/chroma_aberration.wgsl index 6c942b7..ee730b1 100644 --- a/workspaces/test/shaders/chroma_aberration.wgsl +++ b/workspaces/test/shaders/chroma_aberration.wgsl @@ -10,14 +10,7 @@ struct ChromaAberrationParams { @group(0) @binding(2) var uniforms: CommonUniforms; @group(0) @binding(3) var params: ChromaAberrationParams; -@vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4 { - var pos = array, 3>( - vec2(-1, -1), - vec2(3, -1), - vec2(-1, 3) - ); - return vec4(pos[i], 0.0, 1.0); -} +#include "render/fullscreen_vs" @fragment fn fs_main(@builtin(position) p: vec4) -> @location(0) vec4 { let uv = p.xy / uniforms.resolution; diff --git a/workspaces/test/shaders/distort.wgsl b/workspaces/test/shaders/distort.wgsl index 5d35129..607ac60 100644 --- a/workspaces/test/shaders/distort.wgsl +++ b/workspaces/test/shaders/distort.wgsl @@ -11,14 +11,7 @@ struct DistortParams { @group(0) @binding(2) var uniforms: CommonUniforms; @group(0) @binding(3) var params: DistortParams; -@vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4 { - var pos = array, 3>( - vec2(-1, -1), - vec2(3, -1), - vec2(-1, 3) - ); - return vec4(pos[i], 0.0, 1.0); -} +#include "render/fullscreen_vs" @fragment fn fs_main(@builtin(position) p: vec4) -> @location(0) vec4 { let uv = p.xy / uniforms.resolution; diff --git a/workspaces/test/shaders/solarize.wgsl b/workspaces/test/shaders/solarize.wgsl index de15dfc..0a69b83 100644 --- a/workspaces/test/shaders/solarize.wgsl +++ b/workspaces/test/shaders/solarize.wgsl @@ -5,14 +5,7 @@ @group(0) @binding(2) var uniforms: CommonUniforms; -@vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4 { - var pos = array, 3>( - vec2(-1, -1), - vec2(3, -1), - vec2(-1, 3) - ); - return vec4(pos[i], 0.0, 1.0); -} +#include "render/fullscreen_vs" @fragment fn fs_main(@builtin(position) p: vec4) -> @location(0) vec4 { let uv = p.xy / uniforms.resolution; diff --git a/workspaces/test/shaders/vignette.wgsl b/workspaces/test/shaders/vignette.wgsl index b129883..c4d0389 100644 --- a/workspaces/test/shaders/vignette.wgsl +++ b/workspaces/test/shaders/vignette.wgsl @@ -10,15 +10,7 @@ struct VignetteParams { @group(0) @binding(2) var common_uniforms: CommonUniforms; @group(0) @binding(3) var params: VignetteParams; -@vertex -fn vs_main(@builtin(vertex_index) vertex_idx: u32) -> @builtin(position) vec4 { - var pos = array, 3>( - vec2(-1.0, -1.0), - vec2(3.0, -1.0), - vec2(-1.0, 3.0) - ); - return vec4(pos[vertex_idx], 0.0, 1.0); -} +#include "render/fullscreen_vs" @fragment fn fs_main(@builtin(position) pos: vec4) -> @location(0) vec4 { -- cgit v1.2.3