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