diff --git a/scene/resources/mesh_data_tool.cpp b/scene/resources/mesh_data_tool.cpp index 1ef2f62ca38..3e8422ed0d1 100644 --- a/scene/resources/mesh_data_tool.cpp +++ b/scene/resources/mesh_data_tool.cpp @@ -52,6 +52,28 @@ Error MeshDataTool::create_from_surface(const Ref &p_mesh, int p_surf int vcount = varray.size(); ERR_FAIL_COND_V(vcount == 0, ERR_INVALID_PARAMETER); + PoolVector indices; + + if (arrays[Mesh::ARRAY_INDEX].get_type() != Variant::NIL) { + + indices = arrays[Mesh::ARRAY_INDEX]; + } else { + //make code simpler + indices.resize(vcount); + PoolVector::Write iw = indices.write(); + for (int i = 0; i < vcount; i++) + iw[i] = i; + } + + int icount = indices.size(); + PoolVector::Read r = indices.read(); + + ERR_FAIL_COND_V(icount == 0, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(icount % 3, ERR_INVALID_PARAMETER); + for (int i = 0; i < icount; i++) { + ERR_FAIL_INDEX_V(r[i], vcount, ERR_INVALID_PARAMETER); + } + clear(); format = p_mesh->surface_get_format(p_surface); material = p_mesh->surface_get_material(p_surface); @@ -121,22 +143,6 @@ Error MeshDataTool::create_from_surface(const Ref &p_mesh, int p_surf vertices.write[i] = v; } - PoolVector indices; - - if (arrays[Mesh::ARRAY_INDEX].get_type() != Variant::NIL) { - - indices = arrays[Mesh::ARRAY_INDEX]; - } else { - //make code simpler - indices.resize(vcount); - PoolVector::Write iw = indices.write(); - for (int i = 0; i < vcount; i++) - iw[i] = i; - } - - int icount = indices.size(); - PoolVector::Read r = indices.read(); - Map edge_indices; for (int i = 0; i < icount; i += 3) {