Extract menu, stylus, and canvas draw helpers
This commit is contained in:
@@ -439,34 +439,33 @@ void NodeCanvas::draw()
|
||||
apply_node_canvas_capability(pp::renderer::gl::depth_test_state(), false);
|
||||
|
||||
const auto& b = m_canvas->m_current_stroke->m_brush;
|
||||
|
||||
for (size_t i = 0; i < m_canvas->m_layers.size(); i++)
|
||||
{
|
||||
auto layer_index = i;
|
||||
for (int plane_index = 0; plane_index < 6; plane_index++)
|
||||
{
|
||||
const auto onion_range_result = pp::app::plan_animation_onion_frame_range(
|
||||
pp::panopainter::execute_legacy_canvas_draw_layer_traversal(
|
||||
m_canvas->m_layers.size(),
|
||||
[&](size_t layer_index) {
|
||||
return pp::app::plan_animation_onion_frame_range(
|
||||
m_canvas->m_layers[layer_index]->frames_count(),
|
||||
m_canvas->m_layers[layer_index]->m_frame_index,
|
||||
App::I->animation->get_onion_size());
|
||||
if (!onion_range_result) {
|
||||
LOG("NodeCanvas onion frame range failed: %s", onion_range_result.status().message);
|
||||
continue;
|
||||
}
|
||||
const auto onion_range = onion_range_result.value();
|
||||
},
|
||||
[&](size_t layer_index, int plane_index, int first_frame, int last_frame) {
|
||||
bool faces = false;
|
||||
for (int frame = onion_range.first_frame; frame <= onion_range.last_frame; frame++)
|
||||
for (int frame = first_frame; frame <= last_frame; ++frame)
|
||||
faces |= m_canvas->m_layers[layer_index]->face(plane_index, frame);
|
||||
if (!(m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index) &&
|
||||
(!m_canvas->m_layers[layer_index]->m_visible ||
|
||||
m_canvas->m_layers[layer_index]->m_opacity == .0f || !faces))
|
||||
continue;
|
||||
|
||||
int z = (int)(m_canvas->m_layers.size() - i);
|
||||
auto plane_mvp_z = proj * camera *
|
||||
glm::scale(glm::vec3(z + 1)) *
|
||||
if (m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
|
||||
return true;
|
||||
|
||||
return m_canvas->m_layers[layer_index]->m_visible &&
|
||||
m_canvas->m_layers[layer_index]->m_opacity != .0f &&
|
||||
faces;
|
||||
},
|
||||
[&](const pp::panopainter::LegacyCanvasDrawLayerVisit& visit, const auto& onion_range) {
|
||||
const auto layer_index = visit.layer_index;
|
||||
const auto plane_index = visit.plane_index;
|
||||
const auto plane_mvp_z = proj * camera *
|
||||
glm::scale(glm::vec3(visit.z + 1)) *
|
||||
glm::eulerAngleYXZ(yaw, pitch, roll) *
|
||||
m_canvas->m_plane_transform[plane_index] *
|
||||
m_canvas->m_plane_transform[plane_index] *
|
||||
glm::translate(glm::vec3(0, 0, -1));
|
||||
|
||||
const auto draw_layer_frame = pp::panopainter::make_legacy_canvas_draw_merge_layer_frame_draw(
|
||||
@@ -480,8 +479,8 @@ void NodeCanvas::draw()
|
||||
m_canvas->m_current_stroke && m_canvas->m_current_mode == kCanvasMode::Erase && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index,
|
||||
m_canvas->m_current_stroke && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index,
|
||||
use_blend,
|
||||
onion_range.first_frame,
|
||||
onion_range.last_frame,
|
||||
visit.first_frame,
|
||||
visit.last_frame,
|
||||
[&](int frame) {
|
||||
return pp::app::animation_onion_frame_alpha(onion_range, frame);
|
||||
},
|
||||
@@ -649,9 +648,10 @@ void NodeCanvas::draw()
|
||||
#endif
|
||||
.draw_frame = draw_layer_frame,
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
[&](const char* message) {
|
||||
LOG("NodeCanvas onion frame range failed: %s", message);
|
||||
});
|
||||
if (use_blend)
|
||||
{
|
||||
m_cache_rtt.unbindFramebuffer();
|
||||
|
||||
Reference in New Issue
Block a user