Fix immediate mesh modifications that don't call set_mesh

Mesh_instance_2d has no way to know when the mesh had been modified
unless you called set_mesh.  This meant that you could modify the
underlying mesh without it knowing which could result in incorrect
result.

Modified mesh_instance_2d to be more similar to mesh_instance_3d which
connects to the changed signal of the mesh and reacts occordingly.
This commit is contained in:
Trevor Davenport 2024-10-03 08:14:19 -06:00
parent 2e14492879
commit 47f75547ce
2 changed files with 15 additions and 0 deletions

View File

@ -54,7 +54,20 @@ void MeshInstance2D::_bind_methods() {
}
void MeshInstance2D::set_mesh(const Ref<Mesh> &p_mesh) {
if (mesh == p_mesh) {
return;
}
if (mesh.is_valid()) {
mesh->disconnect_changed(callable_mp((CanvasItem *)this, &CanvasItem::queue_redraw));
}
mesh = p_mesh;
if (mesh.is_valid()) {
mesh->connect_changed(callable_mp((CanvasItem *)this, &CanvasItem::queue_redraw));
}
queue_redraw();
}

View File

@ -312,6 +312,8 @@ void ImmediateMesh::surface_end() {
uses_uv2s = false;
surface_active = false;
emit_changed();
}
void ImmediateMesh::clear_surfaces() {