Extract draw merge final plane composite

This commit is contained in:
2026-06-13 23:37:19 +02:00
parent e00f513126
commit 666c4dd308
2 changed files with 47 additions and 37 deletions

View File

@@ -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<StrokeFrame>& frames_dual,
const std::array<pp::panopainter::LegacyCanvasStrokeTextureBinding, 1>& dual_pass_texture_bindings,
@@ -1739,43 +1782,7 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> 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();

View File

@@ -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<StrokeFrame>& frames_dual,
const std::array<pp::panopainter::LegacyCanvasStrokeTextureBinding, 1>& dual_pass_texture_bindings,