summaryrefslogtreecommitdiff
path: root/src/3d/renderer.h
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-06 01:38:51 +0100
committerskal <pascal.massimino@gmail.com>2026-02-06 01:38:51 +0100
commitae4b03ef6f5ef07dcc80affd6877d17fceee7d29 (patch)
treeab57453a320c90c76eeda3ca291e382ec6413a86 /src/3d/renderer.h
parent3581fa88300f0208c83f0f687b18479979dad035 (diff)
feat(perf): Add toggle for GPU BVH and fix fallback
Completed Task #18-B. - Implemented GPU-side BVH traversal for scene queries, improving performance. - Added a --no-bvh command-line flag to disable the feature for debugging and performance comparison. - Fixed a shader compilation issue where the non-BVH fallback path failed to render objects.
Diffstat (limited to 'src/3d/renderer.h')
-rw-r--r--src/3d/renderer.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/3d/renderer.h b/src/3d/renderer.h
index 8068bdc..b468423 100644
--- a/src/3d/renderer.h
+++ b/src/3d/renderer.h
@@ -6,6 +6,7 @@
#include "3d/camera.h"
#include "3d/scene.h"
+#include "3d/bvh.h"
#include "gpu/gpu.h"
#include <vector>
@@ -18,7 +19,7 @@ struct GlobalUniforms {
mat4 view_proj;
mat4 inv_view_proj; // Added for skybox/raymarching
vec4 camera_pos_time; // xyz = camera_pos, w = time
- vec4 params; // x = num_objects, yzw = padding
+ vec4 params; // x = num_objects, y = use_bvh, zw = padding
vec2 resolution;
vec2 padding;
};
@@ -40,6 +41,9 @@ class Renderer3D {
static void SetDebugEnabled(bool enabled) {
s_debug_enabled_ = enabled;
}
+ static void SetBvhEnabled(bool enabled) {
+ s_bvh_enabled_ = enabled;
+ }
#endif
// Renders the scene to the given texture view (Convenience: creates a pass)
@@ -83,6 +87,9 @@ class Renderer3D {
WGPUBindGroup skybox_bind_group_ = nullptr;
WGPUBuffer global_uniform_buffer_ = nullptr;
WGPUBuffer object_storage_buffer_ = nullptr;
+ WGPUBuffer bvh_storage_buffer_ = nullptr;
+
+ BVH cpu_bvh_; // Keep a CPU-side copy for building/uploading
WGPUTextureView noise_texture_view_ = nullptr;
WGPUTextureView sky_texture_view_ = nullptr;
@@ -100,5 +107,6 @@ class Renderer3D {
#if !defined(STRIP_ALL)
VisualDebug visual_debug_;
static bool s_debug_enabled_;
+ static bool s_bvh_enabled_;
#endif
};