summaryrefslogtreecommitdiff
path: root/cnn_v3
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-03-22 20:31:45 +0100
committerskal <pascal.massimino@gmail.com>2026-03-22 20:31:45 +0100
commita2697faa005337c4d8e8e6376d9e57edadf63f44 (patch)
tree8c253dd279e42c5f7f539c713794cf910e6e8bef /cnn_v3
parentce22f79c55e68f9fa496a47a528a6978b89e1261 (diff)
docs+feat(cnn_v3): compact context, re-enable shadow in GBufDeferredEffect
- 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.
Diffstat (limited to 'cnn_v3')
-rw-r--r--cnn_v3/shaders/gbuf_deferred.wgsl7
-rw-r--r--cnn_v3/src/gbuf_deferred_effect.cc18
2 files changed, 17 insertions, 8 deletions
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<u32>;
+@group(0) @binding(1) var feat_tex1: texture_2d<u32>;
@group(0) @binding(2) var<uniform> 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);