diff --git a/scripts/modules/bpy_extras/anim_utils.py b/scripts/modules/bpy_extras/anim_utils.py index 2edb2405b78..9fe51bf215e 100644 --- a/scripts/modules/bpy_extras/anim_utils.py +++ b/scripts/modules/bpy_extras/anim_utils.py @@ -364,7 +364,7 @@ def bake_action_iter( atd.use_tweak_mode = False atd.action = action - if bpy.context.preferences.experimental.use_animation_baklava and action.is_action_layered: + if action.is_action_layered: slot = action.slots.new(for_id=obj) atd.action_slot = slot diff --git a/scripts/startup/bl_ui/properties_constraint.py b/scripts/startup/bl_ui/properties_constraint.py index f5e0e8ae416..cdb0f758d69 100644 --- a/scripts/startup/bl_ui/properties_constraint.py +++ b/scripts/startup/bl_ui/properties_constraint.py @@ -1128,7 +1128,7 @@ class ConstraintButtonsSubPanel: col = layout.column(align=True) col.prop(con, "action") - if context.preferences.experimental.use_animation_baklava and con.action and con.action.is_action_layered: + if con.action and con.action.is_action_layered: col.context_pointer_set("animated_id", con.id_data) col.template_search( con, "action_slot", diff --git a/scripts/startup/bl_ui/space_dopesheet.py b/scripts/startup/bl_ui/space_dopesheet.py index 82a35da1da0..c4eeff225ec 100644 --- a/scripts/startup/bl_ui/space_dopesheet.py +++ b/scripts/startup/bl_ui/space_dopesheet.py @@ -29,7 +29,7 @@ def dopesheet_filter(layout, context): is_action_editor = not is_nla and context.space_data.mode == 'ACTION' row = layout.row(align=True) - if is_action_editor and context.preferences.experimental.use_animation_baklava: + if is_action_editor: row.prop(dopesheet, "show_only_slot_of_active_object", text="") row.prop(dopesheet, "show_only_selected", text="") row.prop(dopesheet, "show_hidden", text="") @@ -310,9 +310,6 @@ class DOPESHEET_HT_editor_buttons: row.template_action(animated_id, new="action.new", unlink="action.unlink") - if not context.preferences.experimental.use_animation_baklava: - return - adt = animated_id and animated_id.animation_data if not adt or not adt.action or not adt.action.is_action_layered: return @@ -392,8 +389,7 @@ class DOPESHEET_MT_editor_menus(Menu): layout.menu("DOPESHEET_MT_key") if st.mode in {'ACTION', 'SHAPEKEY'} and st.action is not None: - if context.preferences.experimental.use_animation_baklava: - layout.menu("DOPESHEET_MT_action") + layout.menu("DOPESHEET_MT_action") class DOPESHEET_MT_view(Menu): @@ -690,8 +686,6 @@ class DOPESHEET_PT_action_slot(Panel): @classmethod def poll(cls, context): - if not context.preferences.experimental.use_animation_baklava: - return False action = context.active_action return bool(action and action.slots.active) diff --git a/scripts/startup/bl_ui/space_properties.py b/scripts/startup/bl_ui/space_properties.py index 34fc114d470..1b40647d74a 100644 --- a/scripts/startup/bl_ui/space_properties.py +++ b/scripts/startup/bl_ui/space_properties.py @@ -124,9 +124,6 @@ class PropertiesAnimationMixin: layout.template_action(animated_id, new="action.new", unlink="action.unlink") - if not context.preferences.experimental.use_animation_baklava: - return - adt = animated_id.animation_data if not adt or not adt.action: return diff --git a/scripts/startup/bl_ui/space_userpref.py b/scripts/startup/bl_ui/space_userpref.py index 86839c3afcc..fd5aba96a44 100644 --- a/scripts/startup/bl_ui/space_userpref.py +++ b/scripts/startup/bl_ui/space_userpref.py @@ -2896,7 +2896,6 @@ class USERPREF_PT_experimental_prototypes(ExperimentalPanel, Panel): ({"property": "use_new_point_cloud_type"}, ("blender/blender/issues/75717", "#75717")), ({"property": "use_sculpt_texture_paint"}, ("blender/blender/issues/96225", "#96225")), ({"property": "enable_overlay_next"}, ("blender/blender/issues/102179", "#102179")), - ({"property": "use_animation_baklava"}, ("/blender/blender/issues/120406", "#120406")), ({"property": "enable_new_cpu_compositor"}, ("/blender/blender/issues/125968", "#125968")), ), ) diff --git a/source/blender/animrig/CMakeLists.txt b/source/blender/animrig/CMakeLists.txt index 093d015e67e..e7abaf27604 100644 --- a/source/blender/animrig/CMakeLists.txt +++ b/source/blender/animrig/CMakeLists.txt @@ -70,10 +70,6 @@ set(LIB PRIVATE bf::intern::clog ) -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - blender_add_lib(bf_animrig "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") add_library(bf::animrig ALIAS bf_animrig) diff --git a/source/blender/animrig/intern/action.cc b/source/blender/animrig/intern/action.cc index fbcec32051f..1b00cef62a8 100644 --- a/source/blender/animrig/intern/action.cc +++ b/source/blender/animrig/intern/action.cc @@ -871,10 +871,6 @@ static float2 get_frame_range_of_fcurves(Span fcurves, foundmod = true; } - - /* This block is here just so that editors/IDEs do not get confused about the two opening - * curly braces in the `#ifdef WITH_ANIM_BAKLAVA` block above, but one closing curly brace - * here. */ } if (foundvert || foundmod) { diff --git a/source/blender/animrig/intern/action_legacy.cc b/source/blender/animrig/intern/action_legacy.cc index a2b075cd965..d7e3d5163da 100644 --- a/source/blender/animrig/intern/action_legacy.cc +++ b/source/blender/animrig/intern/action_legacy.cc @@ -68,16 +68,13 @@ template static Vector fcurves_all_templated(ActionType &action) { -#ifdef WITH_ANIM_BAKLAVA /* Legacy Action. */ if (action.is_action_legacy()) { -#endif /* WITH_ANIM_BAKLAVA */ Vector legacy_fcurves; LISTBASE_FOREACH (FCurveType *, fcurve, &action.curves) { legacy_fcurves.append(fcurve); } return legacy_fcurves; -#ifdef WITH_ANIM_BAKLAVA } /* Layered Action. */ @@ -99,7 +96,6 @@ static Vector fcurves_all_templated(ActionType &action) } } return all_fcurves; -#endif /* WITH_ANIM_BAKLAVA */ } Vector fcurves_all(bAction *action) @@ -151,22 +147,14 @@ template fcurves_for_action_slot_templated(ActionType &action, const slot_handle_t slot_handle) { -#ifndef WITH_ANIM_BAKLAVA - UNUSED_VARS(slot_handle); -#endif /* !WITH_ANIM_BAKLAVA */ - -#ifdef WITH_ANIM_BAKLAVA /* Legacy Action. */ if (action.is_action_legacy()) { -#endif /* WITH_ANIM_BAKLAVA */ return listbase_to_vector(action.curves); -#ifdef WITH_ANIM_BAKLAVA } /* Layered Action. */ Vector as_vector(animrig::fcurves_for_action_slot(action, slot_handle)); return as_vector; -#endif /* WITH_ANIM_BAKLAVA */ } Vector fcurves_for_action_slot(bAction *action, const slot_handle_t slot_handle) @@ -234,16 +222,13 @@ Vector channel_groups_all(bAction *action) Action &action_wrap = action->wrap(); -#ifdef WITH_ANIM_BAKLAVA /* Legacy Action. */ if (action_wrap.is_action_legacy()) { -#endif /* WITH_ANIM_BAKLAVA */ Vector legacy_groups; LISTBASE_FOREACH (bActionGroup *, group, &action_wrap.groups) { legacy_groups.append(group); } return legacy_groups; -#ifdef WITH_ANIM_BAKLAVA } /* Layered Action. */ @@ -261,7 +246,6 @@ Vector channel_groups_all(bAction *action) } } return all_groups; -#endif /* WITH_ANIM_BAKLAVA */ } Vector channel_groups_for_assigned_slot(AnimData *adt) @@ -289,12 +273,12 @@ Vector channel_groups_for_assigned_slot(AnimData *adt) bool action_treat_as_legacy(const bAction &action) { - const Action &action_wrap = action.wrap(); - if (action_wrap.is_empty()) { - const bool may_do_layered = USER_EXPERIMENTAL_TEST(&U, use_animation_baklava); - return !may_do_layered; - } - return action_wrap.is_action_legacy(); + /* At runtime, legacy Actions should have been versioned to layered/slotted Actions. However, + * unit tests can still create legacy Actions, and so this function still has to distinguish + * between them. + * + * Note that empty Actions also count as 'layered'. */ + return !action.wrap().is_action_layered(); } bool action_fcurves_remove(bAction &action, diff --git a/source/blender/animrig/intern/action_legacy_test.cc b/source/blender/animrig/intern/action_legacy_test.cc index 9fa178ee911..c9262bb2974 100644 --- a/source/blender/animrig/intern/action_legacy_test.cc +++ b/source/blender/animrig/intern/action_legacy_test.cc @@ -86,7 +86,6 @@ TEST_F(ActionLegacyTest, fcurves_all) } } -#ifdef WITH_ANIM_BAKLAVA TEST_F(ActionLegacyTest, fcurves_all_layered) { Action &action = create_empty_action()->wrap(); @@ -103,7 +102,6 @@ TEST_F(ActionLegacyTest, fcurves_all_layered) Vector fcurves_expect = {&fcurve1, &fcurve2}; EXPECT_EQ(fcurves_expect, legacy::fcurves_all(&action)); } -#endif /* WITH_ANIM_BAKLAVA */ TEST_F(ActionLegacyTest, fcurves_for_action_slot) { @@ -130,7 +128,6 @@ TEST_F(ActionLegacyTest, fcurves_for_action_slot) } } -#ifdef WITH_ANIM_BAKLAVA TEST_F(ActionLegacyTest, fcurves_for_action_slot_layered) { Action &action = create_empty_action()->wrap(); @@ -149,7 +146,6 @@ TEST_F(ActionLegacyTest, fcurves_for_action_slot_layered) EXPECT_EQ(fcurve1_expect, legacy::fcurves_for_action_slot(&action, slot1.handle)); EXPECT_EQ(fcurve2_expect, legacy::fcurves_for_action_slot(&action, slot2.handle)); } -#endif /* WITH_ANIM_BAKLAVA */ TEST_F(ActionLegacyTest, action_fcurves_remove_legacy) { @@ -171,7 +167,6 @@ TEST_F(ActionLegacyTest, action_fcurves_remove_legacy) } } -#ifdef WITH_ANIM_BAKLAVA TEST_F(ActionLegacyTest, action_fcurves_remove_layered) { /* Create an Action with two slots, to check that the 2nd slot is not affected @@ -206,6 +201,4 @@ TEST_F(ActionLegacyTest, action_fcurves_remove_layered) << "Expected all F-Curves for slot 2 to be there after manipulating slot 1"; } -#endif /* WITH_ANIM_BAKLAVA */ - } // namespace blender::animrig::tests diff --git a/source/blender/animrig/intern/action_test.cc b/source/blender/animrig/intern/action_test.cc index bdbb31a7fa5..47123d039e0 100644 --- a/source/blender/animrig/intern/action_test.cc +++ b/source/blender/animrig/intern/action_test.cc @@ -825,7 +825,7 @@ TEST_F(ActionLayersTest, action_slot_get_id_for_keying__empty_action) /* None should return an ID, since there are no slots yet which could have this ID assigned. * Assignment of the Action itself (cube) shouldn't matter. */ - EXPECT_EQ(&cube->id, action_slot_get_id_for_keying(*bmain, *action, 0, &cube->id)); + EXPECT_EQ(nullptr, action_slot_get_id_for_keying(*bmain, *action, 0, &cube->id)); EXPECT_EQ(nullptr, action_slot_get_id_for_keying(*bmain, *action, 0, nullptr)); EXPECT_EQ(nullptr, action_slot_get_id_for_keying(*bmain, *action, 0, &suzanne->id)); } @@ -976,9 +976,6 @@ TEST_F(ActionLayersTest, empty_to_layered) TEST_F(ActionLayersTest, action_move_slot) { - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - Action *action_2 = static_cast(BKE_id_new(bmain, ID_AC, "Action 2")); EXPECT_TRUE(action->is_empty()); @@ -1060,15 +1057,11 @@ static void add_keyframe(FCurve &fcu, float x, float y) static void add_fcurve_to_action(Action &action, FCurve &fcu) { -#ifdef WITH_ANIM_BAKLAVA Slot &slot = action.slot_array_num > 0 ? *action.slot(0) : action.slot_add(); action.layer_keystrip_ensure(); StripKeyframeData &strip_data = action.layer(0)->strip(0)->data(action); ChannelBag &cbag = strip_data.channelbag_for_slot_ensure(slot); cbag.fcurve_append(fcu); -#else - BLI_addhead(&action.curves, &fcu); -#endif /* WITH_ANIM_BAKLAVA */ } class ActionQueryTest : public testing::Test { @@ -1882,7 +1875,6 @@ TEST_F(ActionFCurveMoveTest, test_fcurve_move_legacy) << "Destination Action should have its original and the moved F-Curve"; } -#ifdef WITH_ANIM_BAKLAVA TEST_F(ActionFCurveMoveTest, test_fcurve_move_layered) { Action &action_src = action_add(*this->bmain, "SourceAction"); @@ -1931,6 +1923,5 @@ TEST_F(ActionFCurveMoveTest, test_fcurve_move_layered) ASSERT_NE(nullptr, group_dst) << "Expected channel group to be created"; ASSERT_EQ(group_dst, fcurve_to_move.grp) << "Expected group membership to move as well"; } -#endif } // namespace blender::animrig::tests diff --git a/source/blender/animrig/intern/animdata.cc b/source/blender/animrig/intern/animdata.cc index afcfcf1627f..88cd495c402 100644 --- a/source/blender/animrig/intern/animdata.cc +++ b/source/blender/animrig/intern/animdata.cc @@ -203,21 +203,19 @@ bAction *id_action_ensure(Main *bmain, ID *id) /* init action if none available yet */ /* TODO: need some wizardry to handle NLA stuff correct */ if (adt->action == nullptr) { - bAction *action = nullptr; - if (USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { - action = find_related_action(*bmain, *id); - } + bAction *action = find_related_action(*bmain, *id); + if (action == nullptr) { /* init action name from name of ID block */ char actname[sizeof(id->name) - 2]; - if (id->flag & ID_FLAG_EMBEDDED_DATA && USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { + if (id->flag & ID_FLAG_EMBEDDED_DATA) { /* When the ID is embedded, use the name of the owner ID for clarity. */ ID *owner_id = BKE_id_owner_get(id); /* If the ID is embedded it should have an owner. */ BLI_assert(owner_id != nullptr); SNPRINTF(actname, DATA_("%sAction"), owner_id->name + 2); } - else if (GS(id->name) == ID_KE && USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { + else if (GS(id->name) == ID_KE) { Key *key = (Key *)id; SNPRINTF(actname, DATA_("%sAction"), key->from->name + 2); } diff --git a/source/blender/animrig/intern/keyframing_test.cc b/source/blender/animrig/intern/keyframing_test.cc index 1ca6fdc6f13..ab2063e7526 100644 --- a/source/blender/animrig/intern/keyframing_test.cc +++ b/source/blender/animrig/intern/keyframing_test.cc @@ -72,20 +72,11 @@ class KeyframingTest : public testing::Test { static void TearDownTestSuite() { - /* Ensure experimental baklava flag is turned off after all tests are run. */ - U.flag &= ~USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 0; - CLG_exit(); } void SetUp() override { - /* Ensure experimental baklava flag is turned off first (to be enabled - * selectively in the layered action tests. */ - U.flag &= ~USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 0; - bmain = BKE_main_new(); object = BKE_object_add_only_object(bmain, OB_EMPTY, "Empty"); @@ -186,10 +177,6 @@ class KeyframingTest : public testing::Test { /* Keying a non-array property. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__non_array_property) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; /* First time should create: @@ -281,10 +268,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__non_array_property) TEST_F(KeyframingTest, insert_keyframes__layered_action__action_reuse) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; CombinedKeyingResult result_ob; result_ob = insert_keyframes(bmain, @@ -323,16 +306,10 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__action_reuse) for (Slot *slot : action.slots()) { ASSERT_TRUE(slot->idtype == ID_AR || slot->idtype == ID_OB); } - - U.experimental.use_animation_baklava = 0; - U.flag &= ~USER_DEVELOPER_UI; } TEST_F(KeyframingTest, insert_keyframes__layered_action__action_reuse_material) { - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; CombinedKeyingResult result_ob; @@ -394,16 +371,10 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__action_reuse_material) ASSERT_TRUE(slot->idtype == ID_ME || slot->idtype == ID_OB); ASSERT_NE(slot->idtype, ID_MA); } - - U.experimental.use_animation_baklava = 0; - U.flag &= ~USER_DEVELOPER_UI; } TEST_F(KeyframingTest, insert_keyframes__layered_action__action_reuse_multiuser) { - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - Object *another_object = BKE_object_add_only_object(bmain, OB_MESH, "another_object"); PointerRNA another_object_rna_pointer = RNA_id_pointer_create(&another_object->id); BKE_mesh_assign_object(bmain, another_object, cube_mesh); @@ -458,18 +429,11 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__action_reuse_multiuser) /* Given that those two objects are connected by a mesh (which due to this has two users) the * action shouldn't be reused between them. */ ASSERT_NE(cube->adt->action, another_object->adt->action); - - U.experimental.use_animation_baklava = 0; - U.flag &= ~USER_DEVELOPER_UI; } /* Keying a single element of an array property. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__single_element) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; const CombinedKeyingResult result = insert_keyframes(bmain, @@ -499,10 +463,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__single_element) /* Keying all elements of an array property. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__all_elements) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; const CombinedKeyingResult result = insert_keyframes(bmain, @@ -534,10 +494,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__all_elements) /* Keying a pose bone from its own RNA pointer. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__pose_bone_rna_pointer) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; bPoseChannel *pchan = BKE_pose_channel_find_name(armature_object->pose, "Bone"); PointerRNA pose_bone_rna_pointer = RNA_pointer_create( @@ -570,10 +526,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__pose_bone_rna_pointer) /* Keying a pose bone from its owning ID's RNA pointer. */ TEST_F(KeyframingTest, insert_keyframes__pose_bone_owner_id_pointer) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; const CombinedKeyingResult result = insert_keyframes( @@ -604,10 +556,6 @@ TEST_F(KeyframingTest, insert_keyframes__pose_bone_owner_id_pointer) /* Keying multiple elements of multiple properties at once. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__multiple_properties) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; const CombinedKeyingResult result = insert_keyframes(bmain, @@ -647,10 +595,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__multiple_properties) /* Keying more than one ID on the same action. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__multiple_ids) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; /* First object should crate the action and get a slot and channel bag. */ @@ -718,26 +662,18 @@ TEST_F(KeyframingTest, insert_keyframes__baklava_legacy_action) { AnimationEvalContext anim_eval_context = {nullptr, 1.0}; - /* Insert a key with the experimental flag off to create a legacy action. */ - const CombinedKeyingResult result_1 = insert_keyframes(bmain, - &object_rna_pointer, - std::nullopt, - {{"empty_display_size"}}, - 1.0, - anim_eval_context, - BEZT_KEYTYPE_KEYFRAME, - INSERTKEY_NOFLAGS); - EXPECT_EQ(1, result_1.get_count(SingleKeyingResult::SUCCESS)); + /* Create a legacy Action and assign it the legacy way. */ + { + bAction *action = reinterpret_cast(BKE_id_new(bmain, ID_AC, "LegacyAction")); + action_fcurve_ensure_legacy(bmain, action, nullptr, nullptr, {"testprop", 47}); + BKE_animdata_ensure_id(&object->id)->action = action; + } bAction *action = object->adt->action; EXPECT_TRUE(action->wrap().is_action_legacy()); EXPECT_FALSE(action->wrap().is_action_layered()); EXPECT_EQ(1, BLI_listbase_count(&action->curves)); - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - /* Insert more keys, which should also get inserted as part of the same legacy * action, not a layered action. */ const CombinedKeyingResult result_2 = insert_keyframes(bmain, @@ -759,10 +695,6 @@ TEST_F(KeyframingTest, insert_keyframes__baklava_legacy_action) /* Keying with the "Only Insert Available" flag. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__only_available) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; /* First attempt should fail, because there are no fcurves yet. */ @@ -832,10 +764,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__only_available) /* Keying with the "Only Replace" flag. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__only_replace) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; /* First attempt should fail, because there are no fcurves yet. */ @@ -931,10 +859,6 @@ TEST_F(KeyframingTest, insert_keyframes__layered_action__only_replace) /* Keying with the "Only Insert Needed" flag. */ TEST_F(KeyframingTest, insert_keyframes__layered_action__only_needed) { - /* Turn on Baklava experimental flag. */ - U.flag |= USER_DEVELOPER_UI; - U.experimental.use_animation_baklava = 1; - AnimationEvalContext anim_eval_context = {nullptr, 1.0}; /* First attempt should succeed, because there are no fcurves yet. */ diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 18f1ca73bf6..4ec599b9948 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -31,7 +31,7 @@ extern "C" { /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 1 +#define BLENDER_FILE_SUBVERSION 2 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and cancel loading the file, showing a warning to diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index c8cc5f53704..1ae3d7219ff 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -814,10 +814,6 @@ if(WITH_XR_OPENXR) add_definitions(-DWITH_XR_OPENXR) endif() -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - # # Warnings as errors, this is too strict! # if(MSVC) # string(APPEND CMAKE_C_FLAGS " /WX") diff --git a/source/blender/blenkernel/intern/action.cc b/source/blender/blenkernel/intern/action.cc index ec6af2423f8..e3593c7bb63 100644 --- a/source/blender/blenkernel/intern/action.cc +++ b/source/blender/blenkernel/intern/action.cc @@ -310,7 +310,6 @@ static void action_foreach_id(ID *id, LibraryForeachIDData *data) } } -#ifdef WITH_ANIM_BAKLAVA static void write_channelbag(BlendWriter *writer, animrig::ChannelBag &channelbag) { BLO_write_struct(writer, ActionChannelBag, &channelbag); @@ -487,13 +486,11 @@ static void action_blend_write_clear_legacy_fcurves_listbase(ListBase &listbase) BLI_listbase_clear(&listbase); } -#endif /* WITH_ANIM_BAKLAVA */ static void action_blend_write(BlendWriter *writer, ID *id, const void *id_address) { animrig::Action &action = reinterpret_cast(id)->wrap(); -#ifdef WITH_ANIM_BAKLAVA /* Create legacy data for Layered Actions: the F-Curves from the first Slot, * bottom layer, first Keyframe strip. */ const bool do_write_forward_compat = !BLO_write_is_undo(writer) && action.slot_array_num > 0 && @@ -517,28 +514,10 @@ static void action_blend_write(BlendWriter *writer, ID *id, const void *id_addre action_blend_write_make_legacy_channel_groups_listbase(action.groups, bag->channel_groups()); } } -#else - /* Built without Baklava, so ensure that the written data is clean. This should not change - * anything, as the reading code below also ensures these fields are empty, and the APIs to add - * those should be unavailable. */ - BLI_assert_msg(action.layer_array == nullptr, - "Action should not have layers, built without Baklava experimental feature"); - BLI_assert_msg(action.layer_array_num == 0, - "Action should not have layers, built without Baklava experimental feature"); - BLI_assert_msg(action.slot_array == nullptr, - "Action should not have slots, built without Baklava experimental feature"); - BLI_assert_msg(action.slot_array_num == 0, - "Action should not have slots, built without Baklava experimental feature"); - action.layer_array = nullptr; - action.layer_array_num = 0; - action.slot_array = nullptr; - action.slot_array_num = 0; -#endif /* WITH_ANIM_BAKLAVA */ BLO_write_id_struct(writer, bAction, id_address, &action.id); BKE_id_blend_write(writer, &action.id); -#ifdef WITH_ANIM_BAKLAVA /* Write layered Action data. */ write_strip_keyframe_data_array(writer, action.strip_keyframe_data()); write_layers(writer, action.layers()); @@ -560,7 +539,6 @@ static void action_blend_write(BlendWriter *writer, ID *id, const void *id_addre action_blend_write_clear_legacy_channel_groups_listbase(action.groups); action_blend_write_clear_legacy_fcurves_listbase(action.curves); } -#endif /* WITH_ANIM_BAKLAVA */ /* Write legacy F-Curves & Groups. */ BKE_fcurve_blend_write_listbase(writer, &action.curves); @@ -575,8 +553,6 @@ static void action_blend_write(BlendWriter *writer, ID *id, const void *id_addre BKE_previewimg_blend_write(writer, action.preview); } -#ifdef WITH_ANIM_BAKLAVA - static void read_channelbag(BlendDataReader *reader, animrig::ChannelBag &channelbag) { BLO_read_pointer_array( @@ -680,7 +656,6 @@ static void read_slots(BlendDataReader *reader, animrig::Action &action) action.slot_array[i]->wrap().blend_read_post(); } } -#endif /* WITH_ANIM_BAKLAVA */ static void action_blend_read_data(BlendDataReader *reader, ID *id) { @@ -693,21 +668,9 @@ static void action_blend_read_data(BlendDataReader *reader, ID *id) BLI_endian_switch_int16(reinterpret_cast(&act->idroot)); } -#ifdef WITH_ANIM_BAKLAVA read_strip_keyframe_data_array(reader, action); read_layers(reader, action); read_slots(reader, action); -#else - /* Built without Baklava, so do not read the layers, strips, slots, etc. - * This ensures the F-Curves in the legacy `curves` ListBase are read & used - * (these are written by future Blender versions for forward compatibility). */ - action.layer_array = nullptr; - action.layer_array_num = 0; - action.slot_array = nullptr; - action.slot_array_num = 0; - action.strip_keyframe_data_array = nullptr; - action.strip_keyframe_data_array_num = 0; -#endif /* WITH_ANIM_BAKLAVA */ if (action.is_action_layered()) { /* Clear the forward-compatible storage (see action_blend_write_data()). */ @@ -731,12 +694,6 @@ static void action_blend_read_data(BlendDataReader *reader, ID *id) LISTBASE_FOREACH (bActionGroup *, agrp, &action.groups) { BLO_read_struct(reader, FCurve, &agrp->channels.first); BLO_read_struct(reader, FCurve, &agrp->channels.last); -#ifndef WITH_ANIM_BAKLAVA - /* Ensure that the group's 'channelbag' pointer is nullptr. This is used to distinguish - * groups from legacy vs layered Actions, and since this Blender is built without layered - * Actions support, the Action should be treated as legacy. */ - agrp->channel_bag = nullptr; -#endif } } diff --git a/source/blender/blenkernel/intern/anim_data.cc b/source/blender/blenkernel/intern/anim_data.cc index 94618ab7eeb..5e01bc04101 100644 --- a/source/blender/blenkernel/intern/anim_data.cc +++ b/source/blender/blenkernel/intern/anim_data.cc @@ -49,15 +49,12 @@ #include "RNA_access.hh" #include "RNA_path.hh" +#include "ANIM_action.hh" #include "ANIM_action_iterators.hh" #include "ANIM_action_legacy.hh" #include "CLG_log.h" -#ifdef WITH_ANIM_BAKLAVA -# include "ANIM_action.hh" -#endif // WITH_ANIM_BAKLAVA - static CLG_LogRef LOG = {"bke.anim_sys"}; using namespace blender; @@ -214,11 +211,7 @@ bool BKE_animdata_set_action(ReportList *reports, ID *id, bAction *act) return false; } -#ifdef WITH_ANIM_BAKLAVA return animrig::assign_action(act, {*id, *adt}); -#else - return animdata_set_action(reports, id, &adt->action, act); -#endif // WITH_ANIM_BAKLAVA } bool BKE_animdata_action_editable(const AnimData *adt) @@ -238,7 +231,6 @@ bool BKE_animdata_action_ensure_idroot(const ID *owner, bAction *action) return true; } -#ifdef WITH_ANIM_BAKLAVA if (!blender::animrig::legacy::action_treat_as_legacy(*action)) { /* TODO: for layered Actions, this function doesn't make sense. Once all Actions are * auto-versioned to layered Actions, this entire function can be removed. */ @@ -247,7 +239,6 @@ bool BKE_animdata_action_ensure_idroot(const ID *owner, bAction *action) * that are specialized. */ return true; } -#endif if (action->idroot == 0) { /* First time this Action is assigned, lock it to this ID type. */ @@ -278,26 +269,18 @@ void BKE_animdata_free(ID *id, const bool do_id_user) BKE_nla_tweakmode_exit({*id, *adt}); if (adt->action) { -#ifdef WITH_ANIM_BAKLAVA const bool unassign_ok = blender::animrig::unassign_action(*id); BLI_assert_msg(unassign_ok, "Expecting action un-assignment to always work when not in NLA tweak mode"); UNUSED_VARS_NDEBUG(unassign_ok); -#else - id_us_min(&adt->action->id); -#endif } /* same goes for the temporarily displaced action */ if (adt->tmpact) { -#ifdef WITH_ANIM_BAKLAVA /* This should never happen, as we _just_ exited tweak mode. */ BLI_assert_unreachable(); const bool unassign_ok = blender::animrig::assign_tmpaction(nullptr, {*id, *adt}); BLI_assert_msg(unassign_ok, "Expecting tmpaction un-assignment to always work"); UNUSED_VARS_NDEBUG(unassign_ok); -#else - id_us_min(&adt->tmpact->id); -#endif } } @@ -735,15 +718,12 @@ void BKE_animdata_transfer_by_basepath(Main *bmain, ID *srcID, ID *dstID, ListBa * can be easily found again. */ if (!dstAdt->action) { animrig::Action &new_action = animrig::action_add(*bmain, srcAdt->action->id.name + 2); - if (USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { - new_action.slot_add_for_id(*dstID); - } + new_action.slot_add_for_id(*dstID); + const bool assign_ok = animrig::assign_action(&new_action, dst_owned_adt); BLI_assert_msg(assign_ok, "Expected Action assignment to work"); UNUSED_VARS_NDEBUG(assign_ok); - if (USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { - BLI_assert(dstAdt->slot_handle != animrig::Slot::unassigned); - } + BLI_assert(dstAdt->slot_handle != animrig::Slot::unassigned); } /* loop over base paths, trying to fix for each one... */ diff --git a/source/blender/blenkernel/intern/anim_sys.cc b/source/blender/blenkernel/intern/anim_sys.cc index d4384cebf0b..0637277c61a 100644 --- a/source/blender/blenkernel/intern/anim_sys.cc +++ b/source/blender/blenkernel/intern/anim_sys.cc @@ -796,7 +796,6 @@ static void action_idcode_patch_check(ID *id, bAction *act) return; } -#ifdef WITH_ANIM_BAKLAVA if (!blender::animrig::legacy::action_treat_as_legacy(*act)) { /* Layered Actions can always be assigned to any ID. It's actually the Slot that is limited * to an ID type (similar to legacy Actions). Layered Actions are evaluated differently, @@ -805,7 +804,6 @@ static void action_idcode_patch_check(ID *id, bAction *act) /* TODO: when possible, add a BLI_assert_unreachable() here. */ return; } -#endif idcode = GS(id->name); @@ -863,24 +861,20 @@ void animsys_evaluate_action_group(PointerRNA *ptr, } }; -#ifdef WITH_ANIM_BAKLAVA blender::animrig::ChannelGroup channel_group = agrp->wrap(); if (channel_group.is_legacy()) { -#endif /* calculate then execute each curve */ for (fcu = static_cast(agrp->channels.first); (fcu) && (fcu->grp == agrp); fcu = fcu->next) { visit_fcurve(fcu); } -#ifdef WITH_ANIM_BAKLAVA return; } for (FCurve *fcurve : channel_group.fcurves()) { visit_fcurve(fcurve); } -#endif } void animsys_evaluate_action(PointerRNA *ptr, diff --git a/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc b/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc index 7df50087b88..b54cc623ab0 100644 --- a/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc +++ b/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc @@ -584,9 +584,8 @@ class AnimDataConvertor { animrig::Action &action = animrig::action_add( this->conversion_data.bmain, this->animdata_src->action ? this->animdata_src->action->id.name + 2 : nullptr); - if (USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { - action.slot_add_for_id(this->id_dst); - } + action.slot_add_for_id(this->id_dst); + const bool ok = animrig::assign_action(&action, {this->id_dst, *this->animdata_dst}); BLI_assert_msg(ok, "Expecting action assignment to work when converting Grease Pencil"); UNUSED_VARS_NDEBUG(ok); @@ -603,9 +602,8 @@ class AnimDataConvertor { animrig::Action &tmpact = animrig::action_add( this->conversion_data.bmain, this->animdata_src->tmpact ? this->animdata_src->tmpact->id.name + 2 : nullptr); - if (USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { - tmpact.slot_add_for_id(this->id_dst); - } + tmpact.slot_add_for_id(this->id_dst); + const bool ok = animrig::assign_tmpaction(&tmpact, {this->id_dst, *this->animdata_dst}); BLI_assert_msg(ok, "Expecting tmpact assignment to work when converting Grease Pencil"); UNUSED_VARS_NDEBUG(ok); diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index 19ac0684df0..c16387dbeb9 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -1255,9 +1255,7 @@ void do_versions_after_linking_400(FileData *fd, Main *bmain) version_node_socket_index_animdata(bmain, NTREE_SHADER, SH_NODE_BSDF_PRINCIPLED, 7, 1, 30); } - /* Keeping this block is without a `MAIN_VERSION_FILE_ATLEAST` until the experimental flag is - * removed. */ - if (USER_EXPERIMENTAL_TEST(&U, use_animation_baklava)) { + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 404, 2)) { version_legacy_actions_to_layered(bmain); } diff --git a/source/blender/depsgraph/CMakeLists.txt b/source/blender/depsgraph/CMakeLists.txt index 49dbf167a15..c1f9642e825 100644 --- a/source/blender/depsgraph/CMakeLists.txt +++ b/source/blender/depsgraph/CMakeLists.txt @@ -166,10 +166,6 @@ if(WITH_PYTHON) ) endif() -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - blender_add_lib(bf_depsgraph "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") add_library(bf::depsgraph ALIAS bf_depsgraph) diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index c109cba0265..03bb6583f23 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1702,7 +1702,6 @@ void DepsgraphRelationBuilder::build_animdata_action_targets(ID *id, return; } -#ifdef WITH_ANIM_BAKLAVA const animrig::Slot *slot = action.slot_for_handle(slot_handle); if (slot == nullptr) { /* If there's no matching slot, there's no Action dependency. */ @@ -1729,9 +1728,6 @@ void DepsgraphRelationBuilder::build_animdata_action_targets(ID *id, } } } -#else - UNUSED_VARS(slot_handle); -#endif } void DepsgraphRelationBuilder::build_animdata_nlastrip_targets(ID *id, @@ -1843,13 +1839,6 @@ void DepsgraphRelationBuilder::build_action(bAction *dna_action) build_idproperties(dna_action->id.properties); blender::animrig::Action &action = dna_action->wrap(); -#ifndef WITH_ANIM_BAKLAVA - /* Prevent evaluation of data introduced by Project Baklava. */ - if (action.is_action_layered()) { - return; - } -#endif - if (!action.is_empty()) { TimeSourceKey time_src_key; ComponentKey animation_key(&dna_action->id, NodeType::ANIMATION); diff --git a/source/blender/editors/animation/CMakeLists.txt b/source/blender/editors/animation/CMakeLists.txt index b2c24be9a71..5d1da736dfd 100644 --- a/source/blender/editors/animation/CMakeLists.txt +++ b/source/blender/editors/animation/CMakeLists.txt @@ -55,10 +55,6 @@ if(WITH_PYTHON) add_definitions(-DWITH_PYTHON) endif() -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - blender_add_lib(bf_editor_animation "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") # RNA_prototypes.hh diff --git a/source/blender/editors/animation/anim_channels_defines.cc b/source/blender/editors/animation/anim_channels_defines.cc index 89bc0058263..f51a7f83dda 100644 --- a/source/blender/editors/animation/anim_channels_defines.cc +++ b/source/blender/editors/animation/anim_channels_defines.cc @@ -1303,8 +1303,6 @@ static bAnimChannelType ACF_NLACURVE = { /* Object Animation Expander ------------------------------------------- */ -#ifdef WITH_ANIM_BAKLAVA - /* TODO: just get this from RNA? */ static int acf_fillanim_icon(bAnimListElem * /*ale*/) { @@ -1493,8 +1491,6 @@ static bAnimChannelType ACF_ACTION_SLOT = { /*setting_ptr*/ acf_action_slot_setting_ptr, }; -#endif // WITH_ANIM_BAKLAVA - /* Object Action Expander ------------------------------------------- */ /* TODO: just get this from RNA? */ @@ -4542,13 +4538,8 @@ static void ANIM_init_channel_typeinfo_data() animchannelTypeInfo[type++] = &ACF_NLACONTROLS; /* NLA Control FCurve Expander */ animchannelTypeInfo[type++] = &ACF_NLACURVE; /* NLA Control FCurve Channel */ -#ifdef WITH_ANIM_BAKLAVA animchannelTypeInfo[type++] = &ACF_FILLANIM; /* Object's Layered Action Expander */ animchannelTypeInfo[type++] = &ACF_ACTION_SLOT; /* Action Slot Expander */ -#else - animchannelTypeInfo[type++] = nullptr; - animchannelTypeInfo[type++] = nullptr; -#endif animchannelTypeInfo[type++] = &ACF_FILLACTD; /* Object Action Expander */ animchannelTypeInfo[type++] = &ACF_FILLDRIVERS; /* Drivers Expander */ @@ -4589,12 +4580,10 @@ static void ANIM_init_channel_typeinfo_data() animchannelTypeInfo[type++] = &ACF_NLATRACK; /* NLA Track */ animchannelTypeInfo[type++] = &ACF_NLAACTION; /* NLA Action */ -#ifdef WITH_ANIM_BAKLAVA BLI_assert_msg(animchannelTypeInfo[ANIMTYPE_FILLACT_LAYERED] == &ACF_FILLANIM, "ANIMTYPE_FILLACT_LAYERED does not match ACF_FILLANIM"); BLI_assert_msg(animchannelTypeInfo[ANIMTYPE_ACTION_SLOT] == &ACF_ACTION_SLOT, "ANIMTYPE_ACTION_SLOT does not match ACF_ACTION_SLOT"); -#endif } } @@ -6069,13 +6058,11 @@ void ANIM_channel_draw_widgets(const bContext *C, UI_block_emboss_set(block, UI_EMBOSS_NONE); } -#ifdef WITH_ANIM_BAKLAVA /* Slot ID type indicator. */ if (ale->type == ANIMTYPE_ACTION_SLOT) { offset -= ICON_WIDTH; UI_icon_draw(offset, ymid, acf_action_slot_idtype_icon(ale)); } -#endif /* WITH_ANIM_BAKLAVA */ } /* Draw slider: diff --git a/source/blender/editors/animation/anim_channels_edit.cc b/source/blender/editors/animation/anim_channels_edit.cc index 077c30c893c..cdaf55fdb84 100644 --- a/source/blender/editors/animation/anim_channels_edit.cc +++ b/source/blender/editors/animation/anim_channels_edit.cc @@ -5187,8 +5187,6 @@ static void ANIM_OT_channels_bake(wmOperatorType *ot) "Bake Modifiers into keyframes and delete them after"); } -#ifdef WITH_ANIM_BAKLAVA - static int slot_channels_move_to_new_action_exec(bContext *C, wmOperator * /* op */) { using namespace blender::animrig; @@ -5348,8 +5346,6 @@ static void ANIM_OT_separate_slots(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } -#endif /* WITH_ANIM_BAKLAVA */ - /** * Find a Graph Editor area and set the context arguments accordingly. */ @@ -5732,10 +5728,8 @@ void ED_operatortypes_animchannels() WM_operatortype_append(ANIM_OT_channels_bake); -#ifdef WITH_ANIM_BAKLAVA WM_operatortype_append(ANIM_OT_slot_channels_move_to_new_action); WM_operatortype_append(ANIM_OT_separate_slots); -#endif } void ED_keymap_animchannels(wmKeyConfig *keyconf) diff --git a/source/blender/editors/animation/anim_filter.cc b/source/blender/editors/animation/anim_filter.cc index d09b331591b..9cef7b9af6e 100644 --- a/source/blender/editors/animation/anim_filter.cc +++ b/source/blender/editors/animation/anim_filter.cc @@ -445,12 +445,8 @@ bool ANIM_animdata_can_have_greasepencil(const eAnimCont_Types type) #define ANIMDATA_HAS_ACTION_LEGACY(id) \ ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_legacy()) -#ifdef WITH_ANIM_BAKLAVA -# define ANIMDATA_HAS_ACTION_LAYERED(id) \ - ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_layered()) -#else -# define ANIMDATA_HAS_ACTION_LAYERED(id) false -#endif +#define ANIMDATA_HAS_ACTION_LAYERED(id) \ + ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_layered()) /* quick macro to test if AnimData is usable for drivers */ #define ANIMDATA_HAS_DRIVERS(id) ((id)->adt && (id)->adt->drivers.first) diff --git a/source/blender/editors/animation/keyframes_draw.cc b/source/blender/editors/animation/keyframes_draw.cc index e5ff297c09c..d345e8f68b1 100644 --- a/source/blender/editors/animation/keyframes_draw.cc +++ b/source/blender/editors/animation/keyframes_draw.cc @@ -774,9 +774,7 @@ void ED_add_action_channel(ChannelDrawList *channel_list, float yscale_fac, int saction_flag) { -#ifdef WITH_ANIM_BAKLAVA BLI_assert(!act || act->wrap().is_action_legacy()); -#endif const bool locked = (act && (!ID_IS_EDITABLE(act) || ID_IS_OVERRIDE_LIBRARY(act))); saction_flag &= ~SACTION_SHOW_EXTREMES; diff --git a/source/blender/editors/animation/keyframes_edit.cc b/source/blender/editors/animation/keyframes_edit.cc index b24e4898db0..a6d83050e20 100644 --- a/source/blender/editors/animation/keyframes_edit.cc +++ b/source/blender/editors/animation/keyframes_edit.cc @@ -179,8 +179,6 @@ static short agrp_keyframes_loop(KeyframeEditData *ked, return 0; } -#ifdef WITH_ANIM_BAKLAVA - /* Loop over all keyframes in the layered Action. */ static short action_layered_keyframes_loop(KeyframeEditData *ked, animrig::Action &action, @@ -203,8 +201,6 @@ static short action_layered_keyframes_loop(KeyframeEditData *ked, return 0; } -#endif - /* This function is used to loop over the keyframe data in an Action */ static short action_legacy_keyframes_loop(KeyframeEditData *ked, bAction *act, @@ -430,26 +426,18 @@ short ANIM_animchannel_keyframes_loop(KeyframeEditData *ked, case ALE_GROUP: /* action group */ return agrp_keyframes_loop(ked, (bActionGroup *)ale->data, key_ok, key_cb, fcu_cb); case ALE_ACTION_LAYERED: { /* Layered Action. */ -#ifdef WITH_ANIM_BAKLAVA /* This assumes that the ALE_ACTION_LAYERED channel is shown in the dopesheet context, * underneath the data-block that owns `ale->adt`. So that means that the loop is limited to * the keys that belong to that slot. */ animrig::Action &action = static_cast(ale->key_data)->wrap(); animrig::Slot *slot = action.slot_for_handle(ale->adt->slot_handle); return action_layered_keyframes_loop(ked, action, slot, key_ok, key_cb, fcu_cb); -#else - return 0; -#endif } case ALE_ACTION_SLOT: { -#ifdef WITH_ANIM_BAKLAVA animrig::Action *action = static_cast(ale->key_data); BLI_assert(action); animrig::Slot *slot = static_cast(ale->data); return action_layered_keyframes_loop(ked, *action, slot, key_ok, key_cb, fcu_cb); -#else - return 0; -#endif } case ALE_ACT: /* Legacy Action. */ diff --git a/source/blender/editors/interface/CMakeLists.txt b/source/blender/editors/interface/CMakeLists.txt index b9bfc0e2377..8d063fa8910 100644 --- a/source/blender/editors/interface/CMakeLists.txt +++ b/source/blender/editors/interface/CMakeLists.txt @@ -128,10 +128,6 @@ if(WITH_INPUT_IME) add_definitions(-DWITH_INPUT_IME) endif() -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - blender_add_lib(bf_editor_interface "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") # RNA_prototypes.hh diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 90e17cdc997..2ecd70a6496 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -458,17 +458,13 @@ void ui_rna_collection_search_update_fn( has_sep_char = ID_IS_LINKED(id); } } -#ifdef WITH_ANIM_BAKLAVA else if (itemptr.type == &RNA_ActionSlot) { PropertyRNA *prop = RNA_struct_find_property(&itemptr, "name_display"); name = RNA_property_string_get_alloc(&itemptr, prop, name_buf, sizeof(name_buf), nullptr); } else { -#endif /* WITH_ANIM_BAKLAVA */ name = RNA_struct_name_get_alloc(&itemptr, name_buf, sizeof(name_buf), nullptr); -#ifdef WITH_ANIM_BAKLAVA } -#endif /* WITH_ANIM_BAKLAVA */ if (name) { auto cis = std::make_unique(); diff --git a/source/blender/editors/interface/templates/interface_templates.cc b/source/blender/editors/interface/templates/interface_templates.cc index b7ac5651fd2..52e31f99a62 100644 --- a/source/blender/editors/interface/templates/interface_templates.cc +++ b/source/blender/editors/interface/templates/interface_templates.cc @@ -2205,16 +2205,12 @@ static void template_search_add_button_name(uiBlock *block, } PropertyRNA *name_prop; -#ifdef WITH_ANIM_BAKLAVA if (type == &RNA_ActionSlot) { name_prop = RNA_struct_find_property(active_ptr, "name_display"); } else { -#endif /* WITH_ANIM_BAKLAVA */ name_prop = RNA_struct_name_property(type); -#ifdef WITH_ANIM_BAKLAVA } -#endif /* WITH_ANIM_BAKLAVA */ const int width = template_search_textbut_width(active_ptr, name_prop); const int height = template_search_textbut_height(); diff --git a/source/blender/editors/space_action/CMakeLists.txt b/source/blender/editors/space_action/CMakeLists.txt index f7be190c398..dc75793bc28 100644 --- a/source/blender/editors/space_action/CMakeLists.txt +++ b/source/blender/editors/space_action/CMakeLists.txt @@ -41,10 +41,6 @@ set(LIB PRIVATE bf::animrig ) -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - blender_add_lib(bf_editor_space_action "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") # RNA_prototypes.hh dna_type_offsets.h diff --git a/source/blender/editors/space_nla/CMakeLists.txt b/source/blender/editors/space_nla/CMakeLists.txt index c2210e93fb2..d7d9b22d3cb 100644 --- a/source/blender/editors/space_nla/CMakeLists.txt +++ b/source/blender/editors/space_nla/CMakeLists.txt @@ -39,10 +39,6 @@ set(LIB PRIVATE bf::intern::guardedalloc ) -if(WITH_EXPERIMENTAL_FEATURES) - add_definitions(-DWITH_ANIM_BAKLAVA) -endif() - blender_add_lib(bf_editor_space_nla "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") # RNA_prototypes.hh dna_type_offsets.h diff --git a/source/blender/editors/space_nla/nla_buttons.cc b/source/blender/editors/space_nla/nla_buttons.cc index 655938f4399..620afe4da4d 100644 --- a/source/blender/editors/space_nla/nla_buttons.cc +++ b/source/blender/editors/space_nla/nla_buttons.cc @@ -483,7 +483,6 @@ static void nla_panel_actclip(const bContext *C, Panel *panel) column = uiLayoutColumn(layout, true); uiItemR(column, &strip_ptr, "action", UI_ITEM_NONE, nullptr, ICON_ACTION); -#ifdef WITH_ANIM_BAKLAVA NlaStrip *strip = static_cast(strip_ptr.data); if (strip->act) { BLI_assert(strip_ptr.owner_id); @@ -505,7 +504,6 @@ static void nla_panel_actclip(const bContext *C, Panel *panel) "Slot"); } } -#endif /* action extents */ column = uiLayoutColumn(layout, true); diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 012f2ec026a..1f93f1eea76 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -759,9 +759,8 @@ typedef struct UserDef_Experimental { char use_new_volume_nodes; char use_new_file_import_nodes; char use_shader_node_previews; - char use_animation_baklava; char enable_new_cpu_compositor; - char _pad[2]; + char _pad[3]; /** `makesdna` does not allow empty structs. */ } UserDef_Experimental; diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 72ef05815e9..95f5aad5d86 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -110,7 +110,6 @@ endif() if(WITH_EXPERIMENTAL_FEATURES) add_definitions(-DWITH_SIMULATION_DATABLOCK) - add_definitions(-DWITH_ANIM_BAKLAVA) endif() set(APISRC diff --git a/source/blender/makesrna/intern/rna_action.cc b/source/blender/makesrna/intern/rna_action.cc index 910df5d2b80..2438019cdbd 100644 --- a/source/blender/makesrna/intern/rna_action.cc +++ b/source/blender/makesrna/intern/rna_action.cc @@ -34,7 +34,6 @@ using namespace blender; -#ifdef WITH_ANIM_BAKLAVA const EnumPropertyItem rna_enum_layer_mix_mode_items[] = { {int(animrig::Layer::MixMode::Replace), "REPLACE", @@ -72,7 +71,6 @@ const EnumPropertyItem rna_enum_strip_type_items[] = { "Strip containing keyframes on F-Curves"}, {0, nullptr, 0, nullptr, nullptr}, }; -#endif /* WITH_ANIM_BAKLAVA */ /* Cannot use rna_enum_dummy_DEFAULT_items because the UNSPECIFIED entry needs * to exist as it is the default. */ @@ -116,8 +114,6 @@ static animrig::Action &rna_action(const PointerRNA *ptr) return reinterpret_cast(ptr->owner_id)->wrap(); } -# ifdef WITH_ANIM_BAKLAVA - static animrig::Slot &rna_data_slot(const PointerRNA *ptr) { BLI_assert(ptr->type == &RNA_ActionSlot); @@ -374,7 +370,7 @@ static void rna_ActionSlot_name_update(Main *bmain, Scene *, PointerRNA *ptr) action.slot_name_propagate(*bmain, slot); } -# ifndef NDEBUG +# ifndef NDEBUG static void rna_ActionSlot_debug_log_users(const ID *action_id, ActionSlot *dna_slot, Main *bmain) { using namespace blender::animrig; @@ -395,7 +391,7 @@ static void rna_ActionSlot_debug_log_users(const ID *action_id, ActionSlot *dna_ printf(" - %s\n", user->name); } } -# endif /* NDEBUG */ +# endif /* NDEBUG */ static std::optional rna_ActionLayer_path(const PointerRNA *ptr) { @@ -738,8 +734,6 @@ static ActionChannelBag *rna_ActionStrip_channels(ID *dna_action_id, return strip_data.channelbag_for_slot(slot_handle); } -# endif // WITH_ANIM_BAKLAVA - /** * Iterator for the fcurves in a channel group. * @@ -858,7 +852,6 @@ static PointerRNA rna_ActionGroup_channels_get(CollectionPropertyIterator *iter) return rna_pointer_inherit_refine(&iter->parent, &RNA_FCurve, fcurve); } -# ifdef WITH_ANIM_BAKLAVA /* Use the backward-compatible API only when we're working with the action as a * layered action. */ static bool use_backward_compatible_api(animrig::Action &action) @@ -927,13 +920,10 @@ static int rna_iterator_Action_groups_length(PointerRNA *ptr) return BLI_listbase_count(&action.groups); } -# endif /* WITH_ANIM_BAKLAVA */ - static bActionGroup *rna_Action_groups_new(bAction *act, const char name[]) { bActionGroup *group; -# ifdef WITH_ANIM_BAKLAVA animrig::Action &action = act->wrap(); if (use_backward_compatible_api(action)) { animrig::ChannelBag &channelbag = animrig::legacy::channelbag_ensure(action); @@ -942,9 +932,6 @@ static bActionGroup *rna_Action_groups_new(bAction *act, const char name[]) else { group = action_groups_add_new(act, name); } -# else - group = action_groups_add_new(act, name); -# endif /* I (Sybren) expected that the commented-out notifier below was missing. * However, the animation filtering code (`animfilter_act_group()`) hides @@ -961,7 +948,6 @@ static void rna_Action_groups_remove(bAction *act, ReportList *reports, PointerR bActionGroup *agrp = static_cast(agrp_ptr->data); BLI_assert(agrp); /* Ensured by RNA flag PROP_NEVER_NULL. */ -# ifdef WITH_ANIM_BAKLAVA animrig::Action &action = act->wrap(); if (use_backward_compatible_api(action)) { animrig::ChannelBag *channelbag = animrig::legacy::channelbag_get(action); @@ -979,7 +965,6 @@ static void rna_Action_groups_remove(bAction *act, ReportList *reports, PointerR return; } -# endif FCurve *fcu, *fcn; @@ -1011,7 +996,6 @@ static void rna_Action_groups_remove(bAction *act, ReportList *reports, PointerR WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, nullptr); } -# ifdef WITH_ANIM_BAKLAVA static void rna_iterator_Action_fcurves_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { animrig::Action &action = rna_action(ptr); @@ -1073,8 +1057,6 @@ static int rna_iterator_Action_fcurves_length(PointerRNA *ptr) return BLI_listbase_count(&action.curves); } -# endif // WITH_ANIM_BAKLAVA - static FCurve *rna_Action_fcurve_new(bAction *act, Main *bmain, ReportList *reports, @@ -1093,7 +1075,6 @@ static FCurve *rna_Action_fcurve_new(bAction *act, fcurve_descriptor.channel_group = group; } -# ifdef WITH_ANIM_BAKLAVA animrig::Action &action = act->wrap(); if (use_backward_compatible_api(action)) { /* Add the F-Curve to the channelbag for the first slot. */ @@ -1115,7 +1096,6 @@ static FCurve *rna_Action_fcurve_new(bAction *act, return fcurve; } -# endif /* Annoying, check if this exists. */ if (blender::animrig::fcurve_find_in_action(act, fcurve_descriptor)) { @@ -1145,7 +1125,6 @@ static FCurve *rna_Action_fcurve_find(bAction *act, return nullptr; } -# ifdef WITH_ANIM_BAKLAVA animrig::Action &action = act->wrap(); if (use_backward_compatible_api(action)) { animrig::ChannelBag *channelbag = animrig::legacy::channelbag_get(action); @@ -1154,7 +1133,6 @@ static FCurve *rna_Action_fcurve_find(bAction *act, } return channelbag->fcurve_find({data_path, index}); } -# endif /* Returns nullptr if not found. */ return animrig::fcurve_find_in_action(act, {data_path, index}); @@ -1164,7 +1142,6 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, PointerR { FCurve *fcu = static_cast(fcu_ptr->data); -# ifdef WITH_ANIM_BAKLAVA animrig::Action &action = act->wrap(); if (use_backward_compatible_api(action)) { animrig::ChannelBag *channelbag = animrig::legacy::channelbag_get(action); @@ -1183,7 +1160,6 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, PointerR return; } -# endif if (fcu->grp) { if (BLI_findindex(&act->groups, fcu->grp) == -1) { @@ -1216,7 +1192,6 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, PointerR static void rna_Action_fcurve_clear(bAction *act) { -# ifdef WITH_ANIM_BAKLAVA animrig::Action &action = act->wrap(); if (use_backward_compatible_api(action)) { animrig::ChannelBag *channelbag = animrig::legacy::channelbag_get(action); @@ -1229,9 +1204,6 @@ static void rna_Action_fcurve_clear(bAction *act) else { BKE_action_fcurves_clear(act); } -# else - BKE_action_fcurves_clear(act); -# endif WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, nullptr); } @@ -1300,7 +1272,6 @@ static void rna_Action_active_pose_marker_index_range( *max = max_ii(0, BLI_listbase_count(&act->markers) - 1); } -# ifdef WITH_ANIM_BAKLAVA static bool rna_Action_is_empty_get(PointerRNA *ptr) { animrig::Action &action = rna_action(ptr); @@ -1314,7 +1285,6 @@ static bool rna_Action_is_action_layered_get(PointerRNA *ptr) { return rna_action(ptr).is_action_layered(); } -# endif // WITH_ANIM_BAKLAVA static void rna_Action_frame_range_get(PointerRNA *ptr, float *r_values) { @@ -1870,8 +1840,6 @@ static void rna_def_dopesheet(BlenderRNA *brna) /* =========================== Layered Action interface =========================== */ -# ifdef WITH_ANIM_BAKLAVA - static void rna_def_action_slots(BlenderRNA *brna, PropertyRNA *cprop) { StructRNA *srna; @@ -2045,7 +2013,7 @@ static void rna_def_action_slot(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update_notifier(prop, NC_ANIMATION | ND_ANIMCHAN | NA_SELECTED); -# ifndef NDEBUG +# ifndef NDEBUG /* Slot.debug_log_users() */ { FunctionRNA *func; @@ -2053,7 +2021,7 @@ static void rna_def_action_slot(BlenderRNA *brna) func = RNA_def_function(srna, "debug_log_users", "rna_ActionSlot_debug_log_users"); RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN); } -# endif +# endif } static void rna_def_ActionLayer_strips(BlenderRNA *brna, PropertyRNA *cprop) @@ -2443,7 +2411,6 @@ static void rna_def_action_channelbag(BlenderRNA *brna) "Groupings of F-Curves for display purposes, in e.g. the dopesheet and graph editor"); rna_def_channelbag_groups(brna, prop); } -# endif // WITH_ANIM_BAKLAVA static void rna_def_action_group(BlenderRNA *brna) { @@ -2535,7 +2502,6 @@ static void rna_def_action_groups(BlenderRNA *brna, PropertyRNA *cprop) srna = RNA_def_struct(brna, "ActionGroups", nullptr); RNA_def_struct_sdna(srna, "bAction"); RNA_def_struct_ui_text(srna, "Action Groups", "Collection of action groups"); -# ifdef WITH_ANIM_BAKLAVA RNA_def_property_collection_funcs(cprop, "rna_iterator_Action_groups_begin", "rna_iterator_Action_groups_next", @@ -2545,7 +2511,6 @@ static void rna_def_action_groups(BlenderRNA *brna, PropertyRNA *cprop) nullptr, nullptr, nullptr); -# endif func = RNA_def_function(srna, "new", "rna_Action_groups_new"); RNA_def_function_ui_description(func, "Create a new action group and add it to the action"); @@ -2573,7 +2538,6 @@ static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop) srna = RNA_def_struct(brna, "ActionFCurves", nullptr); RNA_def_struct_sdna(srna, "bAction"); RNA_def_struct_ui_text(srna, "Action F-Curves", "Collection of action F-Curves"); -# ifdef WITH_ANIM_BAKLAVA RNA_def_property_collection_funcs(cprop, "rna_iterator_Action_fcurves_begin", "rna_iterator_Action_fcurves_next", @@ -2583,7 +2547,6 @@ static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop) nullptr, nullptr, nullptr); -# endif /* Action.fcurves.new(...) */ func = RNA_def_function(srna, "new", "rna_Action_fcurve_new"); @@ -2716,7 +2679,6 @@ static void rna_def_action(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Action", "A collection of F-Curves for animation"); RNA_def_struct_ui_icon(srna, ICON_ACTION); -# ifdef WITH_ANIM_BAKLAVA /* Properties. */ prop = RNA_def_property(srna, "is_empty", PROP_BOOLEAN, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -2740,11 +2702,8 @@ static void rna_def_action(BlenderRNA *brna) "Return whether this is a layered Action. An empty Action considered " "as both a 'layered' and a 'layered' Action."); RNA_def_property_boolean_funcs(prop, "rna_Action_is_action_layered_get", nullptr); -# endif // WITH_ANIM_BAKLAVA /* Collection properties. */ - -# ifdef WITH_ANIM_BAKLAVA prop = RNA_def_property(srna, "slots", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "ActionSlot"); RNA_def_property_collection_funcs(prop, @@ -2772,7 +2731,6 @@ static void rna_def_action(BlenderRNA *brna) nullptr); RNA_def_property_ui_text(prop, "Layers", "The list of layers that make up this Action"); rna_def_action_layers(brna, prop); -# endif // WITH_ANIM_BAKLAVA prop = RNA_def_property(srna, "pose_markers", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, nullptr, "markers", nullptr); @@ -2872,12 +2830,10 @@ void RNA_def_action(BlenderRNA *brna) rna_def_action_group(brna); rna_def_dopesheet(brna); -# ifdef WITH_ANIM_BAKLAVA rna_def_action_slot(brna); rna_def_action_layer(brna); rna_def_action_strip(brna); rna_def_action_channelbag(brna); -# endif } #endif diff --git a/source/blender/makesrna/intern/rna_action_tools.hh b/source/blender/makesrna/intern/rna_action_tools.hh index 3008c3b8f71..11fa1be35cb 100644 --- a/source/blender/makesrna/intern/rna_action_tools.hh +++ b/source/blender/makesrna/intern/rna_action_tools.hh @@ -12,8 +12,7 @@ #pragma once -#ifdef WITH_ANIM_BAKLAVA -# ifdef RNA_RUNTIME +#ifdef RNA_RUNTIME /** * Get the Action slot, given this slot handle. @@ -54,5 +53,4 @@ void rna_generic_action_slot_handle_set(blender::animrig::slot_handle_t slot_han void rna_iterator_generic_action_slots_begin(CollectionPropertyIterator *iter, bAction *assigned_action); -# endif /* RNA_RUNTIME */ -#endif /* WITH_ANIM_BAKLAVA */ +#endif /* RNA_RUNTIME */ diff --git a/source/blender/makesrna/intern/rna_animation.cc b/source/blender/makesrna/intern/rna_animation.cc index af931962300..d9d6822413d 100644 --- a/source/blender/makesrna/intern/rna_animation.cc +++ b/source/blender/makesrna/intern/rna_animation.cc @@ -165,7 +165,6 @@ static PointerRNA rna_AnimData_action_get(PointerRNA *ptr) static void rna_AnimData_action_set(PointerRNA *ptr, PointerRNA value, ReportList *reports) { -# ifdef WITH_ANIM_BAKLAVA using namespace blender::animrig; BLI_assert(ptr->owner_id); ID &animated_id = *ptr->owner_id; @@ -174,11 +173,6 @@ static void rna_AnimData_action_set(PointerRNA *ptr, PointerRNA value, ReportLis if (!assign_action(action, animated_id)) { BKE_report(reports, RPT_ERROR, "Could not change action"); } - UNUSED_VARS(reports); -# else - ID *ownerId = ptr->owner_id; - BKE_animdata_set_action(reports, ownerId, static_cast(value.data)); -# endif } static void rna_AnimData_tmpact_set(PointerRNA *ptr, PointerRNA value, ReportList *reports) @@ -231,7 +225,6 @@ bool rna_AnimData_tweakmode_override_apply(Main * /*bmain*/, return true; } -# ifdef WITH_ANIM_BAKLAVA void rna_generic_action_slot_handle_set(blender::animrig::slot_handle_t slot_handle_to_assign, ID &animated_id, bAction *&action_ptr_ref, @@ -407,8 +400,6 @@ static void rna_iterator_animdata_action_slots_begin(CollectionPropertyIterator rna_iterator_generic_action_slots_begin(iter, rna_animdata(ptr).action); } -# endif /* WITH_ANIM_BAKLAVA */ - /* ****************************** */ /* wrapper for poll callback */ @@ -1000,12 +991,11 @@ bool rna_AnimaData_override_apply(Main *bmain, RNAPropertyOverrideApplyContext & adt_dst->action = adt_src->action; id_us_plus(reinterpret_cast(adt_dst->action)); id_us_min(reinterpret_cast(adt_dst->tmpact)); -# ifdef WITH_ANIM_BAKLAVA + adt_dst->slot_handle = adt_src->slot_handle; adt_dst->tmp_slot_handle = adt_src->tmp_slot_handle; STRNCPY(adt_dst->slot_name, adt_src->slot_name); STRNCPY(adt_dst->tmp_slot_name, adt_src->tmp_slot_name); -# endif adt_dst->tmpact = adt_src->tmpact; id_us_plus(reinterpret_cast(adt_dst->tmpact)); adt_dst->act_blendmode = adt_src->act_blendmode; @@ -1687,7 +1677,6 @@ static void rna_def_animdata(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Pin in Graph Editor", ""); RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, nullptr); -# ifdef WITH_ANIM_BAKLAVA /* This property is not necessary for the Python API (that is better off using * slot references/pointers directly), but it is needed for library overrides * to work. */ @@ -1746,7 +1735,6 @@ static void rna_def_animdata(BlenderRNA *brna) nullptr, nullptr); RNA_def_property_ui_text(prop, "Slots", "The list of slots in this animation data-block"); -# endif /* WITH_ANIM_BAKLAVA */ RNA_define_lib_overridable(false); diff --git a/source/blender/makesrna/intern/rna_constraint.cc b/source/blender/makesrna/intern/rna_constraint.cc index 2914d656637..c53f9aa47c0 100644 --- a/source/blender/makesrna/intern/rna_constraint.cc +++ b/source/blender/makesrna/intern/rna_constraint.cc @@ -29,10 +29,8 @@ #include "ED_object.hh" -#ifdef WITH_ANIM_BAKLAVA -# include "ANIM_action.hh" -# include "rna_action_tools.hh" -#endif +#include "ANIM_action.hh" +#include "rna_action_tools.hh" /* Please keep the names in sync with `constraint.cc`. */ const EnumPropertyItem rna_enum_constraint_type_items[] = { @@ -773,7 +771,6 @@ static void rna_ActionConstraint_action_set(PointerRNA *ptr, PointerRNA value, R } } -# ifdef WITH_ANIM_BAKLAVA static void rna_ActionConstraint_action_slot_handle_set( PointerRNA *ptr, const blender::animrig::slot_handle_t new_slot_handle) { @@ -814,7 +811,6 @@ static void rna_iterator_ActionConstraint_action_slots_begin(CollectionPropertyI rna_iterator_generic_action_slots_begin(iter, acon->act); } -# endif /* WITH_ANIM_BAKLAVA */ static int rna_SplineIKConstraint_joint_bindings_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) @@ -1969,7 +1965,6 @@ static void rna_def_constraint_action(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); -# ifdef WITH_ANIM_BAKLAVA /* This property is not necessary for the Python API (that is better off using * slot references/pointers directly), but it is needed for library overrides * to work. */ @@ -2032,7 +2027,6 @@ static void rna_def_constraint_action(BlenderRNA *brna) nullptr); RNA_def_property_ui_text( prop, "Action Slots", "The list of action slots suitable for this NLA strip"); -# endif /* WITH_ANIM_BAKLAVA */ prop = RNA_def_property(srna, "use_bone_object_action", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "flag", ACTCON_BONE_USE_OBJECT_ACTION); diff --git a/source/blender/makesrna/intern/rna_nla.cc b/source/blender/makesrna/intern/rna_nla.cc index 828f882971c..310f4b0ce57 100644 --- a/source/blender/makesrna/intern/rna_nla.cc +++ b/source/blender/makesrna/intern/rna_nla.cc @@ -12,10 +12,8 @@ #include "DNA_anim_types.h" #include "DNA_scene_types.h" -#ifdef WITH_ANIM_BAKLAVA -# include "ANIM_action.hh" -# include "ANIM_nla.hh" -#endif +#include "ANIM_action.hh" +#include "ANIM_nla.hh" #include "BLI_utildefines.h" @@ -484,7 +482,6 @@ static int rna_NlaStrip_action_editable(const PointerRNA *ptr, const char ** /*r return PROP_EDITABLE; } -# ifdef WITH_ANIM_BAKLAVA static void rna_NlaStrip_action_slot_handle_set( PointerRNA *ptr, const blender::animrig::slot_handle_t new_slot_handle) { @@ -519,7 +516,6 @@ static void rna_iterator_nlastrip_action_slots_begin(CollectionPropertyIterator NlaStrip *strip = (NlaStrip *)ptr->data; rna_iterator_generic_action_slots_begin(iter, strip->act); } -# endif /* WITH_ANIM_BAKLAVA */ static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value) { @@ -907,7 +903,6 @@ static void rna_def_nlastrip(BlenderRNA *brna) RNA_def_property_update( prop, NC_ANIMATION | ND_NLA | NA_EDITED, "rna_NlaStrip_dependency_update"); -# ifdef WITH_ANIM_BAKLAVA /* This property is not necessary for the Python API (that is better off using * slot references/pointers directly), but it is needed for library overrides * to work. */ @@ -966,7 +961,6 @@ static void rna_def_nlastrip(BlenderRNA *brna) nullptr); RNA_def_property_ui_text( prop, "Action Slots", "The list of action slots suitable for this NLA strip"); -# endif /* WITH_ANIM_BAKLAVA */ /* Action extents */ prop = RNA_def_property(srna, "action_frame_start", PROP_FLOAT, PROP_TIME); diff --git a/source/blender/makesrna/intern/rna_userdef.cc b/source/blender/makesrna/intern/rna_userdef.cc index aa468079815..14628384b84 100644 --- a/source/blender/makesrna/intern/rna_userdef.cc +++ b/source/blender/makesrna/intern/rna_userdef.cc @@ -7590,20 +7590,6 @@ static void rna_def_userdef_experimental(BlenderRNA *brna) "Recompute all ID usercounts before saving to a blendfile. Allows to " "work around invalid usercount handling in code that may lead to loss " "of data due to wrongly detected unused data-blocks"); - - prop = RNA_def_property(srna, "use_animation_baklava", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, nullptr, "use_animation_baklava", 1); - RNA_def_property_ui_text( - prop, - "Multi-Slot Actions", - "The new 'layered' Action can contain the animation for multiple data-blocks at once"); -# ifndef WITH_ANIM_BAKLAVA - /* Only allow setting this to 'true' when actually built with Baklava. Some of the Baklava code - * is not guarded with `WITH_ANIM_BAKLAVA`, but rather assumes that this flag is always 'false' - * then. */ - RNA_def_property_clear_flag(prop, PROP_EDITABLE); -# endif - RNA_def_property_update(prop, 0, "rna_userdef_update"); } static void rna_def_userdef_addon_collection(BlenderRNA *brna, PropertyRNA *cprop) diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index 90c315b0b9b..1cbeed6b7bc 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -400,15 +400,12 @@ add_blender_test( --testdir "${TEST_SRC_DIR}/animation" ) -if(WITH_EXPERIMENTAL_FEATURES) - # Only run with Project Baklava enabled. - add_blender_test( - bl_animation_action - --python ${CMAKE_CURRENT_LIST_DIR}/bl_animation_action.py - -- - --testdir "${TEST_SRC_DIR}/animation" - ) -endif() +add_blender_test( + bl_animation_action + --python ${CMAKE_CURRENT_LIST_DIR}/bl_animation_action.py + -- + --testdir "${TEST_SRC_DIR}/animation" +) add_blender_test( bl_animation_keyframing diff --git a/tests/python/bl_animation_action.py b/tests/python/bl_animation_action.py index 96a35995c36..2ddb043c9a4 100644 --- a/tests/python/bl_animation_action.py +++ b/tests/python/bl_animation_action.py @@ -13,22 +13,11 @@ blender -b --factory-startup --python tests/python/bl_animation_action.py """ -def enable_experimental_animation_baklava(): - bpy.context.preferences.view.show_developer_ui = True - bpy.context.preferences.experimental.use_animation_baklava = True - - -def disable_experimental_animation_baklava(): - bpy.context.preferences.view.show_developer_ui = False - bpy.context.preferences.experimental.use_animation_baklava = False - - class ActionSlotAssignmentTest(unittest.TestCase): """Test assigning actions & check reference counts.""" def setUp(self) -> None: bpy.ops.wm.read_homefile(use_factory_startup=True) - enable_experimental_animation_baklava() def test_action_assignment(self): # Create new Action. @@ -154,7 +143,6 @@ class LegacyAPIOnLayeredActionTest(unittest.TestCase): def setUp(self) -> None: bpy.ops.wm.read_homefile(use_factory_startup=True) - enable_experimental_animation_baklava() self.action = bpy.data.actions.new('LayeredAction') @@ -251,35 +239,6 @@ class LegacyAPIOnLayeredActionTest(unittest.TestCase): self.assertNotIn(group, channelbag.groups[:], "A group should be removable via the legacy API") -class TestLegacyLayered(unittest.TestCase): - """Test boundaries between legacy & layered Actions. - - Layered functionality should not be available on legacy actions. - """ - - def test_legacy_action(self) -> None: - """Test layered operations on a legacy Action""" - - # Disable Baklava's backward-compatibility with the legacy API to create an actual legacy Action. - disable_experimental_animation_baklava() - - act = bpy.data.actions.new('LegacyAction') - act.fcurves.new("location", index=0) # Add an FCurve to make this a non-empty legacy Action. - self.assertTrue(act.is_action_legacy) - self.assertFalse(act.is_action_layered) - self.assertFalse(act.is_empty) - - # Adding a layer should be prevented. - with self.assertRaises(RuntimeError): - act.layers.new("laagje") - self.assertSequenceEqual([], act.layers) - - # Adding a slot should be prevented. - with self.assertRaises(RuntimeError): - act.slots.new() - self.assertSequenceEqual([], act.slots) - - class ChannelBagsTest(unittest.TestCase): def setUp(self): anims = bpy.data.actions @@ -435,12 +394,8 @@ class DataPathTest(unittest.TestCase): class VersioningTest(unittest.TestCase): def setUp(self): - enable_experimental_animation_baklava() bpy.ops.wm.open_mainfile(filepath=str(args.testdir / "layered_action_versioning_42.blend"), load_ui=False) - def tearDown(self) -> None: - disable_experimental_animation_baklava() - def test_nla_conversion(self): nla_object = bpy.data.objects["nla_object"] nla_anim_data = nla_object.animation_data diff --git a/tests/python/bl_animation_keyframing.py b/tests/python/bl_animation_keyframing.py index 30daafd74b5..30ce785b149 100644 --- a/tests/python/bl_animation_keyframing.py +++ b/tests/python/bl_animation_keyframing.py @@ -13,16 +13,6 @@ blender -b --factory-startup --python tests/python/bl_animation_keyframing.py -- """ -def enable_experimental_animation_baklava(): - bpy.context.preferences.view.show_developer_ui = True - bpy.context.preferences.experimental.use_animation_baklava = True - - -def disable_experimental_animation_baklava(): - bpy.context.preferences.view.show_developer_ui = False - bpy.context.preferences.experimental.use_animation_baklava = False - - def _fcurve_paths_match(fcurves: list, expected_paths: list) -> bool: data_paths = list(set([fcurve.data_path for fcurve in fcurves])) data_paths.sort() @@ -277,20 +267,6 @@ class InsertKeyTest(AbstractKeyframingTest, unittest.TestCase): self.assertEqual(["Téšt"], [group.name for group in fgroups]) -if hasattr(bpy.types, 'ActionSlot'): - # This test only makes sense when built with slotted/layered Actions. - class LayeredInsertKeyTest(InsertKeyTest): - @classmethod - def setUpClass(cls) -> None: - enable_experimental_animation_baklava() - super().setUpClass() - - @classmethod - def tearDownClass(cls) -> None: - disable_experimental_animation_baklava() - super().tearDownClass() - - class VisualKeyingTest(AbstractKeyframingTest, unittest.TestCase): """ Check if visual keying produces the correct keyframe values. """ @@ -696,6 +672,7 @@ def _create_nla_anim_object(): fcu.keyframe_points.insert(0, value=0).interpolation = 'LINEAR' fcu.keyframe_points.insert(10, value=1).interpolation = 'LINEAR' track.strips.new("base_strip", 0, action_base) + assert action_base.is_action_layered track = anim_object.animation_data.nla_tracks.new() track.name = "add" @@ -705,6 +682,7 @@ def _create_nla_anim_object(): fcu.keyframe_points.insert(10, value=1).interpolation = 'LINEAR' strip = track.strips.new("add_strip", 0, action_add) strip.blend_type = "ADD" + assert action_add.is_action_layered track = anim_object.animation_data.nla_tracks.new() track.name = "top" @@ -713,6 +691,7 @@ def _create_nla_anim_object(): fcu.keyframe_points.insert(0, value=0).interpolation = 'LINEAR' fcu.keyframe_points.insert(10, value=0).interpolation = 'LINEAR' track.strips.new("top_strip", 0, action_top) + assert action_top.is_action_layered return anim_object @@ -734,6 +713,11 @@ class NlaInsertTest(AbstractKeyframingTest, unittest.TestCase): area.type = "NLA_EDITOR" break + # Deselect the default cube, because the NLA tests work on a specific + # object created for that test. Operators that work on all selected + # objects shouldn't work on anything else but that object. + bpy.ops.object.select_all(action='DESELECT') + def test_insert_failure(self): # If the topmost track is set to "REPLACE" the system will fail # when trying to insert keys into a layer beneath. @@ -762,6 +746,9 @@ class NlaInsertTest(AbstractKeyframingTest, unittest.TestCase): nla_anim_object = _create_nla_anim_object() tracks = nla_anim_object.animation_data.nla_tracks + self.assertEqual(nla_anim_object, bpy.context.active_object) + self.assertEqual(None, nla_anim_object.animation_data.action) + # This leaves the additive track as the topmost track with influence tracks["top"].mute = True @@ -771,12 +758,25 @@ class NlaInsertTest(AbstractKeyframingTest, unittest.TestCase): tracks["base"].strips[0].select = True bpy.ops.nla.tweakmode_enter(use_upper_stack_evaluation=True) + base_action = bpy.data.actions["action_base"] + + # Verify that tweak mode has switched to the correct Action. + self.assertEqual(base_action, nla_anim_object.animation_data.action) + # Inserting over the existing keyframe. bpy.context.scene.frame_set(10) with bpy.context.temp_override(**_get_view3d_context()): bpy.ops.anim.keyframe_insert() - base_action = bpy.data.actions["action_base"] + # Check that the expected F-Curves exist. + fcurves_actual = {(f.data_path, f.array_index) for f in base_action.fcurves} + fcurves_expect = { + ("location", 0), + ("location", 1), + ("location", 2), + } + self.assertEqual(fcurves_actual, fcurves_expect) + # This should have added keys to Y and Z but not X. # X already had two keys from the file setup. self.assertEqual(len(base_action.fcurves.find("location", index=0).keyframe_points), 2) diff --git a/tests/python/bl_animation_nla_strip.py b/tests/python/bl_animation_nla_strip.py index dd0f59c5778..e3d2b775529 100644 --- a/tests/python/bl_animation_nla_strip.py +++ b/tests/python/bl_animation_nla_strip.py @@ -13,16 +13,6 @@ import sys import unittest -def enable_experimental_animation_baklava(): - bpy.context.preferences.view.show_developer_ui = True - bpy.context.preferences.experimental.use_animation_baklava = True - - -def disable_experimental_animation_baklava(): - bpy.context.preferences.view.show_developer_ui = False - bpy.context.preferences.experimental.use_animation_baklava = False - - class AbstractNlaStripTest(unittest.TestCase): """ Sets up a series of strips in one NLA track. """ @@ -124,15 +114,6 @@ class NlaStripBoundaryTest(AbstractNlaStripTest): class NLAStripActionSlotSelectionTest(AbstractNlaStripTest): - - def setUp(self): - enable_experimental_animation_baklava() - return super().setUp() - - def tearDown(self) -> None: - disable_experimental_animation_baklava() - return super().tearDown() - def test_two_strips_for_same_action(self): action = bpy.data.actions.new("StripAction") action.slots.new() diff --git a/tests/python/bl_constraints.py b/tests/python/bl_constraints.py index 268afc5bd96..fac53a62f68 100644 --- a/tests/python/bl_constraints.py +++ b/tests/python/bl_constraints.py @@ -443,16 +443,6 @@ class CopyTransformsTest(AbstractConstraintTests): class ActionConstraintTest(AbstractConstraintTests): layer_collection = "Action" - def setUp(self): - bpy.context.preferences.view.show_developer_ui = True - bpy.context.preferences.experimental.use_animation_baklava = True - return super().setUp() - - def tearDown(self) -> None: - bpy.context.preferences.view.show_developer_ui = False - bpy.context.preferences.experimental.use_animation_baklava = False - return super().tearDown() - def constraint(self) -> Constraint: owner = bpy.context.scene.objects["Action.owner"] constraint = owner.constraints["Action"]