From 1a28716e946a600052c74adee529d65dd6a215bc Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sun, 14 Jun 2026 00:22:37 +0200 Subject: [PATCH] Extract draw merge temporary paint request helper --- src/canvas.cpp | 63 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/src/canvas.cpp b/src/canvas.cpp index a3a734b..894b479 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1219,22 +1219,20 @@ void Canvas::stroke_draw_pad_face_callback_body( pad_color); } -void Canvas::draw_merge_temporary_paint_branch( +static auto make_canvas_draw_merge_temporary_paint_request( + Canvas& canvas, int layer_index, int plane_index, - std::shared_ptr layer, + const std::shared_ptr& layer, const Brush& brush, - const glm::mat4& ortho, - bool copy_blend_destination, - bool draw_checkerboard) + const glm::mat4& ortho) { - (void)draw_checkerboard; const auto stroke_material = canvas_stroke_material_plan(*brush, false); glm::vec2 patt_scale = glm::vec2(brush->m_pattern_scale); if (brush->m_pattern_flipx) patt_scale.x *= -1.f; if (brush->m_pattern_flipy) patt_scale.y *= -1.f; - const auto execution = pp::panopainter::make_legacy_canvas_draw_merge_temporary_paint_composite( + return pp::panopainter::make_legacy_canvas_draw_merge_temporary_paint_composite( [&] { pp::panopainter::setup_legacy_stroke_composite_shader( pp::panopainter::LegacyStrokeCompositeUniforms { @@ -1251,7 +1249,7 @@ void Canvas::draw_merge_temporary_paint_branch( .mvp = ortho, .layer_alpha = layer->m_opacity, .alpha_lock = layer->m_alpha_locked, - .mask_enabled = m_smask_active, + .mask_enabled = canvas.m_smask_active, .use_fragcoord = false, .blend_mode = brush->m_blend_mode, .use_dual = stroke_material.composite_pass.use_dual, @@ -1261,40 +1259,59 @@ void Canvas::draw_merge_temporary_paint_branch( }); }, [&] { - m_sampler.bind(0); - m_sampler.bind(1); - m_sampler.bind(2); - m_sampler.bind(3); - m_sampler_stencil.bind(4); + canvas.m_sampler.bind(0); + canvas.m_sampler.bind(1); + canvas.m_sampler.bind(2); + canvas.m_sampler.bind(3); + canvas.m_sampler_stencil.bind(4); }, [&] { set_active_texture_unit(0); - m_layers[layer_index]->rtt(plane_index).bindTexture(); + canvas.m_layers[layer_index]->rtt(plane_index).bindTexture(); set_active_texture_unit(1); - m_tmp[plane_index].bindTexture(); + canvas.m_tmp[plane_index].bindTexture(); set_active_texture_unit(2); - m_smask.rtt(plane_index).bindTexture(); + canvas.m_smask.rtt(plane_index).bindTexture(); set_active_texture_unit(3); if (stroke_material.composite_pass.use_dual) - m_tmp_dual[plane_index].bindTexture(); + canvas.m_tmp_dual[plane_index].bindTexture(); set_active_texture_unit(4); brush->m_pattern_texture ? brush->m_pattern_texture->bind() : unbind_texture_2d(); }, [&] { - m_plane.draw_fill(); + canvas.m_plane.draw_fill(); }, [&] { set_active_texture_unit(3); if (stroke_material.composite_pass.use_dual) - m_tmp_dual[plane_index].unbindTexture(); + canvas.m_tmp_dual[plane_index].unbindTexture(); set_active_texture_unit(2); - m_smask.rtt(plane_index).unbindTexture(); + canvas.m_smask.rtt(plane_index).unbindTexture(); set_active_texture_unit(1); - m_tmp[plane_index].unbindTexture(); + canvas.m_tmp[plane_index].unbindTexture(); set_active_texture_unit(0); - m_layers[layer_index]->rtt(plane_index).unbindTexture(); + canvas.m_layers[layer_index]->rtt(plane_index).unbindTexture(); }); - pp::panopainter::execute_legacy_canvas_draw_merge_temporary_composite(execution); +} + +void Canvas::draw_merge_temporary_paint_branch( + int layer_index, + int plane_index, + std::shared_ptr layer, + const Brush& brush, + const glm::mat4& ortho, + bool copy_blend_destination, + bool draw_checkerboard) +{ + (void)draw_checkerboard; + pp::panopainter::execute_legacy_canvas_draw_merge_temporary_composite( + make_canvas_draw_merge_temporary_paint_request( + *this, + layer_index, + plane_index, + layer, + brush, + ortho)); } void Canvas::draw_merge_branch_orchestration(