diff options
Diffstat (limited to 'src/gpu/effect.cc')
| -rw-r--r-- | src/gpu/effect.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/gpu/effect.cc b/src/gpu/effect.cc index 528d7fc..42e623a 100644 --- a/src/gpu/effect.cc +++ b/src/gpu/effect.cc @@ -508,6 +508,55 @@ WGPUTextureView MainSequence::get_auxiliary_view(const char* name) { return it->second.view; } +// Resize existing auxiliary texture +void MainSequence::resize_auxiliary_texture(const char* name, int width, + int height) { + const std::string key(name); + auto it = auxiliary_textures_.find(key); + FATAL_CHECK(it == auxiliary_textures_.end(), + "Auxiliary texture not found for resize: %s\n", name); + + // Release old resources + if (it->second.view) + wgpuTextureViewRelease(it->second.view); + if (it->second.texture) + wgpuTextureRelease(it->second.texture); + + // Create new texture with new dimensions + const WGPUTextureDescriptor desc = { + .usage = + WGPUTextureUsage_RenderAttachment | WGPUTextureUsage_TextureBinding, + .dimension = WGPUTextureDimension_2D, + .size = {(uint32_t)width, (uint32_t)height, 1}, + .format = gpu_ctx.format, + .mipLevelCount = 1, + .sampleCount = 1, + }; + + WGPUTexture texture = wgpuDeviceCreateTexture(gpu_ctx.device, &desc); + FATAL_CHECK(!texture, "Failed to resize auxiliary texture: %s\n", name); + + // Create view + const WGPUTextureViewDescriptor view_desc = { + .format = gpu_ctx.format, + .dimension = WGPUTextureViewDimension_2D, + .mipLevelCount = 1, + .arrayLayerCount = 1, + }; + + WGPUTextureView view = wgpuTextureCreateView(texture, &view_desc); + FATAL_CHECK(!view, "Failed to create resized auxiliary texture view: %s\n", + name); + + // Update registry + it->second = {texture, view, width, height}; + +#if !defined(STRIP_ALL) + printf("[MainSequence] Resized auxiliary texture '%s' to %dx%d\n", name, + width, height); +#endif /* !defined(STRIP_ALL) */ +} + #if !defined(STRIP_ALL) void MainSequence::simulate_until(float target_time, float step_rate, float bpm) { |
