[Bf-blender-cvs] [80313262627] master: Revert "VSE UX: Make Speed Effect strips more user friendly."

Germano Cavalcante noreply at git.blender.org
Sat Jul 24 00:00:29 CEST 2021


Commit: 8031326262726c63d0881317d6bfbf4bd17b323a
Author: Germano Cavalcante
Date:   Fri Jul 23 18:59:06 2021 -0300
Branches: master
https://developer.blender.org/rB8031326262726c63d0881317d6bfbf4bd17b323a

Revert "VSE UX: Make Speed Effect strips more user friendly."

This reverts commit 3123f33380b35ae93afee0a30f36bc7181927b28 and
a092baa7f90b2d5f13771d46f64ff5cf86cc5a05.

===================================================================

M	source/blender/editors/space_sequencer/sequencer_draw.c
M	source/blender/sequencer/intern/effects.c
M	source/blender/sequencer/intern/effects.h

===================================================================

diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 57c65fa56c2..cdbe5bc63ce 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -92,8 +92,6 @@
 
 #include "MEM_guardedalloc.h"
 
-#include "intern/effects.h"
-
 /* Own include. */
 #include "sequencer_intern.h"
 
@@ -1010,104 +1008,46 @@ static void fcurve_batch_add_verts(GPUVertBuf *vbo,
  * - Volume for sound strips.
  * - Opacity for the other types.
  */
-static void draw_seq_fcurve_overlay(Scene *scene,
-                                    View2D *v2d,
-                                    Sequence *seq,
-                                    float x1,
-                                    float y1,
-                                    float x2,
-                                    float y2,
-                                    float pixelx,
-                                    float pixely)
+static void draw_seq_fcurve_overlay(
+    Scene *scene, View2D *v2d, Sequence *seq, float x1, float y1, float x2, float y2, float pixelx)
 {
-  /* Clamp curve evaluation to the editor's borders. */
-  const int eval_start = max_ff(x1, v2d->cur.xmin);
-  const int eval_end = min_ff(x2, v2d->cur.xmax + 1);
-  if (eval_start >= eval_end) {
-    return;
-  }
-
-  const float y_height = y2 - y1;
-  double curve_val;
-  GPUVertBuf *vbo = NULL;
-  uint vert_count = 0;
+  FCurve *fcu;
 
-  GPUVertFormat format = {0};
-  GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
-
-  const char *prop_name = NULL;
-  if (seq->type == SEQ_TYPE_SPEED) {
-    SpeedControlVars *v = (SpeedControlVars *)seq->effectdata;
-    switch (v->speed_control_type) {
-      case SEQ_SPEED_MULTIPLY: {
-        prop_name = "speed_factor";
-        break;
-      }
-      case SEQ_SPEED_FRAME_NUMBER: {
-        prop_name = "speed_frame_number";
-        break;
-      }
-      case SEQ_SPEED_LENGTH: {
-        prop_name = "speed_length";
-        break;
-      }
-      case SEQ_SPEED_STRETCH: {
-        break;
-      }
-    }
-  }
-  else if (seq->type == SEQ_TYPE_SOUND_RAM) {
-    prop_name = "volume";
+  if (seq->type == SEQ_TYPE_SOUND_RAM) {
+    fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "volume", 0, NULL);
   }
   else {
-    prop_name = "blend_alpha";
+    fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "blend_alpha", 0, NULL);
   }
 
-  FCurve *fcu = NULL;
-  if (prop_name) {
-    fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, prop_name, 0, NULL);
-  }
+  if (fcu && !BKE_fcurve_is_empty(fcu)) {
 
-  float ymax = 1.0f;
-  float ymin = 0.0f;
+    /* Clamp curve evaluation to the editor's borders. */
+    int eval_start = max_ff(x1, v2d->cur.xmin);
+    int eval_end = min_ff(x2, v2d->cur.xmax + 1);
 
-  if (fcu && !BKE_fcurve_is_empty(fcu)) {
     int eval_step = max_ii(1, floor(pixelx));
-    uint max_verts = 2 * ((eval_end - eval_start) / eval_step + 1);
 
-    vbo = GPU_vertbuf_create_with_format(&format);
+    if (eval_start >= eval_end) {
+      return;
+    }
+
+    GPUVertFormat format = {0};
+    GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+    GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
+
+    uint max_verts = 2 * ((eval_end - eval_start) / eval_step + 1);
     GPU_vertbuf_data_alloc(vbo, max_verts);
+    uint vert_count = 0;
 
+    const float y_height = y2 - y1;
+    float curve_val;
     float prev_val = INT_MIN;
     bool skip = false;
 
-    if (seq->type == SEQ_TYPE_SPEED) {
-      BKE_fcurve_calc_bounds(fcu, NULL, NULL, &ymin, &ymax, false, false);
-      ymin = min_ff(ymin, 0.0f);
-      SpeedControlVars *v = (SpeedControlVars *)seq->effectdata;
-      switch (v->speed_control_type) {
-        case SEQ_SPEED_LENGTH: {
-          ymax = max_ff(ymax, 100.0f);
-          break;
-        }
-        case SEQ_SPEED_FRAME_NUMBER: {
-          ymax = max_ff(ymax, (float)seq_effect_speed_get_strip_content_length(seq->seq1));
-          break;
-        }
-        case SEQ_SPEED_MULTIPLY: {
-          ymax = max_ff(ymax, 1.0f);
-        }
-      }
-    }
-
     for (int timeline_frame = eval_start; timeline_frame <= eval_end;
          timeline_frame += eval_step) {
-
       curve_val = evaluate_fcurve(fcu, timeline_frame);
-      if (seq->type == SEQ_TYPE_SPEED) {
-        curve_val = ratiof(ymin, ymax, curve_val);
-      }
-
       CLAMP(curve_val, 0.0f, 1.0f);
 
       /* Avoid adding adjacent verts that have the same value. */
@@ -1126,70 +1066,20 @@ static void draw_seq_fcurve_overlay(Scene *scene,
       fcurve_batch_add_verts(vbo, y1, y2, y_height, timeline_frame, curve_val, &vert_count);
       prev_val = curve_val;
     }
-  }
-  else {
-    /* Draw the values without f-curves. */
-    if (seq->type == SEQ_TYPE_SPEED) {
-      SpeedControlVars *v = (SpeedControlVars *)seq->effectdata;
-      if (v->speed_control_type != SEQ_SPEED_MULTIPLY) {
-        if (v->speed_control_type == SEQ_SPEED_FRAME_NUMBER) {
-          curve_val = ((float)v->speed_fader_frame_number /
-                       (float)seq_effect_speed_get_strip_content_length(seq->seq1));
-        }
-        else if (v->speed_control_type == SEQ_SPEED_LENGTH) {
-          curve_val = (v->speed_fader_length / 100.0f);
-        }
-        else {
-          BLI_assert(v->speed_control_type == SEQ_SPEED_STRETCH);
-          const int target_strip_length = seq_effect_speed_get_strip_content_length(seq->seq1);
-          if ((seq->seq1->enddisp != seq->seq1->start) && (target_strip_length != 0)) {
-            curve_val = (float)target_strip_length /
-                        (float)(seq->seq1->enddisp - seq->seq1->start);
-          }
-        }
-        if (curve_val < 0.0f) {
-          ymin = curve_val;
-          curve_val = 0.0f;
-        }
-        if (curve_val > 1.0f) {
-          ymax = curve_val;
-          curve_val = 1.0f;
-        }
 
-        vbo = GPU_vertbuf_create_with_format(&format);
-        GPU_vertbuf_data_alloc(vbo, 4);
-        fcurve_batch_add_verts(vbo, y1, y2, y_height, eval_start, curve_val, &vert_count);
-        fcurve_batch_add_verts(vbo, y1, y2, y_height, eval_end, curve_val, &vert_count);
-      }
-    }
-  }
-
-  if (vert_count > 0) {
-    GPUBatch *batch = GPU_batch_create(GPU_PRIM_TRI_STRIP, vbo, NULL);
+    GPUBatch *batch = GPU_batch_create_ex(GPU_PRIM_TRI_STRIP, vbo, NULL, GPU_BATCH_OWNS_VBO);
     GPU_vertbuf_data_len_set(vbo, vert_count);
     GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_UNIFORM_COLOR);
     GPU_batch_uniform_4f(batch, "color", 0.0f, 0.0f, 0.0f, 0.15f);
     GPU_blend(GPU_BLEND_ALPHA);
 
-    GPU_batch_draw(batch);
+    if (vert_count > 0) {
+      GPU_batch_draw(batch);
+    }
 
     GPU_blend(GPU_BLEND_NONE);
     GPU_batch_discard(batch);
   }
-  GPU_VERTBUF_DISCARD_SAFE(vbo);
-
-  if (ymin < 0.0f) {
-    /* Draw line at zero. */
-    float y_ratio = ratiof(ymin, ymax, 0.0f);
-    float y_orig = y1 + y_ratio * y_height;
-
-    uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
-    GPU_blend(GPU_BLEND_ALPHA);
-    immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
-    immUniformThemeColorShade(TH_CFRAME, -10);
-    immRectf(pos, eval_start, y_orig, eval_end, y_orig + (2 * pixely));
-    immUnbindProgram();
-  }
 }
 
 /* Draw visible strips. Bounds check are already made. */
@@ -1264,7 +1154,7 @@ static void draw_seq_strip(const bContext *C,
   }
 
   if ((sseq->flag & SEQ_SHOW_STRIP_OVERLAY) && (sseq->flag & SEQ_SHOW_FCURVES)) {
-    draw_seq_fcurve_overlay(scene, v2d, seq, x1, y1, x2, y2, pixelx, pixely);
+    draw_seq_fcurve_overlay(scene, v2d, seq, x1, y1, x2, y2, pixelx);
   }
 
   /* Draw sound strip waveform. */
diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c
index 316eceb6b73..7757271a2e5 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -3136,7 +3136,7 @@ static int early_out_speed(Sequence *UNUSED(seq), float UNUSED(facf0), float UNU
  * useful to use speed effect on these strips because they can be animated. This can be done by
  * using their length as is on timeline as content length. See T82698.
  */
-int seq_effect_speed_get_strip_content_length(const Sequence *seq)
+static int seq_effect_speed_get_strip_content_length(const Sequence *seq)
 {
   if ((seq->type & SEQ_TYPE_EFFECT) != 0 && SEQ_effect_get_num_inputs(seq->type) == 0) {
     return seq->enddisp - seq->startdisp;
diff --git a/source/blender/sequencer/intern/effects.h b/source/blender/sequencer/intern/effects.h
index de9c886aa57..1bce4f324c3 100644
--- a/source/blender/sequencer/intern/effects.h
+++ b/source/blender/sequencer/intern/effects.h
@@ -39,7 +39,6 @@ struct Sequence;
  */
 
 struct SeqEffectHandle seq_effect_get_sequence_blend(struct Sequence *seq);
-int seq_effect_speed_get_strip_content_length(const struct Sequence *seq);
 void seq_effect_speed_rebuild_map(struct Scene *scene, struct Sequence *seq, bool force);
 float seq_speed_effect_target_frame_get(const struct SeqRenderData *context,
                                         struct Sequence *seq,



More information about the Bf-blender-cvs mailing list