2023-07-31 13:29:16 +02:00

141 lines
4.1 KiB
C

/******************************************************************************
* Spine Runtimes License Agreement
* Last updated July 28, 2023. Replaces all prior versions.
*
* Copyright (c) 2013-2023, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software or
* otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
* SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef SPINE_ATLAS_H_
#define SPINE_ATLAS_H_
#include <spine/dll.h>
#include <spine/Array.h>
#include "TextureRegion.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct spAtlas spAtlas;
typedef enum {
SP_ATLAS_UNKNOWN_FORMAT,
SP_ATLAS_ALPHA,
SP_ATLAS_INTENSITY,
SP_ATLAS_LUMINANCE_ALPHA,
SP_ATLAS_RGB565,
SP_ATLAS_RGBA4444,
SP_ATLAS_RGB888,
SP_ATLAS_RGBA8888
} spAtlasFormat;
typedef enum {
SP_ATLAS_UNKNOWN_FILTER,
SP_ATLAS_NEAREST,
SP_ATLAS_LINEAR,
SP_ATLAS_MIPMAP,
SP_ATLAS_MIPMAP_NEAREST_NEAREST,
SP_ATLAS_MIPMAP_LINEAR_NEAREST,
SP_ATLAS_MIPMAP_NEAREST_LINEAR,
SP_ATLAS_MIPMAP_LINEAR_LINEAR
} spAtlasFilter;
typedef enum {
SP_ATLAS_MIRROREDREPEAT,
SP_ATLAS_CLAMPTOEDGE,
SP_ATLAS_REPEAT
} spAtlasWrap;
typedef struct spAtlasPage spAtlasPage;
struct spAtlasPage {
const spAtlas *atlas;
const char *name;
spAtlasFormat format;
spAtlasFilter minFilter, magFilter;
spAtlasWrap uWrap, vWrap;
void *rendererObject;
int width, height;
int /*boolean*/ pma;
spAtlasPage *next;
};
SP_API spAtlasPage *spAtlasPage_create(spAtlas *atlas, const char *name);
SP_API void spAtlasPage_dispose(spAtlasPage *self);
/**/
typedef struct spKeyValue {
char *name;
float values[5];
} spKeyValue;
_SP_ARRAY_DECLARE_TYPE(spKeyValueArray, spKeyValue)
/**/
typedef struct spAtlasRegion spAtlasRegion;
struct spAtlasRegion {
spTextureRegion super;
const char *name;
int x, y;
int index;
int *splits;
int *pads;
spKeyValueArray *keyValues;
spAtlasPage *page;
spAtlasRegion *next;
};
SP_API spAtlasRegion *spAtlasRegion_create();
SP_API void spAtlasRegion_dispose(spAtlasRegion *self);
/**/
struct spAtlas {
spAtlasPage *pages;
spAtlasRegion *regions;
void *rendererObject;
};
/* Image files referenced in the atlas file will be prefixed with dir. */
SP_API spAtlas *spAtlas_create(const char *data, int length, const char *dir, void *rendererObject);
/* Image files referenced in the atlas file will be prefixed with the directory containing the atlas file. */
SP_API spAtlas *spAtlas_createFromFile(const char *path, void *rendererObject);
SP_API void spAtlas_dispose(spAtlas *atlas);
/* Returns 0 if the region was not found. */
SP_API spAtlasRegion *spAtlas_findRegion(const spAtlas *self, const char *name);
#ifdef __cplusplus
}
#endif
#endif /* SPINE_ATLAS_H_ */