Merge branch 'blender-v4.2-release'

This commit is contained in:
Richard Antalik 2024-07-01 23:26:21 +02:00
commit 639acb2b5d
4 changed files with 28 additions and 16 deletions

@ -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) {