Skip to content

Commit bb20444

Browse files
committed
Merge pull request godotengine#97744 from Nazarwadim/use_local_vector_for_skeleton
Use `LocalVector` for skeleton
2 parents cc3542e + 1ba168f commit bb20444

File tree

8 files changed

+73
-74
lines changed

8 files changed

+73
-74
lines changed

drivers/gles3/storage/mesh_storage.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2201,7 +2201,7 @@ void MeshStorage::skeleton_allocate_data(RID p_skeleton, int p_bones, bool p_2d_
22012201
glBindTexture(GL_TEXTURE_2D, 0);
22022202
GLES3::Utilities::get_singleton()->texture_allocated_data(skeleton->transforms_texture, skeleton->data.size() * sizeof(float), "Skeleton transforms texture");
22032203

2204-
memset(skeleton->data.ptrw(), 0, skeleton->data.size() * sizeof(float));
2204+
memset(skeleton->data.ptr(), 0, skeleton->data.size() * sizeof(float));
22052205

22062206
_skeleton_make_dirty(skeleton);
22072207
}
@@ -2232,7 +2232,7 @@ void MeshStorage::skeleton_bone_set_transform(RID p_skeleton, int p_bone, const
22322232
ERR_FAIL_INDEX(p_bone, skeleton->size);
22332233
ERR_FAIL_COND(skeleton->use_2d);
22342234

2235-
float *dataptr = skeleton->data.ptrw() + p_bone * 12;
2235+
float *dataptr = skeleton->data.ptr() + p_bone * 12;
22362236

22372237
dataptr[0] = p_transform.basis.rows[0][0];
22382238
dataptr[1] = p_transform.basis.rows[0][1];
@@ -2284,7 +2284,7 @@ void MeshStorage::skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, con
22842284
ERR_FAIL_INDEX(p_bone, skeleton->size);
22852285
ERR_FAIL_COND(!skeleton->use_2d);
22862286

2287-
float *dataptr = skeleton->data.ptrw() + p_bone * 8;
2287+
float *dataptr = skeleton->data.ptr() + p_bone * 8;
22882288

22892289
dataptr[0] = p_transform.columns[0][0];
22902290
dataptr[1] = p_transform.columns[1][0];

drivers/gles3/storage/mesh_storage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ struct Skeleton {
214214
bool use_2d = false;
215215
int size = 0;
216216
int height = 0;
217-
Vector<float> data;
217+
LocalVector<float> data;
218218

219219
bool dirty = false;
220220
Skeleton *dirty_list = nullptr;

scene/2d/skeleton_2d.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ void Bone2D::_notification(int p_what) {
159159

160160
case NOTIFICATION_EXIT_TREE: {
161161
if (skeleton) {
162-
for (int i = 0; i < skeleton->bones.size(); i++) {
162+
for (uint32_t i = 0; i < skeleton->bones.size(); i++) {
163163
if (skeleton->bones[i].bone == this) {
164164
skeleton->bones.remove_at(i);
165165
break;
@@ -555,17 +555,17 @@ void Skeleton2D::_update_bone_setup() {
555555

556556
bones.sort(); //sorting so that they are always in the same order/index
557557

558-
for (int i = 0; i < bones.size(); i++) {
559-
bones.write[i].rest_inverse = bones[i].bone->get_skeleton_rest().affine_inverse(); //bind pose
560-
bones.write[i].bone->skeleton_index = i;
558+
for (uint32_t i = 0; i < bones.size(); i++) {
559+
bones[i].rest_inverse = bones[i].bone->get_skeleton_rest().affine_inverse(); //bind pose
560+
bones[i].bone->skeleton_index = i;
561561
Bone2D *parent_bone = Object::cast_to<Bone2D>(bones[i].bone->get_parent());
562562
if (parent_bone) {
563-
bones.write[i].parent_index = parent_bone->skeleton_index;
563+
bones[i].parent_index = parent_bone->skeleton_index;
564564
} else {
565-
bones.write[i].parent_index = -1;
565+
bones[i].parent_index = -1;
566566
}
567567

568-
bones.write[i].local_pose_override = bones[i].bone->get_skeleton_rest();
568+
bones[i].local_pose_override = bones[i].bone->get_skeleton_rest();
569569
}
570570

571571
transform_dirty = true;
@@ -594,16 +594,16 @@ void Skeleton2D::_update_transform() {
594594

595595
transform_dirty = false;
596596

597-
for (int i = 0; i < bones.size(); i++) {
598-
ERR_CONTINUE(bones[i].parent_index >= i);
597+
for (uint32_t i = 0; i < bones.size(); i++) {
598+
ERR_CONTINUE(bones[i].parent_index >= (int)i);
599599
if (bones[i].parent_index >= 0) {
600-
bones.write[i].accum_transform = bones[bones[i].parent_index].accum_transform * bones[i].bone->get_transform();
600+
bones[i].accum_transform = bones[bones[i].parent_index].accum_transform * bones[i].bone->get_transform();
601601
} else {
602-
bones.write[i].accum_transform = bones[i].bone->get_transform();
602+
bones[i].accum_transform = bones[i].bone->get_transform();
603603
}
604604
}
605605

606-
for (int i = 0; i < bones.size(); i++) {
606+
for (uint32_t i = 0; i < bones.size(); i++) {
607607
Transform2D final_xform = bones[i].accum_transform * bones[i].rest_inverse;
608608
RS::get_singleton()->skeleton_bone_set_transform_2d(skeleton, i, final_xform);
609609
}
@@ -621,7 +621,7 @@ int Skeleton2D::get_bone_count() const {
621621

622622
Bone2D *Skeleton2D::get_bone(int p_idx) {
623623
ERR_FAIL_COND_V(!is_inside_tree(), nullptr);
624-
ERR_FAIL_INDEX_V(p_idx, bones.size(), nullptr);
624+
ERR_FAIL_INDEX_V(p_idx, (int)bones.size(), nullptr);
625625

626626
return bones[p_idx].bone;
627627
}
@@ -733,14 +733,14 @@ RID Skeleton2D::get_skeleton() const {
733733
}
734734

735735
void Skeleton2D::set_bone_local_pose_override(int p_bone_idx, Transform2D p_override, real_t p_amount, bool p_persistent) {
736-
ERR_FAIL_INDEX_MSG(p_bone_idx, bones.size(), "Bone index is out of range!");
737-
bones.write[p_bone_idx].local_pose_override = p_override;
738-
bones.write[p_bone_idx].local_pose_override_amount = p_amount;
739-
bones.write[p_bone_idx].local_pose_override_persistent = p_persistent;
736+
ERR_FAIL_INDEX_MSG(p_bone_idx, (int)bones.size(), "Bone index is out of range!");
737+
bones[p_bone_idx].local_pose_override = p_override;
738+
bones[p_bone_idx].local_pose_override_amount = p_amount;
739+
bones[p_bone_idx].local_pose_override_persistent = p_persistent;
740740
}
741741

742742
Transform2D Skeleton2D::get_bone_local_pose_override(int p_bone_idx) {
743-
ERR_FAIL_INDEX_V_MSG(p_bone_idx, bones.size(), Transform2D(), "Bone index is out of range!");
743+
ERR_FAIL_INDEX_V_MSG(p_bone_idx, (int)bones.size(), Transform2D(), "Bone index is out of range!");
744744
return bones[p_bone_idx].local_pose_override;
745745
}
746746

@@ -771,7 +771,7 @@ void Skeleton2D::execute_modifications(real_t p_delta, int p_execution_mode) {
771771
}
772772

773773
// Do not cache the transform changes caused by the modifications!
774-
for (int i = 0; i < bones.size(); i++) {
774+
for (uint32_t i = 0; i < bones.size(); i++) {
775775
bones[i].bone->copy_transform_to_cache = false;
776776
}
777777

@@ -783,7 +783,7 @@ void Skeleton2D::execute_modifications(real_t p_delta, int p_execution_mode) {
783783

784784
// Only apply the local pose override on _process. Otherwise, just calculate the local_pose_override and reset the transform.
785785
if (p_execution_mode == SkeletonModificationStack2D::EXECUTION_MODE::execution_mode_process) {
786-
for (int i = 0; i < bones.size(); i++) {
786+
for (uint32_t i = 0; i < bones.size(); i++) {
787787
if (bones[i].local_pose_override_amount > 0) {
788788
bones[i].bone->set_meta("_local_pose_override_enabled_", true);
789789

@@ -793,7 +793,7 @@ void Skeleton2D::execute_modifications(real_t p_delta, int p_execution_mode) {
793793
bones[i].bone->propagate_call("force_update_transform");
794794

795795
if (bones[i].local_pose_override_persistent) {
796-
bones.write[i].local_pose_override_amount = 0.0;
796+
bones[i].local_pose_override_amount = 0.0;
797797
}
798798
} else {
799799
// TODO: see if there is a way to undo the override without having to resort to setting every bone's transform.
@@ -804,7 +804,7 @@ void Skeleton2D::execute_modifications(real_t p_delta, int p_execution_mode) {
804804
}
805805

806806
// Cache any future transform changes
807-
for (int i = 0; i < bones.size(); i++) {
807+
for (uint32_t i = 0; i < bones.size(); i++) {
808808
bones[i].bone->copy_transform_to_cache = true;
809809
}
810810

scene/2d/skeleton_2d.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class Skeleton2D : public Node2D {
123123
bool local_pose_override_persistent = false;
124124
};
125125

126-
Vector<Bone> bones;
126+
LocalVector<Bone> bones;
127127

128128
bool bone_setup_dirty = true;
129129
void _make_bone_setup_dirty();

0 commit comments

Comments
 (0)