diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-21 11:22:59 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-21 11:22:59 +0200 |
commit | d7a5f9d67ced062ac466a61e30929b1e9cfa67c9 (patch) | |
tree | 130f6e3417b68c74932cf8db263fb9dd3be6ca73 | |
parent | 0f044855f5d67cacaa9ddf718cb85f6e1e119d5e (diff) | |
parent | e54b928974b6426727fe4735c629f3c1082830af (diff) | |
download | redot-engine-d7a5f9d67ced062ac466a61e30929b1e9cfa67c9.tar.gz |
Merge pull request #92164 from DarioSamo/force_update_skeleton
Replace List with LocalVector on Skeleton3D's bone transform update.
-rw-r--r-- | scene/3d/skeleton_3d.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp index 498e101b3c..a4804e928a 100644 --- a/scene/3d/skeleton_3d.cpp +++ b/scene/3d/skeleton_3d.cpp @@ -847,12 +847,13 @@ void Skeleton3D::force_update_bone_children_transforms(int p_bone_idx) { ERR_FAIL_INDEX(p_bone_idx, bone_size); Bone *bonesptr = bones.ptrw(); - List<int> bones_to_process = List<int>(); + thread_local LocalVector<int> bones_to_process; + bones_to_process.clear(); bones_to_process.push_back(p_bone_idx); - while (bones_to_process.size() > 0) { - int current_bone_idx = bones_to_process.front()->get(); - bones_to_process.erase(current_bone_idx); + uint32_t index = 0; + while (index < bones_to_process.size()) { + int current_bone_idx = bones_to_process[index]; Bone &b = bonesptr[current_bone_idx]; bool bone_enabled = b.enabled && !show_rest_only; @@ -905,6 +906,8 @@ void Skeleton3D::force_update_bone_children_transforms(int p_bone_idx) { for (int i = 0; i < child_bone_size; i++) { bones_to_process.push_back(b.child_bones[i]); } + + index++; } } |