Mesh: fix crash when creating mesh outline from QuadMesh
Since create_outline can only make outline for PRIMITIVE_TRIANGLES, when QuadMesh (which is PRIMITIVE_TRIANGLE_FAN) is used to create outline, will leave `arrays` empty, and crash when it is being indexed for "indices" subarray. This PR shows error when there's only one surface and it is not TRIANGLES. Also prevent the crash if it has more than one surface and none of them are TRIANGLES (and any other cases that could leave `arrays` empty) by checking the size of `arrays` == 8 before indexing it, since the method seems to expect `arrays` to be of that size.
This commit is contained in:
parent
d2eb731878
commit
a492d22952
|
@ -344,6 +344,10 @@ void MeshInstanceEditor::_create_outline_mesh() {
|
|||
err_dialog->set_text(TTR("Mesh has not surface to create outlines from!"));
|
||||
err_dialog->popup_centered_minsize();
|
||||
return;
|
||||
} else if (mesh->get_surface_count() == 1 && mesh->surface_get_primitive_type(0) != Mesh::PRIMITIVE_TRIANGLES) {
|
||||
err_dialog->set_text(TTR("Mesh primitive type is not PRIMITIVE_TRIANGLES!"));
|
||||
err_dialog->popup_centered_minsize();
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<Mesh> mesho = mesh->create_outline(outline_size->get_value());
|
||||
|
|
|
@ -315,6 +315,8 @@ Ref<Mesh> Mesh::create_outline(float p_margin) const {
|
|||
}
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V(arrays.size() != ARRAY_MAX, Ref<ArrayMesh>());
|
||||
|
||||
{
|
||||
PoolVector<int>::Write ir;
|
||||
PoolVector<int> indices = arrays[ARRAY_INDEX];
|
||||
|
|
Loading…
Reference in New Issue