[Bf-blender-cvs] [9279377f4b2] soc-2020-io-performance: Use unique_ptr to avoid early destruction of new meshes.
Ankit Meel
noreply at git.blender.org
Tue Jun 30 13:20:12 CEST 2020
Commit: 9279377f4b29ab75b2fa50c9d5e3e721b429d6f5
Author: Ankit Meel
Date: Tue Jun 30 16:03:15 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rB9279377f4b29ab75b2fa50c9d5e3e721b429d6f5
Use unique_ptr to avoid early destruction of new meshes.
===================================================================
M source/blender/io/wavefront_obj/intern/wavefront_obj_exporter.cc
M source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.hh
M source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_nurbs.hh
===================================================================
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter.cc
index 3cf3ef9e0ed..bedcdf61bd1 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter.cc
@@ -49,8 +49,8 @@ namespace obj {
*/
static void export_frame(bContext *C, const OBJExportParams *export_params, const char *filepath)
{
- Vector<OBJMesh> exportable_meshes;
- Vector<OBJNurbs> exportable_nurbs;
+ Vector<std::unique_ptr<OBJMesh>> exportable_meshes;
+ Vector<std::unique_ptr<OBJNurbs>> exportable_nurbs;
ViewLayer *view_layer = CTX_data_view_layer(C);
LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
Object *object_in_layer = base->object;
@@ -60,7 +60,8 @@ static void export_frame(bContext *C, const OBJExportParams *export_params, cons
switch (object_in_layer->type) {
case OB_SURF:
case OB_MESH: {
- exportable_meshes.append(OBJMesh(C, export_params, object_in_layer));
+ OBJMesh *objmesh = new OBJMesh(C, export_params, object_in_layer);
+ exportable_meshes.append(std::unique_ptr<OBJMesh>(objmesh));
break;
}
case OB_CURVE: {
@@ -68,14 +69,17 @@ static void export_frame(bContext *C, const OBJExportParams *export_params, cons
Nurb *nurb = (Nurb *)curve->nurb.first;
if (nurb->type == CU_NURBS) {
if (export_params->export_curves_as_nurbs) {
- exportable_nurbs.append(OBJNurbs(C, object_in_layer));
+ OBJNurbs *objnurb = new OBJNurbs(C, object_in_layer);
+ exportable_nurbs.append(std::unique_ptr<OBJNurbs>(objnurb));
}
else {
- exportable_meshes.append(OBJMesh(C, export_params, object_in_layer));
+ OBJMesh *objmesh = new OBJMesh(C, export_params, object_in_layer);
+ exportable_meshes.append(std::unique_ptr<OBJMesh>(objmesh));
}
}
if (nurb->type == CU_BEZIER) {
- exportable_meshes.append(OBJMesh(C, export_params, object_in_layer));
+ OBJMesh *objmesh = new OBJMesh(C, export_params, object_in_layer);
+ exportable_meshes.append(std::unique_ptr<OBJMesh>(objmesh));
}
/* Other types of curves are not supported. */
break;
@@ -96,36 +100,34 @@ static void export_frame(bContext *C, const OBJExportParams *export_params, cons
* OBJ. */
frame_writer.write_mtllib(filepath);
}
- for (uint ob_iter = 0; ob_iter < exportable_meshes.size(); ob_iter++) {
- OBJMesh &mesh_to_export = exportable_meshes[ob_iter];
+ for (std::unique_ptr<OBJMesh> &mesh_to_export : exportable_meshes) {
- frame_writer.write_object_name(mesh_to_export);
- frame_writer.write_vertex_coords(mesh_to_export);
+ frame_writer.write_object_name(*mesh_to_export);
+ frame_writer.write_vertex_coords(*mesh_to_export);
/* For curves converted to mesh and primitive circle. */
- if (mesh_to_export.tot_poly_normals() == 0) {
- frame_writer.write_curve_edges(mesh_to_export);
+ if (mesh_to_export->tot_poly_normals() == 0) {
+ frame_writer.write_curve_edges(*mesh_to_export);
}
else {
Vector<Vector<uint>> uv_indices;
if (export_params->export_normals) {
- frame_writer.write_poly_normals(mesh_to_export);
+ frame_writer.write_poly_normals(*mesh_to_export);
}
if (export_params->export_uv) {
- frame_writer.write_uv_coords(mesh_to_export, uv_indices);
+ frame_writer.write_uv_coords(*mesh_to_export, uv_indices);
}
if (export_params->export_materials) {
MTLWriter mtl_writer(filepath);
- mtl_writer.append_materials(mesh_to_export);
+ mtl_writer.append_materials(*mesh_to_export);
}
- frame_writer.write_poly_indices(mesh_to_export, uv_indices);
+ frame_writer.write_poly_indices(*mesh_to_export, uv_indices);
}
- frame_writer.update_index_offsets(mesh_to_export);
+ frame_writer.update_index_offsets(*mesh_to_export);
}
/* Export nurbs in parm form, not as vertices and edges. */
- for (uint ob_iter = 0; ob_iter < exportable_nurbs.size(); ob_iter++) {
- OBJNurbs &nurbs_to_export = exportable_nurbs[ob_iter];
- frame_writer.write_nurbs_curve(nurbs_to_export);
+ for (std::unique_ptr<OBJNurbs> &nurbs_to_export : exportable_nurbs) {
+ frame_writer.write_nurbs_curve(*nurbs_to_export);
}
}
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.hh b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.hh
index 811c058889d..48d9c4c96ba 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.hh
@@ -26,6 +26,7 @@
#include "BKE_material.h"
#include "BKE_mesh.h"
+#include "BLI_utility_mixins.hh"
#include "BLI_vector.hh"
#include "DNA_mesh_types.h"
@@ -37,7 +38,7 @@
namespace blender {
namespace io {
namespace obj {
-class OBJMesh {
+class OBJMesh : NonMovable, NonCopyable {
public:
OBJMesh(bContext *C, const OBJExportParams *export_params, Object *export_object)
: _C(C), _export_params(export_params), _export_object_eval(export_object)
@@ -48,10 +49,7 @@ class OBJMesh {
/** Free new meshes we allocate for triangulated meshes, and curves converted to meshes. */
~OBJMesh()
{
- fprintf(stderr, "Called destructor.\n");
- /** TODO ankitm remove this debug fprintf. */
if (_me_eval_needs_free) {
- fprintf(stderr, "Freed a curve converted to mesh.\n");
BKE_id_free(NULL, _export_mesh_eval);
}
}
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_nurbs.hh b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_nurbs.hh
index c1b5336d4b2..2c1f32a84f1 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_nurbs.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_nurbs.hh
@@ -27,13 +27,15 @@
#include "BKE_context.h"
#include "BKE_curve.h"
+#include "BLI_utility_mixins.hh"
+
#include "DNA_curve_types.h"
namespace blender {
namespace io {
namespace obj {
-class OBJNurbs {
+class OBJNurbs : NonMovable, NonCopyable {
public:
OBJNurbs(bContext *C, Object *export_object) : _C(C), _export_object_eval(export_object)
{
More information about the Bf-blender-cvs
mailing list