Modifiers: remove modifier session_uid in favor of persistent_uid

Since 1497005054, there is a new `ModifierData.persistent_uid` which
has more use cases than the old `session_uid`. This patch removes
`ModifierData.session_uid` and replaces its usages with the new `persistent_uid`.

Pull Request: https://projects.blender.org/blender/blender/pulls/117909
This commit is contained in:
Jacques Lucke
2024-02-06 18:02:32 +01:00
parent bc886857f3
commit 29e2dcd2c8
6 changed files with 6 additions and 75 deletions
@@ -421,9 +421,6 @@ void BKE_modifier_free(ModifierData *md);
*/
void BKE_modifier_remove_from_list(Object *ob, ModifierData *md);
/* Generate new UID for the given modifier. */
void BKE_modifier_session_uid_generate(ModifierData *md);
void BKE_modifier_unique_name(ListBase *modifiers, ModifierData *md);
ModifierData *BKE_modifier_copy_ex(const ModifierData *md, int flag);
@@ -472,7 +469,6 @@ void BKE_modifiers_foreach_tex_link(Object *ob, TexWalkFunc walk, void *user_dat
ModifierData *BKE_modifiers_findby_type(const Object *ob, ModifierType type);
ModifierData *BKE_modifiers_findby_name(const Object *ob, const char *name);
ModifierData *BKE_modifiers_findby_session_uid(const Object *ob, const SessionUID *session_uid);
ModifierData *BKE_modifiers_findby_persistent_uid(const Object *ob, int persistent_uid);
void BKE_modifiers_clear_errors(Object *ob);
@@ -597,8 +593,6 @@ void BKE_modifier_deform_vertsEM(ModifierData *md,
*/
Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval);
void BKE_modifier_check_uids_unique_and_report(const Object *object);
void BKE_modifier_blend_write(BlendWriter *writer, const ID *id_owner, ListBase *modbase);
void BKE_modifier_blend_read_data(BlendDataReader *reader, ListBase *lb, Object *ob);
+2 -56
View File
@@ -162,9 +162,6 @@ static ModifierData *modifier_allocate_and_init(ModifierType type)
ModifierData *BKE_modifier_new(int type)
{
ModifierData *md = modifier_allocate_and_init(ModifierType(type));
BKE_modifier_session_uid_generate(md);
return md;
}
@@ -221,11 +218,6 @@ void BKE_modifier_remove_from_list(Object *ob, ModifierData *md)
BLI_remlink(&ob->modifiers, md);
}
void BKE_modifier_session_uid_generate(ModifierData *md)
{
md->session_uid = BLI_session_uid_generate();
}
void BKE_modifier_unique_name(ListBase *modifiers, ModifierData *md)
{
if (modifiers && md) {
@@ -267,16 +259,6 @@ ModifierData *BKE_modifiers_findby_name(const Object *ob, const char *name)
BLI_findstring(&(ob->modifiers), name, offsetof(ModifierData, name)));
}
ModifierData *BKE_modifiers_findby_session_uid(const Object *ob, const SessionUID *session_uid)
{
LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
if (BLI_session_uid_is_equal(&md->session_uid, session_uid)) {
return md;
}
}
return nullptr;
}
ModifierData *BKE_modifiers_findby_persistent_uid(const Object *ob, const int persistent_uid)
{
LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
@@ -380,17 +362,6 @@ void BKE_modifier_copydata_ex(const ModifierData *md, ModifierData *target, cons
mti->foreach_ID_link(target, nullptr, modifier_copy_data_id_us_cb, nullptr);
}
}
if (flag & LIB_ID_CREATE_NO_MAIN) {
/* Make sure UID is the same between the source and the target.
* This is needed in the cases when UID is to be preserved and when there is no copy_data
* callback, or the copy_data does not do full byte copy of the modifier data. */
target->session_uid = md->session_uid;
}
else {
/* In the case copy_data made full byte copy force UID to be re-generated. */
BKE_modifier_session_uid_generate(target);
}
}
void BKE_modifier_copydata(const ModifierData *md, ModifierData *target)
@@ -997,7 +968,7 @@ Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval)
ModifierData *BKE_modifier_get_original(const Object *object, ModifierData *md)
{
const Object *object_orig = DEG_get_original_object((Object *)object);
return BKE_modifiers_findby_session_uid(object_orig, &md->session_uid);
return BKE_modifiers_findby_persistent_uid(object_orig, md->persistent_uid);
}
ModifierData *BKE_modifier_get_evaluated(Depsgraph *depsgraph, Object *object, ModifierData *md)
@@ -1006,30 +977,7 @@ ModifierData *BKE_modifier_get_evaluated(Depsgraph *depsgraph, Object *object, M
if (object_eval == object) {
return md;
}
return BKE_modifiers_findby_session_uid(object_eval, &md->session_uid);
}
void BKE_modifier_check_uids_unique_and_report(const Object *object)
{
GSet *used_uids = BLI_gset_new(
BLI_session_uid_ghash_hash, BLI_session_uid_ghash_compare, "modifier used uids");
LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
const SessionUID *session_uid = &md->session_uid;
if (!BLI_session_uid_is_generated(session_uid)) {
printf("Modifier %s -> %s does not have UID generated.\n", object->id.name + 2, md->name);
continue;
}
if (BLI_gset_lookup(used_uids, session_uid) != nullptr) {
printf("Modifier %s -> %s has duplicate UID generated.\n", object->id.name + 2, md->name);
continue;
}
BLI_gset_insert(used_uids, (void *)session_uid);
}
BLI_gset_free(used_uids, nullptr);
return BKE_modifiers_findby_persistent_uid(object_eval, md->persistent_uid);
}
void BKE_modifiers_persistent_uid_init(const Object &object, ModifierData &md)
@@ -1299,8 +1247,6 @@ void BKE_modifier_blend_read_data(BlendDataReader *reader, ListBase *lb, Object
BLO_read_list(reader, lb);
LISTBASE_FOREACH (ModifierData *, md, lb) {
BKE_modifier_session_uid_generate(md);
md->error = nullptr;
md->runtime = nullptr;
@@ -5329,7 +5329,6 @@ void BKE_object_to_curve_clear(Object *object)
void BKE_object_check_uids_unique_and_report(const Object *object)
{
BKE_pose_check_uids_unique_and_report(object->pose);
BKE_modifier_check_uids_unique_and_report(object);
}
SubsurfModifierData *BKE_object_get_last_subsurf_modifier(const Object *ob)
@@ -58,10 +58,7 @@ void ObjectRuntimeBackup::backup_modifier_runtime_data(Object *object)
continue;
}
const SessionUID &session_uid = modifier_data->session_uid;
BLI_assert(BLI_session_uid_is_generated(&session_uid));
modifier_runtime_data.add(session_uid, ModifierDataBackup(modifier_data));
modifier_runtime_data.add(modifier_data->persistent_uid, ModifierDataBackup(modifier_data));
modifier_data->runtime = nullptr;
}
}
@@ -149,10 +146,8 @@ void ObjectRuntimeBackup::restore_to_object(Object *object)
void ObjectRuntimeBackup::restore_modifier_runtime_data(Object *object)
{
LISTBASE_FOREACH (ModifierData *, modifier_data, &object->modifiers) {
const SessionUID &session_uid = modifier_data->session_uid;
BLI_assert(BLI_session_uid_is_generated(&session_uid));
optional<ModifierDataBackup> backup = modifier_runtime_data.pop_try(session_uid);
optional<ModifierDataBackup> backup = modifier_runtime_data.pop_try(
modifier_data->persistent_uid);
if (backup.has_value()) {
modifier_data->runtime = backup->runtime;
}
@@ -46,7 +46,7 @@ class ObjectRuntimeBackup {
optional<LightLinkingRuntime> light_linking_runtime;
short base_flag;
unsigned short base_local_view_bits;
Map<SessionUID, ModifierDataBackup> modifier_runtime_data;
Map<int, ModifierDataBackup> modifier_runtime_data;
Map<SessionUID, bPoseChannel_Runtime> pose_channel_runtime_data;
};
@@ -153,9 +153,6 @@ typedef struct ModifierData {
char *error;
/** Runtime field which contains unique identifier of the modifier. */
SessionUID session_uid;
/** Runtime field which contains runtime data which is specific to a modifier type. */
void *runtime;
} ModifierData;