summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2024-09-11 13:15:01 -0700
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2024-09-11 13:18:58 -0700
commit7d7b43bca2465e8562d2e48dfa108fdcbdb533ca (patch)
treeb2d956ff295b4ae9c6e7db74c813688a7598e3f9
parent14a7e0abb313915fc5e4f36b34f9169b1d45774c (diff)
downloadredot-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.cpp4
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());
}