// This file is part of the 64k demo project. // It provides visual debugging tools, such as wireframe rendering. // This entire module is excluded when STRIP_ALL is defined. #pragma once #if !defined(STRIP_ALL) #include "gpu/gpu.h" #include "util/mini_math.h" #include struct DebugLine { vec3 start; vec3 end; vec3 color; }; class VisualDebug { public: void init(WGPUDevice device, WGPUTextureFormat format); void shutdown(); // Queue a wireframe box for rendering this frame void add_box(const mat4& transform, const vec3& local_extent, const vec3& color); // Render all queued primitives and clear the queue void render(WGPURenderPassEncoder pass, const mat4& view_proj); private: WGPUDevice device_ = nullptr; WGPURenderPipeline pipeline_ = nullptr; WGPUBindGroupLayout bind_group_layout_ = nullptr; std::vector lines_; // Uniform buffer for ViewProjection matrix WGPUBuffer uniform_buffer_ = nullptr; WGPUBindGroup bind_group_ = nullptr; // Vertex buffer for line segments WGPUBuffer vertex_buffer_ = nullptr; size_t vertex_buffer_capacity_ = 0; void create_pipeline(WGPUTextureFormat format); void update_buffers(const mat4& view_proj); }; #endif // !defined(STRIP_ALL)