Merge branch 'blender-v4.2-release'
This commit is contained in:
commit
639acb2b5d
@ -116,8 +116,7 @@ void SubsurfaceModule::precompute_samples_location()
|
||||
double golden_angle = M_PI * (3.0 - sqrt(5.0));
|
||||
for (auto i : IndexRange(data_.sample_len)) {
|
||||
float theta = golden_angle * i + M_PI * 2.0f * rand_u;
|
||||
/* Scale using rand_v in order to keep first sample always at center. */
|
||||
float x = (1.0f + (rand_v / data_.sample_len)) * (i / float(data_.sample_len));
|
||||
float x = (rand_v + i) / data_.sample_len;
|
||||
float r = SubsurfaceModule::burley_sample(d, x);
|
||||
data_.samples[i].x = cosf(theta) * r;
|
||||
data_.samples[i].y = sinf(theta) * r;
|
||||
|
@ -58,6 +58,9 @@ static void sequencer_retiming_data_show_selection(ListBase *seqbase)
|
||||
if ((seq->flag & SELECT) == 0) {
|
||||
continue;
|
||||
}
|
||||
if (!SEQ_retiming_is_allowed(seq)) {
|
||||
continue;
|
||||
}
|
||||
seq->flag |= SEQ_SHOW_RETIMING;
|
||||
}
|
||||
}
|
||||
@ -68,6 +71,9 @@ static void sequencer_retiming_data_hide_selection(ListBase *seqbase)
|
||||
if ((seq->flag & SELECT) == 0) {
|
||||
continue;
|
||||
}
|
||||
if (!SEQ_retiming_is_allowed(seq)) {
|
||||
continue;
|
||||
}
|
||||
seq->flag &= ~SEQ_SHOW_RETIMING;
|
||||
}
|
||||
}
|
||||
@ -137,6 +143,10 @@ static bool retiming_poll(bContext *C)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------- */
|
||||
/** \name Retiming Reset
|
||||
* \{ */
|
||||
|
||||
static void retiming_key_overlap(Scene *scene, Sequence *seq)
|
||||
{
|
||||
ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene));
|
||||
@ -149,19 +159,18 @@ static void retiming_key_overlap(Scene *scene, Sequence *seq)
|
||||
SEQ_transform_handle_overlap(scene, seqbase, strips, dependant, true);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------- */
|
||||
/** \name Retiming Reset
|
||||
* \{ */
|
||||
|
||||
static int sequencer_retiming_reset_exec(bContext *C, wmOperator * /*op*/)
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
const Editing *ed = SEQ_editing_get(scene);
|
||||
Sequence *seq = ed->act_seq;
|
||||
|
||||
SEQ_retiming_data_clear(seq);
|
||||
for (Sequence *seq : SEQ_query_selected_strips(ed->seqbasep)) {
|
||||
if (SEQ_retiming_is_allowed(seq)) {
|
||||
SEQ_retiming_data_clear(seq);
|
||||
retiming_key_overlap(scene, seq);
|
||||
}
|
||||
}
|
||||
|
||||
retiming_key_overlap(scene, seq);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@ -219,6 +228,9 @@ static int retiming_key_add_from_selection(bContext *C,
|
||||
bool inserted = false;
|
||||
|
||||
for (Sequence *seq : strips) {
|
||||
if (!SEQ_retiming_is_allowed(seq)) {
|
||||
continue;
|
||||
}
|
||||
inserted |= retiming_key_add_new_for_seq(C, op, seq, timeline_frame);
|
||||
}
|
||||
|
||||
@ -313,17 +325,14 @@ static bool freeze_frame_add_new_for_seq(const bContext *C,
|
||||
SeqRetimingKey *key = SEQ_retiming_add_key(scene, seq, timeline_frame);
|
||||
|
||||
if (key == nullptr) {
|
||||
key = SEQ_retiming_key_get_by_timeline_frame(scene, seq, timeline_frame);
|
||||
BKE_report(op->reports, RPT_WARNING, "Cannot create freeze frame");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (SEQ_retiming_key_is_transition_start(key)) {
|
||||
BKE_report(op->reports, RPT_WARNING, "Cannot create key inside of speed transition");
|
||||
return false;
|
||||
}
|
||||
if (key == nullptr) {
|
||||
BKE_report(op->reports, RPT_WARNING, "Cannot create freeze frame");
|
||||
return false;
|
||||
}
|
||||
|
||||
SeqRetimingKey *freeze = SEQ_retiming_add_freeze_frame(scene, seq, key, duration);
|
||||
|
||||
@ -345,6 +354,7 @@ static bool freeze_frame_add_from_strip_selection(bContext *C,
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
blender::VectorSet<Sequence *> strips = ED_sequencer_selected_strips_from_context(C);
|
||||
strips.remove_if([&](Sequence *seq) { return !SEQ_retiming_is_allowed(seq); });
|
||||
const int timeline_frame = BKE_scene_frame_get(scene);
|
||||
bool success = false;
|
||||
|
||||
@ -643,6 +653,7 @@ static int strip_speed_set_exec(bContext *C, const wmOperator *op)
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
blender::VectorSet<Sequence *> strips = ED_sequencer_selected_strips_from_context(C);
|
||||
strips.remove_if([&](Sequence *seq) { return !SEQ_retiming_is_allowed(seq); });
|
||||
|
||||
for (Sequence *seq : strips) {
|
||||
SeqRetimingKey *key = ensure_left_and_right_keys(C, seq);
|
||||
|
@ -923,7 +923,8 @@ static ImBuf *seq_render_effect_strip_impl(const SeqRenderData *context,
|
||||
for (i = 0; i < 3; i++) {
|
||||
/* Speed effect requires time remapping of `timeline_frame` for input(s). */
|
||||
if (input[0] && seq->type == SEQ_TYPE_SPEED) {
|
||||
float target_frame = seq_speed_effect_target_frame_get(scene, seq, timeline_frame, i);
|
||||
int target_frame = floor(
|
||||
seq_speed_effect_target_frame_get(scene, seq, timeline_frame, i));
|
||||
ibuf[i] = seq_render_strip(context, state, input[0], target_frame);
|
||||
}
|
||||
else { /* Other effects. */
|
||||
|
@ -62,10 +62,11 @@ float SEQ_give_frame_index(const Scene *scene, Sequence *seq, float timeline_fra
|
||||
float frame_index;
|
||||
float sta = SEQ_time_start_frame_get(seq);
|
||||
float end = SEQ_time_content_end_frame_get(scene, seq) - 1;
|
||||
const float frame_index_max = seq->len - 1;
|
||||
float frame_index_max = seq->len - 1;
|
||||
|
||||
if (seq->type & SEQ_TYPE_EFFECT) {
|
||||
end = SEQ_time_right_handle_frame_get(scene, seq);
|
||||
frame_index_max = end - sta;
|
||||
}
|
||||
|
||||
if (end < sta) {
|
||||
|
Loading…
Reference in New Issue
Block a user