From a2697faa005337c4d8e8e6376d9e57edadf63f44 Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 22 Mar 2026 20:31:45 +0100 Subject: docs+feat(cnn_v3): compact context, re-enable shadow in GBufDeferredEffect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TODO/PROJECT_CONTEXT updated to reflect operational pipeline state - GBufDeferredEffect: shadow re-enabled (albedo * (ambient + diffuse * shadow)) feat_tex1 binding restored for shadow channel debugging handoff(Gemini): shadow pass live again — investigate why shadow looks broken. --- cnn_v3/shaders/gbuf_deferred.wgsl | 7 ++++++- cnn_v3/src/gbuf_deferred_effect.cc | 18 +++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'cnn_v3') diff --git a/cnn_v3/shaders/gbuf_deferred.wgsl b/cnn_v3/shaders/gbuf_deferred.wgsl index dda4b27..2ed4ce3 100644 --- a/cnn_v3/shaders/gbuf_deferred.wgsl +++ b/cnn_v3/shaders/gbuf_deferred.wgsl @@ -5,6 +5,7 @@ #include "math/normal" @group(0) @binding(0) var feat_tex0: texture_2d; +@group(0) @binding(1) var feat_tex1: texture_2d; @group(0) @binding(2) var uniforms: GBufDeferredUniforms; struct GBufDeferredUniforms { @@ -39,5 +40,9 @@ fn fs_main(@builtin(position) pos: vec4f) -> @location(0) vec4f { let normal = oct_decode(vec2f(bx.y, ny_d.x)); let diffuse = max(0.0, dot(normal, KEY_LIGHT)); - return vec4f(albedo * (AMBIENT + diffuse), 1.0); + // feat_tex1[2] = pack4x8unorm(mip2.g, mip2.b, shadow, transp) + let t1 = textureLoad(feat_tex1, coord, 0); + let shadow = unpack4x8unorm(t1.z).z; + + return vec4f(albedo * (AMBIENT + diffuse * shadow), 1.0); } diff --git a/cnn_v3/src/gbuf_deferred_effect.cc b/cnn_v3/src/gbuf_deferred_effect.cc index 1adae5e..de6bd29 100644 --- a/cnn_v3/src/gbuf_deferred_effect.cc +++ b/cnn_v3/src/gbuf_deferred_effect.cc @@ -37,12 +37,13 @@ GBufDeferredEffect::GBufDeferredEffect(const GpuContext& ctx, : Effect(ctx, inputs, outputs, start_time, end_time) { HEADLESS_RETURN_IF_NULL(ctx_.device); - WGPUBindGroupLayoutEntry entries[2] = { + WGPUBindGroupLayoutEntry entries[3] = { bgl_uint_tex(0), + bgl_uint_tex(1), bgl_uniform(2, sizeof(GBufDeferredUniforms)), }; WGPUBindGroupLayoutDescriptor bgl_desc = {}; - bgl_desc.entryCount = 2; + bgl_desc.entryCount = 3; bgl_desc.entries = entries; WGPUBindGroupLayout bgl = wgpuDeviceCreateBindGroupLayout(ctx_.device, &bgl_desc); @@ -89,6 +90,7 @@ void GBufDeferredEffect::render(WGPUCommandEncoder encoder, const UniformsSequenceParams& params, NodeRegistry& nodes) { WGPUTextureView feat0_view = nodes.get_view(input_nodes_[0]); + WGPUTextureView feat1_view = nodes.get_view(input_nodes_[1]); WGPUTextureView output_view = nodes.get_view(output_nodes_[0]); // Upload resolution uniform into the base class uniforms buffer (first 8 bytes). @@ -101,16 +103,18 @@ void GBufDeferredEffect::render(WGPUCommandEncoder encoder, WGPUBindGroupLayout bgl = wgpuRenderPipelineGetBindGroupLayout(pipeline_.get(), 0); - WGPUBindGroupEntry bg_entries[2] = {}; + WGPUBindGroupEntry bg_entries[3] = {}; bg_entries[0].binding = 0; bg_entries[0].textureView = feat0_view; - bg_entries[1].binding = 2; - bg_entries[1].buffer = uniforms_buffer_.get().buffer; - bg_entries[1].size = sizeof(GBufDeferredUniforms); + bg_entries[1].binding = 1; + bg_entries[1].textureView = feat1_view; + bg_entries[2].binding = 2; + bg_entries[2].buffer = uniforms_buffer_.get().buffer; + bg_entries[2].size = sizeof(GBufDeferredUniforms); WGPUBindGroupDescriptor bg_desc = {}; bg_desc.layout = bgl; - bg_desc.entryCount = 2; + bg_desc.entryCount = 3; bg_desc.entries = bg_entries; bind_group_.replace(wgpuDeviceCreateBindGroup(ctx_.device, &bg_desc)); wgpuBindGroupLayoutRelease(bgl); -- cgit v1.2.3