Modifiers: Bring back custom data referencing logic
Brings dependency graph evaluation time to similar time than 2.79 for file reported in T55228.
This commit is contained in:
@@ -405,13 +405,19 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, Object *ob, 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,
|
||||
false);
|
||||
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,
|
||||
false);
|
||||
} else {
|
||||
result = mesh;
|
||||
}
|
||||
|
||||
const int num_verts = result->totvert;
|
||||
const int num_edges = result->totedge;
|
||||
|
||||
@@ -311,10 +311,11 @@ Mesh *get_mesh(
|
||||
* we really need a copy here. Maybe the CoW ob->data can be directly used. */
|
||||
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,
|
||||
(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_CD_REFERENCE),
|
||||
false);
|
||||
mesh->runtime.deformed_only = 1;
|
||||
}
|
||||
|
||||
@@ -202,14 +202,7 @@ static Mesh *applyModifier(
|
||||
}
|
||||
}
|
||||
|
||||
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,
|
||||
false);
|
||||
Mesh *result = mesh;
|
||||
|
||||
if (has_mdef) {
|
||||
dvert = CustomData_duplicate_referenced_layer(&result->vdata, CD_MDEFORMVERT, numVerts);
|
||||
|
||||
@@ -243,14 +243,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,
|
||||
false);
|
||||
Mesh *result = mesh;
|
||||
|
||||
if (has_mdef) {
|
||||
dvert = CustomData_duplicate_referenced_layer(&result->vdata, CD_MDEFORMVERT, numVerts);
|
||||
|
||||
@@ -421,14 +421,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
|
||||
return mesh;
|
||||
}
|
||||
|
||||
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,
|
||||
false);
|
||||
Mesh *result = mesh;
|
||||
|
||||
if (has_mdef) {
|
||||
dvert = CustomData_duplicate_referenced_layer(&result->vdata, CD_MDEFORMVERT, numVerts);
|
||||
|
||||
Reference in New Issue
Block a user