From e7cd4d65f9f55ccc14045cbcac9d61358ba0c2bf Mon Sep 17 00:00:00 2001 From: skal Date: Tue, 10 Feb 2026 17:27:34 +0100 Subject: refactor: Factor WGPU boilerplate into builder pattern helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add BindGroupLayoutBuilder, BindGroupBuilder, RenderPipelineBuilder, and SamplerCache to reduce repetitive WGPU code. Refactor post_process_helper, cnn_effect, and rotating_cube_effect. Changes: - Bind group creation: 19 instances, 14→4 lines each - Pipeline creation: 30-50→8 lines - Sampler deduplication: 6 instances → cached - Total boilerplate reduction: -122 lines across 3 files Builder pattern prevents binding index errors and consolidates platform-specific #ifdef in fewer locations. Binary size unchanged (6.3M debug). Tests pass. Co-Authored-By: Claude Sonnet 4.5 --- src/gpu/effects/rotating_cube_effect.cc | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) (limited to 'src/gpu/effects/rotating_cube_effect.cc') diff --git a/src/gpu/effects/rotating_cube_effect.cc b/src/gpu/effects/rotating_cube_effect.cc index 8d1f05a..da973e5 100644 --- a/src/gpu/effects/rotating_cube_effect.cc +++ b/src/gpu/effects/rotating_cube_effect.cc @@ -5,16 +5,14 @@ #include "gpu/effects/rotating_cube_effect.h" #include "generated/assets.h" #include "gpu/effects/shader_composer.h" +#include "gpu/sampler_cache.h" #include "util/asset_manager_utils.h" RotatingCubeEffect::RotatingCubeEffect(const GpuContext& ctx) : Effect(ctx) { } RotatingCubeEffect::~RotatingCubeEffect() { - if (mask_sampler_) - wgpuSamplerRelease(mask_sampler_); - if (noise_sampler_) - wgpuSamplerRelease(noise_sampler_); + // Samplers owned by SamplerCache - don't release if (noise_view_) wgpuTextureViewRelease(noise_view_); if (noise_texture_) @@ -49,21 +47,8 @@ void RotatingCubeEffect::init(MainSequence* demo) { noise_texture_ = wgpuDeviceCreateTexture(ctx_.device, &tex_desc); noise_view_ = wgpuTextureCreateView(noise_texture_, nullptr); - WGPUSamplerDescriptor sampler_desc = {}; - sampler_desc.addressModeU = WGPUAddressMode_Repeat; - sampler_desc.addressModeV = WGPUAddressMode_Repeat; - sampler_desc.magFilter = WGPUFilterMode_Linear; - sampler_desc.minFilter = WGPUFilterMode_Linear; - sampler_desc.maxAnisotropy = 1; - noise_sampler_ = wgpuDeviceCreateSampler(ctx_.device, &sampler_desc); - - WGPUSamplerDescriptor mask_sampler_desc = {}; - mask_sampler_desc.addressModeU = WGPUAddressMode_ClampToEdge; - mask_sampler_desc.addressModeV = WGPUAddressMode_ClampToEdge; - mask_sampler_desc.magFilter = WGPUFilterMode_Linear; - mask_sampler_desc.minFilter = WGPUFilterMode_Linear; - mask_sampler_desc.maxAnisotropy = 1; - mask_sampler_ = wgpuDeviceCreateSampler(ctx_.device, &mask_sampler_desc); + noise_sampler_ = SamplerCache::Get().get_or_create(ctx_.device, SamplerCache::linear()); + mask_sampler_ = SamplerCache::Get().get_or_create(ctx_.device, SamplerCache::clamp()); size_t shader_size; const char* shader_code = -- cgit v1.2.3