Optimize rollback hot paths (#53)
## 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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user