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);

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

Reply via email to