65#include "RNA_prototypes.hh"
86 const char group_name[],
87 const char rna_path[],
92 if (
ELEM(
nullptr, ks, rna_path,
id)) {
100 short eq_id = 1, eq_path = 1, eq_index = 1, eq_group = 1;
108 if ((ksp->rna_path ==
nullptr) || !
STREQ(rna_path, ksp->rna_path)) {
113 if (ksp->array_index != array_index) {
123 if (eq_id && eq_path && eq_index && eq_group) {
135 ListBase *list,
const char idname[],
const char name[],
short flag,
short keyingflag)
166 const char group_name[],
167 const char rna_path[],
175 if (
ELEM(
nullptr, ks, rna_path)) {
176 CLOG_ERROR(&
LOG,
"no Keying Set and/or RNA Path to add path with");
189 CLOG_ERROR(&
LOG,
"destination already exists in Keying Set");
203 ksp->
group[0] =
'\0';
230 if (
ELEM(
nullptr, ks, ksp)) {
251 kspn->rna_path =
static_cast<char *
>(
MEM_dupallocN(kspn->rna_path));
288 if (list ==
nullptr) {
352 const char *rna_path,
353 const int array_index,
356 if (rna_path ==
nullptr) {
360 const char *path = rna_path;
367 "Animato: Invalid path. ID = '%s', '%s[%d]'",
368 (
ptr->owner_id) ? (
ptr->owner_id->name + 2) :
"<No ID>",
380 if (array_len && array_index >= array_len) {
383 "Animato: Invalid array index. ID = '%s', '%s[%d]', array length is %d",
384 (
ptr->owner_id) ? (
ptr->owner_id->name + 2) :
"<No ID>",
392 r_result->
prop_index = array_len ? array_index : -1;
397#define ANIMSYS_FLOAT_AS_BOOL(value) ((value) > (1.0f - FLT_EPSILON))
411 if (array_index != -1) {
413 orig_value =
float(orig_value_coerce);
417 orig_value =
float(orig_value_coerce);
422 if (array_index != -1) {
424 orig_value =
float(orig_value_coerce);
428 orig_value =
float(orig_value_coerce);
433 if (array_index != -1) {
435 orig_value =
float(orig_value_coerce);
439 orig_value =
float(orig_value_coerce);
445 orig_value =
float(orig_value_coerce);
452 if (r_value !=
nullptr) {
453 *r_value = orig_value;
474 if (old_value == value) {
481 if (array_index != -1) {
490 int value_coerce =
int(value);
492 if (array_index != -1) {
501 float value_coerce = value;
503 if (array_index != -1) {
512 const int value_coerce =
int(value);
531 if (
ptr->owner_id ==
nullptr) {
532 if (
ptr->type != &RNA_NlaStrip) {
549 const char *rna_path,
572 bool flush_to_original)
575 for (
FCurve *fcu : fcurves) {
585 if (flush_to_original) {
600 float r_quaternion[4])
606 r_quaternion[0] = 1.0f;
607 r_quaternion[1] = 0.0f;
608 r_quaternion[2] = 0.0f;
609 r_quaternion[3] = 0.0f;
611 for (
FCurve *quat_curve_fcu : quat_fcurves) {
612 const int array_index = quat_curve_fcu->array_index;
614 r_quaternion[array_index] =
calculate_fcurve(&quat_rna, quat_curve_fcu, anim_eval_context);
617 if (quat_fcurves.
size() < 4) {
631 const float blend_factor)
635 float current_quat[4];
638 float target_quat[4];
640 *anim_rna, quaternion_fcurves, anim_eval_context, target_quat);
642 float blended_quat[4];
643 interp_qt_qtqt(blended_quat, current_quat, target_quat, blend_factor);
653 const float blend_factor)
655 char *channel_to_skip =
nullptr;
656 int num_channels_to_skip = 0;
658 FCurve *fcu = fcurves[fcurve_index];
660 if (num_channels_to_skip) {
666 num_channels_to_skip--;
685 quat_fcurves.
append(quat_fcurve);
693 num_channels_to_skip = quat_fcurves.
size() - 1;
698 const float fcurve_value =
calculate_fcurve(&anim_rna, fcu, anim_eval_context);
701 float value_to_write;
703 value_to_write = (1 - blend_factor) * current_value + blend_factor * fcurve_value;
713 value_to_write = roundf(value_to_write);
722 value_to_write = fcurve_value;
795 if (
ELEM(
nullptr,
id, act)) {
799#ifdef WITH_ANIM_BAKLAVA
821 else if (act->
idroot != idcode) {
825 "AnimSys Safety Check Failed: Action '%s' is not meant to be used from ID-Blocks of "
826 "type %d such as '%s'\n",
844 if (
ELEM(
nullptr, act, agrp)) {
855 const auto visit_fcurve = [&](
FCurve *fcu) {
866#ifdef WITH_ANIM_BAKLAVA
876#ifdef WITH_ANIM_BAKLAVA
881 visit_fcurve(fcurve);
888 const int32_t action_slot_handle,
890 const bool flush_to_original)
893 if (act ==
nullptr) {
918 const int32_t action_slot_handle,
920 const float blend_factor)
959 const bool flush_to_original)
1005 const bool flush_to_original)
1010 float ctime = anim_eval_context->
eval_time;
1019 bool in_range =
IN_RANGE_INCL(ctime, strip->start, strip->end);
1021 switch (strip->extendmode) {
1026 in_range = ctime >= strip->start;
1039 if (ctime < strip->start) {
1040 if (strip == strips->
first) {
1055 strip = strip->prev;
1066 if (ctime > strip->end) {
1068 if (strip == strips->
last) {
1091 ctime = estrip->
start;
1094 ctime = estrip->
end;
1105 anim_eval_context, ctime);
1114 switch (estrip->
type) {
1116 if (estrip->
act ==
nullptr) {
1128 anim_eval_context, estrip->
start);
1130 anim_eval_context, estrip->
end);
1139 nes->
strip = estrip;
1155 const bool flush_to_original)
1158 single_tracks_list.
first = single_tracks_list.
last = single_strip;
1161 dst_list, &single_tracks_list, -1, anim_eval_context, flush_to_original);
1200 return ((
A->ptr.data !=
B->ptr.data) || (
A->prop !=
B->prop));
1212 MEM_callocN(byte_size,
"NlaEvalChannelSnapshot"));
1219 return nec_snapshot;
1248 snapshot->
base = base;
1257 return (index < snapshot->
size) ? snapshot->
channels[index] :
nullptr;
1264 snapshot->
size *= 2;
1268 size_t byte_size =
sizeof(*snapshot->
channels) * snapshot->
size;
1286 while (snapshot !=
nullptr) {
1288 if (nec_snapshot !=
nullptr) {
1289 return nec_snapshot;
1291 snapshot = snapshot->
base;
1304 if (*slot ==
nullptr) {
1312 *slot = nec_snapshot;
1321 if (snapshot->
channels !=
nullptr) {
1322 for (
int i = 0; i < snapshot->
size; i++) {
1324 if (nec_snapshot !=
nullptr) {
1332 snapshot->
base =
nullptr;
1343 nec->
key.~NlaEvalChannelKey();
1349 memset(nlaeval, 0,
sizeof(*nlaeval));
1379 if (index >= 0 && index < nec->base_snapshot.length) {
1398 "Animation: Invalid array index. ID = '%s', '%s[%d]', array length is %d",
1399 id ? (id->
name + 2) :
"<No ID>",
1441 for (
int i = 0; i <
length; i++) {
1442 r_values[i] =
float(tmp_bool[i]);
1449 for (
int i = 0; i <
length; i++) {
1450 r_values[i] =
float(tmp_int[i]);
1458 memset(r_values, 0,
sizeof(
float) *
length);
1484 for (
int i = 0; i <
length; i++) {
1485 if (r_values[i] == 0.0f) {
1517 nlaeval->
key_hash, key, (
void ***)&p_key, (
void ***)&p_key_nec);
1534 nec->
owner = nlaeval;
1562 if (path ==
nullptr) {
1575 *p_path_nec =
nullptr;
1584 "Animato: Invalid path. ID = '%s', '%s'",
1585 (
ptr->owner_id) ? (
ptr->owner_id->name + 2) :
"<No ID>",
1603 return *p_path_nec = nec;
1610 const float strip_value,
1611 const float blended_value,
1612 const float influence,
1613 float *r_lower_value)
1615 if (
IS_EQF(influence, 0.0f)) {
1616 *r_lower_value = blended_value;
1620 switch (blendmode) {
1622 *r_lower_value = blended_value - (strip_value * influence);
1626 *r_lower_value = blended_value + (strip_value * influence);
1631 const float denominator = (influence * strip_value + (1.0f - influence));
1632 if (
IS_EQF(denominator, 0.0f)) {
1639 if (
IS_EQF(blended_value, 0.0f)) {
1674 *r_lower_value = blended_value / denominator;
1684 if (
IS_EQF(influence, 1.0f)) {
1696 *r_lower_value = (blended_value - (strip_value * influence)) / (1.0f - influence);
1707 const float strip_value,
1708 const float blended_value,
1709 const float influence,
1710 float *r_lower_value)
1712 if (
IS_EQF(influence, 0.0f)) {
1713 *r_lower_value = blended_value;
1721 *r_lower_value = blended_value - (strip_value - base_value) * influence;
1724 if (
IS_EQF(strip_value, 0.0f)) {
1731 if (
IS_EQF(blended_value, 0.0f)) {
1744 *r_lower_value = 1.0f;
1751 if (
IS_EQF(base_value, 0.0f)) {
1755 *r_lower_value = blended_value /
powf(strip_value / base_value, influence);
1759 BLI_assert_msg(0,
"Use nla_combine_quaternion_get_inverted_lower_values()");
1768 const float blended_values[4],
1769 const float influence,
1770 float r_lower_value[4])
1772 if (
IS_EQF(influence, 0.0f)) {
1781 float tmp_strip_values[4], tmp_blended[4];
1789 mul_qt_qtqt(r_lower_value, tmp_blended, tmp_strip_values);
1795 const float lower_value,
1796 const float strip_value,
1797 const float influence)
1800 if (
IS_EQF(influence, 0.0f)) {
1805 switch (blendmode) {
1807 return lower_value + (strip_value * influence);
1810 return lower_value - (strip_value * influence);
1813 return influence * (lower_value * strip_value) + (1 - influence) * lower_value;
1824 return lower_value * (1.0f - influence) + (strip_value * influence);
1832 const float lower_value,
1833 const float strip_value,
1834 const float influence)
1837 if (
IS_EQF(influence, 0.0f)) {
1845 return lower_value + (strip_value - base_value) * influence;
1848 if (
IS_EQF(base_value, 0.0f)) {
1851 return lower_value *
powf(strip_value / base_value, influence);
1861 const float lower_value,
1862 const float blended_value,
1863 const float influence,
1864 float *r_strip_value)
1867 if (
IS_EQF(influence, 0.0f)) {
1871 switch (blendmode) {
1873 *r_strip_value = (blended_value - lower_value) / influence;
1877 *r_strip_value = (lower_value - blended_value) / influence;
1881 if (
IS_EQF(lower_value, 0.0f)) {
1883 if (
IS_EQF(blended_value, 0.0f)) {
1884 *r_strip_value = 1.0f;
1901 *r_strip_value = ((blended_value - lower_value) / (influence * lower_value)) + 1.0f;
1918 *r_strip_value = (blended_value - lower_value * (1.0f - influence)) / influence;
1926 const float lower_value,
1927 const float blended_value,
1928 const float influence,
1929 float *r_strip_value)
1932 if (
IS_EQF(influence, 0.0f)) {
1939 *r_strip_value = base_value + (blended_value - lower_value) / influence;
1943 if (
IS_EQF(base_value, 0.0f)) {
1947 if (
IS_EQF(lower_value, 0.0f)) {
1949 if (
IS_EQF(blended_value, 0.0f)) {
1950 *r_strip_value = base_value;
1957 *r_strip_value = base_value *
powf(blended_value / lower_value, 1.0f / influence);
1971 const float strip_values[4],
1972 const float influence,
1973 float r_blended_value[4])
1975 float tmp_lower[4], tmp_strip_values[4];
1981 mul_qt_qtqt(r_blended_value, tmp_lower, tmp_strip_values);
1986 const float blended_values[4],
1987 const float influence,
1988 float r_strip_values[4])
1995 if (
IS_EQF(influence, 0.0f)) {
1998 float tmp_lower[4], tmp_blended[4];
2004 mul_qt_qtqt(r_strip_values, tmp_lower, tmp_blended);
2041 for (
int j = 0; j < 4; j++) {
2073 const float upper_influence,
2076 const bool has_influence = !
IS_EQF(upper_influence, 0.0f);
2077 if (upper_necs !=
nullptr && has_influence) {
2095 const float upper_influence,
2098 const bool has_influence = !
IS_EQF(upper_influence, 0.0f);
2099 if (upper_necs !=
nullptr && has_influence) {
2120 const int upper_blendmode,
2121 const float upper_influence,
2126 lower_necs, upper_necs, upper_influence, r_blended_necs))
2132 for (
int j = 0; j <
length; j++) {
2139 upper_blendmode, lower_necs->
values[j], upper_necs->
values[j], upper_influence);
2151 const float upper_influence,
2156 lower_necs, upper_necs, upper_influence, r_blended_necs))
2166 for (
int j = 0; j <
length; j++) {
2173 mix_mode, base_values[j], lower_necs->
values[j], upper_necs->
values[j], upper_influence);
2185 const float upper_influence,
2190 lower_necs, upper_necs, upper_influence, r_blended_necs))
2219 const int upper_blendmode,
2220 const float upper_influence,
2225 switch (upper_blendmode) {
2248 lower_necs, upper_necs, upper_blendmode, upper_influence, r_blended_necs);
2266 const int upper_blendmode,
2267 const float upper_influence,
2274 for (
int j = 0; j <
length; j++) {
2284 &r_upper_necs->
values[j]);
2299 const float upper_influence,
2310 for (
int j = 0; j <
length; j++) {
2321 &r_upper_necs->
values[j]);
2337 const float upper_influence,
2369 const int upper_blendmode,
2370 const float upper_influence,
2375 if (
IS_EQF(upper_influence, 0.0f)) {
2380 switch (upper_blendmode) {
2385 lower_necs, blended_necs, upper_influence, r_upper_necs);
2392 lower_necs, blended_necs, upper_influence, r_upper_necs);
2405 lower_necs, blended_necs, upper_blendmode, upper_influence, r_upper_necs);
2416 const int upper_blendmode,
2417 const float upper_influence,
2423 blended_necs, upper_necs, upper_influence, r_lower_necs))
2430 for (
int j = 0; j <
length; j++) {
2448 &r_lower_necs->
values[j]);
2457 const float upper_influence,
2463 blended_necs, upper_necs, upper_influence, r_lower_necs))
2472 for (
int j = 0; j <
length; j++) {
2491 &r_lower_necs->
values[j]);
2500 const float upper_influence,
2510 blended_necs, upper_necs, upper_influence, r_lower_necs))
2518 memcpy(r_lower_necs->
values, blended_necs->
values, 4 *
sizeof(
float));
2545 const int upper_blendmode,
2546 const float upper_influence,
2552 switch (upper_blendmode) {
2557 blended_necs, upper_necs, upper_influence, r_lower_necs);
2564 blended_necs, upper_necs, upper_influence, r_lower_necs);
2576 blended_necs, upper_necs, upper_blendmode, upper_influence, r_lower_necs);
2594 if (
ELEM(
nullptr, list1, list1->
first)) {
2595 if (list2 && list2->
first) {
2601 else if (
ELEM(
nullptr, list2, list2->
first)) {
2627 if (
ELEM(
nullptr, list1, list2)) {
2639 fcm1->
next =
nullptr;
2640 fcm2->
prev =
nullptr;
2663 &storage, modifiers,
nullptr, 0.0f,
evaltime);
2673 if (nec ==
nullptr) {
2685 necs->
values[fcu->array_index] = value;
2708 if (strip ==
nullptr) {
2712 if (strip->
act ==
nullptr) {
2713 CLOG_ERROR(&
LOG,
"NLA-Strip Eval Error: Strip '%s' has no Action", strip->
name);
2717 ListBase tmp_modifiers = {
nullptr,
nullptr};
2722 switch (evaluation_mode) {
2785 const bool flush_to_original)
2787 ListBase tmp_modifiers = {
nullptr,
nullptr};
2811 switch (evaluation_mode) {
2875 ptr,
channels, &tmp_modifiers, &tmp_nes, &snapshot1, anim_eval_context);
2880 if (necs ==
nullptr) {
2884 for (
int i = 0; i < necs->
length; i++) {
2898 ptr,
channels, &tmp_modifiers, &tmp_nes, &snapshot2, anim_eval_context);
2903 if (necs ==
nullptr) {
2907 for (
int i = 0; i < necs->
length; i++) {
2920 "This case shouldn't occur. "
2921 "Transitions assumed to not reference other transitions.");
2938 const bool flush_to_original)
2940 ListBase tmp_modifiers = {
nullptr,
nullptr};
2961 nullptr, &strip->
strips, -1, &child_context, flush_to_original);
3004 const bool flush_to_original)
3021 switch (strip->
type) {
3060 const bool flush_to_original)
3104 const bool flush_to_original)
3126 for (
int i = 0; i < nec_snapshot->
length; i++) {
3128 float value = nec_snapshot->
values[i];
3129 if (nec->is_array) {
3133 if (flush_to_original) {
3147 GSet *touched_actions)
3161 if (nec !=
nullptr) {
3180 GSet *touched_actions)
3186 ptr,
channels, strip->act, strip->action_slot_handle, touched_actions);
3242 const bool keyframing_to_strip,
3248 r_tweak_strip->
next = r_tweak_strip->
prev =
nullptr;
3260 if (!is_inplace_tweak) {
3268 if (keyframing_to_strip) {
3277 const bool keyframing_to_strip,
3282 memset(r_action_strip, 0,
sizeof(
NlaStrip));
3293 r_action_strip->
act = action;
3298 const float2 frame_range = action ? action->wrap().get_frame_range_of_keys(
true) :
3300 r_action_strip->
actstart = frame_range[0];
3301 r_action_strip->
actend = frame_range[1];
3305 r_action_strip->
end = r_action_strip->
actend;
3319 const bool actionstrip_evaluated = r_action_strip->
act && !soloing && eval_upper;
3320 if (!actionstrip_evaluated) {
3325 if (keyframing_to_strip) {
3361 const bool any_strip_evaluated)
3363 if (adt->
action ==
nullptr) {
3367 if (any_strip_evaluated) {
3390 if (adt ==
nullptr) {
3412 const bool flush_to_original)
3415 short track_index = 0;
3416 bool has_strips =
false;
3417 ListBase estrips = {
nullptr,
nullptr};
3436 if (nlt == tweaked_track) {
3440 &estrips, &tweak_strip, anim_eval_context, flush_to_original);
3444 &estrips, &nlt->
strips, track_index, anim_eval_context, flush_to_original);
3496 short track_index = 0;
3497 bool has_strips =
false;
3500 ListBase lower_estrips = {
nullptr,
nullptr};
3513 if (nlt == tweaked_track) {
3523 &lower_estrips, &nlt->
strips, track_index, anim_eval_context,
false);
3537 for (; nlt; nlt = nlt->
next, track_index++) {
3549 upper_estrips, &nlt->
strips, track_index, anim_eval_context,
false);
3571 nullptr, tweak_strip, anim_eval_context,
false);
3578 nullptr, action_strip, anim_eval_context,
false);
3620 const bool flush_to_original)
3628 &echannels,
ptr, adt, anim_eval_context, flush_to_original);
3629 if (did_evaluate_something) {
3640 return did_evaluate_something;
3647 for (
int i = 0; i < snapshot->
size; i++) {
3649 if (necs ==
nullptr) {
3667 const short upper_blendmode,
3668 const float upper_influence,
3676 if (upper_necs ==
nullptr && lower_necs ==
nullptr) {
3681 if (lower_necs ==
nullptr) {
3687 lower_necs, upper_necs, upper_blendmode, upper_influence, result_necs);
3694 const short upper_blendmode,
3695 const float upper_influence,
3702 if (blended_necs ==
nullptr) {
3709 if (lower_necs ==
nullptr) {
3715 lower_necs, blended_necs, upper_blendmode, upper_influence, result_necs);
3722 const short upper_blendmode,
3723 const float upper_influence,
3730 if (blended_necs ==
nullptr) {
3740 blended_necs, upper_necs, upper_blendmode, upper_influence, result_necs);
3774 if (ctx ==
nullptr) {
3799 r_values_mask.
fill(
false);
3801 if (r_force_all !=
nullptr) {
3802 *r_force_all =
false;
3806 for (
int i = 0; i <
count; i++) {
3807 if (!
ELEM(index, i, -1)) {
3811 remap_domain[i].set();
3815 if (context ==
nullptr || context->strip.act ==
nullptr) {
3816 r_values_mask = remap_domain;
3821 if (context->eval_strip ==
nullptr) {
3827 int blend_mode = context->strip.blendmode;
3828 float influence = context->strip.influence;
3833 r_values_mask = remap_domain;
3838 if (influence <= 0.0f) {
3843 NlaEvalData *eval_data = &context->lower_eval_data;
3848 key.
ptr = *prop_ptr;
3865 const bool can_force_all = r_force_all !=
nullptr;
3870 *r_force_all =
true;
3872 remap_domain.
fill(
true);
3887 &id_ptr, eval_data,
nullptr, nes, &blended_snapshot, anim_eval_context);
3892 &context->lower_eval_data.eval_snapshot,
3899 for (
int i = 0; i <
count; i++) {
3903 values[i] = blended_necs->
values[i];
3906 for (
int i = 0; i < blended_necs->
length; i++) {
3981 const bool flush_to_original)
3985 if (
ELEM(
nullptr,
id, adt)) {
3999 bool did_nla_evaluate_anything =
false;
4005 &id_ptr, adt, anim_eval_context, flush_to_original);
4008 if (!did_nla_evaluate_anything && adt->
action) {
4012 id_ptr, action, adt->
slot_handle, *anim_eval_context, flush_to_original);
4044 printf(
"Evaluate all animation - %f\n", ctime);
4056#define EVAL_ANIM_IDS(first, aflag) \
4057 for (id = static_cast<ID *>(first); id; id = static_cast<ID *>(id->next)) { \
4058 if (ID_REAL_USERS(id) > 0) { \
4059 AnimData *adt = BKE_animdata_from_id(id); \
4060 BKE_animsys_evaluate_animdata(id, adt, &anim_eval_context, aflag, flush_to_original); \
4071#define EVAL_ANIM_NODETREE_IDS(first, NtId_Type, aflag) \
4072 for (id = static_cast<ID *>(first); id; id = static_cast<ID *>(id->next)) { \
4073 if (ID_REAL_USERS(id) > 0) { \
4074 AnimData *adt = BKE_animdata_from_id(id); \
4075 NtId_Type *ntp = (NtId_Type *)id; \
4076 if (ntp->nodetree) { \
4077 AnimData *adt2 = BKE_animdata_from_id((ID *)ntp->nodetree); \
4078 BKE_animsys_evaluate_animdata( \
4079 &ntp->nodetree->id, adt2, &anim_eval_context, ADT_RECALC_ANIM, flush_to_original); \
4081 BKE_animsys_evaluate_animdata(id, adt, &anim_eval_context, aflag, flush_to_original); \
4096 printf(
"\tNo Actions, so no animation needs to be evaluated...\n");
4215 int driver_index = 0;
4276 for (; dvar_orig && dvar; dvar_orig = dvar_orig->
next, dvar = dvar->
next) {
Functions and classes to work with Actions.
Functions for backward compatibility with the legacy Action API.
Layered Action evaluation.
Blender kernel action and pose functionality.
AnimData * BKE_animdata_from_id(const ID *id)
float evaluate_time_fmodifiers(FModifiersStackStorage *storage, const ListBase *modifiers, const FCurve *fcu, float cvalue, float evaltime)
uint evaluate_fmodifiers_storage_size_per_modifier(const ListBase *modifiers)
void evaluate_value_fmodifiers(FModifiersStackStorage *storage, const ListBase *modifiers, const FCurve *fcu, float *cvalue, float evaltime)
bool BKE_fcurve_is_empty(const FCurve *fcu)
float evaluate_fcurve(const FCurve *fcu, float evaltime)
float calculate_fcurve(PathResolvedRNA *anim_rna, FCurve *fcu, const AnimationEvalContext *anim_eval_context)
#define BKE_LIB_FOREACHID_PROCESS_ID(data_, id_, cb_flag_)
General operations, lookup, etc. for materials.
void BKE_nla_clip_length_ensure_nonzero(const float *actstart, float *r_actend)
void BKE_nlastrip_recalculate_bounds_sync_action(NlaStrip *strip)
#define BLI_assert_msg(a, msg)
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_DISABLE(_bitmap, _index)
#define BLI_BITMAP_SIZE(_num)
void BLI_bitmap_copy_all(BLI_bitmap *dst, const BLI_bitmap *src, size_t bits)
#define BLI_BITMAP_TEST_BOOL(_bitmap, _index)
void BLI_bitmap_set_all(BLI_bitmap *bitmap, bool set, size_t bits)
#define BLI_BITMAP_SET(_bitmap, _index, _set)
A dynamically sized string ADT.
GSet * BLI_gset_ptr_new(const char *info)
unsigned int BLI_ghashutil_ptrhash(const void *key)
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_str_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
bool BLI_gset_add(GSet *gs, void *key)
bool BLI_ghash_ensure_p_ex(GHash *gh, const void *key, void ***r_key, void ***r_val) ATTR_WARN_UNUSED_RESULT
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findptr(const struct ListBase *listbase, const void *ptr, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void pow_qt_fl_normalized(float q[4], float fac)
void interp_qt_qtqt(float q[4], const float a[4], const float b[4], float t)
void invert_qt_normalized(float q[4])
float normalize_qt(float q[4])
float normalize_qt_qt(float r[4], const float q[4])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
MINLINE void zero_v4(float r[4])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define STRNCPY(dst, src)
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define UNUSED_VARS_NDEBUG(...)
#define IN_RANGE_INCL(a, b, c)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define CLOG_ERROR(clg_ref,...)
#define CLOG_WARN(clg_ref,...)
void DEG_debug_print_eval_time(Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address, float time)
bool DEG_is_active(const Depsgraph *depsgraph)
void DEG_debug_print_eval_subdata_index(Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address, const char *subdata_comment, const char *subdata_name, const void *subdata_address, int subdata_index)
float DEG_get_ctime(const Depsgraph *graph)
#define MAX_DRIVER_TARGETS
@ NLASTRIP_FLAG_USR_INFLUENCE
@ NLASTRIP_FLAG_USR_TIME_CYCLIC
@ NLASTRIP_FLAG_NO_TIME_MAP
@ NLASTRIP_FLAG_EDIT_TOUCHED
@ NLASTRIP_FLAG_SYNC_LENGTH
@ ADT_NLA_EVAL_UPPER_TRACKS
@ NLASTRIP_EXTEND_HOLD_FORWARD
@ NLASTRIP_EXTEND_NOTHING
@ NLASTRIP_TYPE_TRANSITION
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
static void nlaeval_init(NlaEvalData *nlaeval)
static float nla_combine_value(const int mix_mode, float base_value, const float lower_value, const float strip_value, const float influence)
static bool nla_combine_get_inverted_lower_value(const int mix_mode, float base_value, const float strip_value, const float blended_value, const float influence, float *r_lower_value)
static void animsys_evaluate_fcurves(PointerRNA *ptr, Span< FCurve * > fcurves, const AnimationEvalContext *anim_eval_context, bool flush_to_original)
void nlasnapshot_enable_all_blend_domain(NlaEvalSnapshot *snapshot)
void BKE_animsys_evaluate_animdata(ID *id, AnimData *adt, const AnimationEvalContext *anim_eval_context, eAnimData_Recalc recalc, const bool flush_to_original)
static void animsys_write_orig_anim_rna(PointerRNA *ptr, const char *rna_path, int array_index, float value)
static void nlastrip_evaluate_meta(const int evaluation_mode, PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
static bool is_action_track_evaluated_without_nla(const AnimData *adt, const bool any_strip_evaluated)
static NlaEvalChannel * nlaevalchan_verify_key(NlaEvalData *nlaeval, const char *path, NlaEvalChannelKey *key)
AnimationEvalContext BKE_animsys_eval_context_construct(Depsgraph *depsgraph, float eval_time)
void BKE_animsys_evaluate_all_animation(Main *main, Depsgraph *depsgraph, float ctime)
void BKE_keyingsets_copy(ListBase *newlist, const ListBase *list)
static bool is_nlatrack_evaluatable(const AnimData *adt, const NlaTrack *nlt)
static void nlaevalchan_free_data(NlaEvalChannel *nec)
static void nlavalidmask_free(NlaValidMask *mask)
static void nlastrip_evaluate_transition(const int evaluation_mode, PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
void nlasnapshot_ensure_channels(NlaEvalData *eval_data, NlaEvalSnapshot *snapshot)
static void animsys_create_action_track_strip(const AnimData *adt, const bool keyframing_to_strip, NlaStrip *r_action_strip)
static void nlaevalchan_assert_nonNull(const NlaEvalChannelSnapshot *necs)
static void nlavalidmask_init(NlaValidMask *mask, int bits)
void BKE_keyingset_free_paths(KeyingSet *ks)
static float nla_blend_value(const int blendmode, const float lower_value, const float strip_value, const float influence)
static void nlaevalchan_combine_value_get_inverted_upper_evalchan(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *blended_necs, const float upper_influence, NlaEvalChannelSnapshot *r_upper_necs)
bool BKE_animsys_rna_path_resolve(PointerRNA *ptr, const char *rna_path, const int array_index, PathResolvedRNA *r_result)
static bool nlaevalchan_blendOrcombine_try_copy_from_lower(const NlaEvalChannelSnapshot *lower_necs, const NlaEvalChannelSnapshot *upper_necs, const float upper_influence, NlaEvalChannelSnapshot *r_blended_necs)
static void nlaeval_fmodifiers_join_stacks(ListBase *result, ListBase *list1, ListBase *list2)
KeyingSet * BKE_keyingset_add(ListBase *list, const char idname[], const char name[], short flag, short keyingflag)
static void animsys_blend_fcurves_quaternion(PathResolvedRNA *anim_rna, Span< FCurve * > quaternion_fcurves, const AnimationEvalContext *anim_eval_context, const float blend_factor)
void BKE_keyingset_free_path(KeyingSet *ks, KS_Path *ksp)
void nlasnapshot_blend(NlaEvalData *eval_data, NlaEvalSnapshot *lower_snapshot, NlaEvalSnapshot *upper_snapshot, const short upper_blendmode, const float upper_influence, NlaEvalSnapshot *r_blended_snapshot)
static uint nlaevalchan_keyhash(const void *ptr)
void nlasnapshot_blend_get_inverted_upper_snapshot(NlaEvalData *eval_data, NlaEvalSnapshot *lower_snapshot, NlaEvalSnapshot *blended_snapshot, const short upper_blendmode, const float upper_influence, NlaEvalSnapshot *r_upper_snapshot)
static void nlaevalchan_assert_blendOrcombine_compatible(const NlaEvalChannelSnapshot *lower_necs, const NlaEvalChannelSnapshot *upper_necs, const NlaEvalChannelSnapshot *blended_necs)
static void nlaevalchan_combine_quaternion_get_inverted_upper_evalchan(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *blended_necs, const float upper_influence, NlaEvalChannelSnapshot *r_upper_necs)
static void nlaevalchan_blendOrcombine_get_inverted_upper_evalchan(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *blended_necs, const int upper_blendmode, const float upper_influence, NlaEvalChannelSnapshot *r_upper_necs)
KS_Path * BKE_keyingset_add_path(KeyingSet *ks, ID *id, const char group_name[], const char rna_path[], int array_index, short flag, short groupmode)
void BKE_animsys_nla_remap_keyframe_values(NlaKeyframingContext *context, PointerRNA *prop_ptr, PropertyRNA *prop, const blender::MutableSpan< float > values, int index, const AnimationEvalContext *anim_eval_context, bool *r_force_all, blender::BitVector<> &r_values_mask)
void BKE_animsys_eval_animdata(Depsgraph *depsgraph, ID *id)
static bool nla_combine_get_inverted_strip_value(const int mix_mode, float base_value, const float lower_value, const float blended_value, const float influence, float *r_strip_value)
static void nlaevalchan_blend_value_get_inverted_upper_evalchan(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *blended_necs, const int upper_blendmode, const float upper_influence, NlaEvalChannelSnapshot *r_upper_necs)
static void nlaevalchan_get_default_values(NlaEvalChannel *nec, float *r_values)
static bool nlaevalchan_blendOrcombine_try_copy_to_lower(NlaEvalChannelSnapshot *blended_necs, NlaEvalChannelSnapshot *upper_necs, const float upper_influence, NlaEvalChannelSnapshot *r_lower_necs)
static void nlaevalchan_combine_value_get_inverted_lower_evalchan(NlaEvalChannelSnapshot *blended_necs, NlaEvalChannelSnapshot *upper_necs, const float upper_influence, NlaEvalChannelSnapshot *r_lower_necs)
static bool is_fcurve_evaluatable(const FCurve *fcu)
void nlasnapshot_blend_strip(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
NlaKeyframingContext * BKE_animsys_get_nla_keyframing_context(ListBase *cache, PointerRNA *ptr, AnimData *adt, const AnimationEvalContext *anim_eval_context)
static void nlaevalchan_blendOrcombine(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *upper_necs, const int upper_blendmode, const float upper_influence, NlaEvalChannelSnapshot *r_blended_necs)
#define EVAL_ANIM_IDS(first, aflag)
static bool nlaevalchan_validate_index_ex(const NlaEvalChannel *nec, const int array_index)
static void animsys_evaluate_overrides(PointerRNA *ptr, AnimData *adt)
void BKE_animsys_free_nla_keyframing_context_cache(ListBase *cache)
static void nlasnapshot_from_action(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, bAction *action, const animrig::slot_handle_t slot_handle, const float evaltime, NlaEvalSnapshot *r_snapshot)
KS_Path * BKE_keyingset_find_path(KeyingSet *ks, ID *id, const char group_name[], const char rna_path[], int array_index, int)
static void nlaevalchan_blend_value(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *upper_necs, const int upper_blendmode, const float upper_influence, NlaEvalChannelSnapshot *r_blended_necs)
static void nlaevalchan_snapshot_copy(NlaEvalChannelSnapshot *dst, const NlaEvalChannelSnapshot *src)
void BKE_keyingsets_blend_write(BlendWriter *writer, ListBase *list)
bool BKE_animsys_read_from_rna_path(PathResolvedRNA *anim_rna, float *r_value)
void nlasnapshot_blend_get_inverted_lower_snapshot(NlaEvalData *eval_data, NlaEvalSnapshot *blended_snapshot, NlaEvalSnapshot *upper_snapshot, const short upper_blendmode, const float upper_influence, NlaEvalSnapshot *r_lower_snapshot)
static bool nla_blend_get_inverted_lower_value(const int blendmode, const float strip_value, const float blended_value, const float influence, float *r_lower_value)
static void nlaevalchan_blend_value_get_inverted_lower_evalchan(NlaEvalChannelSnapshot *blended_necs, NlaEvalChannelSnapshot *upper_necs, const int upper_blendmode, const float upper_influence, NlaEvalChannelSnapshot *r_lower_necs)
void animsys_evaluate_action_group(PointerRNA *ptr, bAction *act, bActionGroup *agrp, const AnimationEvalContext *anim_eval_context)
static NlaEvalChannelSnapshot * nlaeval_snapshot_get(NlaEvalSnapshot *snapshot, int index)
static NlaEvalChannel * nlaevalchan_verify(PointerRNA *ptr, NlaEvalData *nlaeval, const char *path)
static void animsys_quaternion_evaluate_fcurves(PathResolvedRNA quat_rna, Span< FCurve * > quat_fcurves, const AnimationEvalContext *anim_eval_context, float r_quaternion[4])
NlaEvalStrip * nlastrips_ctime_get_strip(ListBase *list, ListBase *strips, short index, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
static int nlaevalchan_validate_index(const NlaEvalChannel *nec, int index)
static void animsys_blend_in_fcurves(PointerRNA *ptr, Span< FCurve * > fcurves, const AnimationEvalContext *anim_eval_context, const float blend_factor)
static NlaEvalStrip * nlastrips_ctime_get_strip_single(ListBase *dst_list, NlaStrip *single_strip, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
static bool nla_blend_get_inverted_strip_value(const int blendmode, const float lower_value, const float blended_value, const float influence, float *r_strip_value)
static void nlaeval_snapshot_ensure_size(NlaEvalSnapshot *snapshot, int size)
static NlaEvalChannelSnapshot * nlaevalchan_snapshot_new(NlaEvalChannel *nec)
void nlasnapshot_blend_strip_no_blend(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const AnimationEvalContext *anim_eval_context)
void BKE_keyingsets_blend_read_data(BlendDataReader *reader, ListBase *list)
static NlaEvalChannelSnapshot * nlaeval_snapshot_ensure_channel(NlaEvalSnapshot *snapshot, NlaEvalChannel *nec)
#define ANIMSYS_FLOAT_AS_BOOL(value)
#define EVAL_ANIM_NODETREE_IDS(first, NtId_Type, aflag)
static void nlaevalchan_combine_quaternion_get_inverted_lower_evalchan(NlaEvalChannelSnapshot *blended_necs, NlaEvalChannelSnapshot *upper_necs, const float upper_influence, NlaEvalChannelSnapshot *r_lower_necs)
static void nla_combine_quaternion(const float lower_values[4], const float strip_values[4], const float influence, float r_blended_value[4])
void BKE_animsys_update_driver_array(ID *id)
static bool nla_combine_quaternion_get_inverted_strip_values(const float lower_values[4], const float blended_values[4], const float influence, float r_strip_values[4])
static void nlaevalchan_combine_quaternion(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *upper_necs, const float upper_influence, NlaEvalChannelSnapshot *r_blended_necs)
static NlaTrack * nlatrack_find_tweaked(const AnimData *adt)
static void nla_eval_domain_action(PointerRNA *ptr, NlaEvalData *channels, bAction *act, const animrig::slot_handle_t slot_handle, GSet *touched_actions)
static void nlaeval_snapshot_init(NlaEvalSnapshot *snapshot, NlaEvalData *nlaeval, NlaEvalSnapshot *base)
static bool animsys_calculate_nla(PointerRNA *ptr, AnimData *adt, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
void animsys_evaluate_action(PointerRNA *ptr, bAction *act, const int32_t action_slot_handle, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
static void nlaeval_snapshot_free_data(NlaEvalSnapshot *snapshot)
static void nla_combine_quaternion_get_inverted_lower_values(const float strip_values[4], const float blended_values[4], const float influence, float r_lower_value[4])
static void nlaeval_free(NlaEvalData *nlaeval)
void nlastrip_evaluate(const int evaluation_mode, PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
static void nlaevalchan_assert_blendOrcombine_compatible_quaternion(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *upper_necs, NlaEvalChannelSnapshot *blended_necs)
static float nlastrip_get_influence(NlaStrip *strip, float cframe)
static bool animsys_evaluate_nla_for_flush(NlaEvalData *echannels, PointerRNA *ptr, const AnimData *adt, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
static bool nlaevalchan_keycmp(const void *a, const void *b)
void BKE_animsys_eval_driver(Depsgraph *depsgraph, ID *id, int driver_index, FCurve *fcu_orig)
static bool nlaevalchan_combine_quaternion_handle_undefined_blend_values(NlaEvalChannelSnapshot *blended_necs, NlaEvalChannelSnapshot *upper_or_lower_necs)
void BKE_keyingsets_foreach_id(LibraryForeachIDData *data, const ListBase *keyingsets)
static void animsys_create_tweak_strip(const AnimData *adt, const bool keyframing_to_strip, NlaStrip *r_tweak_strip)
void nlasnapshot_blend_strip_get_inverted_lower_snapshot(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const AnimationEvalContext *anim_eval_context)
static void nlaevalchan_snapshot_free(NlaEvalChannelSnapshot *nec_snapshot)
void nladata_flush_channels(PointerRNA *ptr, NlaEvalData *channels, NlaEvalSnapshot *snapshot, const bool flush_to_original)
static void action_idcode_patch_check(ID *id, bAction *act)
static void nlaeval_fmodifiers_split_stacks(ListBase *list1, ListBase *list2)
static void nlaevalchan_copy_values(NlaEvalChannelSnapshot *dst, const NlaEvalChannelSnapshot *src)
static char nlaevalchan_detect_mix_mode(NlaEvalChannelKey *key, int length)
static bool animsys_construct_orig_pointer_rna(const PointerRNA *ptr, PointerRNA *ptr_orig)
static void animsys_evaluate_drivers(PointerRNA *ptr, AnimData *adt, const AnimationEvalContext *anim_eval_context)
static void animsys_evaluate_nla_domain(PointerRNA *ptr, NlaEvalData *channels, AnimData *adt)
static void animsys_evaluate_nla_for_keyframing(PointerRNA *ptr, const AnimData *adt, const AnimationEvalContext *anim_eval_context, NlaKeyframingContext *r_context)
static void nlaevalchan_combine_value(NlaEvalChannelSnapshot *lower_necs, NlaEvalChannelSnapshot *upper_necs, const float upper_influence, NlaEvalChannelSnapshot *r_blended_necs)
static void nla_eval_domain_strips(PointerRNA *ptr, NlaEvalData *channels, ListBase *strips, GSet *touched_actions)
static void nlastrip_evaluate_actionclip(const int evaluation_mode, PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot)
static NlaEvalChannelSnapshot * nlaeval_snapshot_find_channel(NlaEvalSnapshot *snapshot, NlaEvalChannel *nec)
static void nlaevalchan_blendOrCombine_get_inverted_lower_evalchan(NlaEvalChannelSnapshot *blended_necs, NlaEvalChannelSnapshot *upper_necs, const int upper_blendmode, const float upper_influence, NlaEvalChannelSnapshot *r_lower_necs)
void animsys_blend_in_action(PointerRNA *ptr, bAction *act, const int32_t action_slot_handle, const AnimationEvalContext *anim_eval_context, const float blend_factor)
static void nlastrip_evaluate_controls(NlaStrip *strip, const AnimationEvalContext *anim_eval_context, const bool flush_to_original)
AnimationEvalContext BKE_animsys_eval_context_construct_at(const AnimationEvalContext *anim_eval_context, float eval_time)
static NlaEvalChannelSnapshot ** nlaeval_snapshot_ensure_slot(NlaEvalSnapshot *snapshot, NlaEvalChannel *nec)
bool BKE_animsys_write_to_rna_path(PathResolvedRNA *anim_rna, const float value)
void BKE_keyingsets_free(ListBase *list)
Provides wrapper around system-specific atomic primitives, and some extensions (faked-atomic operatio...
int main(int argc, char *argv[])
float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode)
BPy_StructRNA * depsgraph
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
constexpr int64_t size() const
constexpr T * end() const
constexpr T * begin() const
constexpr Span slice_safe(const int64_t start, const int64_t size) const
constexpr int64_t size() const
constexpr IndexRange index_range() const
void append(const T &value)
bool is_action_legacy() const
bool is_action_layered() const
Span< FCurve * > fcurves()
static constexpr slot_handle_t unassigned
void fill(const bool value)
IndexRange index_range() const
local_group_size(16, 16) .push_constant(Type b
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void *(* MEM_mallocN)(size_t len, const char *str)
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_recallocN_id)(void *vmemh, size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_dupallocN)(const void *vmemh)
ccl_device_inline float2 fmod(const float2 a, const float b)
ccl_device_inline float4 mask(const int4 mask, const float4 a)
Vector< FCurve * > fcurves_for_action_slot(bAction *action, slot_handle_t slot_handle)
Vector< const FCurve * > fcurves_all(const bAction *action)
bool action_treat_as_legacy(const bAction &action)
void evaluate_and_apply_action(PointerRNA &animated_id_ptr, Action &action, slot_handle_t slot_handle, const AnimationEvalContext &anim_eval_context, bool flush_to_original)
Span< FCurve * > fcurves_for_action_slot(Action &action, slot_handle_t slot_handle)
decltype(::ActionSlot::handle) slot_handle_t
Vector< T * > listbase_to_vector(ListBase &list)
@ STRIP_EVAL_BLEND_GET_INVERTED_LOWER_SNAPSHOT
struct NlaEvalChannelKey NlaEvalChannelKey
@ NES_TIME_TRANSITION_END
@ NES_TIME_TRANSITION_START
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, bool value)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
bool RNA_property_array_check(PropertyRNA *prop)
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
int RNA_property_int_clamp(PointerRNA *ptr, PropertyRNA *prop, int *value)
int RNA_property_float_clamp(PointerRNA *ptr, PropertyRNA *prop, float *value)
int RNA_property_int_get_default(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_struct_is_ID(const StructRNA *type)
int RNA_property_int_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, float value)
int RNA_property_enum_get_default(PointerRNA *, PropertyRNA *prop)
float RNA_property_float_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop_orig)
PropertyType RNA_property_type(PropertyRNA *prop)
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, int value)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
float RNA_property_float_get_default(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_flag(PropertyRNA *prop)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const float *values)
void RNA_property_int_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
bool RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
bool RNA_property_boolean_get_default(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_identifier(const PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
struct Depsgraph * depsgraph
struct PropertyRNA * prop
NlaValidMask remap_domain
NlaValidMask blend_domain
struct NlaEvalChannel * channel
struct NlaEvalData * owner
NlaEvalChannelSnapshot base_snapshot
NlaEvalSnapshot eval_snapshot
NlaEvalSnapshot base_snapshot
struct NlaEvalSnapshot * base
NlaEvalChannelSnapshot ** channels
NlaStrip action_track_strip
NlaEvalData lower_eval_data
NlaEvalStrip * eval_strip
int32_t action_slot_handle
struct NlaStrip * orig_strip