[d88314ee5b5] blender2.8: Alembic export: port DerivedMesh → Mesh

Sybren A. Stüvel noreply at git.blender.org
Thu Jun 7 10:51:26 CEST 2018


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. @@



More information about the Bf-blender-cvs mailing list