|
|
560ed54ce3
|
godot-0005..0008: A* open_list.find(), Skeleton3D child_bones, RestFixer bones HashSet, GLTF extensions HashSet
godot-0005 (UNDF-2026-000000584): AStar3D/AStar2D/AStarGrid2D::_solve()
open_list.find(e) in heap decrease-key branch — O(N) LocalVector scan per
node relaxation; fix adds open_index field to Point struct for O(1) lookup.
core/math/a_star.cpp:373,878 + a_star_grid_2d.cpp:572. 800x ops reduction.
godot-0006 (UNDF-2026-000000585): Skeleton3D::_update_process_order()
child_bones.has(i) Vector<int> O(C) scan inside O(B) bone rebuild loop;
fix changes child_bones to HashSet<int>. 24x at wide flat rigs.
scene/3d/skeleton_3d.cpp:235.
godot-0007 (UNDF-2026-000000586): PostImportPluginSkeletonRestFixer
bones_to_process.has() + keep_bone_rest.has() — Vector<int> O(B) scan
inside O(T) animation track loops; O(T*B) total (188x at T=2000/B=500).
Fix: HashSet<int> for both collections.
editor/import/3d/post_import_plugin_skeleton_rest_fixer.cpp:201,212,681,742.
godot-0008 (UNDF-2026-000000587): GLTFDocument::_serialize_nodes/animations()
extensions_used.has() — Vector<String> O(E) scan inside per-node and
per-animation serialization loops; O((N+A)*E) per export (11x at 3K nodes).
Fix: Vector<String> extensions_used -> HashSet<String> in gltf_state.h.
modules/gltf/gltf_document.cpp:443,5496.
Redot-engine is an identical fork: all four defects confirmed present.
8/8 unit tests PASS (GodotAStarSkeletonTest.java).
|
2026-03-27 23:13:01 -04:00 |
|