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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user