aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2022-10-15 13:34:57 +0200
committerAndre Weissflog <floooh@gmail.com>2022-10-15 13:34:57 +0200
commitbbc24eae752a3a8c3472fbe5927df20bc2fc4156 (patch)
tree109294809487b2969702df7923e42809961ceff3
parent8548e3900afa897f825022d697596a97c5716d05 (diff)
sokol_spine.h: imbed sspine_image_info into sspine_atlas_page_info
-rw-r--r--tests/functional/sokol_spine_test.c50
-rw-r--r--util/sokol_spine.h40
2 files changed, 39 insertions, 51 deletions
diff --git a/tests/functional/sokol_spine_test.c b/tests/functional/sokol_spine_test.c
index cb296557..3a28ce04 100644
--- a/tests/functional/sokol_spine_test.c
+++ b/tests/functional/sokol_spine_test.c
@@ -169,8 +169,8 @@ UTEST(sokol_spine, atlas_image_info) {
T(sspine_num_images(atlas) == 1);
const sspine_image_info img_info = sspine_get_image_info(atlas, 0);
T(img_info.valid);
- T(img_info.image.id != SG_INVALID_ID);
- T(sg_query_image_state(img_info.image) == SG_RESOURCESTATE_ALLOC);
+ T(img_info.sgimage.id != SG_INVALID_ID);
+ T(sg_query_image_state(img_info.sgimage) == SG_RESOURCESTATE_ALLOC);
T(strcmp(img_info.filename, "spineboy.png") == 0);
T(img_info.min_filter == SG_FILTER_LINEAR);
T(img_info.mag_filter == SG_FILTER_LINEAR);
@@ -199,8 +199,8 @@ UTEST(sokol_spine, atlas_with_overrides) {
T(sspine_num_images(atlas) == 1);
const sspine_image_info img_info = sspine_get_image_info(atlas, 0);
T(img_info.valid);
- T(img_info.image.id != SG_INVALID_ID);
- T(sg_query_image_state(img_info.image) == SG_RESOURCESTATE_ALLOC);
+ T(img_info.sgimage.id != SG_INVALID_ID);
+ T(sg_query_image_state(img_info.sgimage) == SG_RESOURCESTATE_ALLOC);
T(strcmp(img_info.filename, "spineboy.png") == 0);
T(img_info.min_filter == SG_FILTER_NEAREST_MIPMAP_NEAREST);
T(img_info.mag_filter == SG_FILTER_NEAREST);
@@ -585,16 +585,17 @@ UTEST(sokol_spine, get_atlas_page_info) {
const sspine_atlas_page_info info = sspine_get_atlas_page_info(atlas, 0);
T(info.valid);
T(info.atlas.id == atlas.id);
- T(info.image.id != SG_INVALID_ID);
- T(sg_query_image_state(info.image) == SG_RESOURCESTATE_ALLOC);
- T(strcmp(info.name, "spineboy.png") == 0);
- T(info.min_filter == SG_FILTER_LINEAR);
- T(info.mag_filter == SG_FILTER_LINEAR);
- T(info.wrap_u == SG_WRAP_MIRRORED_REPEAT);
- T(info.wrap_v == SG_WRAP_MIRRORED_REPEAT);
- T(info.width == 1024);
- T(info.height == 256);
- T(info.premul_alpha == false);
+ T(info.image.valid);
+ T(info.image.sgimage.id != SG_INVALID_ID);
+ T(sg_query_image_state(info.image.sgimage) == SG_RESOURCESTATE_ALLOC);
+ T(strcmp(info.image.filename, "spineboy.png") == 0);
+ T(info.image.min_filter == SG_FILTER_LINEAR);
+ T(info.image.mag_filter == SG_FILTER_LINEAR);
+ T(info.image.wrap_u == SG_WRAP_MIRRORED_REPEAT);
+ T(info.image.wrap_v == SG_WRAP_MIRRORED_REPEAT);
+ T(info.image.width == 1024);
+ T(info.image.height == 256);
+ T(info.image.premul_alpha == false);
T(info.overrides.min_filter == _SG_FILTER_DEFAULT);
T(info.overrides.mag_filter == _SG_FILTER_DEFAULT);
T(info.overrides.wrap_u == _SG_WRAP_DEFAULT);
@@ -643,16 +644,17 @@ UTEST(sokol_spine, atlas_get_atlas_page_info_with_overrides) {
const sspine_atlas_page_info info = sspine_get_atlas_page_info(atlas, 0);
T(info.valid);
T(info.atlas.id == atlas.id);
- T(info.image.id != SG_INVALID_ID);
- T(sg_query_image_state(info.image) == SG_RESOURCESTATE_ALLOC);
- T(strcmp(info.name, "spineboy.png") == 0);
- T(info.min_filter == SG_FILTER_LINEAR);
- T(info.mag_filter == SG_FILTER_LINEAR);
- T(info.wrap_u == SG_WRAP_MIRRORED_REPEAT);
- T(info.wrap_v == SG_WRAP_MIRRORED_REPEAT);
- T(info.width == 1024);
- T(info.height == 256);
- T(info.premul_alpha == true); // FIXME: hmm, this is actually inconsistent
+ T(info.image.valid);
+ T(info.image.sgimage.id != SG_INVALID_ID);
+ T(sg_query_image_state(info.image.sgimage) == SG_RESOURCESTATE_ALLOC);
+ T(strcmp(info.image.filename, "spineboy.png") == 0);
+ T(info.image.min_filter == SG_FILTER_LINEAR);
+ T(info.image.mag_filter == SG_FILTER_LINEAR);
+ T(info.image.wrap_u == SG_WRAP_MIRRORED_REPEAT);
+ T(info.image.wrap_v == SG_WRAP_MIRRORED_REPEAT);
+ T(info.image.width == 1024);
+ T(info.image.height == 256);
+ T(info.image.premul_alpha == true); // FIXME: hmm, this is actually inconsistent
T(info.overrides.min_filter == SG_FILTER_NEAREST_MIPMAP_NEAREST);
T(info.overrides.mag_filter == SG_FILTER_NEAREST);
T(info.overrides.wrap_u == SG_WRAP_REPEAT);
diff --git a/util/sokol_spine.h b/util/sokol_spine.h
index eaf7c1d8..2aa952f7 100644
--- a/util/sokol_spine.h
+++ b/util/sokol_spine.h
@@ -205,7 +205,7 @@ typedef struct sspine_context_info {
typedef struct sspine_image_info {
bool valid;
- sg_image image;
+ sg_image sgimage;
const char* filename;
sg_filter min_filter;
sg_filter mag_filter;
@@ -233,15 +233,7 @@ typedef struct sspine_atlas_desc {
typedef struct sspine_atlas_page_info {
bool valid;
sspine_atlas atlas;
- sg_image image;
- const char* name;
- sg_filter min_filter;
- sg_filter mag_filter;
- sg_wrap wrap_u;
- sg_wrap wrap_v;
- int width;
- int height;
- bool premul_alpha;
+ sspine_image_info image;
sspine_atlas_overrides overrides;
} sspine_atlas_page_info;
@@ -3076,32 +3068,32 @@ static sg_wrap _sspine_as_image_wrap(spAtlasWrap wrap) {
}
}
-static void _sspine_init_image_info(_sspine_atlas_t* atlas, int index, sspine_image_info* info) {
+static void _sspine_init_image_info(const _sspine_atlas_t* atlas, int index, sspine_image_info* info, bool with_overrides) {
spAtlasPage* page = _sspine_lookup_atlas_page(atlas->slot.id, index);
SOKOL_ASSERT(page);
SOKOL_ASSERT(page->name);
info->valid = true;
- info->image.id = (uint32_t)(uintptr_t)page->rendererObject;
- info->filename = page->name;
- if (atlas->overrides.min_filter != _SG_FILTER_DEFAULT) {
+ info->sgimage.id = (uint32_t)(uintptr_t)page->rendererObject;
+ info->filename = page->name ? page->name : "null";
+ if (with_overrides && (atlas->overrides.min_filter != _SG_FILTER_DEFAULT)) {
info->min_filter = atlas->overrides.min_filter;
}
else {
info->min_filter = _sspine_as_image_filter(page->minFilter);
}
- if (atlas->overrides.mag_filter != _SG_FILTER_DEFAULT) {
+ if (with_overrides && (atlas->overrides.mag_filter != _SG_FILTER_DEFAULT)) {
info->mag_filter = atlas->overrides.mag_filter;
}
else {
info->mag_filter = _sspine_as_image_filter(page->magFilter);
}
- if (atlas->overrides.wrap_u != _SG_WRAP_DEFAULT) {
+ if (with_overrides && (atlas->overrides.wrap_u != _SG_WRAP_DEFAULT)) {
info->wrap_u = atlas->overrides.wrap_u;
}
else {
info->wrap_u = _sspine_as_image_wrap(page->uWrap);
}
- if (atlas->overrides.wrap_v != _SG_WRAP_DEFAULT) {
+ if (with_overrides && (atlas->overrides.wrap_v != _SG_WRAP_DEFAULT)) {
info->wrap_v = atlas->overrides.wrap_v;
}
else {
@@ -3928,7 +3920,7 @@ SOKOL_API_IMPL sspine_image_info sspine_get_image_info(sspine_atlas atlas_id, in
sspine_image_info img_info;
_sspine_clear(&img_info, sizeof(img_info));
if (atlas && (image_index >= 0) && (image_index < atlas->num_pages)) {
- _sspine_init_image_info(atlas, image_index, &img_info);
+ _sspine_init_image_info(atlas, image_index, &img_info, true);
}
return img_info;
}
@@ -4156,15 +4148,9 @@ SOKOL_API_IMPL sspine_atlas_page_info sspine_get_atlas_page_info(sspine_atlas at
const _sspine_atlas_t* atlas = _sspine_lookup_atlas(atlas_id.id);
res.valid = true;
res.atlas = atlas_id;
- res.image.id = (uint32_t)(uintptr_t)sp_page->rendererObject;
- res.name = sp_page->name ? sp_page->name : "";
- res.min_filter = _sspine_as_image_filter(sp_page->minFilter);
- res.mag_filter = _sspine_as_image_filter(sp_page->magFilter);
- res.wrap_u = _sspine_as_image_wrap(sp_page->uWrap);
- res.wrap_v = _sspine_as_image_wrap(sp_page->vWrap);
- res.width = sp_page->width;
- res.height = sp_page->height;
- res.premul_alpha = sp_page->pma != 0;
+ // write image info without overrides
+ _sspine_init_image_info(atlas, page_index, &res.image, false);
+ // ...and provide the overrides separately
res.overrides = atlas->overrides;
}
return res;