[Bf-blender-cvs] [02fa1f0bba2] soc-2020-io-performance: Fix crash when exporting uv vertices with no UV map.

Ankit Meel noreply at git.blender.org
Mon Jun 29 17:03:07 CEST 2020


Commit: 02fa1f0bba2bf2dd3ca94caa0971990f8a95f6e5
Author: Ankit Meel
Date:   Mon Jun 29 20:33:01 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rB02fa1f0bba2bf2dd3ca94caa0971990f8a95f6e5

Fix crash when exporting uv vertices with no UV map.

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

M	source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.cc
M	source/blender/io/wavefront_obj/intern/wavefront_obj_file_handler.cc

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

diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.cc
index e7888c99c91..2f77ac483e2 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_exporter_mesh.cc
@@ -169,6 +169,10 @@ void OBJMesh::store_uv_coords_and_indices(Vector<std::array<float, 2>> &r_uv_coo
   const int totpoly = _export_mesh_eval->totpoly;
   const int totvert = _export_mesh_eval->totvert;
   const MLoopUV *mloopuv = (MLoopUV *)CustomData_get_layer(&_export_mesh_eval->ldata, CD_MLOOPUV);
+  if (!mloopuv) {
+    _tot_uv_vertices = 0;
+    return;
+  }
   const float limit[2] = {STD_UV_CONNECT_LIMIT, STD_UV_CONNECT_LIMIT};
 
   UvVertMap *uv_vert_map = BKE_mesh_uv_vert_map_create(
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_file_handler.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_file_handler.cc
index 3713e27e235..3de2f0d3cfa 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_file_handler.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_file_handler.cc
@@ -216,7 +216,7 @@ void OBJWriter::write_poly_indices(OBJMesh &obj_mesh_data, Span<Vector<uint>> uv
   short last_face_mat_nr = -1;
 
   if (_export_params->export_normals) {
-    if (_export_params->export_uv) {
+    if (_export_params->export_uv && (obj_mesh_data.tot_uv_vertices() > 0)) {
       /* Write both normals and UV indices. */
       for (uint i = 0; i < obj_mesh_data.tot_poly_normals(); i++) {
         obj_mesh_data.calc_poly_vertex_indices(vertex_indices, i);
@@ -241,7 +241,7 @@ void OBJWriter::write_poly_indices(OBJMesh &obj_mesh_data, Span<Vector<uint>> uv
   }
   else {
     /* Write UV indices. */
-    if (_export_params->export_uv) {
+    if (_export_params->export_uv && (obj_mesh_data.tot_uv_vertices() > 0)) {
       for (uint i = 0; i < obj_mesh_data.tot_poly_normals(); i++) {
         obj_mesh_data.calc_poly_vertex_indices(vertex_indices, i);
         const MPoly &poly_to_write = obj_mesh_data.get_ith_poly(i);



More information about the Bf-blender-cvs mailing list