summaryrefslogtreecommitdiff
path: root/src/tests/3d/test_3d_render.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-14 12:50:27 +0100
committerskal <pascal.massimino@gmail.com>2026-02-14 12:50:27 +0100
commit5e33097e4649f1c886275db18dc532930487457b (patch)
treee4cee838e54a2aaf8fa66741f467f8fceefc808a /src/tests/3d/test_3d_render.cc
parent48beb6b1c10d7ca42205000a5bb420a1e3282d92 (diff)
Refactor: factorize WGPU init code for 3D tests
Extracted duplicate WGPU initialization boilerplate from test_3d_physics, test_3d_render, and test_mesh into shared helper (test_3d_helpers). **Changes:** - New: src/tests/common/test_3d_helpers.{h,cc} (~120 LOC) - Removed ~280 LOC of duplicate init_wgpu() implementations - Net savings: -141 LOC **Benefits:** - Single source of truth for surface+device initialization - Eliminates cross-compile #ifdef duplication - Easier maintenance for callback API changes All 34 tests pass. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/tests/3d/test_3d_render.cc')
-rw-r--r--src/tests/3d/test_3d_render.cc100
1 files changed, 6 insertions, 94 deletions
diff --git a/src/tests/3d/test_3d_render.cc b/src/tests/3d/test_3d_render.cc
index eee46ba..49a265f 100644
--- a/src/tests/3d/test_3d_render.cc
+++ b/src/tests/3d/test_3d_render.cc
@@ -10,6 +10,7 @@
#include "gpu/texture_manager.h"
#include "platform/platform.h"
#include "procedural/generator.h"
+#include "../common/test_3d_helpers.h"
#include <cmath>
#include <cstdio>
#include <cstring>
@@ -23,100 +24,8 @@ static Camera g_camera;
static WGPUDevice g_device = nullptr;
static WGPUQueue g_queue = nullptr;
static WGPUSurface g_surface = nullptr;
-static WGPUAdapter g_adapter = nullptr;
static WGPUTextureFormat g_format = WGPUTextureFormat_Undefined;
-// ... (init_wgpu implementation same as before)
-void init_wgpu(PlatformState* platform_state) {
- WGPUInstance instance = wgpuCreateInstance(nullptr);
- if (!instance) {
- fprintf(stderr, "Failed to create WGPU instance.\n");
- exit(1);
- }
-
- g_surface = platform_create_wgpu_surface(instance, platform_state);
- if (!g_surface) {
- fprintf(stderr, "Failed to create WGPU surface.\n");
- exit(1);
- }
-
- WGPURequestAdapterOptions adapter_opts = {};
- adapter_opts.compatibleSurface = g_surface;
- adapter_opts.powerPreference = WGPUPowerPreference_HighPerformance;
-
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- auto on_adapter = [](WGPURequestAdapterStatus status, WGPUAdapter adapter,
- const char* message, void* userdata) {
- if (status == WGPURequestAdapterStatus_Success) {
- *(WGPUAdapter*)userdata = adapter;
- }
- };
- wgpuInstanceRequestAdapter(instance, &adapter_opts, on_adapter, &g_adapter);
-#else
- auto on_adapter = [](WGPURequestAdapterStatus status, WGPUAdapter adapter,
- WGPUStringView message, void* userdata, void* user2) {
- (void)user2;
- if (status == WGPURequestAdapterStatus_Success) {
- *(WGPUAdapter*)userdata = adapter;
- }
- };
- WGPURequestAdapterCallbackInfo adapter_cb = {};
- adapter_cb.mode = WGPUCallbackMode_WaitAnyOnly;
- adapter_cb.callback = on_adapter;
- adapter_cb.userdata1 = &g_adapter;
- wgpuInstanceRequestAdapter(instance, &adapter_opts, adapter_cb);
-#endif
-
- while (!g_adapter) {
- platform_wgpu_wait_any(instance);
- }
-
- WGPUDeviceDescriptor device_desc = {};
-
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- auto on_device = [](WGPURequestDeviceStatus status, WGPUDevice device,
- const char* message, void* userdata) {
- if (status == WGPURequestDeviceStatus_Success) {
- *(WGPUDevice*)userdata = device;
- }
- };
- wgpuAdapterRequestDevice(g_adapter, &device_desc, on_device, &g_device);
-#else
- auto on_device = [](WGPURequestDeviceStatus status, WGPUDevice device,
- WGPUStringView message, void* userdata, void* user2) {
- (void)user2;
- if (status == WGPURequestDeviceStatus_Success) {
- *(WGPUDevice*)userdata = device;
- }
- };
- WGPURequestDeviceCallbackInfo device_cb = {};
- device_cb.mode = WGPUCallbackMode_WaitAnyOnly;
- device_cb.callback = on_device;
- device_cb.userdata1 = &g_device;
- wgpuAdapterRequestDevice(g_adapter, &device_desc, device_cb);
-#endif
-
- while (!g_device) {
- platform_wgpu_wait_any(instance);
- }
-
- g_queue = wgpuDeviceGetQueue(g_device);
-
- WGPUSurfaceCapabilities caps = {};
- wgpuSurfaceGetCapabilities(g_surface, g_adapter, &caps);
- g_format = caps.formats[0];
-
- WGPUSurfaceConfiguration config = {};
- config.device = g_device;
- config.format = g_format;
- config.usage = WGPUTextureUsage_RenderAttachment;
- config.width = platform_state->width;
- config.height = platform_state->height;
- config.presentMode = WGPUPresentMode_Fifo;
- config.alphaMode = WGPUCompositeAlphaMode_Opaque;
- wgpuSurfaceConfigure(g_surface, &config);
-}
-
void setup_scene() {
g_scene.clear();
srand(12345); // Fixed seed
@@ -211,8 +120,11 @@ int main(int argc, char** argv) {
PlatformState platform_state = platform_init(false, 1280, 720);
- // The test's own WGPU init sequence
- init_wgpu(&platform_state);
+ WgpuSurfaceContext wgpu_ctx = init_wgpu_with_surface(&platform_state);
+ g_device = wgpu_ctx.device;
+ g_queue = wgpu_ctx.queue;
+ g_surface = wgpu_ctx.surface;
+ g_format = wgpu_ctx.format;
InitShaderComposer();