fix layer and frame duplicate

This commit is contained in:
2019-11-04 15:03:21 +01:00
parent adc64ad42e
commit 4b6316bf68
5 changed files with 38 additions and 13 deletions

View File

@@ -169,8 +169,9 @@ void App::init_sidebar()
};
layers->on_layer_add = [this](Node*, std::shared_ptr<class Layer> layer, int index) {
canvas->m_canvas->layer_add(layers->m_layers.back()->m_label_text.c_str(), layer, index);
canvas->m_canvas->m_unsaved = true;
Canvas::I->layer_add(layers->m_layers.back()->m_label_text.c_str(), layer, index);
Canvas::I->m_unsaved = true;
Canvas::I->anim_update();
animation->load_layers();
title_update();
};
@@ -179,17 +180,30 @@ void App::init_sidebar()
Canvas::I->layer_add(layers->m_layers.back()->m_label_text.c_str(), nullptr, source_index + 1);
auto& dst = Canvas::I->m_layers[source_index + 1];
auto& src = Canvas::I->m_layers[source_index];
for (int i = 0; i < 6; i++)
for (int i = 1; i < src->frames_count(); i++)
dst->add_frame();
Canvas::I->anim_update();
for (int frame = 0; frame < src->frames_count(); frame++)
{
if (!src->face(i))
continue;
dst->rtt(i).copy(src->rtt(i));
dst->face(i) = src->face(i);
dst->box(i) = src->box(i);
dst->m_opacity = src->m_opacity;
dst->m_blend_mode = src->m_blend_mode;
dst->m_alpha_locked = src->m_alpha_locked;
for (int i = 0; i < 6; i++)
{
if (!src->face(i))
continue;
bool loaded = src->frame(frame).gpu_load();
dst->frame(frame).gpu_load();
dst->rtt(i, frame).copy(src->rtt(i));
dst->face(i, frame) = src->face(i);
dst->box(i, frame) = src->box(i);
if (!loaded)
{
dst->frame(frame).gpu_unload();
src->frame(frame).gpu_unload();
}
}
}
dst->m_opacity = src->m_opacity;
dst->m_blend_mode = src->m_blend_mode;
dst->m_alpha_locked = src->m_alpha_locked;
Canvas::I->m_unsaved = true;
animation->load_layers();
title_update();