From 5b0f96f97cd427daef7b00331b841580f6ffcdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 6 Jun 2018 11:06:11 +0200 Subject: =?UTF-8?q?Alembic=20import:=20port=20DerivedMesh=20=E2=86=92=20Me?= =?UTF-8?q?sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/blender/alembic/ABC_alembic.h | 15 +-- source/blender/alembic/intern/abc_curves.cc | 16 +-- source/blender/alembic/intern/abc_curves.h | 8 +- source/blender/alembic/intern/abc_mesh.cc | 155 ++++++++++++-------------- source/blender/alembic/intern/abc_mesh.h | 18 +-- source/blender/alembic/intern/abc_object.cc | 10 +- source/blender/alembic/intern/abc_object.h | 10 +- source/blender/alembic/intern/abc_points.cc | 28 ++--- source/blender/alembic/intern/abc_points.h | 8 +- source/blender/alembic/intern/alembic_capi.cc | 14 +-- 10 files changed, 133 insertions(+), 149 deletions(-) (limited to 'source/blender/alembic') diff --git a/source/blender/alembic/ABC_alembic.h b/source/blender/alembic/ABC_alembic.h index 70250310213..08136fc2f49 100644 --- a/source/blender/alembic/ABC_alembic.h +++ b/source/blender/alembic/ABC_alembic.h @@ -29,8 +29,8 @@ extern "C" { struct bContext; struct CacheReader; -struct DerivedMesh; struct ListBase; +struct Mesh; struct Object; struct Scene; @@ -114,12 +114,13 @@ void ABC_get_transform(struct CacheReader *reader, float time, float scale); -struct DerivedMesh *ABC_read_mesh(struct CacheReader *reader, - struct Object *ob, - struct DerivedMesh *dm, - const float time, - const char **err_str, - int flags); +/* Either modifies current_mesh in-place or constructs a new mesh. */ +struct Mesh *ABC_read_mesh(struct CacheReader *reader, + struct Object *ob, + struct Mesh *current_mesh, + const float time, + const char **err_str, + int flags); void CacheReader_incref(struct CacheReader *reader); void CacheReader_free(struct CacheReader *reader); diff --git a/source/blender/alembic/intern/abc_curves.cc b/source/blender/alembic/intern/abc_curves.cc index 41c1dacabc0..9c64fd0481e 100644 --- a/source/blender/alembic/intern/abc_curves.cc +++ b/source/blender/alembic/intern/abc_curves.cc @@ -37,8 +37,8 @@ extern "C" { #include "BLI_listbase.h" -#include "BKE_cdderivedmesh.h" #include "BKE_curve.h" +#include "BKE_mesh.h" #include "BKE_object.h" #include "ED_curve.h" @@ -400,16 +400,16 @@ void read_curve_sample(Curve *cu, const ICurvesSchema &schema, const ISampleSele } } -/* NOTE: Alembic only stores data about control points, but the DerivedMesh +/* NOTE: Alembic only stores data about control points, but the Mesh * passed from the cache modifier contains the displist, which has more data * than the control points, so to avoid corrupting the displist we modify the - * object directly and create a new DerivedMesh from that. Also we might need to + * object directly and create a new Mesh from that. Also we might need to * create new or delete existing NURBS in the curve. */ -DerivedMesh *AbcCurveReader::read_derivedmesh(DerivedMesh * /*dm*/, - const ISampleSelector &sample_sel, - int /*read_flag*/, - const char ** /*err_str*/) +Mesh *AbcCurveReader::read_mesh(Mesh * /*existing_mesh*/, + const ISampleSelector &sample_sel, + int /*read_flag*/, + const char ** /*err_str*/) { const ICurvesSchema::Sample sample = m_curves_schema.getValue(sample_sel); @@ -450,5 +450,5 @@ DerivedMesh *AbcCurveReader::read_derivedmesh(DerivedMesh * /*dm*/, } } - return CDDM_from_curve(m_object); + return BKE_mesh_new_nomain_from_curve(m_object); } diff --git a/source/blender/alembic/intern/abc_curves.h b/source/blender/alembic/intern/abc_curves.h index 1e7180bbb1f..e2373381703 100644 --- a/source/blender/alembic/intern/abc_curves.h +++ b/source/blender/alembic/intern/abc_curves.h @@ -60,10 +60,10 @@ public: const char **err_str) const; void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel); - DerivedMesh *read_derivedmesh(DerivedMesh *dm, - const Alembic::Abc::ISampleSelector &sample_sel, - int read_flag, - const char **err_str); + struct Mesh *read_mesh(struct Mesh *existing_mesh, + const Alembic::Abc::ISampleSelector &sample_sel, + int read_flag, + const char **err_str); }; /* ************************************************************************** */ diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc index d52d7f06048..03d70b4f56b 100644 --- a/source/blender/alembic/intern/abc_mesh.cc +++ b/source/blender/alembic/intern/abc_mesh.cc @@ -873,11 +873,11 @@ ABC_INLINE void read_normals_params(AbcMeshData &abc_data, } } -static bool check_smooth_poly_flag(DerivedMesh *dm) +static bool check_smooth_poly_flag(Mesh *mesh) { - MPoly *mpolys = dm->getPolyArray(dm); + MPoly *mpolys = mesh->mpoly; - for (int i = 0, e = dm->getNumPolys(dm); i < e; ++i) { + for (int i = 0, e = mesh->totpoly; i < e; ++i) { MPoly &poly = mpolys[i]; if ((poly.flag & ME_SMOOTH) != 0) { @@ -888,11 +888,11 @@ static bool check_smooth_poly_flag(DerivedMesh *dm) return false; } -static void set_smooth_poly_flag(DerivedMesh *dm) +static void set_smooth_poly_flag(Mesh *mesh) { - MPoly *mpolys = dm->getPolyArray(dm); + MPoly *mpolys = mesh->mpoly; - for (int i = 0, e = dm->getNumPolys(dm); i < e; ++i) { + for (int i = 0, e = mesh->totpoly; i < e; ++i) { MPoly &poly = mpolys[i]; poly.flag |= ME_SMOOTH; } @@ -900,7 +900,7 @@ static void set_smooth_poly_flag(DerivedMesh *dm) static void *add_customdata_cb(void *user_data, const char *name, int data_type) { - DerivedMesh *dm = static_cast(user_data); + Mesh *mesh = static_cast(user_data); CustomDataType cd_data_type = static_cast(data_type); void *cd_ptr; CustomData *loopdata; @@ -911,7 +911,7 @@ static void *add_customdata_cb(void *user_data, const char *name, int data_type) return NULL; } - loopdata = dm->getLoopDataLayout(dm); + loopdata = &mesh->ldata; cd_ptr = CustomData_get_layer_named(loopdata, cd_data_type, name); if (cd_ptr != NULL) { /* layer already exists, so just return it. */ @@ -920,7 +920,7 @@ static void *add_customdata_cb(void *user_data, const char *name, int data_type) /* create a new layer, taking care to construct the hopefully-soon-to-be-removed * CD_MTEXPOLY layer too, with the same name. */ - numloops = dm->getNumLoops(dm); + numloops = mesh->totloop; cd_ptr = CustomData_add_layer_named(loopdata, cd_data_type, CD_DEFAULT, NULL, numloops, name); return cd_ptr; @@ -986,17 +986,19 @@ static void read_mesh_sample(const std::string & iobject_full_name, } } -CDStreamConfig get_config(DerivedMesh *dm) +CDStreamConfig get_config(Mesh *mesh) { CDStreamConfig config; - config.user_data = dm; - config.mvert = dm->getVertArray(dm); - config.mloop = dm->getLoopArray(dm); - config.mpoly = dm->getPolyArray(dm); - config.totloop = dm->getNumLoops(dm); - config.totpoly = dm->getNumPolys(dm); - config.loopdata = dm->getLoopDataLayout(dm); + BLI_assert(mesh->mvert); + + config.user_data = mesh; + config.mvert = mesh->mvert; + config.mloop = mesh->mloop; + config.mpoly = mesh->mpoly; + config.totloop = mesh->totloop; + config.totpoly = mesh->totpoly; + config.loopdata = &mesh->ldata; config.add_customdata_cb = add_customdata_cb; return config; @@ -1027,14 +1029,8 @@ void AbcMeshReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec m_object = BKE_object_add_only_object(bmain, OB_MESH, m_object_name.c_str()); m_object->data = mesh; - DerivedMesh *dm = CDDM_from_mesh(mesh); - DerivedMesh *ndm = this->read_derivedmesh(dm, sample_sel, MOD_MESHSEQ_READ_ALL, NULL); - - if (ndm != dm) { - dm->release(dm); - } - - DM_to_mesh(ndm, mesh, m_object, CD_MASK_MESH, true); + Mesh *read_mesh = this->read_mesh(mesh, sample_sel, MOD_MESHSEQ_READ_ALL, NULL); + BKE_mesh_nomain_to_mesh(read_mesh, mesh, m_object, CD_MASK_MESH, true); if (m_settings->validate_meshes) { BKE_mesh_validate(mesh, false, false); @@ -1064,10 +1060,10 @@ bool AbcMeshReader::accepts_object_type(const Alembic::AbcCoreAbstract::ObjectHe return true; } -DerivedMesh *AbcMeshReader::read_derivedmesh(DerivedMesh *dm, - const ISampleSelector &sample_sel, - int read_flag, - const char **err_str) +Mesh *AbcMeshReader::read_mesh(Mesh *existing_mesh, + const ISampleSelector &sample_sel, + int read_flag, + const char **err_str) { const IPolyMeshSchema::Sample sample = m_schema.getValue(sample_sel); @@ -1075,22 +1071,22 @@ DerivedMesh *AbcMeshReader::read_derivedmesh(DerivedMesh *dm, const Alembic::Abc::Int32ArraySamplePtr &face_indices = sample.getFaceIndices(); const Alembic::Abc::Int32ArraySamplePtr &face_counts = sample.getFaceCounts(); - DerivedMesh *new_dm = NULL; + Mesh *new_mesh = NULL; /* Only read point data when streaming meshes, unless we need to create new ones. */ ImportSettings settings; settings.read_flag |= read_flag; - bool topology_changed = positions->size() != dm->getNumVerts(dm) || - face_counts->size() != dm->getNumPolys(dm) || - face_indices->size() != dm->getNumLoops(dm); + bool topology_changed = positions->size() != existing_mesh->totvert || + face_counts->size() != existing_mesh->totpoly || + face_indices->size() != existing_mesh->totloop; if (topology_changed) { - new_dm = CDDM_from_template(dm, - positions->size(), - 0, - 0, - face_indices->size(), - face_counts->size()); + new_mesh = BKE_mesh_new_nomain_from_template(existing_mesh, + positions->size(), + 0, + 0, + face_indices->size(), + face_counts->size()); settings.read_flag |= MOD_MESHSEQ_READ_ALL; } @@ -1098,8 +1094,8 @@ DerivedMesh *AbcMeshReader::read_derivedmesh(DerivedMesh *dm, /* If the face count changed (e.g. by triangulation), only read points. * This prevents crash from T49813. * TODO(kevin): perhaps find a better way to do this? */ - if (face_counts->size() != dm->getNumPolys(dm) || - face_indices->size() != dm->getNumLoops(dm)) + if (face_counts->size() != existing_mesh->totpoly || + face_indices->size() != existing_mesh->totloop) { settings.read_flag = MOD_MESHSEQ_READ_VERT; @@ -1110,40 +1106,39 @@ DerivedMesh *AbcMeshReader::read_derivedmesh(DerivedMesh *dm, } } - CDStreamConfig config = get_config(new_dm ? new_dm : dm); + CDStreamConfig config = get_config(new_mesh ? new_mesh : existing_mesh); config.time = sample_sel.getRequestedTime(); bool do_normals = false; read_mesh_sample(m_iobject.getFullName(), &settings, m_schema, sample_sel, config, do_normals); - if (new_dm) { + if (new_mesh) { /* Check if we had ME_SMOOTH flag set to restore it. */ - if (!do_normals && check_smooth_poly_flag(dm)) { - set_smooth_poly_flag(new_dm); + if (!do_normals && check_smooth_poly_flag(existing_mesh)) { + set_smooth_poly_flag(new_mesh); } - CDDM_calc_normals(new_dm); - CDDM_calc_edges(new_dm); + BKE_mesh_calc_normals(new_mesh); + BKE_mesh_calc_edges(new_mesh, false, false); /* Here we assume that the number of materials doesn't change, i.e. that * the material slots that were created when the object was loaded from * Alembic are still valid now. */ - size_t num_polys = new_dm->getNumPolys(new_dm); + size_t num_polys = new_mesh->totpoly; if (num_polys > 0) { - MPoly *dmpolies = new_dm->getPolyArray(new_dm); std::map mat_map; - assign_facesets_to_mpoly(sample_sel, 0, dmpolies, num_polys, mat_map); + assign_facesets_to_mpoly(sample_sel, 0, new_mesh->mpoly, num_polys, mat_map); } - return new_dm; + return new_mesh; } if (do_normals) { - CDDM_calc_normals(dm); + BKE_mesh_calc_normals(existing_mesh); } - return dm; + return existing_mesh; } void AbcMeshReader::assign_facesets_to_mpoly( @@ -1305,14 +1300,8 @@ void AbcSubDReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec m_object = BKE_object_add_only_object(bmain, OB_MESH, m_object_name.c_str()); m_object->data = mesh; - DerivedMesh *dm = CDDM_from_mesh(mesh); - DerivedMesh *ndm = this->read_derivedmesh(dm, sample_sel, MOD_MESHSEQ_READ_ALL, NULL); - - if (ndm != dm) { - dm->release(dm); - } - - DM_to_mesh(ndm, mesh, m_object, CD_MASK_MESH, true); + Mesh *read_mesh = this->read_mesh(mesh, sample_sel, MOD_MESHSEQ_READ_ALL, NULL); + BKE_mesh_nomain_to_mesh(read_mesh, mesh, m_object, CD_MASK_MESH, true); const ISubDSchema::Sample sample = m_schema.getValue(sample_sel); Int32ArraySamplePtr indices = sample.getCreaseIndices(); @@ -1344,10 +1333,10 @@ void AbcSubDReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec } } -DerivedMesh *AbcSubDReader::read_derivedmesh(DerivedMesh *dm, - const ISampleSelector &sample_sel, - int read_flag, - const char **err_str) +Mesh *AbcSubDReader::read_mesh(Mesh *existing_mesh, + const ISampleSelector &sample_sel, + int read_flag, + const char **err_str) { const ISubDSchema::Sample sample = m_schema.getValue(sample_sel); @@ -1355,18 +1344,18 @@ DerivedMesh *AbcSubDReader::read_derivedmesh(DerivedMesh *dm, const Alembic::Abc::Int32ArraySamplePtr &face_indices = sample.getFaceIndices(); const Alembic::Abc::Int32ArraySamplePtr &face_counts = sample.getFaceCounts(); - DerivedMesh *new_dm = NULL; + Mesh *new_mesh = NULL; ImportSettings settings; settings.read_flag |= read_flag; - if (dm->getNumVerts(dm) != positions->size()) { - new_dm = CDDM_from_template(dm, - positions->size(), - 0, - 0, - face_indices->size(), - face_counts->size()); + if (existing_mesh->totvert != positions->size()) { + new_mesh = BKE_mesh_new_nomain_from_template(existing_mesh, + positions->size(), + 0, + 0, + face_indices->size(), + face_counts->size()); settings.read_flag |= MOD_MESHSEQ_READ_ALL; } @@ -1374,8 +1363,8 @@ DerivedMesh *AbcSubDReader::read_derivedmesh(DerivedMesh *dm, /* If the face count changed (e.g. by triangulation), only read points. * This prevents crash from T49813. * TODO(kevin): perhaps find a better way to do this? */ - if (face_counts->size() != dm->getNumPolys(dm) || - face_indices->size() != dm->getNumLoops(dm)) + if (face_counts->size() != existing_mesh->totpoly || + face_indices->size() != existing_mesh->totpoly) { settings.read_flag = MOD_MESHSEQ_READ_VERT; @@ -1387,22 +1376,22 @@ DerivedMesh *AbcSubDReader::read_derivedmesh(DerivedMesh *dm, } /* Only read point data when streaming meshes, unless we need to create new ones. */ - CDStreamConfig config = get_config(new_dm ? new_dm : dm); + CDStreamConfig config = get_config(new_mesh ? new_mesh : existing_mesh); config.time = sample_sel.getRequestedTime(); read_subd_sample(m_iobject.getFullName(), &settings, m_schema, sample_sel, config); - if (new_dm) { + if (new_mesh) { /* Check if we had ME_SMOOTH flag set to restore it. */ - if (check_smooth_poly_flag(dm)) { - set_smooth_poly_flag(new_dm); + if (check_smooth_poly_flag(existing_mesh)) { + set_smooth_poly_flag(new_mesh); } - CDDM_calc_normals(new_dm); - CDDM_calc_edges(new_dm); + BKE_mesh_calc_normals(new_mesh); + BKE_mesh_calc_edges(new_mesh, false, false); - return new_dm; + return new_mesh; } - return dm; + return existing_mesh; } diff --git a/source/blender/alembic/intern/abc_mesh.h b/source/blender/alembic/intern/abc_mesh.h index c57123cda4c..455d263c689 100644 --- a/source/blender/alembic/intern/abc_mesh.h +++ b/source/blender/alembic/intern/abc_mesh.h @@ -106,10 +106,10 @@ public: const char **err_str) const; void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel); - DerivedMesh *read_derivedmesh(DerivedMesh *dm, - const Alembic::Abc::ISampleSelector &sample_sel, - int read_flag, - const char **err_str); + struct Mesh *read_mesh(struct Mesh *existing_mesh, + const Alembic::Abc::ISampleSelector &sample_sel, + int read_flag, + const char **err_str); private: void readFaceSetsSample(Main *bmain, Mesh *mesh, size_t poly_start, @@ -136,10 +136,10 @@ public: const Object *const ob, const char **err_str) const; void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel); - DerivedMesh *read_derivedmesh(DerivedMesh *dm, - const Alembic::Abc::ISampleSelector &sample_sel, - int read_flag, - const char **err_str); + struct Mesh *read_mesh(struct Mesh *existing_mesh, + const Alembic::Abc::ISampleSelector &sample_sel, + int read_flag, + const char **err_str); }; /* ************************************************************************** */ @@ -148,6 +148,6 @@ void read_mverts(MVert *mverts, const Alembic::AbcGeom::P3fArraySamplePtr &positions, const Alembic::AbcGeom::N3fArraySamplePtr &normals); -CDStreamConfig get_config(DerivedMesh *dm); +CDStreamConfig get_config(struct Mesh *mesh); #endif /* __ABC_MESH_H__ */ diff --git a/source/blender/alembic/intern/abc_object.cc b/source/blender/alembic/intern/abc_object.cc index 85bda9aa8eb..0f02300eae3 100644 --- a/source/blender/alembic/intern/abc_object.cc +++ b/source/blender/alembic/intern/abc_object.cc @@ -248,12 +248,12 @@ Imath::M44d get_matrix(const IXformSchema &schema, const float time) return s0.getMatrix(); } -DerivedMesh *AbcObjectReader::read_derivedmesh(DerivedMesh *dm, - const Alembic::Abc::ISampleSelector &UNUSED(sample_sel), - int UNUSED(read_flag), - const char **UNUSED(err_str)) +struct Mesh *AbcObjectReader::read_mesh(struct Mesh *existing_mesh, + const Alembic::Abc::ISampleSelector &UNUSED(sample_sel), + int UNUSED(read_flag), + const char **UNUSED(err_str)) { - return dm; + return existing_mesh; } void AbcObjectReader::setupObjectTransform(const float time) diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h index d41088bdcad..809efd63d24 100644 --- a/source/blender/alembic/intern/abc_object.h +++ b/source/blender/alembic/intern/abc_object.h @@ -124,7 +124,7 @@ static bool has_animations(Schema &schema, ImportSettings *settings) /* ************************************************************************** */ -struct DerivedMesh; +struct Mesh; using Alembic::AbcCoreAbstract::chrono_t; @@ -180,10 +180,10 @@ public: virtual void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) = 0; - virtual DerivedMesh *read_derivedmesh(DerivedMesh *dm, - const Alembic::Abc::ISampleSelector &sample_sel, - int read_flag, - const char **err_str); + virtual struct Mesh *read_mesh(struct Mesh *mesh, + const Alembic::Abc::ISampleSelector &sample_sel, + int read_flag, + const char **err_str); /** Reads the object matrix and sets up an object transform if animated. */ void setupObjectTransform(const float time); diff --git a/source/blender/alembic/intern/abc_points.cc b/source/blender/alembic/intern/abc_points.cc index 6f52ccec4a7..c0d10ea4645 100644 --- a/source/blender/alembic/intern/abc_points.cc +++ b/source/blender/alembic/intern/abc_points.cc @@ -173,15 +173,9 @@ bool AbcPointsReader::accepts_object_type(const Alembic::AbcCoreAbstract::Object void AbcPointsReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) { Mesh *mesh = BKE_mesh_add(bmain, m_data_name.c_str()); + Mesh *read_mesh = this->read_mesh(mesh, sample_sel, 0, NULL); - DerivedMesh *dm = CDDM_from_mesh(mesh); - DerivedMesh *ndm = this->read_derivedmesh(dm, sample_sel, 0, NULL); - - if (ndm != dm) { - dm->release(dm); - } - - DM_to_mesh(ndm, mesh, m_object, CD_MASK_MESH, true); + BKE_mesh_nomain_to_mesh(read_mesh, mesh, m_object, CD_MASK_MESH, true); if (m_settings->validate_meshes) { BKE_mesh_validate(mesh, false, false); @@ -218,23 +212,23 @@ void read_points_sample(const IPointsSchema &schema, read_mverts(config.mvert, positions, vnormals); } -DerivedMesh *AbcPointsReader::read_derivedmesh(DerivedMesh *dm, - const ISampleSelector &sample_sel, - int /*read_flag*/, - const char ** /*err_str*/) +struct Mesh *AbcPointsReader::read_mesh(struct Mesh *existing_mesh, + const ISampleSelector &sample_sel, + int /*read_flag*/, + const char ** /*err_str*/) { const IPointsSchema::Sample sample = m_schema.getValue(sample_sel); const P3fArraySamplePtr &positions = sample.getPositions(); - DerivedMesh *new_dm = NULL; + Mesh *new_mesh = NULL; - if (dm->getNumVerts(dm) != positions->size()) { - new_dm = CDDM_new(positions->size(), 0, 0, 0, 0); + if (existing_mesh->totvert != positions->size()) { + new_mesh = BKE_mesh_new_nomain(positions->size(), 0, 0, 0, 0); } - CDStreamConfig config = get_config(new_dm ? new_dm : dm); + CDStreamConfig config = get_config(new_mesh ? new_mesh : existing_mesh); read_points_sample(m_schema, sample_sel, config); - return new_dm ? new_dm : dm; + return new_mesh ? new_mesh : existing_mesh; } diff --git a/source/blender/alembic/intern/abc_points.h b/source/blender/alembic/intern/abc_points.h index 1ac8792ede1..0c7924d9b9a 100644 --- a/source/blender/alembic/intern/abc_points.h +++ b/source/blender/alembic/intern/abc_points.h @@ -65,10 +65,10 @@ public: void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel); - DerivedMesh *read_derivedmesh(DerivedMesh *dm, - const Alembic::Abc::ISampleSelector &sample_sel, - int read_flag, - const char **err_str); + struct Mesh *read_mesh(struct Mesh *existing_mesh, + const Alembic::Abc::ISampleSelector &sample_sel, + int read_flag, + const char **err_str); }; void read_points_sample(const Alembic::AbcGeom::IPointsSchema &schema, diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc index 1a6990a1de8..a32eabf2470 100644 --- a/source/blender/alembic/intern/alembic_capi.cc +++ b/source/blender/alembic/intern/alembic_capi.cc @@ -960,12 +960,12 @@ void ABC_get_transform(CacheReader *reader, float r_mat[4][4], float time, float /* ************************************************************************** */ -DerivedMesh *ABC_read_mesh(CacheReader *reader, - Object *ob, - DerivedMesh *dm, - const float time, - const char **err_str, - int read_flag) +Mesh *ABC_read_mesh(CacheReader *reader, + Object *ob, + Mesh *existing_mesh, + const float time, + const char **err_str, + int read_flag) { AbcObjectReader *abc_reader = reinterpret_cast(reader); IObject iobject = abc_reader->iobject(); @@ -984,7 +984,7 @@ DerivedMesh *ABC_read_mesh(CacheReader *reader, /* kFloorIndex is used to be compatible with non-interpolating * properties; they use the floor. */ ISampleSelector sample_sel(time, ISampleSelector::kFloorIndex); - return abc_reader->read_derivedmesh(dm, sample_sel, read_flag, err_str); + return abc_reader->read_mesh(existing_mesh, sample_sel, read_flag, err_str); } /* ************************************************************************** */ -- cgit v1.2.3