The spine-c runtime provides basic functionality to load and manipulate Spine skeletal animation data using ANSI C. It does not perform rendering but can be extended to enable Spine animations for other C-based projects, including C++ or Objective-C projects.
- Download the Spine Runtimes source using git or by downloading it as a zip.
- Open the
spine-c.sln
Visual C++ 2010 Express project file. For other IDEs, you will need to create a new project and import the source.
Alternatively, the contents of the spine-c/src
and spine-c/include
directories can be copied into your project. Be sure your header search is configured to find the contents of the spine-c/include
directory. Note that the includes use spine/Xxx.h
, so the spine
directory cannot be omitted when copying the files.
If SPINE_SHORT_NAMES
is defined, the sp
prefix for all structs and functions is optional. Only use this if the spine-c names won't cause a conflict.
Extending spine-c requires implementing three methods:
_spAtlasPage_createTexture
Loads a texture and stores it and its size in thevoid* rendererObject
,width
andheight
fields of anspAtlasPage
struct._spAtlasPage_disposeTexture
Disposes of a texture loaded with_spAtlasPage_createTexture
._spUtil_readFile
Reads a file. If this doesn't need to be customized,_readFile
is provided which reads a file usingfopen
.
With these implemented, the spine-c API can then be used to load Spine animation data. Rendering is done by enumerating the slots for a skeleton and rendering the attachment for each slot. Each attachment has a rendererObject
field that is set when the attachment is loaded.
For example, AtlasAttachmentLoader
is typically used to load attachments when using a Spine texture atlas. When AtlasAttachmentLoader
loads a RegionAttachment
, the attachment's void* rendererObject
is set to an AtlasRegion
. Rendering code can then obtain the AtlasRegion
from the attachment, get the AtlasPage
it belongs to, and get the page's void* rendererObject
. This is the renderer specific texture object set by _spAtlasPage_createTexture
. Attachment loading can be customized if not using AtlasAttachmentLoader
or to provider different renderer specific data.
spine-sfml serves as a simple example of extending spine-c.
spine-c uses an OOP style of programming where each "class" is made up of a struct and a number of functions prefixed with the struct name. More detals about how this works are available in extension.h. This mechanism allows you to provide your own implementations for spAttachmentLoader
, spAttachment
and spTimeline
, if necessary.