VSE: speedup timeline drawing, and improve waveform display #115311

Merged
Aras Pranckevicius merged 17 commits from aras_p/blender:vse-draw-opt into main 2023-11-29 20:25:30 +01:00
4 changed files with 27 additions and 6 deletions
Showing only changes of commit cfcd46d855 - Show all commits

View File

@ -1517,13 +1517,10 @@ static void rna_Sequence_separate(ID *id, Sequence *seqm, Main *bmain)
/* Find channel owner. If nullptr, owner is `Editing`, otherwise it's `Sequence`. */
static Sequence *rna_SeqTimelineChannel_owner_get(Editing *ed, SeqTimelineChannel *channel)
{
blender::VectorSet strips = SEQ_query_all_strips_recursive(&ed->seqbase);
blender::VectorSet strips = SEQ_query_all_meta_strips_recursive(&ed->seqbase);
Sequence *channel_owner = nullptr;
for (Sequence *seq : strips) {
if (seq->type != SEQ_TYPE_META) {
continue;
}
if (BLI_findindex(&seq->channels, channel) != -1) {
channel_owner = seq;
break;

View File

@ -87,6 +87,13 @@ blender::VectorSet<Sequence *> SEQ_query_all_strips(ListBase *seqbase);
* \return set of strips
*/
blender::VectorSet<Sequence *> SEQ_query_all_strips_recursive(ListBase *seqbase);
/**
* Query all meta strips in seqbase and nested meta strips.
*
* \param seqbase: ListBase in which strips are queried
* \return set of meta strips
*/
blender::VectorSet<Sequence *> SEQ_query_all_meta_strips_recursive(ListBase *seqbase);
/**
* Query all effect strips that are directly or indirectly connected to seq_reference.

View File

@ -92,6 +92,16 @@ static void query_all_strips_recursive(ListBase *seqbase, VectorSet<Sequence *>
}
}
static void query_all_meta_strips_recursive(ListBase *seqbase, VectorSet<Sequence *> &strips)
{
LISTBASE_FOREACH (Sequence *, seq, seqbase) {
if (seq->type == SEQ_TYPE_META) {
query_all_meta_strips_recursive(&seq->seqbase, strips);
strips.add(seq);
}
}
}
VectorSet<Sequence *> SEQ_query_all_strips_recursive(ListBase *seqbase)
{
VectorSet<Sequence *> strips;
@ -99,6 +109,13 @@ VectorSet<Sequence *> SEQ_query_all_strips_recursive(ListBase *seqbase)
return strips;
}
VectorSet<Sequence *> SEQ_query_all_meta_strips_recursive(ListBase *seqbase)
{
VectorSet<Sequence *> strips;
query_all_meta_strips_recursive(seqbase, strips);
return strips;
}
VectorSet<Sequence *> SEQ_query_all_strips(ListBase *seqbase)
{
VectorSet<Sequence *> strips;

View File

@ -387,10 +387,10 @@ ListBase *SEQ_get_seqbase_by_seq(const Scene *scene, Sequence *seq)
Sequence *SEQ_get_meta_by_seqbase(ListBase *seqbase_main, ListBase *meta_seqbase)
{
blender::VectorSet strips = SEQ_query_all_strips_recursive(seqbase_main);
blender::VectorSet strips = SEQ_query_all_meta_strips_recursive(seqbase_main);
for (Sequence *seq : strips) {
if (seq->type == SEQ_TYPE_META && &seq->seqbase == meta_seqbase) {
if (&seq->seqbase == meta_seqbase) {
return seq;
}
}