From 96a8f5b36c831a2af0679eeb098f7071fbb314cb Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 15 Mar 2024 12:01:32 +0100 Subject: [PATCH] Fix: EEVEE-Next: Quick fix for overscan With the recent changes introduced by the mixed resolution rendering overscan and border rendering broke. Overscan is also used by the test cases and fails the current tests. This is a quick fix to get the overscan working. NOTE: overscan + mixed resolution rendering will look blurry. NOTE: this doesn't fix border rendering. --- source/blender/draw/engines/eevee_next/eevee_view.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/blender/draw/engines/eevee_next/eevee_view.cc b/source/blender/draw/engines/eevee_next/eevee_view.cc index 20476cc83b3..7f7fbccaae6 100644 --- a/source/blender/draw/engines/eevee_next/eevee_view.cc +++ b/source/blender/draw/engines/eevee_next/eevee_view.cc @@ -215,8 +215,10 @@ void ShadingView::update_view() * the render pixels. If they don't align, the winmat needs to be re-projected. */ int2 scaling_factor = int2(inst_.film.scaling_factor_get()); - int2 rescaled_render_extent = extent_ * scaling_factor; int2 display_extent = inst_.film.display_extent_get(); + int2 overscan = inst_.film.get_data().render_offset - inst_.film.get_data().offset; + int2 rescaled_render_extent = (extent_ - 2 * overscan) * scaling_factor; + if (rescaled_render_extent != display_extent) { float left; float right; @@ -228,6 +230,7 @@ void ShadingView::update_view() float2 scale = (float2(rescaled_render_extent) / float2(display_extent)); right = left + ((right - left) * scale.x); top = bottom + ((top - bottom) * scale.y); + winmat = math::projection::perspective(left, right, bottom, top, near, far); }