From bd5622fc3b53695dc89023716293abccc83b0cbe Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 18 Dec 2020 21:30:32 +0300 Subject: [PATCH] Use previous frame's transform for depth pre-pass in deferred renderer --- libs/gfx/source/renderer/deferred.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libs/gfx/source/renderer/deferred.cpp b/libs/gfx/source/renderer/deferred.cpp index c88f2d0f..87dc18eb 100644 --- a/libs/gfx/source/renderer/deferred.cpp +++ b/libs/gfx/source/renderer/deferred.cpp @@ -861,6 +861,7 @@ void main() query_array queries; gfx::array box_array; + std::optional> prev_transform; }; deferred_renderer::deferred_renderer() @@ -1262,7 +1263,7 @@ void main() // Occlusion pre-pass - if (!buffer_size_changed) + if (!buffer_size_changed && impl().prev_transform) { use_occlusion = true; @@ -1278,7 +1279,7 @@ void main() gl::Disable(gl::CULL_FACE); impl().occlusion_pass_program.bind(); - impl().occlusion_pass_program["u_camera_transform"] = camera_transform; + impl().occlusion_pass_program["u_camera_transform"] = *impl().prev_transform; impl().box_array.bind(); for (int bi = 0; bi < bins_total; ++bi) @@ -1941,6 +1942,8 @@ void main() impl().bloom_overlay.invoke(impl().bloom_texture[2], target); } + impl().prev_transform = camera_transform; + check_error(); }