summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-05-21 11:22:59 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-05-21 11:22:59 +0200
commitd7a5f9d67ced062ac466a61e30929b1e9cfa67c9 (patch)
tree130f6e3417b68c74932cf8db263fb9dd3be6ca73
parent0f044855f5d67cacaa9ddf718cb85f6e1e119d5e (diff)
parente54b928974b6426727fe4735c629f3c1082830af (diff)
downloadredot-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.cpp11
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++;
}
}