From 96c459ca2f52cf2c5bec269d0f30e01d21bc916b Mon Sep 17 00:00:00 2001 From: quou Date: Sun, 29 Dec 2024 14:49:07 +1100 Subject: add depth prepass --- c2.cpp | 11 +++++++++++ model.cpp | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/c2.cpp b/c2.cpp index d3b414b..b11b769 100644 --- a/c2.cpp +++ b/c2.cpp @@ -188,6 +188,10 @@ extern "C" int entrypoint() { pb.rp_depth_target(dev->get_depth_target(), 1.0f); dev->get_ctx().submit(pb.build_rp()); + pb.begin_rp(); + pb.rp_depth_target(dev->get_depth_target(), Clear_Mode::restore); + Render_Pass& depth_prepass = pb.build_rp(); + pb.begin_rp(); pb.rp_target(dev->get_backbuffer(), Clear_Mode::restore); pb.rp_depth_target(dev->get_depth_target(), Clear_Mode::restore); @@ -209,6 +213,13 @@ extern "C" int entrypoint() { raxis )); monkey->update_transforms(); + monkey->render( + dev, + &frame_arena, + depth_prepass, + transform, + projection + ); monkey->render( dev, &frame_arena, diff --git a/model.cpp b/model.cpp index e8be727..c3d01ac 100644 --- a/model.cpp +++ b/model.cpp @@ -165,6 +165,7 @@ void Model::render( cbuffers[i].view_projection = view_projection; cbuffers[i].model = transform * meshes[i].world; } + bool depth_only = !pass.colour_count; dev->unmap_buffer(mvp); for (i = 0; i < c; i++) { Mesh& mesh = meshes[i]; @@ -187,7 +188,10 @@ void Model::render( draw.first_vertex = mesh.offset; draw.vertex_offset = mesh.vbo_offset; pb.begin(); - pb.depth(true, true, Depth_Mode::less); + if (depth_only) + pb.depth(true, true, Depth_Mode::less); + else + pb.depth(true, false, Depth_Mode::equal); pb.shader(mesh.shader); pb.cbuffer( mesh.mvp_binding, -- cgit v1.2.3-54-g00ecf