Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenloader/intern/versioning_300.cc
| Show All 31 Lines | |||||
| #include "DNA_listBase.h" | #include "DNA_listBase.h" | ||||
| #include "DNA_mask_types.h" | #include "DNA_mask_types.h" | ||||
| #include "DNA_material_types.h" | #include "DNA_material_types.h" | ||||
| #include "DNA_mesh_types.h" | #include "DNA_mesh_types.h" | ||||
| #include "DNA_modifier_types.h" | #include "DNA_modifier_types.h" | ||||
| #include "DNA_screen_types.h" | #include "DNA_screen_types.h" | ||||
| #include "DNA_space_types.h" | #include "DNA_space_types.h" | ||||
| #include "DNA_text_types.h" | #include "DNA_text_types.h" | ||||
| #include "DNA_video_edit_types.h" | |||||
| #include "DNA_workspace_types.h" | #include "DNA_workspace_types.h" | ||||
| #include "BKE_action.h" | #include "BKE_action.h" | ||||
| #include "BKE_anim_data.h" | #include "BKE_anim_data.h" | ||||
| #include "BKE_animsys.h" | #include "BKE_animsys.h" | ||||
| #include "BKE_armature.h" | #include "BKE_armature.h" | ||||
| #include "BKE_asset.h" | #include "BKE_asset.h" | ||||
| #include "BKE_attribute.h" | #include "BKE_attribute.h" | ||||
| #include "BKE_collection.h" | #include "BKE_collection.h" | ||||
| #include "BKE_colortools.h" | #include "BKE_colortools.h" | ||||
| #include "BKE_curve.h" | #include "BKE_curve.h" | ||||
| #include "BKE_data_transfer.h" | #include "BKE_data_transfer.h" | ||||
| #include "BKE_deform.h" | #include "BKE_deform.h" | ||||
| #include "BKE_fcurve.h" | #include "BKE_fcurve.h" | ||||
| #include "BKE_fcurve_driver.h" | #include "BKE_fcurve_driver.h" | ||||
| #include "BKE_idprop.h" | #include "BKE_idprop.h" | ||||
| #include "BKE_image.h" | #include "BKE_image.h" | ||||
| #include "BKE_lib_id.h" | #include "BKE_lib_id.h" | ||||
| #include "BKE_lib_override.h" | #include "BKE_lib_override.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_main_namemap.h" | #include "BKE_main_namemap.h" | ||||
| #include "BKE_modifier.h" | #include "BKE_modifier.h" | ||||
| #include "BKE_node.h" | #include "BKE_node.h" | ||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "BKE_video_edit.h" | |||||
| #include "RNA_access.h" | #include "RNA_access.h" | ||||
| #include "RNA_enum_types.h" | #include "RNA_enum_types.h" | ||||
| #include "RNA_prototypes.h" | #include "RNA_prototypes.h" | ||||
| #include "BLO_readfile.h" | #include "BLO_readfile.h" | ||||
| #include "readfile.h" | #include "readfile.h" | ||||
| ▲ Show 20 Lines • Show All 317 Lines • ▼ Show 20 Lines | if (ELEM(object->type, OB_MESH, OB_LATTICE, OB_GPENCIL)) { | ||||
| BLI_freelistN(new_defbase); | BLI_freelistN(new_defbase); | ||||
| *new_defbase = object->defbase; | *new_defbase = object->defbase; | ||||
| BKE_object_defgroup_active_index_set(object, object->actdef); | BKE_object_defgroup_active_index_set(object, object->actdef); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static float legacy_seq_time_media_playback_rate_factor_get(const Scene *scene, | |||||
| const Sequence *seq) | |||||
| { | |||||
| if ((seq->flag & SEQ_AUTO_PLAYBACK_RATE) == 0) { | |||||
| return 1.0f; | |||||
| } | |||||
| if (seq->media_playback_rate == 0.0f) { | |||||
| return 1.0f; | |||||
| } | |||||
| float scene_playback_rate = (float)scene->r.frs_sec / scene->r.frs_sec_base; | |||||
| return seq->media_playback_rate / scene_playback_rate; | |||||
| } | |||||
| static int legacy_seq_time_right_handle_frame_get(Scene *scene, Sequence *seq) | |||||
| { | |||||
| if (seq->seq1 || seq->seq2) { | |||||
| return seq->enddisp; | |||||
| } | |||||
| float length; | |||||
| if (seq->type == SEQ_TYPE_SOUND_RAM) { | |||||
| length = (float)seq->len; | |||||
| } | |||||
| else { | |||||
| length = (float)seq->len / | |||||
| (legacy_seq_time_media_playback_rate_factor_get(scene, seq) * seq->speed_factor); | |||||
| } | |||||
| return (int)((seq->start + length) - seq->endofs); | |||||
| } | |||||
| static void do_versions_sequencer_speed_effect_recursive(Scene *scene, const ListBase *seqbase) | static void do_versions_sequencer_speed_effect_recursive(Scene *scene, const ListBase *seqbase) | ||||
| { | { | ||||
| /* Old SpeedControlVars->flags. */ | /* Old SpeedControlVars->flags. */ | ||||
| #define SEQ_SPEED_INTEGRATE (1 << 0) | #define SEQ_SPEED_INTEGRATE (1 << 0) | ||||
| #define SEQ_SPEED_COMPRESS_IPO_Y (1 << 2) | #define SEQ_SPEED_COMPRESS_IPO_Y (1 << 2) | ||||
| LISTBASE_FOREACH (Sequence *, seq, seqbase) { | LISTBASE_FOREACH (Sequence *, seq, seqbase) { | ||||
| if (seq->type == SEQ_TYPE_SPEED) { | if (seq->type == SEQ_TYPE_SPEED) { | ||||
| SpeedControlVars *v = (SpeedControlVars *)seq->effectdata; | SpeedControlVars *v = (SpeedControlVars *)seq->effectdata; | ||||
| const char *substr = nullptr; | const char *substr = nullptr; | ||||
| float globalSpeed = v->globalSpeed; | float globalSpeed = v->globalSpeed; | ||||
| if (seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) { | if (seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) { | ||||
| if (globalSpeed == 1.0f) { | if (globalSpeed == 1.0f) { | ||||
| v->speed_control_type = SEQ_SPEED_STRETCH; | v->speed_control_type = SEQ_SPEED_STRETCH; | ||||
| } | } | ||||
| else { | else { | ||||
| v->speed_control_type = SEQ_SPEED_MULTIPLY; | v->speed_control_type = SEQ_SPEED_MULTIPLY; | ||||
| v->speed_fader = globalSpeed * | v->speed_fader = globalSpeed * | ||||
| (float(seq->seq1->len) / | (float(seq->seq1->len) / | ||||
| max_ff(float(SEQ_time_right_handle_frame_get(scene, seq->seq1) - | max_ff(float(legacy_seq_time_right_handle_frame_get(scene, seq->seq1) - | ||||
| seq->seq1->start), | seq->seq1->start), | ||||
| 1.0f)); | 1.0f)); | ||||
| } | } | ||||
| } | } | ||||
| else if (v->flags & SEQ_SPEED_INTEGRATE) { | else if (v->flags & SEQ_SPEED_INTEGRATE) { | ||||
| v->speed_control_type = SEQ_SPEED_MULTIPLY; | v->speed_control_type = SEQ_SPEED_MULTIPLY; | ||||
| v->speed_fader = seq->speed_fader * globalSpeed; | v->speed_fader = seq->speed_fader * globalSpeed; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,053 Lines • ▼ Show 20 Lines | LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) { | ||||
| version_node_socket_id_delim(socket); | version_node_socket_id_delim(socket); | ||||
| } | } | ||||
| LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) { | LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) { | ||||
| version_node_socket_id_delim(socket); | version_node_socket_id_delim(socket); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static bool version_fix_seq_meta_range(Sequence *seq, void *user_data) | /** FIXME: Needs to be reimplemented. */ | ||||
| { | // static bool version_fix_seq_meta_range(Sequence *seq, void *user_data) | ||||
| Scene *scene = (Scene *)user_data; | // { | ||||
| if (seq->type == SEQ_TYPE_META) { | // Scene *scene = (Scene *)user_data; | ||||
| SEQ_time_update_meta_strip_range(scene, seq); | // if (seq->type == SEQ_TYPE_META) { | ||||
| } | // SEQ_time_update_meta_strip_range(scene, seq); | ||||
| return true; | // } | ||||
| } | // return true; | ||||
| // } | |||||
| static bool version_merge_still_offsets(Sequence *seq, void * /*user_data*/) | static bool version_merge_still_offsets(Sequence *seq, void * /*user_data*/) | ||||
| { | { | ||||
| seq->startofs -= seq->startstill; | seq->startofs -= seq->startstill; | ||||
| seq->endofs -= seq->endstill; | seq->endofs -= seq->endstill; | ||||
| seq->startstill = 0; | seq->startstill = 0; | ||||
| seq->endstill = 0; | seq->endstill = 0; | ||||
| return true; | return true; | ||||
| ▲ Show 20 Lines • Show All 435 Lines • ▼ Show 20 Lines | if (format->view_settings.curve_mapping) { | ||||
| if (format->view_settings.curve_mapping->cm[0].curve == nullptr) { | if (format->view_settings.curve_mapping->cm[0].curve == nullptr) { | ||||
| BKE_curvemapping_free(format->view_settings.curve_mapping); | BKE_curvemapping_free(format->view_settings.curve_mapping); | ||||
| format->view_settings.curve_mapping = nullptr; | format->view_settings.curve_mapping = nullptr; | ||||
| format->view_settings.flag &= ~COLORMANAGE_VIEW_USE_CURVES; | format->view_settings.flag &= ~COLORMANAGE_VIEW_USE_CURVES; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static void version_video_edit_id_from_scene_editing(Main *bmain, Scene *scene, Editing *ed) | |||||
| { | |||||
| /* New name will be "<scene_name> Edit". */ | |||||
| char video_edit_name[MAX_ID_NAME + 6]; | |||||
| sprintf(video_edit_name, "%s Edit", scene->id.name + 2); | |||||
| /* Create new ID. */ | |||||
| bmain->is_locked_for_linking = false; | |||||
| VideoEdit *video_edit = static_cast<VideoEdit *>(BKE_video_edit_add(bmain, video_edit_name)); | |||||
| bmain->is_locked_for_linking = true; | |||||
| /* TODO: Copy these properly. */ | |||||
| // video_edit->r = scene->r; | |||||
| // video_edit->audio = scene->audio; | |||||
| video_edit->seqbasep = &video_edit->seqbase; | |||||
| SEQ_sequence_base_dupli_recursive( | |||||
| NULL, NULL, &video_edit->seqbase, &ed->seqbase, SEQ_DUPE_ALL, 0); | |||||
| BLI_duplicatelist(&video_edit->channels, &ed->channels); | |||||
| video_edit->displayed_channels = &video_edit->channels; | |||||
| } | |||||
| static SequencerToolSettings *legacy_seq_tool_settings_ensure(Scene *scene) | |||||
| { | |||||
| SequencerToolSettings *tool_settings = scene->toolsettings->sequencer_tool_settings; | |||||
| if (tool_settings == NULL) { | |||||
| scene->toolsettings->sequencer_tool_settings = SEQ_tool_settings_init(); | |||||
| tool_settings = scene->toolsettings->sequencer_tool_settings; | |||||
| } | |||||
| return tool_settings; | |||||
| } | |||||
| /* NOLINTNEXTLINE: readability-function-size */ | /* NOLINTNEXTLINE: readability-function-size */ | ||||
| void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) | void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) | ||||
| { | { | ||||
| /* The #SCE_SNAP_SEQ flag has been removed in favor of the #SCE_SNAP which can be used for each | /* The #SCE_SNAP_SEQ flag has been removed in favor of the #SCE_SNAP which can be used for each | ||||
| * snap_flag member individually. */ | * snap_flag member individually. */ | ||||
| enum { SCE_SNAP_SEQ = (1 << 7) }; | enum { SCE_SNAP_SEQ = (1 << 7) }; | ||||
| if (!MAIN_VERSION_ATLEAST(bmain, 300, 1)) { | if (!MAIN_VERSION_ATLEAST(bmain, 300, 1)) { | ||||
| ▲ Show 20 Lines • Show All 173 Lines • ▼ Show 20 Lines | LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | ||||
| } | } | ||||
| if (snap_node_mode & (1 << 6)) { | if (snap_node_mode & (1 << 6)) { | ||||
| tool_settings->snap_node_mode |= (1 << 1); /* SCE_SNAP_MODE_NODE_Y */ | tool_settings->snap_node_mode |= (1 << 1); /* SCE_SNAP_MODE_NODE_Y */ | ||||
| } | } | ||||
| if (snap_uv_mode & (1 << 4)) { | if (snap_uv_mode & (1 << 4)) { | ||||
| tool_settings->snap_uv_mode |= (1 << 6); /* SCE_SNAP_MODE_INCREMENT */ | tool_settings->snap_uv_mode |= (1 << 6); /* SCE_SNAP_MODE_INCREMENT */ | ||||
| } | } | ||||
| SequencerToolSettings *sequencer_tool_settings = SEQ_tool_settings_ensure(scene); | SequencerToolSettings *sequencer_tool_settings = legacy_seq_tool_settings_ensure(scene); | ||||
| sequencer_tool_settings->snap_mode = SEQ_SNAP_TO_STRIPS | SEQ_SNAP_TO_CURRENT_FRAME | | sequencer_tool_settings->snap_mode = SEQ_SNAP_TO_STRIPS | SEQ_SNAP_TO_CURRENT_FRAME | | ||||
| SEQ_SNAP_TO_STRIP_HOLD; | SEQ_SNAP_TO_STRIP_HOLD; | ||||
| sequencer_tool_settings->snap_distance = 15; | sequencer_tool_settings->snap_distance = 15; | ||||
| } | } | ||||
| } | } | ||||
| if (!MAIN_VERSION_ATLEAST(bmain, 300, 8)) { | if (!MAIN_VERSION_ATLEAST(bmain, 300, 8)) { | ||||
| LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | ||||
| ▲ Show 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { | ||||
| View3D *v3d = (View3D *)sl; | View3D *v3d = (View3D *)sl; | ||||
| v3d->overlay.flag &= ~V3D_OVERLAY_FADE_INACTIVE; | v3d->overlay.flag &= ~V3D_OVERLAY_FADE_INACTIVE; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | ||||
| SequencerToolSettings *sequencer_tool_settings = SEQ_tool_settings_ensure(scene); | SequencerToolSettings *sequencer_tool_settings = legacy_seq_tool_settings_ensure(scene); | ||||
| sequencer_tool_settings->overlap_mode = SEQ_OVERLAP_SHUFFLE; | sequencer_tool_settings->overlap_mode = SEQ_OVERLAP_SHUFFLE; | ||||
| } | } | ||||
| } | } | ||||
| if (!MAIN_VERSION_ATLEAST(bmain, 300, 20)) { | if (!MAIN_VERSION_ATLEAST(bmain, 300, 20)) { | ||||
| /* Use new vector Size socket in Cube Mesh Primitive node. */ | /* Use new vector Size socket in Cube Mesh Primitive node. */ | ||||
| LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) { | LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) { | ||||
| if (ntree->type != NTREE_GEOMETRY) { | if (ntree->type != NTREE_GEOMETRY) { | ||||
| ▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (!MAIN_VERSION_ATLEAST(bmain, 300, 24)) { | if (!MAIN_VERSION_ATLEAST(bmain, 300, 24)) { | ||||
| LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | ||||
| SequencerToolSettings *sequencer_tool_settings = SEQ_tool_settings_ensure(scene); | SequencerToolSettings *sequencer_tool_settings = legacy_seq_tool_settings_ensure(scene); | ||||
| sequencer_tool_settings->pivot_point = V3D_AROUND_CENTER_MEDIAN; | sequencer_tool_settings->pivot_point = V3D_AROUND_CENTER_MEDIAN; | ||||
| if (scene->ed != nullptr) { | if (scene->ed != nullptr) { | ||||
| SEQ_for_each_callback(&scene->ed->seqbase, seq_transform_origin_set, nullptr); | SEQ_for_each_callback(&scene->ed->seqbase, seq_transform_origin_set, nullptr); | ||||
| } | } | ||||
| } | } | ||||
| LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { | LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { | ||||
| LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | ||||
| ▲ Show 20 Lines • Show All 355 Lines • ▼ Show 20 Lines | if (!MAIN_VERSION_ATLEAST(bmain, 300, 42)) { | ||||
| LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | ||||
| Editing *ed = SEQ_editing_get(scene); | Editing *ed = SEQ_editing_get(scene); | ||||
| /* Make sure range of meta strips is correct. | /* Make sure range of meta strips is correct. | ||||
| * It was possible to save .blend file with incorrect state of meta strip | * It was possible to save .blend file with incorrect state of meta strip | ||||
| * range. The root cause is expected to be fixed, but need to ensure files | * range. The root cause is expected to be fixed, but need to ensure files | ||||
| * with invalid meta strip range are corrected. */ | * with invalid meta strip range are corrected. */ | ||||
| if (ed != nullptr) { | if (ed != nullptr) { | ||||
| SEQ_for_each_callback(&ed->seqbase, version_fix_seq_meta_range, scene); | /* TODO: Fix this case and implement a legacy version that uses the scene. */ | ||||
| // SEQ_for_each_callback(&ed->seqbase, version_fix_seq_meta_range, scene); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* Special case to handle older in-development 3.1 files, before change from 3.0 branch gets | /* Special case to handle older in-development 3.1 files, before change from 3.0 branch gets | ||||
| * merged in master. */ | * merged in master. */ | ||||
| if (!MAIN_VERSION_ATLEAST(bmain, 300, 42) || | if (!MAIN_VERSION_ATLEAST(bmain, 300, 42) || | ||||
| (bmain->versionfile == 301 && !MAIN_VERSION_ATLEAST(bmain, 301, 3))) { | (bmain->versionfile == 301 && !MAIN_VERSION_ATLEAST(bmain, 301, 3))) { | ||||
| ▲ Show 20 Lines • Show All 803 Lines • ▼ Show 20 Lines | |||||
| * \note Be sure to check when bumping the version: | * \note Be sure to check when bumping the version: | ||||
| * - "versioning_userdef.c", #blo_do_versions_userdef | * - "versioning_userdef.c", #blo_do_versions_userdef | ||||
| * - "versioning_userdef.c", #do_versions_theme | * - "versioning_userdef.c", #do_versions_theme | ||||
| * | * | ||||
| * \note Keep this message at the bottom of the function. | * \note Keep this message at the bottom of the function. | ||||
| */ | */ | ||||
| { | { | ||||
| /* Keep this block, even when empty. */ | /* Keep this block, even when empty. */ | ||||
| LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { | |||||
| if (scene->ed) { | |||||
| /* Create a new VideoEdit data-block for every scene that has Editing data. */ | |||||
| version_video_edit_id_from_scene_editing(bmain, scene, scene->ed); | |||||
| } | |||||
| } | |||||
| LISTBASE_FOREACH (wmWindowManager *, wm, &bmain->wm) { | |||||
| wm->output_source = WM_OUTPUT_SOURCE_SCENE; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||