diff --git a/source/blender/draw/engines/overlay/overlay_next_instance.cc b/source/blender/draw/engines/overlay/overlay_next_instance.cc index d0024cb334c..3af0c98de4c 100644 --- a/source/blender/draw/engines/overlay/overlay_next_instance.cc +++ b/source/blender/draw/engines/overlay/overlay_next_instance.cc @@ -454,7 +454,7 @@ void Instance::draw_v3d(Manager &manager, View &view) auto draw_line = [&](OverlayLayer &layer, Framebuffer &framebuffer) { layer.bounds.draw_line(framebuffer, manager, view); - layer.wireframe.draw_line_ex(framebuffer, resources, manager, view); + layer.wireframe.draw_line(framebuffer, manager, view); layer.cameras.draw_line(framebuffer, manager, view); layer.empties.draw_line(framebuffer, manager, view); layer.axes.draw_line(framebuffer, manager, view); @@ -516,6 +516,12 @@ void Instance::draw_v3d(Manager &manager, View &view) infront.prepass.draw_line(resources.overlay_line_in_front_fb, manager, view); } + { + /* Copy depth at the end of the prepass to avoid splitting the main render pass. */ + /* TODO(fclem): Better get rid of it. */ + regular.wireframe.copy_depth(resources.depth_target_tx); + infront.wireframe.copy_depth(resources.depth_target_in_front_tx); + } { /* Line only pass. */ outline.draw_line_only_ex(resources.overlay_line_only_fb, resources, manager, view); diff --git a/source/blender/draw/engines/overlay/overlay_next_wireframe.hh b/source/blender/draw/engines/overlay/overlay_next_wireframe.hh index a57bc8f6d73..9858f2c6787 100644 --- a/source/blender/draw/engines/overlay/overlay_next_wireframe.hh +++ b/source/blender/draw/engines/overlay/overlay_next_wireframe.hh @@ -229,29 +229,31 @@ class Wireframe : Overlay { manager.generate_commands(wireframe_ps_, view); } - /* TODO(fclem): Remove dependency on Resources. */ - void draw_line_ex(Framebuffer &framebuffer, Resources &res, Manager &manager, View &view) + void copy_depth(TextureRef &depth_tx) + { + if (!enabled_ || !do_depth_copy_workaround_) { + return; + } + + eGPUTextureUsage usage = GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT; + int2 render_size = int2(depth_tx.size()); + tmp_depth_tx_.acquire(render_size, GPU_DEPTH24_STENCIL8, usage); + + /* WORKAROUND: Nasty framebuffer copy. + * We should find a way to have nice wireframe without this. */ + GPU_texture_copy(tmp_depth_tx_, depth_tx); + } + + void draw_line(Framebuffer &framebuffer, Manager &manager, View &view) final { if (!enabled_) { return; } - if (do_depth_copy_workaround_) { - eGPUTextureUsage usage = GPU_TEXTURE_USAGE_SHADER_READ | GPU_TEXTURE_USAGE_ATTACHMENT; - int2 render_size = int2(res.depth_tx.size()); - tmp_depth_tx_.acquire(render_size, GPU_DEPTH24_STENCIL8, usage); - - /* WORKAROUND: Nasty framebuffer copy. - * We should find a way to have nice wireframe without this. */ - GPU_texture_copy(tmp_depth_tx_, res.depth_tx); - } - GPU_framebuffer_bind(framebuffer); manager.submit_only(wireframe_ps_, view); - if (do_depth_copy_workaround_) { - tmp_depth_tx_.release(); - } + tmp_depth_tx_.release(); } private: