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 | |
parent | d88314ee5b558b06fab22a51fa21bc2a958fc4eb (diff) |
Alembic export: CoW/Depsgraph fixes
Diffstat (limited to 'source/blender/alembic')
-rw-r--r-- | source/blender/alembic/intern/abc_exporter.cc | 5 | ||||
-rw-r--r-- | source/blender/alembic/intern/abc_mesh.cc | 18 | ||||
-rw-r--r-- | source/blender/alembic/intern/abc_mesh.h | 3 | ||||
-rw-r--r-- | source/blender/alembic/intern/abc_points.cc | 4 |
4 files changed, 14 insertions, 16 deletions
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc index dbffcb46790..eda3deab64d 100644 --- a/source/blender/alembic/intern/abc_exporter.cc +++ b/source/blender/alembic/intern/abc_exporter.cc @@ -60,6 +60,8 @@ extern "C" { #include "BKE_modifier.h" #include "BKE_particle.h" #include "BKE_scene.h" + +#include "DEG_depsgraph_query.h" } using Alembic::Abc::TimeSamplingPtr; @@ -381,14 +383,13 @@ void AbcExporter::createTransformWritersHierarchy(Depsgraph *depsgraph) void AbcExporter::exploreTransform(Depsgraph *depsgraph, Base *ob_base, Object *parent, Object *dupliObParent) { - Object *ob = ob_base->object; - /* If an object isn't exported itself, its duplilist shouldn't be * exported either. */ if (!export_object(&m_settings, ob_base, dupliObParent != NULL)) { return; } + Object *ob = DEG_get_evaluated_object(depsgraph, ob_base->object); if (object_type_is_exportable(m_scene, ob)) { createTransformWriter(depsgraph, ob, parent, dupliObParent); } 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) { diff --git a/source/blender/alembic/intern/abc_mesh.h b/source/blender/alembic/intern/abc_mesh.h index 53d1f04fd55..ee761ec55bd 100644 --- a/source/blender/alembic/intern/abc_mesh.h +++ b/source/blender/alembic/intern/abc_mesh.h @@ -74,8 +74,7 @@ private: std::vector<int32_t> &creaseLengths, std::vector<float> &creaseSharpness); - struct Mesh *getFinalMesh(); - void freeMesh(struct Mesh *mesh); + struct Mesh *getFinalMesh(bool &r_needsfree); void getMaterialIndices(struct Mesh *mesh, std::vector<int32_t> &indices); diff --git a/source/blender/alembic/intern/abc_points.cc b/source/blender/alembic/intern/abc_points.cc index c0d10ea4645..4200962f33e 100644 --- a/source/blender/alembic/intern/abc_points.cc +++ b/source/blender/alembic/intern/abc_points.cc @@ -40,6 +40,8 @@ extern "C" { #include "BKE_scene.h" #include "BLI_math.h" + +#include "DEG_depsgraph_query.h" } using Alembic::AbcGeom::kVertexScope; @@ -102,7 +104,7 @@ void AbcPointsWriter::do_write() continue; } - state.time = BKE_scene_frame_get(m_scene); + state.time = DEG_get_ctime(m_depsgraph); if (psys_get_particle_state(&sim, p, &state, 0) == 0) { continue; |