BKE_library: id_copy: More general usage of LIB_ID_COPY_LOCALIZE.
Turns out most of our 'local working copy' cases can use same set of flags. Note that this commit adds LIB_ID_COPY_CACHES to all our local meshes copying, however this is no-op since that flag is unused during mesh copying... We may want to add another set of flags without that one at some point, but for now it would not be useful imho.
This commit is contained in:
@@ -999,9 +999,7 @@ static void curve_calc_modifiers_post(
|
||||
if (modified) {
|
||||
if (vertCos) {
|
||||
Mesh *temp_mesh;
|
||||
BKE_id_copy_ex(NULL, &modified->id, (ID **)&temp_mesh,
|
||||
LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG | LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &modified->id, (ID **)&temp_mesh, LIB_ID_COPY_LOCALIZE);
|
||||
BKE_id_free(NULL, modified);
|
||||
modified = temp_mesh;
|
||||
|
||||
@@ -1044,9 +1042,7 @@ static void curve_calc_modifiers_post(
|
||||
if (vertCos) {
|
||||
if (modified) {
|
||||
Mesh *temp_mesh;
|
||||
BKE_id_copy_ex(NULL, &modified->id, (ID **)&temp_mesh,
|
||||
LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG | LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &modified->id, (ID **)&temp_mesh, LIB_ID_COPY_LOCALIZE);
|
||||
BKE_id_free(NULL, modified);
|
||||
modified = temp_mesh;
|
||||
|
||||
|
@@ -609,9 +609,7 @@ Mesh *BKE_mesh_new_nomain(int verts_len, int edges_len, int tessface_len, int lo
|
||||
Mesh *mesh = BKE_libblock_alloc(
|
||||
NULL, ID_ME,
|
||||
BKE_idcode_to_name(ID_ME),
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG);
|
||||
LIB_ID_COPY_LOCALIZE);
|
||||
BKE_libblock_init_empty(&mesh->id);
|
||||
|
||||
/* don't use CustomData_reset(...); because we dont want to touch customdata */
|
||||
@@ -691,10 +689,7 @@ Mesh *BKE_mesh_new_nomain_from_template(
|
||||
|
||||
Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference)
|
||||
{
|
||||
int flags = (LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
int flags = LIB_ID_COPY_LOCALIZE;
|
||||
|
||||
if (reference) {
|
||||
flags |= LIB_ID_COPY_CD_REFERENCE;
|
||||
|
@@ -1141,12 +1141,7 @@ Mesh *BKE_mesh_create_derived_for_modifier(
|
||||
float (*deformedVerts)[3] = BKE_mesh_vertexCos_get(me, &numVerts);
|
||||
|
||||
mti->deformVerts(md, &mectx, NULL, deformedVerts, numVerts);
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me->id, (ID **)&result,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &me->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
|
||||
BKE_mesh_apply_vert_coords(result, deformedVerts);
|
||||
|
||||
if (build_shapekey_layers)
|
||||
@@ -1156,12 +1151,7 @@ Mesh *BKE_mesh_create_derived_for_modifier(
|
||||
}
|
||||
else {
|
||||
Mesh *mesh_temp;
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me->id, (ID **)&mesh_temp,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &me->id, (ID **)&mesh_temp, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
if (build_shapekey_layers)
|
||||
add_shapekey_layers(mesh_temp, me);
|
||||
|
@@ -2035,9 +2035,7 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree)
|
||||
*/
|
||||
BKE_id_copy_ex(
|
||||
NULL, &ntree->id, (ID **)<ree,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_COPY_NO_PREVIEW |
|
||||
(LIB_ID_COPY_LOCALIZE |
|
||||
LIB_ID_COPY_NO_ANIMDATA));
|
||||
|
||||
for (node = ltree->nodes.first; node; node = node->next) {
|
||||
|
@@ -858,12 +858,7 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
|
||||
mesh = final_mesh;
|
||||
}
|
||||
else {
|
||||
BKE_id_copy_ex(
|
||||
NULL, ob->data, (ID **)&mesh,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, ob->data, (ID **)&mesh, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
BKE_mesh_tessface_ensure(mesh);
|
||||
|
||||
@@ -909,12 +904,7 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
|
||||
if (psys->part->use_modifier_stack)
|
||||
mesh = final_mesh;
|
||||
else
|
||||
BKE_id_copy_ex(
|
||||
NULL, ob->data, (ID **)&mesh,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, ob->data, (ID **)&mesh, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
BKE_mesh_tessface_ensure(mesh);
|
||||
|
||||
|
@@ -3195,12 +3195,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim)
|
||||
clmd_effweights = psys->clmd->sim_parms->effector_weights;
|
||||
psys->clmd->sim_parms->effector_weights = psys->part->effector_weights;
|
||||
|
||||
BKE_id_copy_ex(
|
||||
NULL, &psys->hair_in_mesh->id, (ID **)&psys->hair_out_mesh,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &psys->hair_in_mesh->id, (ID **)&psys->hair_out_mesh, LIB_ID_COPY_LOCALIZE);
|
||||
deformedVerts = BKE_mesh_vertexCos_get(psys->hair_out_mesh, NULL);
|
||||
clothModifier_do(psys->clmd, sim->depsgraph, sim->scene, sim->ob, psys->hair_in_mesh, deformedVerts);
|
||||
BKE_mesh_apply_vert_coords(psys->hair_out_mesh, deformedVerts);
|
||||
|
@@ -283,11 +283,7 @@ Mesh *bc_get_mesh_copy(
|
||||
tmpmesh = (Mesh *)ob->data;
|
||||
}
|
||||
|
||||
BKE_id_copy_ex(NULL, &tmpmesh->id, (ID **)&tmpmesh,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &tmpmesh->id, (ID **)&tmpmesh, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
if (triangulate) {
|
||||
bc_triangulate_mesh(tmpmesh);
|
||||
|
@@ -717,12 +717,7 @@ static bool remap_hair_emitter(
|
||||
return false;
|
||||
}
|
||||
/* don't modify the original vertices */
|
||||
BKE_id_copy_ex(
|
||||
NULL, &mesh->id, (ID **)&mesh,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &mesh->id, (ID **)&mesh, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
/* BMESH_ONLY, deform dm may not have tessface */
|
||||
BKE_mesh_tessface_ensure(mesh);
|
||||
@@ -1098,12 +1093,7 @@ static bool copy_particle_systems_to_object(const bContext *C,
|
||||
modifier_unique_name(&ob_to->modifiers, (ModifierData *)psmd);
|
||||
|
||||
psmd->psys = psys;
|
||||
BKE_id_copy_ex(
|
||||
NULL, &final_mesh->id, (ID **)&psmd->mesh_final,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &final_mesh->id, (ID **)&psmd->mesh_final, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
BKE_mesh_calc_normals(psmd->mesh_final);
|
||||
BKE_mesh_tessface_ensure(psmd->mesh_final);
|
||||
|
@@ -111,11 +111,7 @@ static Mesh *get_quick_mesh(
|
||||
result = mesh_self;
|
||||
}
|
||||
else {
|
||||
BKE_id_copy_ex(NULL, &mesh_other->id, (ID **)&result,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &mesh_other->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
float imat[4][4];
|
||||
float omat[4][4];
|
||||
|
@@ -87,12 +87,7 @@ static void deformVerts(
|
||||
else {
|
||||
/* Not possible to use get_mesh() in this case as we'll modify its vertices
|
||||
* and get_mesh() would return 'mesh' directly. */
|
||||
BKE_id_copy_ex(
|
||||
NULL, (ID *)mesh, (ID **)&mesh_src,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, (ID *)mesh, (ID **)&mesh_src, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
|
||||
/* TODO(sergey): For now it actually duplicates logic from DerivedMesh.c
|
||||
|
@@ -107,12 +107,7 @@ static void deformVerts(
|
||||
else {
|
||||
/* Not possible to use get_mesh() in this case as we'll modify its vertices
|
||||
* and get_mesh() would return 'mesh' directly. */
|
||||
BKE_id_copy_ex(
|
||||
NULL, (ID *)mesh, (ID **)&mesh_src,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, (ID *)mesh, (ID **)&mesh_src, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
|
||||
if (!ob->pd) {
|
||||
|
@@ -177,12 +177,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
|
||||
{
|
||||
/* We need to duplicate data here, otherwise setting custom normals, edges' shaprness, etc., could
|
||||
* modify org mesh, see T43671. */
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me_mod->id, (ID **)&result,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &me_mod->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
|
||||
BKE_reports_init(&reports, RPT_STORE);
|
||||
|
@@ -411,12 +411,7 @@ static Mesh *normalEditModifier_do(
|
||||
if (mesh->medge == ((Mesh *)ob->data)->medge) {
|
||||
/* We need to duplicate data here, otherwise setting custom normals (which may also affect sharp edges) could
|
||||
* modify org mesh, see T43671. */
|
||||
BKE_id_copy_ex(
|
||||
NULL, &mesh->id, (ID **)&result,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &mesh->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
else {
|
||||
result = mesh;
|
||||
|
@@ -384,11 +384,7 @@ static Mesh *doOcean(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mes
|
||||
BKE_mesh_ensure_normals(result);
|
||||
}
|
||||
else if (omd->geometry_mode == MOD_OCEAN_GEOM_DISPLACE) {
|
||||
BKE_id_copy_ex(NULL, &mesh->id, (ID **)&result,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &mesh->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
|
||||
cfra_for_cache = cfra_scene;
|
||||
|
@@ -114,12 +114,7 @@ static void deformVerts(
|
||||
if (mesh) {
|
||||
/* Not possible to use get_mesh() in this case as we'll modify its vertices
|
||||
* and get_mesh() would return 'mesh' directly. */
|
||||
BKE_id_copy_ex(
|
||||
NULL, (ID *)mesh, (ID **)&surmd->mesh,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, (ID *)mesh, (ID **)&surmd->mesh, LIB_ID_COPY_LOCALIZE);
|
||||
}
|
||||
else {
|
||||
surmd->mesh = MOD_deform_mesh_eval_get(ctx->object, NULL, NULL, NULL, numVerts, false, false);
|
||||
|
@@ -186,10 +186,7 @@ Mesh *MOD_deform_mesh_eval_get(
|
||||
Mesh *mesh_prior_modifiers = BKE_object_get_pre_modified_mesh(ob);
|
||||
BKE_id_copy_ex(
|
||||
NULL, &mesh_prior_modifiers->id, (ID **)&mesh,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW |
|
||||
(LIB_ID_COPY_LOCALIZE |
|
||||
LIB_ID_COPY_CD_REFERENCE));
|
||||
mesh->runtime.deformed_only = 1;
|
||||
}
|
||||
|
@@ -490,12 +490,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
|
||||
}
|
||||
|
||||
Mesh *result;
|
||||
BKE_id_copy_ex(
|
||||
NULL, &mesh->id, (ID **)&result,
|
||||
LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_NO_PREVIEW);
|
||||
BKE_id_copy_ex(NULL, &mesh->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
|
||||
|
||||
const int numVerts = result->totvert;
|
||||
const int numEdges = result->totedge;
|
||||
|
Reference in New Issue
Block a user