Extract draw merge plane dispatch helper

This commit is contained in:
2026-06-14 00:31:23 +02:00
parent 4c164f4f73
commit e8fe66da10

View File

@@ -514,6 +514,16 @@ static void execute_canvas_draw_merge_plane_final_composite(
bool draw_checkerboard, bool draw_checkerboard,
bool use_blend); bool use_blend);
static void execute_canvas_draw_merge_plane_dispatch(
Canvas& canvas,
int plane_index,
const std::vector<std::shared_ptr<Layer>>& 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( static pp::panopainter::LegacyCanvasDrawMergeLayerCompositeExecution make_canvas_draw_merge_branch_dispatch(
Canvas& canvas, Canvas& canvas,
int plane_index, int plane_index,
@@ -733,49 +743,70 @@ static void execute_canvas_draw_merge_plane_iteration(
if (!faces[plane_index]) if (!faces[plane_index])
continue; continue;
canvas.m_layers_merge.rtt(plane_index).bindFramebuffer(); execute_canvas_draw_merge_plane_dispatch(
pp::panopainter::execute_legacy_canvas_draw_merge_plane_setup( canvas,
pp::panopainter::LegacyCanvasDrawMergePlaneSetupUniforms { plane_index,
.checkerboard = { layers,
.mvp = ortho, brush,
.colorize = false, ortho,
}, use_blend,
.use_blend = use_blend, copy_blend_destination,
.draw_checkerboard = 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_dispatch(
Canvas& canvas,
int plane_index,
const std::vector<std::shared_ptr<Layer>>& 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( static void execute_canvas_draw_merge_plane_final_composite(
Canvas& canvas, Canvas& canvas,
const glm::mat4& ortho, const glm::mat4& ortho,