diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2018-06-06 16:43:10 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2018-06-07 11:48:52 +0300 |
commit | e43065596bba574ec755fde12a75faea080b1f62 (patch) | |
tree | 8e8209a2cd7952ef35df224df2ddf4f236ac2f73 /source/blender/alembic/intern/abc_mesh.cc | |
parent | d88314ee5b558b06fab22a51fa21bc2a958fc4eb (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.cc | 18 |
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) { |