[Bf-blender-cvs] [6f906947634] refactor-mesh-position-generic: Merge branch 'master' into refactor-mesh-position-generic

Hans Goudey noreply at git.blender.org
Tue Dec 6 22:48:17 CET 2022


Commit: 6f906947634619e548389376c0415045c2baff9b
Author: Hans Goudey
Date:   Tue Dec 6 15:40:13 2022 -0600
Branches: refactor-mesh-position-generic
https://developer.blender.org/rB6f906947634619e548389376c0415045c2baff9b

Merge branch 'master' into refactor-mesh-position-generic

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



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

diff --cc source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
index daf2bd3dcc6,86518bd09f2..1fc5f08675e
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
@@@ -33,12 -33,16 +33,16 @@@ OBJMesh::OBJMesh(Depsgraph *depsgraph, 
    /* We need to copy the object because it may be in temporary space. */
    Object *obj_eval = DEG_get_evaluated_object(depsgraph, mesh_object);
    export_object_eval_ = dna::shallow_copy(*obj_eval);
-   export_mesh_eval_ = export_params.apply_modifiers ?
-                           BKE_object_get_evaluated_mesh(&export_object_eval_) :
-                           BKE_object_get_pre_modified_mesh(&export_object_eval_);
-   mesh_eval_needs_free_ = false;
- 
-   if (!export_mesh_eval_) {
+   export_mesh_ = export_params.apply_modifiers ?
+                      BKE_object_get_evaluated_mesh(&export_object_eval_) :
+                      BKE_object_get_pre_modified_mesh(&export_object_eval_);
+   if (export_mesh_) {
 -    mesh_verts_ = export_mesh_->verts();
++    mesh_positions_ = export_mesh_->positions();
+     mesh_edges_ = export_mesh_->edges();
+     mesh_polys_ = export_mesh_->polys();
+     mesh_loops_ = export_mesh_->loops();
+   }
+   else {
      /* Curves and NURBS surfaces need a new mesh when they're
       * exported in the form of vertices and edges.
       */
@@@ -60,13 -62,17 +62,17 @@@ OBJMesh::~OBJMesh(
    clear();
  }
  
- void OBJMesh::free_mesh_if_needed()
+ void OBJMesh::set_mesh(Mesh *mesh)
  {
-   if (mesh_eval_needs_free_ && export_mesh_eval_) {
-     BKE_id_free(nullptr, export_mesh_eval_);
-     export_mesh_eval_ = nullptr;
-     mesh_eval_needs_free_ = false;
+   if (owned_export_mesh_) {
+     BKE_id_free(nullptr, owned_export_mesh_);
    }
+   owned_export_mesh_ = mesh;
+   export_mesh_ = owned_export_mesh_;
 -  mesh_verts_ = mesh->verts();
++  mesh_positions_ = mesh->positions();
+   mesh_edges_ = mesh->edges();
+   mesh_polys_ = mesh->polys();
+   mesh_loops_ = mesh->loops();
  }
  
  void OBJMesh::clear()
@@@ -259,9 -264,8 +264,7 @@@ const char *OBJMesh::get_object_materia
  
  float3 OBJMesh::calc_vertex_coords(const int vert_index, const float global_scale) const
  {
--  float3 r_coords;
-   const Span<float3> positions = export_mesh_eval_->positions();
-   copy_v3_v3(r_coords, positions[vert_index]);
 -  copy_v3_v3(r_coords, mesh_verts_[vert_index].co);
++  float3 r_coords = mesh_positions_[vert_index];
    mul_m4_v3(world_and_axes_transform_, r_coords);
    mul_v3_fl(r_coords, global_scale);
    return r_coords;
@@@ -347,14 -347,9 +346,11 @@@ Span<int> OBJMesh::calc_poly_uv_indices
  float3 OBJMesh::calc_poly_normal(const int poly_index) const
  {
    float3 r_poly_normal;
-   const Span<float3> positions = export_mesh_eval_->positions();
-   const Span<MPoly> polys = export_mesh_eval_->polys();
-   const Span<MLoop> loops = export_mesh_eval_->loops();
-   const MPoly &poly = polys[poly_index];
+   const MPoly &poly = mesh_polys_[poly_index];
 -  BKE_mesh_calc_poly_normal(
 -      &poly, &mesh_loops_[poly.loopstart], mesh_verts_.data(), r_poly_normal);
 +  BKE_mesh_calc_poly_normal(&poly,
-                             &loops[poly.loopstart],
-                             reinterpret_cast<const float(*)[3]>(positions.data()),
++                            &mesh_loops_[poly.loopstart],
++                            reinterpret_cast<const float(*)[3]>(mesh_positions_.data()),
 +                            r_poly_normal);
    mul_m3_v3(world_and_axes_normal_transform_, r_poly_normal);
    normalize_v3(r_poly_normal);
    return r_poly_normal;
diff --cc source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
index f45dda338ee,b74dca4a47e..5039a0388fb
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
@@@ -35,11 -35,15 +35,15 @@@ class OBJMesh : NonCopyable 
     * sometimes builds an Object in a temporary space that doesn't persist.
     */
    Object export_object_eval_;
-   Mesh *export_mesh_eval_;
-   /**
-    * For curves which are converted to mesh, and triangulated meshes, a new mesh is allocated.
-    */
-   bool mesh_eval_needs_free_ = false;
+   /** A pointer to #owned_export_mesh_ or the object'ed evaluated/original mesh. */
+   const Mesh *export_mesh_;
+   /** A mesh owned here, if created or modified for the export. May be null. */
+   Mesh *owned_export_mesh_ = nullptr;
 -  Span<MVert> mesh_verts_;
++  Span<float3> mesh_positions_;
+   Span<MEdge> mesh_edges_;
+   Span<MPoly> mesh_polys_;
+   Span<MLoop> mesh_loops_;
+ 
    /**
     * Final transform of an object obtained from export settings (up_axis, forward_axis) and the
     * object's world transform matrix.



More information about the Bf-blender-cvs mailing list