summaryrefslogtreecommitdiff
path: root/src/3d/renderer_sdf.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-08 09:46:31 +0100
committerskal <pascal.massimino@gmail.com>2026-02-08 09:46:31 +0100
commit3252fff7aa131eaf826db19eede82ee9e70fecf5 (patch)
tree1f544a5ef562076b8180ed69a1a1203d22b5707d /src/3d/renderer_sdf.cc
parentec98466b62797fe7e71f35f009a891e72f4ae85a (diff)
refactor(3d): Split Renderer3D into modular files and fix compilation.
Diffstat (limited to 'src/3d/renderer_sdf.cc')
-rw-r--r--src/3d/renderer_sdf.cc158
1 files changed, 0 insertions, 158 deletions
diff --git a/src/3d/renderer_sdf.cc b/src/3d/renderer_sdf.cc
deleted file mode 100644
index d94df11..0000000
--- a/src/3d/renderer_sdf.cc
+++ /dev/null
@@ -1,158 +0,0 @@
-// This file is part of the 64k demo project.
-// It implements SDF-related pipeline logic for Renderer3D.
-
-#include "3d/renderer.h"
-#include "generated/assets.h"
-#include "gpu/effects/shader_composer.h"
-#include "util/asset_manager.h"
-#include <vector>
-
-void Renderer3D::create_pipeline() {
- pipeline_ = create_pipeline_impl(true); // BVH enabled
- pipeline_no_bvh_ = create_pipeline_impl(false); // BVH disabled
- create_mesh_pipeline();
-}
-
-WGPURenderPipeline Renderer3D::create_pipeline_impl(bool use_bvh) {
- std::vector<WGPUBindGroupLayoutEntry> entries;
-
- // Binding 0: Global Uniforms
- {
- WGPUBindGroupLayoutEntry e = {};
- e.binding = 0;
- e.visibility = WGPUShaderStage_Vertex | WGPUShaderStage_Fragment;
- e.buffer.type = WGPUBufferBindingType_Uniform;
- e.buffer.minBindingSize = sizeof(GlobalUniforms);
- entries.push_back(e);
- }
-
- // Binding 1: Object Data
- {
- WGPUBindGroupLayoutEntry e = {};
- e.binding = 1;
- e.visibility = WGPUShaderStage_Vertex | WGPUShaderStage_Fragment;
- e.buffer.type = WGPUBufferBindingType_ReadOnlyStorage;
- e.buffer.minBindingSize = sizeof(ObjectData) * kMaxObjects;
- entries.push_back(e);
- }
-
- // Binding 2: BVH Nodes (only if BVH is used)
- if (use_bvh) {
- WGPUBindGroupLayoutEntry e = {};
- e.binding = 2;
- e.visibility = WGPUShaderStage_Fragment;
- e.buffer.type = WGPUBufferBindingType_ReadOnlyStorage;
- e.buffer.minBindingSize = sizeof(BVHNode) * kMaxObjects * 2;
- entries.push_back(e);
- }
-
- // Binding 3: Noise Texture
- {
- WGPUBindGroupLayoutEntry e = {};
- e.binding = 3;
- e.visibility = WGPUShaderStage_Fragment;
- e.texture.sampleType = WGPUTextureSampleType_Float;
- e.texture.viewDimension = WGPUTextureViewDimension_2D;
- entries.push_back(e);
- }
-
- // Binding 4: Default Sampler
- {
- WGPUBindGroupLayoutEntry e = {};
- e.binding = 4;
- e.visibility = WGPUShaderStage_Fragment;
- e.sampler.type = WGPUSamplerBindingType_Filtering;
- entries.push_back(e);
- }
-
- // Binding 5: Sky Texture
- {
- WGPUBindGroupLayoutEntry e = {};
- e.binding = 5;
- e.visibility = WGPUShaderStage_Fragment;
- e.texture.sampleType = WGPUTextureSampleType_Float;
- e.texture.viewDimension = WGPUTextureViewDimension_2D;
- entries.push_back(e);
- }
-
- WGPUBindGroupLayoutDescriptor bgl_desc = {};
- bgl_desc.entryCount = (uint32_t)entries.size();
- bgl_desc.entries = entries.data();
- WGPUBindGroupLayout bgl = wgpuDeviceCreateBindGroupLayout(device_, &bgl_desc);
-
- WGPUPipelineLayoutDescriptor pl_desc = {};
- pl_desc.bindGroupLayoutCount = 1;
- pl_desc.bindGroupLayouts = &bgl;
- WGPUPipelineLayout pipeline_layout =
- wgpuDeviceCreatePipelineLayout(device_, &pl_desc);
-
- const char* asset_data =
- (const char*)GetAsset(AssetId::ASSET_SHADER_RENDERER_3D);
- std::string main_code = asset_data;
-
- // Use ShaderComposer to dynamically include the correct scene_query snippet
- ShaderComposer::CompositionMap composition_map;
- if (use_bvh) {
- composition_map["render/scene_query_mode"] = "render/scene_query_bvh";
- } else {
- composition_map["render/scene_query_mode"] = "render/scene_query_linear";
- }
- std::string shader_source =
- ShaderComposer::Get().Compose({}, main_code, composition_map);
-
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- WGPUShaderModuleWGSLDescriptor wgsl_desc = {};
- wgsl_desc.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor;
- wgsl_desc.code = shader_source.c_str();
- WGPUShaderModuleDescriptor shader_desc = {};
- shader_desc.nextInChain = (const WGPUChainedStruct*)&wgsl_desc.chain;
-#else
- WGPUShaderSourceWGSL wgsl_desc = {};
- wgsl_desc.chain.sType = WGPUSType_ShaderSourceWGSL;
- wgsl_desc.code = str_view(shader_source.c_str());
- WGPUShaderModuleDescriptor shader_desc = {};
- shader_desc.nextInChain = (const WGPUChainedStruct*)&wgsl_desc.chain;
-#endif
- WGPUShaderModule shader_module =
- wgpuDeviceCreateShaderModule(device_, &shader_desc);
-
- WGPUDepthStencilState depth_stencil = {};
- depth_stencil.format = WGPUTextureFormat_Depth24Plus;
- depth_stencil.depthWriteEnabled = WGPUOptionalBool_True;
- depth_stencil.depthCompare = WGPUCompareFunction_Less;
-
- WGPURenderPipelineDescriptor desc = {};
- desc.layout = pipeline_layout;
- desc.vertex.module = shader_module;
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- desc.vertex.entryPoint = "vs_main";
-#else
- desc.vertex.entryPoint = {"vs_main", 7};
-#endif
- WGPUColorTargetState color_target = {};
- color_target.format = format_;
- color_target.writeMask = WGPUColorWriteMask_All;
- WGPUFragmentState fragment = {};
- fragment.module = shader_module;
-#if defined(DEMO_CROSS_COMPILE_WIN32)
- fragment.entryPoint = "fs_main";
-#else
- fragment.entryPoint = {"fs_main", 7};
-#endif
- fragment.targetCount = 1;
- fragment.targets = &color_target;
- desc.fragment = &fragment;
- desc.primitive.topology = WGPUPrimitiveTopology_TriangleList;
- desc.primitive.cullMode = WGPUCullMode_Back;
- desc.primitive.frontFace = WGPUFrontFace_CCW;
- desc.depthStencil = &depth_stencil;
- desc.multisample.count = 1;
- desc.multisample.mask = 0xFFFFFFFF;
-
- WGPURenderPipeline pipeline = wgpuDeviceCreateRenderPipeline(device_, &desc);
- wgpuBindGroupLayoutRelease(bgl);
- wgpuPipelineLayoutRelease(pipeline_layout);
- wgpuShaderModuleRelease(shader_module);
-
- return pipeline;
-}