From 1de4c9f9ae7028e0ac4371759dad52858a49a21e Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 14 Feb 2026 14:23:16 +0100 Subject: Refactor: extract setup_standard_textures helper Eliminates repetitive Renderer3D texture initialization across 3 test files. Creates setup_standard_textures() helper that configures standard noise (256x256, GPU procedural) and sky (512x256, Perlin) textures. - New: src/3d/renderer_helpers.{h,cc} - Refactor: test_3d_physics, test_3d_render, test_mesh use helper - Build: Added renderer_helpers.cc to CMake 3D_SOURCES - Result: -52 lines of boilerplate across 3 files Production effects (Hybrid3DEffect, FlashCubeEffect) use asset-based textures and retain custom initialization. Co-Authored-By: Claude Sonnet 4.5 --- cmake/DemoSourceLists.cmake | 4 ++-- src/3d/renderer_helpers.cc | 29 +++++++++++++++++++++++++++++ src/3d/renderer_helpers.h | 14 ++++++++++++++ src/tests/3d/test_3d_physics.cc | 21 ++------------------- src/tests/3d/test_3d_render.cc | 27 ++++----------------------- src/tests/3d/test_mesh.cc | 10 ++-------- 6 files changed, 53 insertions(+), 52 deletions(-) create mode 100644 src/3d/renderer_helpers.cc create mode 100644 src/3d/renderer_helpers.h diff --git a/cmake/DemoSourceLists.cmake b/cmake/DemoSourceLists.cmake index 017ecac..f1fbf4a 100644 --- a/cmake/DemoSourceLists.cmake +++ b/cmake/DemoSourceLists.cmake @@ -39,11 +39,11 @@ demo_set_conditional_sources(GPU_SOURCES # 3D sources (conditional: HEADLESS / STRIP_EXTERNAL / NORMAL) demo_set_conditional_sources(3D_SOURCES # Headless mode: Full 3D (needed for Hybrid3DEffect) - "src/3d/renderer.cc;src/3d/renderer_draw.cc;src/3d/renderer_pipelines.cc;src/3d/renderer_resources.cc;src/3d/visual_debug.cc;src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc" + "src/3d/renderer.cc;src/3d/renderer_draw.cc;src/3d/renderer_pipelines.cc;src/3d/renderer_resources.cc;src/3d/renderer_helpers.cc;src/3d/visual_debug.cc;src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc" # Strip mode: Stub 3D (depends on WebGPU) "src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc" # Normal mode: Full 3D implementation - "src/3d/renderer.cc;src/3d/renderer_draw.cc;src/3d/renderer_pipelines.cc;src/3d/renderer_resources.cc;src/3d/visual_debug.cc;src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc" + "src/3d/renderer.cc;src/3d/renderer_draw.cc;src/3d/renderer_pipelines.cc;src/3d/renderer_resources.cc;src/3d/renderer_helpers.cc;src/3d/visual_debug.cc;src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc" ) # Platform sources (conditional: HEADLESS / STRIP_EXTERNAL / NORMAL) diff --git a/src/3d/renderer_helpers.cc b/src/3d/renderer_helpers.cc new file mode 100644 index 0000000..7ee7209 --- /dev/null +++ b/src/3d/renderer_helpers.cc @@ -0,0 +1,29 @@ +// This file is part of the 64k demo project. +// Implementation of Renderer3D helper functions. + +#include "3d/renderer_helpers.h" + +void setup_standard_textures(Renderer3D& renderer, TextureManager& tex_mgr, + WGPUDevice device, WGPUQueue queue) { + tex_mgr.init(device, queue); + + // Standard noise texture (256x256, seed 1234, frequency 16) + GpuProceduralParams noise_params = {}; + noise_params.width = 256; + noise_params.height = 256; + float noise_vals[2] = {1234.0f, 16.0f}; + noise_params.params = noise_vals; + noise_params.num_params = 2; + tex_mgr.create_gpu_noise_texture("noise", noise_params); + renderer.set_noise_texture(tex_mgr.get_texture_view("noise")); + + // Standard sky texture (512x256 Perlin) + GpuProceduralParams sky_params = {}; + sky_params.width = 512; + sky_params.height = 256; + float sky_vals[5] = {42.0f, 4.0f, 1.0f, 0.5f, 6.0f}; + sky_params.params = sky_vals; + sky_params.num_params = 5; + tex_mgr.create_gpu_perlin_texture("sky", sky_params); + renderer.set_sky_texture(tex_mgr.get_texture_view("sky")); +} diff --git a/src/3d/renderer_helpers.h b/src/3d/renderer_helpers.h new file mode 100644 index 0000000..3d0167f --- /dev/null +++ b/src/3d/renderer_helpers.h @@ -0,0 +1,14 @@ +// This file is part of the 64k demo project. +// Helper functions for Renderer3D setup and common initialization patterns. + +#pragma once + +#include "3d/renderer.h" +#include "gpu/texture_manager.h" + +// Sets up standard noise and sky textures for Renderer3D. +// Creates GPU-procedural noise (256x256, seed 1234, freq 16) and +// Perlin sky (512x256) textures in the TextureManager, then binds +// them to the renderer. +void setup_standard_textures(Renderer3D& renderer, TextureManager& tex_mgr, + WGPUDevice device, WGPUQueue queue); diff --git a/src/tests/3d/test_3d_physics.cc b/src/tests/3d/test_3d_physics.cc index 736cfc0..9b8bf11 100644 --- a/src/tests/3d/test_3d_physics.cc +++ b/src/tests/3d/test_3d_physics.cc @@ -6,6 +6,7 @@ #include "3d/object.h" #include "3d/physics.h" #include "3d/renderer.h" +#include "3d/renderer_helpers.h" #include "3d/scene.h" #include "gpu/effects/shaders.h" #include "gpu/texture_manager.h" @@ -125,25 +126,7 @@ int main(int argc, char** argv) { g_renderer.init(g_device, g_queue, g_format); g_renderer.resize(platform_state.width, platform_state.height); - g_textures.init(g_device, g_queue); - ProceduralTextureDef noise_def; - noise_def.width = 256; - noise_def.height = 256; - noise_def.gen_func = gen_periodic_noise; - noise_def.params.push_back(1234.0f); - noise_def.params.push_back(16.0f); - g_textures.create_procedural_texture("noise", noise_def); - - g_renderer.set_noise_texture(g_textures.get_texture_view("noise")); - - ProceduralTextureDef sky_def; - sky_def.width = 512; - sky_def.height = 256; - sky_def.gen_func = procedural::gen_perlin; - sky_def.params = {42.0f, 4.0f, 1.0f, 0.5f, 6.0f}; - g_textures.create_procedural_texture("sky", sky_def); - - g_renderer.set_sky_texture(g_textures.get_texture_view("sky")); + setup_standard_textures(g_renderer, g_textures, g_device, g_queue); setup_scene(); diff --git a/src/tests/3d/test_3d_render.cc b/src/tests/3d/test_3d_render.cc index 06e95c4..87d7b76 100644 --- a/src/tests/3d/test_3d_render.cc +++ b/src/tests/3d/test_3d_render.cc @@ -4,6 +4,7 @@ #include "3d/camera.h" #include "3d/object.h" #include "3d/renderer.h" +#include "3d/renderer_helpers.h" #include "3d/scene.h" #include "generated/assets.h" #include "gpu/effects/shaders.h" @@ -131,29 +132,9 @@ int main(int argc, char** argv) { g_renderer.init(g_device, g_queue, g_format); g_renderer.resize(platform_state.width, platform_state.height); - g_textures.init(g_device, g_queue); - - // GPU Noise texture (replaces CPU procedural) - GpuProceduralParams noise_params = {}; - noise_params.width = 256; - noise_params.height = 256; - float noise_vals[2] = {1234.0f, 16.0f}; - noise_params.params = noise_vals; - noise_params.num_params = 2; - g_textures.create_gpu_noise_texture("noise", noise_params); - g_renderer.set_noise_texture(g_textures.get_texture_view("noise")); - - // GPU Perlin texture for sky (replaces CPU procedural) - GpuProceduralParams sky_params = {}; - sky_params.width = 512; - sky_params.height = 256; - float sky_vals[5] = {42.0f, 4.0f, 1.0f, 0.5f, 6.0f}; - sky_params.params = sky_vals; - sky_params.num_params = 5; - g_textures.create_gpu_perlin_texture("sky", sky_params); - g_renderer.set_sky_texture(g_textures.get_texture_view("sky")); - - // GPU Grid texture (new!) + setup_standard_textures(g_renderer, g_textures, g_device, g_queue); + + // GPU Grid texture (additional texture for this test) GpuProceduralParams grid_params = {}; grid_params.width = 256; grid_params.height = 256; diff --git a/src/tests/3d/test_mesh.cc b/src/tests/3d/test_mesh.cc index 0374ed8..4a1d97b 100644 --- a/src/tests/3d/test_mesh.cc +++ b/src/tests/3d/test_mesh.cc @@ -4,6 +4,7 @@ #include "3d/camera.h" #include "3d/object.h" #include "3d/renderer.h" +#include "3d/renderer_helpers.h" #include "3d/scene.h" #include "gpu/effects/shaders.h" #include "gpu/texture_manager.h" @@ -256,14 +257,7 @@ int main(int argc, char** argv) { } #endif /* !defined(STRIP_ALL) */ - g_textures.init(g_device, g_queue); - ProceduralTextureDef noise_def; - noise_def.width = 256; - noise_def.height = 256; - noise_def.gen_func = procedural::gen_noise; - noise_def.params = {1234.0f, 16.0f}; - g_textures.create_procedural_texture("noise", noise_def); - g_renderer.set_noise_texture(g_textures.get_texture_view("noise")); + setup_standard_textures(g_renderer, g_textures, g_device, g_queue); // --- Create Scene --- Object3D floor(ObjectType::BOX); -- cgit v1.2.3