summaryrefslogtreecommitdiff
path: root/src/gpu/effects/rotating_cube_effect.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-10 17:27:34 +0100
committerskal <pascal.massimino@gmail.com>2026-02-10 17:27:34 +0100
commite7cd4d65f9f55ccc14045cbcac9d61358ba0c2bf (patch)
treec9365a3cb26953478a4bcaf684b7e2ec92442557 /src/gpu/effects/rotating_cube_effect.cc
parent61104d5b9e1774c11f0dba3b6d6018dabc2bce8f (diff)
refactor: Factor WGPU boilerplate into builder pattern helpers
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 <noreply@anthropic.com>
Diffstat (limited to 'src/gpu/effects/rotating_cube_effect.cc')
-rw-r--r--src/gpu/effects/rotating_cube_effect.cc23
1 files changed, 4 insertions, 19 deletions
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 =