aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2022-09-14 19:54:08 +0200
committerAndre Weissflog <floooh@gmail.com>2022-09-14 19:54:08 +0200
commit4ab12e1a8232a1482dfa09fff02fed355b802e1e (patch)
tree4de085ec3400e9f164c43ae86cd2fb0a371be4e7
parent0b940d9ef7cf6d440acf77b3e1fa8af7ee891095 (diff)
sokol_spine.h: change sspine_get_slot_info() to take skeleton handle
-rw-r--r--tests/functional/sokol_spine_test.c38
-rw-r--r--util/sokol_spine.h42
2 files changed, 48 insertions, 32 deletions
diff --git a/tests/functional/sokol_spine_test.c b/tests/functional/sokol_spine_test.c
index d01d509a..cb4d48e1 100644
--- a/tests/functional/sokol_spine_test.c
+++ b/tests/functional/sokol_spine_test.c
@@ -831,10 +831,9 @@ UTEST(sokol_spine, slot_index_valid) {
UTEST(sokol_spine, get_slot_info) {
init();
- sspine_instance instance = create_instance();
- sspine_skeleton skeleton = sspine_get_instance_skeleton(instance);
+ sspine_skeleton skeleton = create_skeleton();
int slot_index = sspine_find_slot_index(skeleton, "portal-streaks1");
- const sspine_slot_info info = sspine_get_slot_info(instance, slot_index);
+ const sspine_slot_info info = sspine_get_slot_info(skeleton, slot_index);
T(info.index == 3);
T(strcmp(info.name, "portal-streaks1") == 0);
T(info.attachment_name == 0);
@@ -846,24 +845,22 @@ UTEST(sokol_spine, get_slot_info) {
shutdown();
}
-UTEST(sokol_spine, get_slot_info_destroyed_instance) {
+UTEST(sokol_spine, get_slot_info_destroyed_skeleton) {
init();
- sspine_instance instance = create_instance();
- sspine_skeleton skeleton = sspine_get_instance_skeleton(instance);
+ sspine_skeleton skeleton = create_skeleton();
int slot_index = sspine_find_slot_index(skeleton, "portal-streaks1");
- sspine_destroy_instance(instance);
- const sspine_slot_info info = sspine_get_slot_info(instance, slot_index);
+ sspine_destroy_skeleton(skeleton);
+ const sspine_slot_info info = sspine_get_slot_info(skeleton, slot_index);
T(info.name == 0);
shutdown();
}
UTEST(sokol_spine, get_slot_info_invalid_index) {
init();
- sspine_instance instance = create_instance();
- sspine_destroy_instance(instance);
- const sspine_slot_info i0 = sspine_get_slot_info(instance, -1);
+ sspine_skeleton skeleton = create_skeleton();
+ const sspine_slot_info i0 = sspine_get_slot_info(skeleton, -1);
T(i0.name == 0);
- const sspine_slot_info i1 = sspine_get_slot_info(instance, 1234);
+ const sspine_slot_info i1 = sspine_get_slot_info(skeleton, 1234);
T(i1.name == 0);
shutdown();
}
@@ -879,11 +876,11 @@ UTEST(sokol_spine, set_get_slot_color) {
T(color.g == 2.0f);
T(color.b == 3.0f);
T(color.a == 4.0f);
- const sspine_slot_info info = sspine_get_slot_info(instance, slot_index);
+ const sspine_slot_info info = sspine_get_slot_info(skeleton, slot_index);
T(info.color.r == 1.0f);
- T(info.color.g == 2.0f);
- T(info.color.b == 3.0f);
- T(info.color.a == 4.0f);
+ T(info.color.g == 1.0f);
+ T(info.color.b == 1.0f);
+ T(info.color.a == 1.0f);
shutdown();
}
@@ -940,3 +937,12 @@ UTEST(sokol_spine, get_event_info) {
T(0.0f == info.balance);
shutdown();
}
+
+UTEST(sokol_spine, get_event_info_destroyed_skeleton) {
+ init();
+ sspine_skeleton skeleton = create_skeleton();
+ sspine_destroy_skeleton(skeleton);
+ const sspine_event_info info = sspine_get_event_info(skeleton, 0);
+ T(0 == info.name);
+ shutdown();
+}
diff --git a/util/sokol_spine.h b/util/sokol_spine.h
index 1088ef22..59c7a486 100644
--- a/util/sokol_spine.h
+++ b/util/sokol_spine.h
@@ -363,7 +363,7 @@ SOKOL_SPINE_API_DECL sspine_vec2 sspine_get_bone_shear(sspine_instance instance,
SOKOL_SPINE_API_DECL int sspine_find_slot_index(sspine_skeleton skeleton, const char* name);
SOKOL_SPINE_API_DECL bool sspine_slot_index_valid(sspine_skeleton skeleton, int slot_index);
SOKOL_SPINE_API_DECL int sspine_num_slots(sspine_skeleton skeleton);
-SOKOL_SPINE_API_DECL sspine_slot_info sspine_get_slot_info(sspine_instance instance, int slot_index);
+SOKOL_SPINE_API_DECL sspine_slot_info sspine_get_slot_info(sspine_skeleton skeleton, int slot_index);
SOKOL_SPINE_API_DECL void sspine_set_slot_color(sspine_instance instance, int slot_index, sspine_color color);
SOKOL_SPINE_API_DECL sspine_color sspine_get_slot_color(sspine_instance instance, int slot_index);
@@ -2414,6 +2414,17 @@ static spBone* _sspine_lookup_bone(uint32_t instance_id, int bone_index) {
return 0;
}
+static spSlotData* _sspine_lookup_slot_data(uint32_t skeleton_id, int slot_index) {
+ _sspine_skeleton_t* skeleton = _sspine_lookup_skeleton(skeleton_id);
+ if (_sspine_skeleton_and_deps_valid(skeleton)) {
+ SOKOL_ASSERT(skeleton->sp_skel_data && skeleton->sp_skel_data->slots);
+ if ((slot_index >= 0) && (slot_index <= skeleton->sp_skel_data->slotsCount)) {
+ return skeleton->sp_skel_data->slots[slot_index];
+ }
+ }
+ return 0;
+}
+
static spSlot* _sspine_lookup_slot(uint32_t instance_id, int slot_index) {
_sspine_instance_t* instance = _sspine_lookup_instance(instance_id);
if (_sspine_instance_and_deps_valid(instance)) {
@@ -3684,24 +3695,23 @@ SOKOL_API_IMPL int sspine_num_slots(sspine_skeleton skeleton_id) {
return -1;
}
-SOKOL_API_IMPL sspine_slot_info sspine_get_slot_info(sspine_instance instance_id, int slot_index) {
+SOKOL_API_IMPL sspine_slot_info sspine_get_slot_info(sspine_skeleton skeleton_id, int slot_index) {
SOKOL_ASSERT(_SSPINE_INIT_COOKIE == _sspine.init_cookie);
sspine_slot_info res;
_sspine_clear(&res, sizeof(res));
- spSlot* sp_slot = _sspine_lookup_slot(instance_id.id, slot_index);
- if (sp_slot) {
- SOKOL_ASSERT(sp_slot->data);
- SOKOL_ASSERT(sp_slot->data->index == slot_index);
- SOKOL_ASSERT(sp_slot->data->name);
- SOKOL_ASSERT(sp_slot->data->boneData);
- res.name = sp_slot->data->name;
- res.index = sp_slot->data->index;
- res.attachment_name = sp_slot->data->attachmentName;
- res.bone_index = sp_slot->data->boneData->index;
- res.color.r = sp_slot->color.r;
- res.color.g = sp_slot->color.g;
- res.color.b = sp_slot->color.b;
- res.color.a = sp_slot->color.a;
+ spSlotData* sp_slot_data = _sspine_lookup_slot_data(skeleton_id.id, slot_index);
+ if (sp_slot_data) {
+ SOKOL_ASSERT(sp_slot_data->index == slot_index);
+ SOKOL_ASSERT(sp_slot_data->name);
+ SOKOL_ASSERT(sp_slot_data->boneData);
+ res.name = sp_slot_data->name;
+ res.index = sp_slot_data->index;
+ res.attachment_name = sp_slot_data->attachmentName;
+ res.bone_index = sp_slot_data->boneData->index;
+ res.color.r = sp_slot_data->color.r;
+ res.color.g = sp_slot_data->color.g;
+ res.color.b = sp_slot_data->color.b;
+ res.color.a = sp_slot_data->color.a;
}
return res;
}