From e8fe66da10cc4f439990cc2edc57fe6dc109334d Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sun, 14 Jun 2026 00:31:23 +0200 Subject: [PATCH] Extract draw merge plane dispatch helper --- src/canvas.cpp | 111 +++++++++++++++++++++++++++++++------------------ 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/src/canvas.cpp b/src/canvas.cpp index 8935afd..0e1d42c 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -514,6 +514,16 @@ static void execute_canvas_draw_merge_plane_final_composite( bool draw_checkerboard, bool use_blend); +static void execute_canvas_draw_merge_plane_dispatch( + Canvas& canvas, + int plane_index, + const std::vector>& layers, + const Brush& brush, + const glm::mat4& ortho, + bool use_blend, + bool copy_blend_destination, + bool draw_checkerboard); + static pp::panopainter::LegacyCanvasDrawMergeLayerCompositeExecution make_canvas_draw_merge_branch_dispatch( Canvas& canvas, int plane_index, @@ -733,49 +743,70 @@ static void execute_canvas_draw_merge_plane_iteration( if (!faces[plane_index]) continue; - canvas.m_layers_merge.rtt(plane_index).bindFramebuffer(); - pp::panopainter::execute_legacy_canvas_draw_merge_plane_setup( - pp::panopainter::LegacyCanvasDrawMergePlaneSetupUniforms { - .checkerboard = { - .mvp = ortho, - .colorize = false, - }, - .use_blend = use_blend, - .draw_checkerboard = draw_checkerboard, - }, - pp::panopainter::LegacyCanvasDrawMergePlaneSetupExecution { - .clear_plane = [&] { - canvas.m_layers_merge.rtt(plane_index).clear({ 1, 1, 1, 0 }); - }, - .disable_blend = [&] { - apply_canvas_capability(blend_state(), false); - }, - .enable_blend = [&] { - apply_canvas_capability(blend_state(), true); - }, - .draw = [&] { - canvas.m_plane.draw_fill(); - }, - }); - - for (int layer_index = 0; layer_index < layers.size(); layer_index++) - { - canvas.draw_merge_branch_orchestration( - plane_index, - layer_index, - layers[layer_index], - brush, - ortho, - use_blend, - copy_blend_destination, - draw_checkerboard); - } - - execute_canvas_draw_merge_plane_final_composite(canvas, ortho, draw_checkerboard, use_blend); - canvas.m_layers_merge.rtt(plane_index).unbindFramebuffer(); + execute_canvas_draw_merge_plane_dispatch( + canvas, + plane_index, + layers, + brush, + ortho, + use_blend, + copy_blend_destination, + draw_checkerboard); } } +static void execute_canvas_draw_merge_plane_dispatch( + Canvas& canvas, + int plane_index, + const std::vector>& layers, + const Brush& brush, + const glm::mat4& ortho, + bool use_blend, + bool copy_blend_destination, + bool draw_checkerboard) +{ + canvas.m_layers_merge.rtt(plane_index).bindFramebuffer(); + pp::panopainter::execute_legacy_canvas_draw_merge_plane_setup( + pp::panopainter::LegacyCanvasDrawMergePlaneSetupUniforms { + .checkerboard = { + .mvp = ortho, + .colorize = false, + }, + .use_blend = use_blend, + .draw_checkerboard = draw_checkerboard, + }, + pp::panopainter::LegacyCanvasDrawMergePlaneSetupExecution { + .clear_plane = [&] { + canvas.m_layers_merge.rtt(plane_index).clear({ 1, 1, 1, 0 }); + }, + .disable_blend = [&] { + apply_canvas_capability(blend_state(), false); + }, + .enable_blend = [&] { + apply_canvas_capability(blend_state(), true); + }, + .draw = [&] { + canvas.m_plane.draw_fill(); + }, + }); + + for (int layer_index = 0; layer_index < layers.size(); layer_index++) + { + canvas.draw_merge_branch_orchestration( + plane_index, + layer_index, + layers[layer_index], + brush, + ortho, + use_blend, + copy_blend_destination, + draw_checkerboard); + } + + execute_canvas_draw_merge_plane_final_composite(canvas, ortho, draw_checkerboard, use_blend); + canvas.m_layers_merge.rtt(plane_index).unbindFramebuffer(); +} + static void execute_canvas_draw_merge_plane_final_composite( Canvas& canvas, const glm::mat4& ortho,