[Bf-blender-cvs] [c4cec5e52c0] soc-2020-io-performance: Make custom B/Mesh deleters for clean syntax
Ankit Meel
noreply at git.blender.org
Sun Jul 12 18:37:57 CEST 2020
Commit: c4cec5e52c03b8af2e01c752a18ad14b8bd487cb
Author: Ankit Meel
Date: Sun Jul 12 22:03:43 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rBc4cec5e52c03b8af2e01c752a18ad14b8bd487cb
Make custom B/Mesh deleters for clean syntax
===================================================================
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 7af54175912..358006e2565 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.cc
@@ -139,9 +139,6 @@ OBJBmeshFromRaw::OBJBmeshFromRaw(const OBJRawObject &curr_object)
auto creator_mesh = [&]() {
return BKE_mesh_new_nomain(0, 0, 0, curr_object.tot_loop, curr_object.face_elements.size());
};
- auto deleter_mesh = [](Mesh *mesh_to_delete) { BKE_id_free(NULL, mesh_to_delete); };
- std::unique_ptr<Mesh, decltype(deleter_mesh)> template_mesh(creator_mesh(), deleter_mesh);
-
auto creator_bmesh = [&]() {
BMAllocTemplate bat = {0,
0,
@@ -152,6 +149,7 @@ OBJBmeshFromRaw::OBJBmeshFromRaw(const OBJRawObject &curr_object)
};
bm_new_.reset(creator_bmesh());
struct BMeshFromMeshParams bm_convert_params = {true, 0, 0, 0};
+ unique_mesh_ptr template_mesh{creator_mesh()};
BM_mesh_bm_from_me(bm_new_.get(), template_mesh.get(), &bm_convert_params);
};
@@ -166,7 +164,7 @@ void OBJBmeshFromRaw::add_polygon_from_verts(BMVert **verts_of_face, uint tot_ve
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)
+static unique_mesh_ptr mesh_from_raw_obj(Main *bmain, const OBJRawObject &curr_object)
{
OBJBmeshFromRaw bm_from_raw{curr_object};
@@ -186,9 +184,9 @@ static std::unique_ptr<Mesh> mesh_from_raw_obj(Main *bmain, const OBJRawObject &
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(bm_from_raw.getter_bmesh(), mesh1.get(), NULL);
- return mesh1;
+ unique_mesh_ptr bm_to_me{(Mesh *)BKE_id_new_nomain(ID_ME, nullptr)};
+ BM_mesh_bm_to_me_for_eval(bm_from_raw.bm_getter(), bm_to_me.get(), nullptr);
+ return bm_to_me;
}
OBJParentCollection::OBJParentCollection(Main *bmain, Scene *scene) : bmain_(bmain), scene_(scene)
@@ -197,8 +195,7 @@ OBJParentCollection::OBJParentCollection(Main *bmain, Scene *scene) : bmain_(bma
bmain_, scene_->master_collection, "OBJ import collection");
}
-void OBJParentCollection::add_object_to_parent(const OBJRawObject &ob_to_add,
- std::unique_ptr<Mesh> mesh)
+void OBJParentCollection::add_object_to_parent(const OBJRawObject &ob_to_add, unique_mesh_ptr mesh)
{
std::unique_ptr<Object> b_object{
BKE_object_add_only_object(bmain_, OB_MESH, ob_to_add.object_name.c_str())};
@@ -221,7 +218,7 @@ void OBJImporter::make_objects(Main *bmain,
{
OBJParentCollection parent{bmain, scene};
for (std::unique_ptr<OBJRawObject> &curr_object : list_of_objects) {
- std::unique_ptr<Mesh> mesh = mesh_from_raw_obj(bmain, *curr_object);
+ unique_mesh_ptr mesh{mesh_from_raw_obj(bmain, *curr_object)};
parent.add_object_to_parent(*curr_object, std::move(mesh));
}
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 24b13b67df8..dbd501c450f 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_importer.hh
@@ -42,6 +42,23 @@
namespace blender::io::obj {
+struct UniqueMeshDeleter {
+ void operator()(Mesh *mesh)
+ {
+ BKE_id_free(nullptr, mesh);
+ }
+};
+
+struct UniqueBMeshDeleter {
+ void operator()(BMesh *t)
+ {
+ BM_mesh_free(t);
+ }
+};
+
+using unique_mesh_ptr = std::unique_ptr<Mesh, UniqueMeshDeleter>;
+using unique_bmesh_ptr = std::unique_ptr<BMesh, UniqueBMeshDeleter>;
+
typedef struct OBJFaceCorner {
int vert_index;
int tex_vert_index = -1;
@@ -64,7 +81,7 @@ class OBJRawObject {
class OBJParentCollection {
public:
OBJParentCollection(Main *bmain, Scene *scene);
- void add_object_to_parent(const OBJRawObject &ob_to_add, std::unique_ptr<Mesh> mesh);
+ void add_object_to_parent(const OBJRawObject &ob_to_add, unique_mesh_ptr mesh);
private:
Main *bmain_;
@@ -84,14 +101,7 @@ class OBJBmeshFromRaw : NonMovable, NonCopyable {
void add_polygon_from_verts(BMVert **verts_of_face, uint tot_verts_per_poly);
private:
- struct deleter_bmesh {
- void operator()(BMesh *t)
- {
- BM_mesh_free(t);
- }
- };
-
- std::unique_ptr<BMesh, deleter_bmesh> bm_new_;
+ unique_bmesh_ptr bm_new_;
};
class OBJImporter {
More information about the Bf-blender-cvs
mailing list