badlogic 48ea9b1914 [c][cpp] Get rid of regionTextureWidth/Height 6 years ago
..
.settings f869e93546 spine-c Eclipse project builds lib instead of exe, spine-sfml uses static libs. 11 years ago
spine-c 48ea9b1914 [c][cpp] Get rid of regionTextureWidth/Height 6 years ago
spine-c-unit-tests 1d3d425028 [cpp] Fixed parsing of points in skin. See #1168. 6 years ago
.cproject 477240b109 Removed unused parameter warnings. 9 years ago
.project 32a9a09831 WIP C runtime. 12 years ago
CMakeLists.txt b7ae63f743 Fixed crashes on MSVC. 7 years ago
LICENSE ef50131431 [runtimes] Updated all LICENSE files and README.mds 8 years ago
README.md d0cc44bfdb Fixed URLs in READMEs, replaced most with relative links, so URLs point to correct branch. 7 years ago

README.md

spine-c

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.

For a pure C++ API, you may consider the third party Spine runtime Chobolabs/spine-cpp.

Licensing

This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid Spine license. Please see the Spine Runtimes Software License for detailed information.

The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, Section 2 of the Spine Software License grants the right to create and distribute derivative works of the Spine Runtimes.

Spine version

spine-c works with data exported from Spine 3.6.xx.

spine-c supports all Spine features.

Setup

  1. Download the Spine Runtimes source using git or by downloading it as a zip via the download button above.
  2. 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/spine-c/src and spine-c/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/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.

Extension

Extending spine-c requires implementing three methods:

  • _spAtlasPage_createTexture Loads a texture and stores it and its size in the void* rendererObject, width and height fields of an spAtlasPage 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 using fopen.

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.

Runtimes extending spine-c