diff options
| author | Andre Weissflog <floooh@gmail.com> | 2022-09-14 19:54:08 +0200 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2022-09-14 19:54:08 +0200 |
| commit | 4ab12e1a8232a1482dfa09fff02fed355b802e1e (patch) | |
| tree | 4de085ec3400e9f164c43ae86cd2fb0a371be4e7 | |
| parent | 0b940d9ef7cf6d440acf77b3e1fa8af7ee891095 (diff) | |
sokol_spine.h: change sspine_get_slot_info() to take skeleton handle
| -rw-r--r-- | tests/functional/sokol_spine_test.c | 38 | ||||
| -rw-r--r-- | util/sokol_spine.h | 42 |
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; } |