[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