Commit: 4923087d253d6673a34e477b1efb6ad7fce8c23d
Author: Ankit Meel
Date:   Mon Aug 17 15:30:44 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rB4923087d253d6673a34e477b1efb6ad7fce8c23d

Export vertex normals if smooth shading is enabled.

`s on/off` line will not be written if that is not checked in the
exporter parameters.

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

M       source/blender/io/wavefront_obj/intern/wavefront_obj_ex_file_writer.cc
M       source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.cc
M       source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.hh

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

diff --git 
a/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_file_writer.cc 
b/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_file_writer.cc
index 9d5b59d2fa8..840408bcc36 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_file_writer.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_file_writer.cc
@@ -191,7 +191,7 @@ void OBJWriter::write_poly_normals(OBJMesh &obj_mesh_data) 
const
 {
   obj_mesh_data.ensure_mesh_normals();
   obj_mesh_data.calc_smooth_groups();
-  if (export_params_.export_smooth_groups && obj_mesh_data.tot_smooth_groups() 
> 0) {
+  if (obj_mesh_data.tot_smooth_groups() > 0) {
     float vertex_normal[3];
     for (uint i = 0; i < obj_mesh_data.tot_vertices(); i++) {
       obj_mesh_data.calc_vertex_normal(i, vertex_normal);
@@ -418,7 +418,7 @@ void OBJWriter::update_index_offsets(const OBJMesh 
&obj_mesh_data)
 {
   index_offset_[VERTEX_OFF] += obj_mesh_data.tot_vertices();
   index_offset_[UV_VERTEX_OFF] += obj_mesh_data.tot_uv_vertices();
-  index_offset_[NORMAL_OFF] += obj_mesh_data.tot_polygons();
+  index_offset_[NORMAL_OFF] += obj_mesh_data.tot_normals();
 }
 
 /**
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.cc 
b/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.cc
index a278dcaa86d..700a82ff5fd 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.cc
@@ -167,6 +167,13 @@ uint OBJMesh::tot_edges() const
   return export_mesh_eval_->totedge;
 }
 
+uint OBJMesh::tot_normals() const
+{
+  /* Calculate smooth groups first. Or use total polygons if suitable. */
+  BLI_assert(poly_smooth_groups_);
+  return tot_smooth_groups_ > 0 ? export_mesh_eval_->totvert : 
export_mesh_eval_->totpoly;
+}
+
 /**
  * Total materials in the object to export.
  */
@@ -369,7 +376,7 @@ void OBJMesh::calc_vertex_normal(const uint vert_index, 
float r_vertex_normal[3]
 void OBJMesh::calc_poly_normal_indices(const uint poly_index, Vector<uint> 
&r_normal_indices) const
 {
   r_normal_indices.resize(export_mesh_eval_->mpoly[poly_index].totloop);
-  if (export_params_.export_smooth_groups && tot_smooth_groups_ > 0) {
+  if (tot_smooth_groups_ > 0) {
     const MPoly &mpoly = export_mesh_eval_->mpoly[poly_index];
     const MLoop *mloop = &export_mesh_eval_->mloop[mpoly.loopstart];
     for (int i = 0; i < r_normal_indices.size(); i++) {
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.hh 
b/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.hh
index cb4e8377d7f..c86885d1321 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_ex_mesh.hh
@@ -73,6 +73,7 @@ class OBJMesh : NonMovable, NonCopyable {
   uint tot_polygons() const;
   uint tot_uv_vertices() const;
   uint tot_edges() const;
+  uint tot_normals() const;
   short tot_col() const;
   uint tot_smooth_groups() const;
   int ith_smooth_group(int poly_index) const;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to