Sfoglia il codice sorgente

Fix animation compression going the wrong way

When compressing animation key frame indices the truncation breaks the animation near the border of pages.

We use banker's rounding (FE_TONEAREST) as implemented by fast_ftoi to get the nearest integer frame.
K. S. Ernest (iFire) Lee 11 mesi fa
parent
commit
dd9525be04
1 ha cambiato i file con 3 aggiunte e 3 eliminazioni
  1. 3 3
      scene/resources/animation.cpp

+ 3 - 3
scene/resources/animation.cpp

@@ -4804,9 +4804,9 @@ void Animation::compress(uint32_t p_page_size, uint32_t p_fps, float p_split_tol
 					continue; // This track is exhausted (all keys were added already), don't consider.
 				}
 			}
-
-			uint32_t key_frame = double(track_get_key_time(uncomp_track, time_tracks[i].key_index)) / frame_len;
-
+			double key_time = track_get_key_time(uncomp_track, time_tracks[i].key_index);
+			double result = key_time / frame_len;
+			uint32_t key_frame = Math::fast_ftoi(result);
 			if (time_tracks[i].needs_start_frame && key_frame > base_page_frame) {
 				start_frame = true;
 				best_frame = base_page_frame;