Extract draw merge plane iteration helper
This commit is contained in:
111
src/canvas.cpp
111
src/canvas.cpp
@@ -508,6 +508,68 @@ static void execute_canvas_draw_merge_final_plane_composite(
|
|||||||
pp::panopainter::execute_legacy_canvas_draw_merge_final_plane_composite(uniforms, execution);
|
pp::panopainter::execute_legacy_canvas_draw_merge_final_plane_composite(uniforms, execution);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void execute_canvas_draw_merge_plane_iteration(
|
||||||
|
Canvas& canvas,
|
||||||
|
const std::array<bool, 6>& faces,
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
for (int plane_index = 0; plane_index < 6; plane_index++)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_blend)
|
||||||
|
{
|
||||||
|
canvas.draw_merge_final_plane_composite(ortho, draw_checkerboard);
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas.m_layers_merge.rtt(plane_index).unbindFramebuffer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static auto make_canvas_stroke_mix_pass_shell(
|
static auto make_canvas_stroke_mix_pass_shell(
|
||||||
Canvas& canvas,
|
Canvas& canvas,
|
||||||
const glm::vec2& bb_min,
|
const glm::vec2& bb_min,
|
||||||
@@ -1794,56 +1856,15 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
// if not using shader blend, use gl rasterizer blend
|
// if not using shader blend, use gl rasterizer blend
|
||||||
apply_canvas_capability(depth_test_state(), false);
|
apply_canvas_capability(depth_test_state(), false);
|
||||||
|
|
||||||
for (int plane_index = 0; plane_index < 6; plane_index++)
|
execute_canvas_draw_merge_plane_iteration(
|
||||||
{
|
*this,
|
||||||
if (!faces[plane_index])
|
faces,
|
||||||
continue;
|
m_layers,
|
||||||
|
|
||||||
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 = [&] {
|
|
||||||
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 = [&] {
|
|
||||||
m_plane.draw_fill();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
for (int layer_index = 0; layer_index < m_layers.size(); layer_index++)
|
|
||||||
{
|
|
||||||
draw_merge_branch_orchestration(
|
|
||||||
plane_index,
|
|
||||||
layer_index,
|
|
||||||
m_layers[layer_index],
|
|
||||||
*b,
|
*b,
|
||||||
ortho,
|
ortho,
|
||||||
use_blend,
|
use_blend,
|
||||||
copy_blend_destination,
|
copy_blend_destination,
|
||||||
draw_checkerboard);
|
draw_checkerboard);
|
||||||
}
|
|
||||||
|
|
||||||
if (use_blend)
|
|
||||||
{
|
|
||||||
draw_merge_final_plane_composite(ortho, draw_checkerboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_layers_merge.rtt(plane_index).unbindFramebuffer();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::stroke_update(glm::vec3 point, float pressure)
|
void Canvas::stroke_update(glm::vec3 point, float pressure)
|
||||||
|
|||||||
Reference in New Issue
Block a user