From 02b444a9885e8b8fe32ded55f3a33483d137f486 Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Sun, 29 Jun 2025 12:14:54 +0100 Subject: [PATCH] FTI - Fix `MultiMesh` init and stable behaviour --- servers/rendering/storage/mesh_storage.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/servers/rendering/storage/mesh_storage.cpp b/servers/rendering/storage/mesh_storage.cpp index a495eac8b4..9367f762c3 100644 --- a/servers/rendering/storage/mesh_storage.cpp +++ b/servers/rendering/storage/mesh_storage.cpp @@ -258,7 +258,20 @@ void RendererMeshStorage::multimesh_set_buffer_interpolated(RID p_multimesh, con void RendererMeshStorage::multimesh_set_physics_interpolated(RID p_multimesh, bool p_interpolated) { MultiMeshInterpolator *mmi = _multimesh_get_interpolator(p_multimesh); if (mmi) { + if (p_interpolated == mmi->interpolated) { + return; + } + mmi->interpolated = p_interpolated; + + // If we are turning on physics interpolation, as a convenience, + // we want to get the current buffer data from the backend, + // and reset all the instances. + if (p_interpolated) { + mmi->_data_curr = _multimesh_get_buffer(p_multimesh); + mmi->_data_prev = mmi->_data_curr; + mmi->_data_interpolated = mmi->_data_curr; + } } } @@ -337,6 +350,9 @@ void RendererMeshStorage::update_interpolation_tick(bool p_process) { // ... and that both prev and current are the same, just in case of any interpolations. mmi->_data_prev = mmi->_data_curr; + + // Update the actual stable buffer to the backend. + _multimesh_set_buffer(rid, mmi->_data_interpolated); } if (!mmi) {