Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@stuvel.eu>2018-06-06 16:43:10 +0300
committerSybren A. Stüvel <sybren@stuvel.eu>2018-06-07 11:48:52 +0300
commite43065596bba574ec755fde12a75faea080b1f62 (patch)
tree8e8209a2cd7952ef35df224df2ddf4f236ac2f73 /source/blender/alembic/intern/abc_mesh.cc
parentd88314ee5b558b06fab22a51fa21bc2a958fc4eb (diff)
Alembic export: CoW/Depsgraph fixes
Diffstat (limited to 'source/blender/alembic/intern/abc_mesh.cc')
-rw-r--r--source/blender/alembic/intern/abc_mesh.cc18
1 files changed, 7 insertions, 11 deletions
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 6afdccb7732..bf569916a07 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -369,7 +369,8 @@ void AbcMeshWriter::do_write()
if (!m_first_frame && !m_is_animated)
return;
- struct Mesh *mesh = getFinalMesh();
+ bool needsfree;
+ struct Mesh *mesh = getFinalMesh(needsfree);
try {
if (m_settings.use_subdiv_schema && m_subdiv_schema.valid()) {
@@ -379,10 +380,10 @@ void AbcMeshWriter::do_write()
writeMesh(mesh);
}
- freeMesh(mesh);
+ if (needsfree) BKE_id_free(NULL, mesh);
}
catch (...) {
- freeMesh(mesh);
+ if (needsfree) BKE_id_free(NULL, mesh);
throw;
}
}
@@ -518,7 +519,7 @@ void AbcMeshWriter::writeFaceSets(struct Mesh *dm, Schema &schema)
}
}
-Mesh *AbcMeshWriter::getFinalMesh()
+Mesh *AbcMeshWriter::getFinalMesh(bool &r_needsfree)
{
/* We don't want subdivided mesh data */
if (m_subsurf_mod) {
@@ -526,6 +527,7 @@ Mesh *AbcMeshWriter::getFinalMesh()
}
struct Mesh *mesh = mesh_get_eval_final(m_depsgraph, m_scene, m_object, CD_MASK_MESH);
+ r_needsfree = false;
if (m_subsurf_mod) {
m_subsurf_mod->mode &= ~eModifierMode_DisableTemporary;
@@ -546,9 +548,8 @@ Mesh *AbcMeshWriter::getFinalMesh()
Mesh *result = BKE_bmesh_to_mesh_nomain(bm, &bmmp);
BM_mesh_free(bm);
- freeMesh(mesh);
-
mesh = result;
+ r_needsfree = true;
}
m_custom_data_config.pack_uvs = m_settings.pack_uv;
@@ -561,11 +562,6 @@ Mesh *AbcMeshWriter::getFinalMesh()
return mesh;
}
-void AbcMeshWriter::freeMesh(struct Mesh *mesh)
-{
- BKE_id_free(NULL, mesh);
-}
-
void AbcMeshWriter::writeArbGeoParams(struct Mesh *dm)
{
if (m_is_liquid) {