Cleanup: Use dedicated function to copy mesh during evaluation process
It is rather fully annoying to have same sets of obscure flags all over.
This commit is contained in:
parent
50cb9b52bb
commit
e19439a169
|
@ -117,6 +117,9 @@ struct Mesh *BKE_mesh_new_nomain_from_template(
|
|||
int verts_len, int edges_len, int tessface_len,
|
||||
int loops_len, int polys_len);
|
||||
|
||||
/* Performs copy for use during evaluation. */
|
||||
struct Mesh *BKE_mesh_copy_for_eval(struct Mesh *source);
|
||||
|
||||
/* These functions construct a new Mesh, contrary to BKE_mesh_from_nurbs which modifies ob itself. */
|
||||
struct Mesh *BKE_mesh_new_nomain_from_curve(struct Object *ob);
|
||||
struct Mesh *BKE_mesh_new_nomain_from_curve_displist(struct Object *ob, struct ListBase *dispbase);
|
||||
|
|
|
@ -1287,13 +1287,7 @@ static Mesh *create_orco_mesh(Object *ob, Mesh *me, BMEditMesh *em, int layer)
|
|||
mesh = BKE_bmesh_to_mesh_nomain(em->bm, &(struct BMeshToMeshParams){0});
|
||||
}
|
||||
else {
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me->id, (ID **)&mesh,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_CD_REFERENCE),
|
||||
false);
|
||||
mesh = BKE_mesh_copy_for_eval(me);
|
||||
}
|
||||
|
||||
orco = get_orco_coords_dm(ob, em, layer, &free);
|
||||
|
@ -2088,13 +2082,7 @@ static void mesh_calc_modifiers(
|
|||
* coordinates (vpaint, etc.)
|
||||
*/
|
||||
if (r_deform_mesh) {
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me->id, (ID **)r_deform_mesh,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_CD_REFERENCE),
|
||||
false);
|
||||
*r_deform_mesh = BKE_mesh_copy_for_eval(me);
|
||||
|
||||
/* XXX: Is build_shapekey_layers ever even true? This should have crashed long ago... */
|
||||
BLI_assert(!build_shapekey_layers);
|
||||
|
@ -2234,13 +2222,7 @@ static void mesh_calc_modifiers(
|
|||
}
|
||||
}
|
||||
else {
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me->id, (ID **)&mesh,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_CD_REFERENCE),
|
||||
false);
|
||||
mesh = BKE_mesh_copy_for_eval(me);
|
||||
ASSERT_IS_VALID_MESH(mesh);
|
||||
|
||||
// XXX: port to Mesh if build_shapekey_layers can ever be true
|
||||
|
@ -2409,13 +2391,7 @@ static void mesh_calc_modifiers(
|
|||
#endif
|
||||
}
|
||||
else {
|
||||
BKE_id_copy_ex(
|
||||
NULL, &me->id, (ID **)&final_mesh,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_CD_REFERENCE),
|
||||
false);
|
||||
final_mesh = BKE_mesh_copy_for_eval(me);
|
||||
|
||||
//if (build_shapekey_layers) {
|
||||
// add_shapekey_layers(final_mesh, me, ob);
|
||||
|
|
|
@ -695,6 +695,19 @@ Mesh * BKE_mesh_new_nomain_from_template(
|
|||
CD_MASK_EVERYTHING);
|
||||
}
|
||||
|
||||
Mesh *BKE_mesh_copy_for_eval(struct Mesh *source)
|
||||
{
|
||||
Mesh *result;
|
||||
BKE_id_copy_ex(
|
||||
NULL, &source->id, (ID **)&result,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_CD_REFERENCE),
|
||||
false);
|
||||
return result;
|
||||
}
|
||||
|
||||
Mesh *BKE_mesh_copy(Main *bmain, const Mesh *me)
|
||||
{
|
||||
Mesh *me_copy;
|
||||
|
|
|
@ -307,13 +307,7 @@ Mesh *get_multires_mesh(
|
|||
.flag = MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY};
|
||||
Mesh *result = modifier_applyModifier(&mmd->modifier, &modifier_ctx, deformed_mesh);
|
||||
if (result == deformed_mesh) {
|
||||
/* TODO(sergey): De-duplicate with copy in modifier stack. */
|
||||
BKE_id_copy_ex(NULL, &deformed_mesh->id, (ID **)&result,
|
||||
(LIB_ID_CREATE_NO_MAIN |
|
||||
LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG |
|
||||
LIB_ID_COPY_CD_REFERENCE),
|
||||
false);
|
||||
result = BKE_mesh_copy_for_eval(deformed_mesh);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue