Commit: d88314ee5b558b06fab22a51fa21bc2a958fc4eb
Author: Sybren A. Stüvel
Date:   Wed Jun 6 14:16:44 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd88314ee5b558b06fab22a51fa21bc2a958fc4eb

Alembic export: port DerivedMesh → Mesh

===================================================================

M       source/blender/alembic/intern/abc_hair.cc
M       source/blender/alembic/intern/abc_hair.h
M       source/blender/alembic/intern/abc_mesh.cc
M       source/blender/alembic/intern/abc_mesh.h

===================================================================

diff --git a/source/blender/alembic/intern/abc_hair.cc 
b/source/blender/alembic/intern/abc_hair.cc
index e7cc474e2e8..19ef0f8898f 100644
--- a/source/blender/alembic/intern/abc_hair.cc
+++ b/source/blender/alembic/intern/abc_hair.cc
@@ -30,12 +30,16 @@
 extern "C" {
 #include "MEM_guardedalloc.h"
 
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
 #include "DNA_modifier_types.h"
 
 #include "BLI_listbase.h"
 #include "BLI_math_geom.h"
 
-#include "BKE_DerivedMesh.h"
+#include "BKE_library.h"
+#include "BKE_mesh.h"
+#include "BKE_mesh_runtime.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
 }
@@ -77,8 +81,8 @@ void AbcHairWriter::do_write()
                return;
        }
 
-       DerivedMesh *dm = mesh_create_derived_render(m_depsgraph, m_scene, 
m_object, CD_MASK_MESH);
-       DM_ensure_tessface(dm);
+       Mesh *mesh = mesh_get_eval_final(m_depsgraph, m_scene, m_object, 
CD_MASK_MESH);
+       BKE_mesh_tessface_ensure(mesh);
 
        std::vector<Imath::V3f> verts;
        std::vector<int32_t> hvertices;
@@ -88,14 +92,14 @@ void AbcHairWriter::do_write()
        if (m_psys->pathcache) {
                ParticleSettings *part = m_psys->part;
 
-               write_hair_sample(dm, part, verts, norm_values, uv_values, 
hvertices);
+               write_hair_sample(mesh, part, verts, norm_values, uv_values, 
hvertices);
 
                if (m_settings.export_child_hairs && m_psys->childcache) {
-                       write_hair_child_sample(dm, part, verts, norm_values, 
uv_values, hvertices);
+                       write_hair_child_sample(mesh, part, verts, norm_values, 
uv_values, hvertices);
                }
        }
 
-       dm->release(dm);
+       BKE_id_free(NULL, mesh);
 
        Alembic::Abc::P3fArraySample iPos(verts);
        m_sample = OCurvesSchema::Sample(iPos, hvertices);
@@ -119,7 +123,7 @@ void AbcHairWriter::do_write()
        m_schema.set(m_sample);
 }
 
-void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
+void AbcHairWriter::write_hair_sample(Mesh *mesh,
                                       ParticleSettings *part,
                                       std::vector<Imath::V3f> &verts,
                                       std::vector<Imath::V3f> &norm_values,
@@ -130,9 +134,9 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
        float inv_mat[4][4];
        invert_m4_m4_safe(inv_mat, m_object->obmat);
 
-       MTFace *mtface = static_cast<MTFace 
*>(CustomData_get_layer(&dm->faceData, CD_MTFACE));
-       MFace *mface = dm->getTessFaceArray(dm);
-       MVert *mverts = dm->getVertArray(dm);
+       MTFace *mtface = mesh->mtface;
+       MFace *mface = mesh->mface;
+       MVert *mverts = mesh->mvert;
 
        if ((!mtface || !mface) && !m_uv_warning_shown) {
                std::fprintf(stderr, "Warning, no UV set found for underlying 
geometry of %s.\n",
@@ -155,8 +159,9 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
                if (part->from == PART_FROM_FACE && mtface) {
                        const int num = pa->num_dmcache >= 0 ? pa->num_dmcache 
: pa->num;
 
-                       if (num < dm->getNumTessFaces(dm)) {
-                               MFace *face = static_cast<MFace 
*>(dm->getTessFaceData(dm, num, CD_MFACE));
+                       if (num < mesh->totface) {
+                               /* TODO(Sybren): check whether the NULL check 
here and if(mface) are actually required */
+                               MFace *face = mface == NULL ? NULL : 
&mface[num];
                                MTFace *tface = mtface + num;
 
                                if (mface) {
@@ -172,7 +177,7 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
                                }
                        }
                        else {
-                               std::fprintf(stderr, "Particle to faces 
overflow (%d/%d)\n", num, dm->getNumTessFaces(dm));
+                               std::fprintf(stderr, "Particle to faces 
overflow (%d/%d)\n", num, mesh->totface);
                        }
                }
                else if (part->from == PART_FROM_VERT && mtface) {
@@ -180,8 +185,8 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
                        const int num = (pa->num_dmcache >= 0) ? 
pa->num_dmcache : pa->num;
 
                        /* iterate over all faces to find a corresponding 
underlying UV */
-                       for (int n = 0; n < dm->getNumTessFaces(dm); ++n) {
-                               MFace *face  = static_cast<MFace 
*>(dm->getTessFaceData(dm, n, CD_MFACE));
+                       for (int n = 0; n < mesh->totface; ++n) {
+                               MFace *face  = &mface[n];
                                MTFace *tface = mtface + n;
                                unsigned int vtx[4];
                                vtx[0] = face->v1;
@@ -230,7 +235,7 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
        }
 }
 
-void AbcHairWriter::write_hair_child_sample(DerivedMesh *dm,
+void AbcHairWriter::write_hair_child_sample(Mesh *mesh,
                                             ParticleSettings *part,
                                             std::vector<Imath::V3f> &verts,
                                             std::vector<Imath::V3f> 
&norm_values,
@@ -241,8 +246,8 @@ void AbcHairWriter::write_hair_child_sample(DerivedMesh *dm,
        float inv_mat[4][4];
        invert_m4_m4_safe(inv_mat, m_object->obmat);
 
-       MTFace *mtface = static_cast<MTFace 
*>(CustomData_get_layer(&dm->faceData, CD_MTFACE));
-       MVert *mverts = dm->getVertArray(dm);
+       MTFace *mtface = mesh->mtface;
+       MVert *mverts = mesh->mvert;
 
        ParticleCacheKey **cache = m_psys->childcache;
        ParticleCacheKey *path;
@@ -265,7 +270,7 @@ void AbcHairWriter::write_hair_child_sample(DerivedMesh *dm,
                                continue;
                        }
 
-                       MFace *face = static_cast<MFace 
*>(dm->getTessFaceData(dm, num, CD_MFACE));
+                       MFace *face = &mesh->mface[num];
                        MTFace *tface = mtface + num;
 
                        float r_uv[2], tmpnor[3], mapfw[4], vec[3];
diff --git a/source/blender/alembic/intern/abc_hair.h 
b/source/blender/alembic/intern/abc_hair.h
index 5627f7726e6..22a3e2db2fd 100644
--- a/source/blender/alembic/intern/abc_hair.h
+++ b/source/blender/alembic/intern/abc_hair.h
@@ -25,7 +25,6 @@
 
 #include "abc_object.h"
 
-struct DerivedMesh;
 struct ParticleSettings;
 struct ParticleSystem;
 
@@ -51,14 +50,14 @@ public:
 private:
        virtual void do_write();
 
-       void write_hair_sample(DerivedMesh *dm,
+       void write_hair_sample(struct Mesh *mesh,
                               ParticleSettings *part,
                               std::vector<Imath::V3f> &verts,
                               std::vector<Imath::V3f> &norm_values,
                               std::vector<Imath::V2f> &uv_values,
                               std::vector<int32_t> &hvertices);
 
-       void write_hair_child_sample(DerivedMesh *dm,
+       void write_hair_child_sample(struct Mesh *mesh,
                                     ParticleSettings *part,
                                     std::vector<Imath::V3f> &verts,
                                     std::vector<Imath::V3f> &norm_values,
diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index 03d70b4f56b..6afdccb7732 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -30,6 +30,7 @@
 extern "C" {
 #include "DNA_material_types.h"
 #include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_object_fluidsim_types.h"
 #include "DNA_object_types.h"
@@ -37,10 +38,10 @@ extern "C" {
 #include "BLI_math_geom.h"
 #include "BLI_string.h"
 
-#include "BKE_cdderivedmesh.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
 #include "BKE_mesh.h"
+#include "BKE_mesh_runtime.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
 
@@ -103,27 +104,27 @@ using Alembic::AbcGeom::IN3fGeomParam;
 
 /* NOTE: Alembic's polygon winding order is clockwise, to match with 
Renderman. */
 
-static void get_vertices(DerivedMesh *dm, std::vector<Imath::V3f> &points)
+static void get_vertices(struct Mesh *mesh, std::vector<Imath::V3f> &points)
 {
        points.clear();
-       points.resize(dm->getNumVerts(dm));
+       points.resize(mesh->totvert);
 
-       MVert *verts = dm->getVertArray(dm);
+       MVert *verts = mesh->mvert;
 
-       for (int i = 0, e = dm->getNumVerts(dm); i < e; ++i) {
+       for (int i = 0, e = mesh->totvert; i < e; ++i) {
                copy_yup_from_zup(points[i].getValue(), verts[i].co);
        }
 }
 
-static void get_topology(DerivedMesh *dm,
+static void get_topology(struct Mesh *mesh,
                          std::vector<int32_t> &poly_verts,
                          std::vector<int32_t> &loop_counts,
                          bool &smooth_normal)
 {
-       const int num_poly = dm->getNumPolys(dm);
-       const int num_loops = dm->getNumLoops(dm);
-       MLoop *mloop = dm->getLoopArray(dm);
-       MPoly *mpoly = dm->getPolyArray(dm);
+       const int num_poly = mesh->totpoly;
+       const int num_loops = mesh->totloop;
+       MLoop *mloop = mesh->mloop;
+       MPoly *mpoly = mesh->mpoly;
 
        poly_verts.clear();
        loop_counts.clear();
@@ -145,7 +146,7 @@ static void get_topology(DerivedMesh *dm,
        }
 }
 
-static void get_creases(DerivedMesh *dm,
+static void get_creases(struct Mesh *mesh,
                         std::vector<int32_t> &indices,
                         std::vector<int32_t> &lengths,
                         std::vector<float> &sharpnesses)
@@ -156,9 +157,9 @@ static void get_creases(DerivedMesh *dm,
        lengths.clear();
        sharpnesses.clear();
 
-       MEdge *edge = dm->getEdgeArray(dm);
+       MEdge *edge = mesh->medge;
 
-       for (int i = 0, e = dm->getNumEdges(dm); i < e; ++i) {
+       for (int i = 0, e = mesh->totedge; i < e; ++i) {
                const float sharpness = static_cast<float>(edge[i].crease) * 
factor;
 
                if (sharpness != 0.0f) {
@@ -171,41 +172,40 @@ static void get_creases(DerivedMesh *dm,
        lengths.resize(sharpnesses.size(), 2);
 }
 
-static void get_vertex_normals(DerivedMesh *dm, std::vector<Imath::V3f> 
&normals)
+static void get_vertex_normals(struct Mesh *mesh, std::vector<Imath::V3f> 
&normals)
 {
        normals.clear();
-       normals.resize(dm->getNumVerts(dm));
+       normals.resize(mesh->totvert);
 
-       MVert *verts = dm->getVertArray(dm);
+       MVert *verts = mesh->mvert;
        float no[3];
 
-       for (int i = 0, e = dm->getNumVerts(dm); i < e; ++i) {
+       for (int i = 0, e = mesh->totvert; i < e; ++i) {
                normal_short_to_float_v3(no, verts[i].no);
                copy_yup_from_zup(normals[i].getValue(), no);
        }
 }
 
-static void get_loop_normals(DerivedMesh *dm, std::vector<Imath::V3f> &normals)
+static void get_loop_normals(struct Mesh *mesh, std::vector<Imath::V3f> 
&normals)
 {
-       MPoly *mpoly = dm->getPolyArray(dm);
-       MPoly *mp = mpoly;
+       MPoly *mp = mesh->mpoly;
 
-       MLoop *mloop = dm->getLoopArray(dm);
+       MLoop *mloop = mesh->mloop;
        MLoop *ml = mloop;
 
-       MVert *verts = dm->getVertArray(dm);
+       MVert *verts = mesh->mvert;
 
-       const float (*lnors)[3] = 
static_cast<float(*)[3]>(dm->getLoopDataArray(dm, CD_NORMAL));
+       const float (*lnors)[3] = 
static_cast<float(*)[3]>(CustomData_get_layer(&mesh->ldata, CD_NORMAL))

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to