[Bf-blender-cvs] [e9aa1b92d68] soc-2020-io-performance: Add add_polygon_from_verts and add_bmvert to OBJBmeshFromRaw

Ankit Meel noreply at git.blender.org
Sun Jul 12 15:41:04 CEST 2020


Commit: e9aa1b92d6830638ec04c1ffd1ed54fbffa2e0c6
Author: Ankit Meel
Date:   Sat Jul 11 22:42:53 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rBe9aa1b92d6830638ec04c1ffd1ed54fbffa2e0c6

Add add_polygon_from_verts and add_bmvert to OBJBmeshFromRaw

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

M	source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc
M	source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh

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

diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc
index 8fdcb1a0d8f..0c952eb06ed 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc
@@ -134,7 +134,7 @@ void OBJImporter::print_obj_data(Vector<std::unique_ptr<OBJRawObject>> &list_of_
   }
 }
 
-OBJRawToBmesh::OBJRawToBmesh(OBJRawObject &curr_object)
+OBJBmeshFromRaw::OBJBmeshFromRaw(const OBJRawObject &curr_object)
 {
   template_mesh_ = std::unique_ptr<Mesh>(
       BKE_mesh_new_nomain(0, 0, 0, curr_object.tot_loop, curr_object.face_elements.size()));
@@ -149,7 +149,7 @@ OBJRawToBmesh::OBJRawToBmesh(OBJRawObject &curr_object)
   BM_mesh_bm_from_me(bm_new_.get(), template_mesh_.get(), &bm_convert_params);
 };
 
-OBJRawToBmesh::~OBJRawToBmesh()
+OBJBmeshFromRaw::~OBJBmeshFromRaw()
 {
   if (bm_new_.get()) {
     BM_mesh_free(bm_new_.release());
@@ -159,36 +159,39 @@ OBJRawToBmesh::~OBJRawToBmesh()
   }
 }
 
-static std::unique_ptr<Mesh> mesh_from_raw_obj(Main *bmain, OBJRawObject &curr_object)
+BMVert *OBJBmeshFromRaw::add_bmvert(float3 coords)
 {
+  return BM_vert_create(bm_new_.get(), coords, NULL, BM_CREATE_SKIP_CD);
+}
+
+void OBJBmeshFromRaw::add_polygon_from_verts(BMVert **verts_of_face, uint tot_verts_per_poly)
+{
+  BM_face_create_ngon_verts(
+      bm_new_.get(), verts_of_face, tot_verts_per_poly, NULL, BM_CREATE_SKIP_CD, false, true);
+}
+
+static std::unique_ptr<Mesh> mesh_from_raw_obj(Main *bmain, const OBJRawObject &curr_object)
+{
+
+  OBJBmeshFromRaw bm_from_raw{curr_object};
 
-  OBJRawToBmesh P{curr_object};
-  /* Vertex creation. */
   Array<BMVert *> all_vertices(curr_object.vertices.size());
   for (int i = 0; i < curr_object.vertices.size(); i++) {
-    MVert &curr_vert = curr_object.vertices[i];
-    all_vertices[i] = BM_vert_create(P.getter_bmesh(), curr_vert.co, NULL, BM_CREATE_SKIP_CD);
+    const MVert &curr_vert = curr_object.vertices[i];
+    all_vertices[i] = bm_from_raw.add_bmvert(curr_vert.co);
   }
 
-  /* Face and edge creation. */
   for (const Vector<OBJFaceCorner> &curr_face : curr_object.face_elements) {
-    /* Collect vertices of one face from a pool of BMVerts. */
+    /* Collect vertices of one face from a pool of BMesh vertices. */
     Array<BMVert *> verts_of_face(curr_face.size());
     for (int i = 0; i < curr_face.size(); i++) {
       verts_of_face[i] = all_vertices[curr_face[i].vert_index];
     }
-
-    BM_face_create_ngon_verts(P.getter_bmesh(),
-                              &verts_of_face[0],
-                              verts_of_face.size(),
-                              NULL,
-                              BM_CREATE_SKIP_CD,
-                              false,
-                              true);
+    bm_from_raw.add_polygon_from_verts(&verts_of_face[0], curr_face.size());
   }
 
   std::unique_ptr<Mesh> mesh1{(Mesh *)BKE_id_new_nomain(ID_ME, NULL)};
-  BM_mesh_bm_to_me_for_eval(P.getter_bmesh(), mesh1.get(), NULL);
+  BM_mesh_bm_to_me_for_eval(bm_from_raw.getter_bmesh(), mesh1.get(), NULL);
   return mesh1;
 }
 
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh b/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh
index 90ce0714549..31f3815f2f0 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh
@@ -72,15 +72,18 @@ class OBJParentCollection {
   Collection *parent_collection_;
 };
 
-class OBJRawToBmesh : NonMovable, NonCopyable {
+class OBJBmeshFromRaw : NonMovable, NonCopyable {
  public:
-  OBJRawToBmesh(OBJRawObject &curr_object);
-  ~OBJRawToBmesh();
+  OBJBmeshFromRaw(const OBJRawObject &curr_object);
+  ~OBJBmeshFromRaw();
   BMesh *getter_bmesh()
   {
     return bm_new_.get();
   }
 
+  BMVert *add_bmvert(float3 coords);
+  void add_polygon_from_verts(BMVert **verts_of_face, uint tot_verts_per_poly);
+
  private:
   std::unique_ptr<Mesh> template_mesh_;
   std::unique_ptr<BMesh> bm_new_;



More information about the Bf-blender-cvs mailing list