diff options
| author | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2024-09-11 13:15:01 -0700 |
|---|---|---|
| committer | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2024-09-11 13:18:58 -0700 |
| commit | 7d7b43bca2465e8562d2e48dfa108fdcbdb533ca (patch) | |
| tree | b2d956ff295b4ae9c6e7db74c813688a7598e3f9 | |
| parent | 14a7e0abb313915fc5e4f36b34f9169b1d45774c (diff) | |
| download | redot-engine-7d7b43bca2465e8562d2e48dfa108fdcbdb533ca.tar.gz | |
Fix a crash in ImporterMesh::create_shadow_mesh for non-triangle surfaces
optimize_vertex_cache_func assumes the input is a triangle mesh; when an
imported mesh contains points/lines/triangle strips, this code should be
disabled.
| -rw-r--r-- | scene/resources/3d/importer_mesh.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/scene/resources/3d/importer_mesh.cpp b/scene/resources/3d/importer_mesh.cpp index 4f4c485db3..f872461cbe 100644 --- a/scene/resources/3d/importer_mesh.cpp +++ b/scene/resources/3d/importer_mesh.cpp @@ -849,7 +849,7 @@ void ImporterMesh::create_shadow_mesh() { index_wptr[j] = vertex_remap[index]; } - if (SurfaceTool::optimize_vertex_cache_func) { + if (SurfaceTool::optimize_vertex_cache_func && surfaces[i].primitive == Mesh::PRIMITIVE_TRIANGLES) { SurfaceTool::optimize_vertex_cache_func((unsigned int *)index_wptr, (const unsigned int *)index_wptr, index_count, new_vertices.size()); } @@ -871,7 +871,7 @@ void ImporterMesh::create_shadow_mesh() { index_wptr[k] = vertex_remap[index]; } - if (SurfaceTool::optimize_vertex_cache_func) { + if (SurfaceTool::optimize_vertex_cache_func && surfaces[i].primitive == Mesh::PRIMITIVE_TRIANGLES) { SurfaceTool::optimize_vertex_cache_func((unsigned int *)index_wptr, (const unsigned int *)index_wptr, index_count, new_vertices.size()); } |
