Fix RenderingServer::mesh_surface_get_lods()
#107985
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This function was incorrectly using the surface number to index into the LOD indices vector. This resulted in just returning the same index over and over again. In theory if you had a mesh with more surfaces than one of its LOD vectors it could read pass the end of the LOD index array.
The SoftBody3D code creates a new ArrayMesh by duplicating the input mesh, and uses
mesh_surface_get_lods()
to duplicate the LODs. The broken behavior here results in SoftBody3D creating broken meshes that render nothing due to each LOD just using a single vertex. This commit fixes SoftBody3D to now work correctly with meshes with LODs.Fixes #107984.
bugsquad edit: Fixes #98915