Optimize rollback hot paths (#53)
CI / build-and-test (push) Successful in 1m16s
CI / production-build (push) Successful in 9m36s

## Summary

Fixes #20.

- Reuse fighter animation scratch and output buffers across rollback frames.
- Select air-collision hits in one pass without candidate allocations or sorting.
- Index contiguous replay input frames directly and binary-search checksums.
- Add regression tests for buffer reuse and replay lookup/validation.

Reviewed-on: #53
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #53.
This commit is contained in:
2026-09-20 12:41:13 +00:00
committed by EIREXE
parent bcf1e114ef
commit 85236c4e0f
4 changed files with 143 additions and 55 deletions
+15 -1
View File
@@ -4,8 +4,8 @@ mod asset_baking;
mod runtime;
mod visual_binding;
pub use asset_baking::{BakedAnimationAssetProcessingPlugin, BakedAnimationPlugin};
pub use crate::math::fixed_transform::FixedMat4;
pub use asset_baking::{BakedAnimationAssetProcessingPlugin, BakedAnimationPlugin};
pub use runtime::{
BakedAnimationClip, BakedFighterAnimations, FighterBoneIndexMap, FighterBoneMatrices,
update_fighter_bone_matrices,
@@ -164,6 +164,20 @@ mod tests {
);
}
#[test]
fn repeated_pose_updates_reuse_scratch_and_output_buffers() {
let mut matrices = FighterBoneMatrices::default();
let names = ["root".into(), "hand".into()];
let parents = [None, Some(0)];
let pose = [FixedMat4::IDENTITY, FixedMat4::IDENTITY];
matrices.set_pose(&names, &parents, &pose, FGi32::ONE);
let capacities = matrices.buffer_capacities();
matrices.set_pose(&names, &parents, &pose, FGi32::ONE);
assert_eq!(capacities, matrices.buffer_capacities());
}
#[test]
fn model_scale_affects_gameplay_bones_without_changing_visual_locals() {
let mut root = FixedMat4::IDENTITY;