summaryrefslogtreecommitdiff
path: root/src/gpu/effects/circle_mask_effect.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-14 12:38:59 +0100
committerskal <pascal.massimino@gmail.com>2026-02-14 12:38:59 +0100
commitc4cfc8459dbc6fde74d5553519dc3fcb1afccad0 (patch)
treea6869d1f3c14778345ab45b9c69763d07adcca45 /src/gpu/effects/circle_mask_effect.cc
parent0f53ed1ed8ed7c07cd7ea8e88e21b5be5d5494e5 (diff)
Refactor: factorize common WGPU patterns into helper functions
Add texture creation helpers (gpu_create_texture_2d, gpu_create_storage_texture_2d, gpu_create_mip_view) and extend BindGroupLayoutBuilder with uint_texture and storage_texture methods. Refactored files: - cnn_v2_effect.cc: Use texture helpers (~70% code reduction in create_textures) - rotating_cube_effect.cc: Use BindGroupLayoutBuilder and texture helpers - circle_mask_effect.cc: Use BindGroupBuilder Benefits: - Improved code readability - Reduced boilerplate for texture/bind group creation - Consistent patterns across effects Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/gpu/effects/circle_mask_effect.cc')
-rw-r--r--src/gpu/effects/circle_mask_effect.cc46
1 files changed, 18 insertions, 28 deletions
diff --git a/src/gpu/effects/circle_mask_effect.cc b/src/gpu/effects/circle_mask_effect.cc
index f34ffb7..dfe7d03 100644
--- a/src/gpu/effects/circle_mask_effect.cc
+++ b/src/gpu/effects/circle_mask_effect.cc
@@ -3,8 +3,9 @@
// Generates circular mask and renders green background outside circle.
#include "gpu/effects/circle_mask_effect.h"
-#include "gpu/effects/shader_composer.h"
#include "generated/assets.h"
+#include "gpu/bind_group_builder.h"
+#include "gpu/effects/shader_composer.h"
CircleMaskEffect::CircleMaskEffect(const GpuContext& ctx, float radius)
: Effect(ctx), radius_(radius) {
@@ -83,21 +84,14 @@ void CircleMaskEffect::init(MainSequence* demo) {
wgpuDeviceCreateRenderPipeline(ctx_.device, &compute_pipeline_desc);
wgpuShaderModuleRelease(compute_module);
- const WGPUBindGroupEntry compute_entries[] = {
- {.binding = 0,
- .buffer = uniforms_.get().buffer,
- .size = sizeof(CommonPostProcessUniforms)},
- {.binding = 1,
- .buffer = compute_params_.get().buffer,
- .size = sizeof(CircleMaskParams)},
- };
- const WGPUBindGroupDescriptor compute_bg_desc = {
- .layout = wgpuRenderPipelineGetBindGroupLayout(compute_pipeline_, 0),
- .entryCount = 2,
- .entries = compute_entries,
- };
+ WGPUBindGroupLayout compute_layout =
+ wgpuRenderPipelineGetBindGroupLayout(compute_pipeline_, 0);
compute_bind_group_ =
- wgpuDeviceCreateBindGroup(ctx_.device, &compute_bg_desc);
+ BindGroupBuilder()
+ .buffer(0, uniforms_.get().buffer, sizeof(CommonPostProcessUniforms))
+ .buffer(1, compute_params_.get().buffer, sizeof(CircleMaskParams))
+ .build(ctx_.device, compute_layout);
+ wgpuBindGroupLayoutRelease(compute_layout);
std::string composed_render = ShaderComposer::Get().Compose({}, render_shader);
@@ -172,19 +166,15 @@ void CircleMaskEffect::resize(int width, int height) {
wgpuBindGroupRelease(render_bind_group_);
WGPUTextureView mask_view = demo_->get_auxiliary_view("circle_mask");
- const WGPUBindGroupEntry render_entries[] = {
- {.binding = 0, .textureView = mask_view},
- {.binding = 1, .sampler = mask_sampler_},
- {.binding = 2,
- .buffer = uniforms_.get().buffer,
- .size = sizeof(CommonPostProcessUniforms)},
- };
- const WGPUBindGroupDescriptor render_bg_desc = {
- .layout = wgpuRenderPipelineGetBindGroupLayout(render_pipeline_, 0),
- .entryCount = 3,
- .entries = render_entries,
- };
- render_bind_group_ = wgpuDeviceCreateBindGroup(ctx_.device, &render_bg_desc);
+ WGPUBindGroupLayout render_layout =
+ wgpuRenderPipelineGetBindGroupLayout(render_pipeline_, 0);
+ render_bind_group_ =
+ BindGroupBuilder()
+ .texture(0, mask_view)
+ .sampler(1, mask_sampler_)
+ .buffer(2, uniforms_.get().buffer, sizeof(CommonPostProcessUniforms))
+ .build(ctx_.device, render_layout);
+ wgpuBindGroupLayoutRelease(render_layout);
}
void CircleMaskEffect::compute(WGPUCommandEncoder encoder,