Extract Canvas draw_merge plane setup helper
This commit is contained in:
@@ -1371,26 +1371,29 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
||||
continue;
|
||||
|
||||
m_layers_merge.rtt(plane_index).bindFramebuffer();
|
||||
m_layers_merge.rtt(plane_index).clear({ 1, 1, 1, 0 });
|
||||
|
||||
if (use_blend)
|
||||
{
|
||||
apply_canvas_capability(blend_state(), false);
|
||||
m_layers_merge.rtt(plane_index).clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (draw_checkerboard)
|
||||
{
|
||||
pp::panopainter::setup_legacy_canvas_draw_merge_checkerboard_shader(
|
||||
pp::panopainter::LegacyCanvasDrawMergeCheckerboardUniforms {
|
||||
.mvp = ortho,
|
||||
.colorize = false,
|
||||
});
|
||||
m_plane.draw_fill();
|
||||
}
|
||||
apply_canvas_capability(blend_state(), true);
|
||||
}
|
||||
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++)
|
||||
{
|
||||
|
||||
@@ -87,6 +87,19 @@ struct LegacyCanvasDrawMergeLayerTextureExecution {
|
||||
std::function<void()> unbind_layer_texture;
|
||||
};
|
||||
|
||||
struct LegacyCanvasDrawMergePlaneSetupUniforms {
|
||||
LegacyCanvasDrawMergeCheckerboardUniforms checkerboard;
|
||||
bool use_blend = false;
|
||||
bool draw_checkerboard = false;
|
||||
};
|
||||
|
||||
struct LegacyCanvasDrawMergePlaneSetupExecution {
|
||||
std::function<void()> clear_plane;
|
||||
std::function<void()> disable_blend;
|
||||
std::function<void()> enable_blend;
|
||||
std::function<void()> draw;
|
||||
};
|
||||
|
||||
struct LegacyCanvasDrawMergeFinalPlaneCompositeUniforms {
|
||||
LegacyCanvasDrawMergeCheckerboardUniforms checkerboard;
|
||||
LegacyCanvasDrawMergeTextureUniforms texture;
|
||||
@@ -291,6 +304,26 @@ inline void execute_legacy_canvas_draw_merge_layer_texture(
|
||||
execution.unbind_layer_texture();
|
||||
}
|
||||
|
||||
inline void execute_legacy_canvas_draw_merge_plane_setup(
|
||||
const LegacyCanvasDrawMergePlaneSetupUniforms& uniforms,
|
||||
const LegacyCanvasDrawMergePlaneSetupExecution& execution)
|
||||
{
|
||||
execution.clear_plane();
|
||||
|
||||
if (uniforms.use_blend) {
|
||||
execution.disable_blend();
|
||||
execution.clear_plane();
|
||||
return;
|
||||
}
|
||||
|
||||
if (uniforms.draw_checkerboard) {
|
||||
setup_legacy_canvas_draw_merge_checkerboard_shader(uniforms.checkerboard);
|
||||
execution.draw();
|
||||
}
|
||||
|
||||
execution.enable_blend();
|
||||
}
|
||||
|
||||
inline void execute_legacy_canvas_draw_merge_final_plane_composite(
|
||||
const LegacyCanvasDrawMergeFinalPlaneCompositeUniforms& uniforms,
|
||||
const LegacyCanvasDrawMergeFinalPlaneCompositeExecution& execution)
|
||||
|
||||
Reference in New Issue
Block a user