diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-02-21 12:01:12 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-02-21 12:03:33 +0400 |
commit | b3bc9e4f775ed285d1431086c4cb86b3e2a8e0c2 (patch) | |
tree | 796d901a237cd1956fa1781dc34650c3d8b0d409 /source/blender/blenkernel/intern | |
parent | 6c32192850357be2df171fd384c06678c0f57121 (diff) |
Fix T38598: RGBA images don't blend well in VSE with Cross Effect Strip
The issue was caused by the fact that sequencer used to cross-over effect
result with strips used for this effect, which is really stupid.
Now made it so strips which are used for effect inputs are not in the
render stack to be sure they would only be used by effect itself and
wouldn't be blended in any other way.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index c25b3da15eb..86cf04eded8 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -1158,19 +1158,43 @@ StripElem *BKE_sequencer_give_stripelem(Sequence *seq, int cfra) static int evaluate_seq_frame_gen(Sequence **seq_arr, ListBase *seqbase, int cfra) { Sequence *seq; - int totseq = 0; + Sequence *effect_inputs[MAXSEQ + 1]; + int i, totseq = 0, num_effect_inputs = 0; memset(seq_arr, 0, sizeof(Sequence *) * (MAXSEQ + 1)); seq = seqbase->first; while (seq) { if (seq->startdisp <= cfra && seq->enddisp > cfra) { + if ((seq->type & SEQ_TYPE_EFFECT)) { + if (seq->seq1) { + effect_inputs[num_effect_inputs++] = seq->seq1; + } + + if (seq->seq2) { + effect_inputs[num_effect_inputs++] = seq->seq2; + } + + if (seq->seq3) { + effect_inputs[num_effect_inputs++] = seq->seq3; + } + } + seq_arr[seq->machine] = seq; totseq++; } seq = seq->next; } + /* Drop strips which are used for effect inputs, we don't want + *them to blend into render stack in any other way than effect + * string rendering. + */ + for (i = 0; i < num_effect_inputs; i++) { + seq = effect_inputs[i]; + seq_arr[seq->machine] = NULL; + } + return totseq; } |