diff --git a/src/canvas.cpp b/src/canvas.cpp index a2ad04f..f28d13e 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1156,6 +1156,49 @@ void Canvas::draw_merge_branch_orchestration( }); } +void Canvas::draw_merge_final_plane_composite( + const glm::mat4& ortho, + bool draw_checkerboard) +{ + execute_canvas_draw_merge_final_plane_composite( + pp::panopainter::LegacyCanvasDrawMergeFinalPlaneCompositeUniforms { + .checkerboard = { + .mvp = ortho, + .colorize = false, + }, + .texture = { + .mvp = ortho, + .texture_slot = 0, + }, + .draw_checkerboard = draw_checkerboard, + }, + pp::panopainter::LegacyCanvasDrawMergeFinalPlaneCompositeExecution { + .bind_merged_texture_copy_target = [&] { + set_active_texture_unit(2); + m_merge_tex.bind(); + }, + .copy_merged_framebuffer = [&] { + copy_framebuffer_to_texture_2d(0, 0, 0, 0, m_width, m_height); + }, + .enable_blend = [&] { + apply_canvas_capability(blend_state(), true); + }, + .draw = [&] { + m_plane.draw_fill(); + }, + .bind_sampler = [&] { + m_sampler.bind(0); + }, + .bind_merged_texture = [&] { + set_active_texture_unit(0); + m_merge_tex.bind(); + }, + .unbind_merged_texture = [&] { + m_merge_tex.unbind(); + }, + }); +} + void Canvas::stroke_draw_dual_pass( const std::vector& frames_dual, const std::array& dual_pass_texture_bindings, @@ -1739,43 +1782,7 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array faces /*= SI if (use_blend) { - execute_canvas_draw_merge_final_plane_composite( - pp::panopainter::LegacyCanvasDrawMergeFinalPlaneCompositeUniforms { - .checkerboard = { - .mvp = ortho, - .colorize = false, - }, - .texture = { - .mvp = ortho, - .texture_slot = 0, - }, - .draw_checkerboard = draw_checkerboard, - }, - pp::panopainter::LegacyCanvasDrawMergeFinalPlaneCompositeExecution { - .bind_merged_texture_copy_target = [&] { - set_active_texture_unit(2); - m_merge_tex.bind(); - }, - .copy_merged_framebuffer = [&] { - copy_framebuffer_to_texture_2d(0, 0, 0, 0, m_width, m_height); - }, - .enable_blend = [&] { - apply_canvas_capability(blend_state(), true); - }, - .draw = [&] { - m_plane.draw_fill(); - }, - .bind_sampler = [&] { - m_sampler.bind(0); - }, - .bind_merged_texture = [&] { - set_active_texture_unit(0); - m_merge_tex.bind(); - }, - .unbind_merged_texture = [&] { - m_merge_tex.unbind(); - }, - }); + draw_merge_final_plane_composite(ortho, draw_checkerboard); } m_layers_merge.rtt(plane_index).unbindFramebuffer(); diff --git a/src/canvas.h b/src/canvas.h index e54a115..0e0eb1d 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -276,6 +276,9 @@ private: bool use_blend, bool copy_blend_destination, bool draw_checkerboard); + void draw_merge_final_plane_composite( + const glm::mat4& ortho, + bool draw_checkerboard); void stroke_draw_dual_pass( const std::vector& frames_dual, const std::array& dual_pass_texture_bindings,