diff options
Diffstat (limited to 'src/gpu/demo_effects.h')
| -rw-r--r-- | src/gpu/demo_effects.h | 66 |
1 files changed, 19 insertions, 47 deletions
diff --git a/src/gpu/demo_effects.h b/src/gpu/demo_effects.h index fabfbd2..7ad8261 100644 --- a/src/gpu/demo_effects.h +++ b/src/gpu/demo_effects.h @@ -6,11 +6,11 @@ #include "3d/renderer.h" #include "3d/scene.h" #include "effect.h" +#include "gpu/effects/circle_mask_effect.h" #include "gpu/effects/flash_effect.h" // FlashEffect with params support #include "gpu/effects/post_process_helper.h" -#include "gpu/effects/shaders.h" -#include "gpu/effects/circle_mask_effect.h" #include "gpu/effects/rotating_cube_effect.h" +#include "gpu/effects/shaders.h" #include "gpu/gpu.h" #include "gpu/texture_manager.h" #include "gpu/uniform_helper.h" @@ -47,12 +47,16 @@ class ParticlesEffect : public Effect { ComputePass compute_pass_; RenderPass render_pass_; GpuBuffer particles_buffer_; + UniformBuffer<CommonPostProcessUniforms> uniforms_; }; class PassthroughEffect : public PostProcessEffect { public: PassthroughEffect(const GpuContext& ctx); void update_bind_group(WGPUTextureView input_view) override; + + private: + UniformBuffer<CommonPostProcessUniforms> uniforms_; }; class MovingEllipseEffect : public Effect { @@ -77,26 +81,16 @@ class ParticleSprayEffect : public Effect { ComputePass compute_pass_; RenderPass render_pass_; GpuBuffer particles_buffer_; + UniformBuffer<CommonPostProcessUniforms> uniforms_; }; // Parameters for GaussianBlurEffect (set at construction time) struct GaussianBlurParams { float strength = 2.0f; // Default: 2.0 pixel blur radius + float _pad = 0.0f; }; - -// Uniform data sent to GPU shader -struct GaussianBlurUniforms { - float time; // offset 0 - float beat; // offset 4 - float intensity; // offset 8 - float aspect_ratio; // offset 12 - float width; // offset 16 - float height; // offset 20 - float strength; // offset 24 - float _pad; // offset 28 -}; -static_assert(sizeof(GaussianBlurUniforms) == 32, - "GaussianBlurUniforms must be 32 bytes for WGSL alignment"); +static_assert(sizeof(GaussianBlurParams) == 8, + "GaussianBlurParams must be 8 bytes for WGSL alignment"); class GaussianBlurEffect : public PostProcessEffect { public: @@ -110,7 +104,8 @@ class GaussianBlurEffect : public PostProcessEffect { private: GaussianBlurParams params_; - UniformBuffer<GaussianBlurUniforms> uniforms_; + UniformBuffer<CommonPostProcessUniforms> uniforms_; + UniformBuffer<GaussianBlurParams> params_buffer_; }; class SolarizeEffect : public PostProcessEffect { @@ -119,6 +114,9 @@ class SolarizeEffect : public PostProcessEffect { void render(WGPURenderPassEncoder pass, float time, float beat, float intensity, float aspect_ratio) override; void update_bind_group(WGPUTextureView input_view) override; + + private: + UniformBuffer<CommonPostProcessUniforms> uniforms_; }; // Parameters for VignetteEffect @@ -127,20 +125,6 @@ struct VignetteParams { float softness = 0.5f; // Softness of the vignette edge }; -// Uniform data for VignetteEffect -struct VignetteUniforms { - float time; // offset 0 - float beat; // offset 4 - float intensity; // offset 8 - float aspect_ratio; // offset 12 - float width; // offset 16 - float height; // offset 20 - float radius; // offset 24 - float softness; // offset 28 -}; -static_assert(sizeof(VignetteUniforms) == 32, - "VignetteUniforms must be 32 bytes for WGSL alignment"); - class VignetteEffect : public PostProcessEffect { public: VignetteEffect(const GpuContext& ctx); @@ -151,7 +135,8 @@ class VignetteEffect : public PostProcessEffect { private: VignetteParams params_; - UniformBuffer<VignetteUniforms> uniforms_; + UniformBuffer<CommonPostProcessUniforms> uniforms_; + UniformBuffer<VignetteParams> params_buffer_; }; // Parameters for ChromaAberrationEffect (set at construction time) @@ -160,20 +145,6 @@ struct ChromaAberrationParams { float angle = 0.0f; // Default: horizontal (0 radians) }; -// Uniform data sent to GPU shader -struct ChromaUniforms { - float time; // offset 0 - float beat; // offset 4 - float intensity; // offset 8 - float aspect_ratio; // offset 12 - float width; // offset 16 - float height; // offset 20 - float offset_scale; // offset 24 - float angle; // offset 28 -}; -static_assert(sizeof(ChromaUniforms) == 32, - "ChromaUniforms must be 32 bytes for WGSL alignment"); - class ChromaAberrationEffect : public PostProcessEffect { public: // Backward compatibility constructor (uses default params) @@ -187,7 +158,8 @@ class ChromaAberrationEffect : public PostProcessEffect { private: ChromaAberrationParams params_; - UniformBuffer<ChromaUniforms> uniforms_; + UniformBuffer<CommonPostProcessUniforms> uniforms_; + UniformBuffer<ChromaAberrationParams> params_buffer_; }; class Hybrid3DEffect : public Effect { |
