From 5982b5e75c8a9e8a99dfdb6c34440630c3071438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Thu, 28 Nov 2024 19:16:32 +0100 Subject: [PATCH] Fix #130751: Overlay Next: Selected Outline highlight vanishes when face orientation enabled Was caused by different drawing order. Use the legacy drawing order until we find a better fix. The better fix would be to render outline with depth. --- .../draw/engines/overlay/overlay_next_instance.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/blender/draw/engines/overlay/overlay_next_instance.cc b/source/blender/draw/engines/overlay/overlay_next_instance.cc index d88248eb803..74536ccd59d 100644 --- a/source/blender/draw/engines/overlay/overlay_next_instance.cc +++ b/source/blender/draw/engines/overlay/overlay_next_instance.cc @@ -445,7 +445,8 @@ void Instance::draw_v3d(Manager &manager, View &view) float4 clear_color(0.0f); auto draw = [&](OverlayLayer &layer, Framebuffer &framebuffer) { - layer.facing.draw(framebuffer, manager, view); + /* TODO(fclem): Depth aware outlines (see #130751). */ + // layer.facing.draw(framebuffer, manager, view); layer.fade.draw(framebuffer, manager, view); layer.mode_transfer.draw(framebuffer, manager, view); layer.edit_text.draw(framebuffer, manager, view); @@ -524,6 +525,12 @@ void Instance::draw_v3d(Manager &manager, View &view) infront.wireframe.copy_depth(resources.depth_target_in_front_tx); } { + /* TODO(fclem): This is really bad for performance as the outline pass will then split the + * render pass and do a framebuffer switch. This also only fix the issue for non-infront + * objects. + * We need to figure a way to merge the outline with correct depth awareness (see #130751). */ + regular.facing.draw(resources.overlay_fb, manager, view); + /* Line only pass. */ outline.draw_line_only_ex(resources.overlay_line_only_fb, resources, manager, view); } @@ -532,6 +539,9 @@ void Instance::draw_v3d(Manager &manager, View &view) draw(regular, resources.overlay_fb); draw_line(regular, resources.overlay_line_fb); + /* Here because of custom order of regular.facing. */ + infront.facing.draw(resources.overlay_fb, manager, view); + draw(infront, resources.overlay_in_front_fb); draw_line(infront, resources.overlay_line_in_front_fb); }