diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-03 19:06:41 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-03 19:06:41 +0100 |
| commit | 3108fb0065a51dfc3548836ea16b287e92cd8881 (patch) | |
| tree | b20d3ffd904b65596ce9dd2df15a527b91a6539f /src/3d/renderer.cc | |
| parent | c3714939897af2541c655c03bcdd61108fff46ea (diff) | |
feat: side-quest - Perlin noise sky and ProcGenFunc error handling
- Updated ProcGenFunc signature to return bool for error reporting.
- Implemented gen_perlin (Fractional Brownian Motion) in procedural/generator.cc.
- Added support for sky texture in Renderer3D and its shader.
- Integrated Perlin noise sky texture in test_3d_render.cc.
- Caught and handled memory/generation errors in AssetManager and TextureManager.
- Assigned reference numbers to all remaining tasks in documentation.
handoff(Gemini): Side-quest complete. ProcGenFunc now returns bool. Perlin noise added and used for sky in 3D test. Windows build remains stable. All tasks numbered.
Diffstat (limited to 'src/3d/renderer.cc')
| -rw-r--r-- | src/3d/renderer.cc | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc index cbc3cfa..f190646 100644 --- a/src/3d/renderer.cc +++ b/src/3d/renderer.cc @@ -101,13 +101,14 @@ void Renderer3D::create_default_resources() { void Renderer3D::set_noise_texture(WGPUTextureView noise_view) { noise_texture_view_ = noise_view; - // Note: Bind group needs recreation if texture changes, but we'll do it in - // render for simplicity or just once at init if it's static. For this demo, - // let's recreate in render if changed. +} + +void Renderer3D::set_sky_texture(WGPUTextureView sky_view) { + sky_texture_view_ = sky_view; } void Renderer3D::create_pipeline() { - WGPUBindGroupLayoutEntry entries[4] = {}; + WGPUBindGroupLayoutEntry entries[5] = {}; entries[0].binding = 0; entries[0].visibility = WGPUShaderStage_Vertex | WGPUShaderStage_Fragment; entries[0].buffer.type = WGPUBufferBindingType_Uniform; @@ -127,8 +128,13 @@ void Renderer3D::create_pipeline() { entries[3].visibility = WGPUShaderStage_Fragment; entries[3].sampler.type = WGPUSamplerBindingType_Filtering; + entries[4].binding = 4; + entries[4].visibility = WGPUShaderStage_Fragment; + entries[4].texture.sampleType = WGPUTextureSampleType_Float; + entries[4].texture.viewDimension = WGPUTextureViewDimension_2D; + WGPUBindGroupLayoutDescriptor bgl_desc = {}; - bgl_desc.entryCount = 4; + bgl_desc.entryCount = 5; bgl_desc.entries = entries; WGPUBindGroupLayout bgl = wgpuDeviceCreateBindGroupLayout(device_, &bgl_desc); @@ -249,34 +255,28 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene, if (bind_group_) wgpuBindGroupRelease(bind_group_); - WGPUBindGroupEntry bg_entries[4] = {}; + WGPUBindGroupEntry bg_entries[5] = {}; bg_entries[0].binding = 0; - bg_entries[0].buffer = global_uniform_buffer_; - bg_entries[0].size = sizeof(GlobalUniforms); bg_entries[1].binding = 1; - bg_entries[1].buffer = object_storage_buffer_; - bg_entries[1].size = sizeof(ObjectData) * kMaxObjects; bg_entries[2].binding = 2; - bg_entries[2].textureView = noise_texture_view_; bg_entries[3].binding = 3; - bg_entries[3].sampler = default_sampler_; - WGPUBindGroupDescriptor bg_desc = {}; + bg_entries[4].binding = 4; + bg_entries[4].textureView = sky_texture_view_ ? sky_texture_view_ : noise_texture_view_; // Fallback + WGPUBindGroupDescriptor bg_desc = {}; bg_desc.layout = wgpuRenderPipelineGetBindGroupLayout(pipeline_, 0); - - bg_desc.entryCount = 4; - + bg_desc.entryCount = 5; bg_desc.entries = bg_entries; bind_group_ = wgpuDeviceCreateBindGroup(device_, &bg_desc); |
