Merge branch 'blender-v3.1-release'
This commit is contained in:
commit
b9483ea380
|
@ -466,6 +466,8 @@ void BKE_modifiers_foreach_tex_link(struct Object *ob, TexWalkFunc walk, void *u
|
|||
|
||||
struct ModifierData *BKE_modifiers_findby_type(const struct Object *ob, ModifierType type);
|
||||
struct ModifierData *BKE_modifiers_findby_name(const struct Object *ob, const char *name);
|
||||
struct ModifierData *BKE_modifiers_findby_session_uuid(const struct Object *ob,
|
||||
const SessionUUID *session_uuid);
|
||||
void BKE_modifiers_clear_errors(struct Object *ob);
|
||||
/**
|
||||
* used for buttons, to find out if the 'draw deformed in edit-mode option is there.
|
||||
|
@ -564,7 +566,8 @@ const char *BKE_modifier_path_relbase_from_global(struct Object *ob);
|
|||
* For a given modifier data, get corresponding original one.
|
||||
* If the modifier data is already original, return it as-is.
|
||||
*/
|
||||
struct ModifierData *BKE_modifier_get_original(struct ModifierData *md);
|
||||
struct ModifierData *BKE_modifier_get_original(const struct Object *object,
|
||||
struct ModifierData *md);
|
||||
struct ModifierData *BKE_modifier_get_evaluated(struct Depsgraph *depsgraph,
|
||||
struct Object *object,
|
||||
struct ModifierData *md);
|
||||
|
|
|
@ -290,6 +290,16 @@ ModifierData *BKE_modifiers_findby_name(const Object *ob, const char *name)
|
|||
return BLI_findstring(&(ob->modifiers), name, offsetof(ModifierData, name));
|
||||
}
|
||||
|
||||
ModifierData *BKE_modifiers_findby_session_uuid(const Object *ob, const SessionUUID *session_uuid)
|
||||
{
|
||||
LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
|
||||
if (BLI_session_uuid_is_equal(&md->session_uuid, session_uuid)) {
|
||||
return md;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void BKE_modifiers_clear_errors(Object *ob)
|
||||
{
|
||||
LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
|
||||
|
@ -439,9 +449,7 @@ void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *_for
|
|||
#ifndef NDEBUG
|
||||
if ((md->mode & eModifierMode_Virtual) == 0) {
|
||||
/* Ensure correct object is passed in. */
|
||||
const Object *ob_orig = (Object *)DEG_get_original_id((ID *)&ob->id);
|
||||
const ModifierData *md_orig = md->orig_modifier_data ? md->orig_modifier_data : md;
|
||||
BLI_assert(BLI_findindex(&ob_orig->modifiers, md_orig) != -1);
|
||||
BLI_assert(BKE_modifier_get_original(ob, md) != NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1052,12 +1060,10 @@ Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval,
|
|||
return me;
|
||||
}
|
||||
|
||||
ModifierData *BKE_modifier_get_original(ModifierData *md)
|
||||
ModifierData *BKE_modifier_get_original(const Object *object, ModifierData *md)
|
||||
{
|
||||
if (md->orig_modifier_data == NULL) {
|
||||
return md;
|
||||
}
|
||||
return md->orig_modifier_data;
|
||||
const Object *object_orig = DEG_get_original_object((Object *)object);
|
||||
return BKE_modifiers_findby_session_uuid(object_orig, &md->session_uuid);
|
||||
}
|
||||
|
||||
struct ModifierData *BKE_modifier_get_evaluated(Depsgraph *depsgraph,
|
||||
|
@ -1068,7 +1074,7 @@ struct ModifierData *BKE_modifier_get_evaluated(Depsgraph *depsgraph,
|
|||
if (object_eval == object) {
|
||||
return md;
|
||||
}
|
||||
return BKE_modifiers_findby_name(object_eval, md->name);
|
||||
return BKE_modifiers_findby_session_uuid(object_eval, &md->session_uuid);
|
||||
}
|
||||
|
||||
void BKE_modifier_check_uuids_unique_and_report(const Object *object)
|
||||
|
|
|
@ -674,12 +674,6 @@ void update_pose_orig_pointers(const bPose *pose_orig, bPose *pose_cow)
|
|||
update_list_orig_pointers(&pose_orig->chanbase, &pose_cow->chanbase, &bPoseChannel::orig_pchan);
|
||||
}
|
||||
|
||||
void update_modifiers_orig_pointers(const Object *object_orig, Object *object_cow)
|
||||
{
|
||||
update_list_orig_pointers(
|
||||
&object_orig->modifiers, &object_cow->modifiers, &ModifierData::orig_modifier_data);
|
||||
}
|
||||
|
||||
void update_nla_strips_orig_pointers(const ListBase *strips_orig, ListBase *strips_cow)
|
||||
{
|
||||
NlaStrip *strip_orig = reinterpret_cast<NlaStrip *>(strips_orig->first);
|
||||
|
@ -766,7 +760,6 @@ void update_id_after_copy(const Depsgraph *depsgraph,
|
|||
BKE_gpencil_update_orig_pointers(object_orig, object_cow);
|
||||
}
|
||||
update_particles_after_copy(depsgraph, object_orig, object_cow);
|
||||
update_modifiers_orig_pointers(object_orig, object_cow);
|
||||
update_proxy_pointers_after_copy(depsgraph, object_orig, object_cow);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -71,7 +71,6 @@ void ObjectRuntimeBackup::backup_modifier_runtime_data(Object *object)
|
|||
const SessionUUID &session_uuid = modifier_data->session_uuid;
|
||||
BLI_assert(BLI_session_uuid_is_generated(&session_uuid));
|
||||
|
||||
BLI_assert(modifier_data->orig_modifier_data != nullptr);
|
||||
modifier_runtime_data.add(session_uuid, ModifierDataBackup(modifier_data));
|
||||
modifier_data->runtime = nullptr;
|
||||
}
|
||||
|
@ -150,8 +149,9 @@ void ObjectRuntimeBackup::restore_to_object(Object *object)
|
|||
void ObjectRuntimeBackup::restore_modifier_runtime_data(Object *object)
|
||||
{
|
||||
LISTBASE_FOREACH (ModifierData *, modifier_data, &object->modifiers) {
|
||||
BLI_assert(modifier_data->orig_modifier_data != nullptr);
|
||||
const SessionUUID &session_uuid = modifier_data->session_uuid;
|
||||
BLI_assert(BLI_session_uuid_is_generated(&session_uuid));
|
||||
|
||||
optional<ModifierDataBackup> backup = modifier_runtime_data.pop_try(session_uuid);
|
||||
if (backup.has_value()) {
|
||||
modifier_data->runtime = backup->runtime;
|
||||
|
|
|
@ -1742,14 +1742,15 @@ static void harmonic_coordinates_bind(MeshDeformModifierData *mmd, MeshDeformBin
|
|||
free_bvhtree_from_mesh(&mdb->bvhdata);
|
||||
}
|
||||
|
||||
void ED_mesh_deform_bind_callback(MeshDeformModifierData *mmd,
|
||||
void ED_mesh_deform_bind_callback(Object *object,
|
||||
MeshDeformModifierData *mmd,
|
||||
Mesh *cagemesh,
|
||||
float *vertexcos,
|
||||
int totvert,
|
||||
float cagemat[4][4])
|
||||
{
|
||||
MeshDeformModifierData *mmd_orig = (MeshDeformModifierData *)BKE_modifier_get_original(
|
||||
&mmd->modifier);
|
||||
object, &mmd->modifier);
|
||||
MeshDeformBind mdb;
|
||||
MVert *mvert;
|
||||
int a;
|
||||
|
|
|
@ -369,7 +369,8 @@ void ED_pose_bone_select_tag_update(struct Object *ob);
|
|||
void ED_pose_bone_select(struct Object *ob, struct bPoseChannel *pchan, bool select);
|
||||
|
||||
/* meshlaplacian.c */
|
||||
void ED_mesh_deform_bind_callback(struct MeshDeformModifierData *mmd,
|
||||
void ED_mesh_deform_bind_callback(struct Object *object,
|
||||
struct MeshDeformModifierData *mmd,
|
||||
struct Mesh *cagemesh,
|
||||
float *vertexcos,
|
||||
int totvert,
|
||||
|
|
|
@ -128,15 +128,11 @@ typedef struct ModifierData {
|
|||
|
||||
char *error;
|
||||
|
||||
/** Pointer to a #ModifierData in the original domain. */
|
||||
struct ModifierData *orig_modifier_data;
|
||||
|
||||
/** Runtime field which contains unique identifier of the modifier. */
|
||||
SessionUUID session_uuid;
|
||||
|
||||
/** Runtime field which contains runtime data which is specific to a modifier type. */
|
||||
void *runtime;
|
||||
void *_pad1;
|
||||
} ModifierData;
|
||||
|
||||
typedef enum {
|
||||
|
@ -1012,7 +1008,8 @@ typedef struct MeshDeformModifierData {
|
|||
float *bindcos;
|
||||
|
||||
/* runtime */
|
||||
void (*bindfunc)(struct MeshDeformModifierData *mmd,
|
||||
void (*bindfunc)(struct Object *object,
|
||||
struct MeshDeformModifierData *mmd,
|
||||
struct Mesh *cagemesh,
|
||||
float *vertexcos,
|
||||
int totvert,
|
||||
|
|
|
@ -249,7 +249,8 @@ static void rna_ParticleHairKey_location_object_get(PointerRNA *ptr, float *valu
|
|||
*
|
||||
* Such trickery is needed to allow modification of hair keys in the original object using
|
||||
* evaluated particle and object to access proper hair matrix. */
|
||||
static int hair_key_index_get(/*const*/ HairKey *hair_key,
|
||||
static int hair_key_index_get(const Object *object,
|
||||
/*const*/ HairKey *hair_key,
|
||||
/*const*/ ParticleSystemModifierData *modifier,
|
||||
/*const*/ ParticleData *particle)
|
||||
{
|
||||
|
@ -261,7 +262,7 @@ static int hair_key_index_get(/*const*/ HairKey *hair_key,
|
|||
const int particle_index = particle - particle_system->particles;
|
||||
|
||||
const ParticleSystemModifierData *original_modifier = (ParticleSystemModifierData *)
|
||||
BKE_modifier_get_original(&modifier->modifier);
|
||||
BKE_modifier_get_original(object, &modifier->modifier);
|
||||
const ParticleSystem *original_particle_system = original_modifier->psys;
|
||||
const ParticleData *original_particle = &original_particle_system->particles[particle_index];
|
||||
|
||||
|
@ -288,7 +289,7 @@ static void hair_key_location_object_set(HairKey *hair_key,
|
|||
NULL;
|
||||
|
||||
if (hair_mesh != NULL) {
|
||||
const int hair_key_index = hair_key_index_get(hair_key, modifier, particle);
|
||||
const int hair_key_index = hair_key_index_get(object, hair_key, modifier, particle);
|
||||
if (hair_key_index == -1) {
|
||||
return;
|
||||
}
|
||||
|
@ -368,7 +369,7 @@ static void rna_ParticleHairKey_co_object_set(ID *id,
|
|||
/* Mark particle system as edited, so then particle_system_update() does not reset the hair
|
||||
* keys from path. This behavior is similar to how particle edit mode sets flags. */
|
||||
ParticleSystemModifierData *orig_modifier = (ParticleSystemModifierData *)
|
||||
modifier->modifier.orig_modifier_data;
|
||||
BKE_modifier_get_original(object, &modifier->modifier);
|
||||
orig_modifier->psys->flag |= PSYS_EDITED;
|
||||
|
||||
hair_key_location_object_set(hair_key, object, modifier, particle, co);
|
||||
|
|
|
@ -610,7 +610,7 @@ static void correctivesmooth_modifier_do(ModifierData *md,
|
|||
BLI_assert(csmd->bind_coords != NULL);
|
||||
/* Copy bound data to the original modifier. */
|
||||
CorrectiveSmoothModifierData *csmd_orig = (CorrectiveSmoothModifierData *)
|
||||
BKE_modifier_get_original(&csmd->modifier);
|
||||
BKE_modifier_get_original(ob, &csmd->modifier);
|
||||
csmd_orig->bind_coords = MEM_dupallocN(csmd->bind_coords);
|
||||
csmd_orig->bind_coords_num = csmd->bind_coords_num;
|
||||
}
|
||||
|
|
|
@ -390,7 +390,7 @@ static void meshdeformModifier_do(ModifierData *md,
|
|||
}
|
||||
if (!recursive_bind_sentinel) {
|
||||
recursive_bind_sentinel = 1;
|
||||
mmd->bindfunc(mmd, cagemesh, (float *)vertexCos, numVerts, cagemat);
|
||||
mmd->bindfunc(ob, mmd, cagemesh, (float *)vertexCos, numVerts, cagemat);
|
||||
recursive_bind_sentinel = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1148,7 +1148,8 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
|
|||
|
||||
if (geo_logger.has_value()) {
|
||||
geo_logger->log_output_geometry(output_geometry_set);
|
||||
NodesModifierData *nmd_orig = (NodesModifierData *)BKE_modifier_get_original(&nmd->modifier);
|
||||
NodesModifierData *nmd_orig = (NodesModifierData *)BKE_modifier_get_original(ctx->object,
|
||||
&nmd->modifier);
|
||||
clear_runtime_data(nmd_orig);
|
||||
nmd_orig->runtime_eval_log = new geo_log::ModifierLog(*geo_logger);
|
||||
}
|
||||
|
|
|
@ -1454,7 +1454,7 @@ static void surfacedeformModifier_do(ModifierData *md,
|
|||
BKE_modifier_set_error(ob, md, "Attempt to bind from inactive dependency graph");
|
||||
return;
|
||||
}
|
||||
ModifierData *md_orig = BKE_modifier_get_original(md);
|
||||
ModifierData *md_orig = BKE_modifier_get_original(ob, md);
|
||||
freeData(md_orig);
|
||||
}
|
||||
return;
|
||||
|
@ -1478,7 +1478,7 @@ static void surfacedeformModifier_do(ModifierData *md,
|
|||
}
|
||||
|
||||
SurfaceDeformModifierData *smd_orig = (SurfaceDeformModifierData *)BKE_modifier_get_original(
|
||||
md);
|
||||
ob, md);
|
||||
float tmp_mat[4][4];
|
||||
|
||||
invert_m4_m4(tmp_mat, ob->obmat);
|
||||
|
|
Loading…
Reference in New Issue