diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-08 09:46:31 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-08 09:46:31 +0100 |
| commit | 3252fff7aa131eaf826db19eede82ee9e70fecf5 (patch) | |
| tree | 1f544a5ef562076b8180ed69a1a1203d22b5707d /src/3d/renderer_resources.cc | |
| parent | ec98466b62797fe7e71f35f009a891e72f4ae85a (diff) | |
refactor(3d): Split Renderer3D into modular files and fix compilation.
Diffstat (limited to 'src/3d/renderer_resources.cc')
| -rw-r--r-- | src/3d/renderer_resources.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/3d/renderer_resources.cc b/src/3d/renderer_resources.cc new file mode 100644 index 0000000..2b001aa --- /dev/null +++ b/src/3d/renderer_resources.cc @@ -0,0 +1,54 @@ +// This file is part of the 64k demo project. +// It implements the resource management logic for Renderer3D. + +#include "3d/renderer.h" +#include "util/asset_manager_utils.h" + +void Renderer3D::create_default_resources() { + global_uniform_buffer_ = + gpu_create_buffer(device_, sizeof(GlobalUniforms), + WGPUBufferUsage_Uniform | WGPUBufferUsage_CopyDst, + nullptr) + .buffer; + object_storage_buffer_ = + gpu_create_buffer(device_, sizeof(ObjectData) * kMaxObjects, + WGPUBufferUsage_Storage | WGPUBufferUsage_CopyDst, + nullptr) + .buffer; + bvh_storage_buffer_ = + gpu_create_buffer( + device_, + sizeof(BVHNode) * kMaxObjects * 2, // Capacity for a full tree + WGPUBufferUsage_Storage | WGPUBufferUsage_CopyDst, nullptr) + .buffer; +} + +const Renderer3D::MeshGpuData* +Renderer3D::get_or_create_mesh(AssetId asset_id) { + auto it = mesh_cache_.find(asset_id); + if (it != mesh_cache_.end()) { + return &it->second; + } + + MeshAsset asset = GetMeshAsset(asset_id); + if (!asset.vertices || asset.num_vertices == 0) { + return nullptr; + } + + MeshGpuData data; + data.num_indices = asset.num_indices; + + data.vertex_buffer = + gpu_create_buffer(device_, asset.num_vertices * sizeof(MeshVertex), + WGPUBufferUsage_Vertex | WGPUBufferUsage_CopyDst, + asset.vertices) + .buffer; + data.index_buffer = + gpu_create_buffer(device_, asset.num_indices * sizeof(uint32_t), + WGPUBufferUsage_Index | WGPUBufferUsage_CopyDst, + asset.indices) + .buffer; + + mesh_cache_[asset_id] = data; + return &mesh_cache_[asset_id]; +} |
