|
@@ -1,12 +1,15 @@
|
|
|
-# `spine-c`
|
|
|
+# spine-c
|
|
|
|
|
|
-The `spine-c` runtime provides basic functionality to load and manipulate [Spine](http://esotericsoftware.com) skeletal animation data using ANSI C. It does not perform rendering but can can be extended to enable Spine animations for any C-based language, such as C++ or Objective-C.
|
|
|
+The spine-c runtime provides basic functionality to load and manipulate [Spine](http://esotericsoftware.com) skeletal animation data using ANSI C. It does not perform rendering but can can be extended to enable Spine animations for any C-based language, such as C++ or Objective-C.
|
|
|
|
|
|
## Setup
|
|
|
|
|
|
-Project files are provided for Visual C++ Express 2010.
|
|
|
+1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip).
|
|
|
+1. Project files are provided for Visual C++ Express 2010. You will need to create a new project and import the source for other IDEs.
|
|
|
|
|
|
-If `SPINE_SHORT_NAMES` is defined, the `sp` prefix for all structs and functions is optional.
|
|
|
+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.
|
|
|
|
|
|
## Examples
|
|
|
|
|
@@ -14,19 +17,23 @@ If `SPINE_SHORT_NAMES` is defined, the `sp` prefix for all structs and functions
|
|
|
|
|
|
## Extension
|
|
|
|
|
|
-Extending `spine-c` requires implementing three methods:
|
|
|
+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.
|
|
|
|
|
|
-- **`_spAtlasPage_createTexture`** Loads a texture and stores it in the `void* rendererObject` field 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`.
|
|
|
+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](http://esotericsoftware.com/spine-using-runtimes/#attachmentloader) if not using `AtlasAttachmentLoader` or to provider different renderer specific data.
|
|
|
|
|
|
-This allows the `spine-c` API to be used to load Spine animation data. Rendering is done by iterating the slots of a skeleton and rendering the attachment for each slot. [`spine-sfml`](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml/src/spine/spine-sfml.cpp#L39) serves as a simple example of extending `spine-c`.
|
|
|
+[spine-sfml](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml/src/spine/spine-sfml.cpp#L39) 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](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-c/include/spine/extension.h#L2). This mechanism allows you to provide your own implementations for [spAttachmentLoader](http://esotericsoftware.com/spine-using-runtimes/#attachmentloader), `spAttachment` and `spTimeline`, if necessary.
|
|
|
+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](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-c/include/spine/extension.h#L2). This mechanism allows you to provide your own implementations for `spAttachmentLoader`, `spAttachment` and `spTimeline`, if necessary.
|
|
|
|
|
|
-## Runtimes Extending `spine-c`
|
|
|
+## Runtimes Extending spine-c
|
|
|
|
|
|
-- [`spine-cocos2d-iphone`](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone)
|
|
|
-- [`spine-cocos2dx`](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx)
|
|
|
-- [`spine-sfml`](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml)
|
|
|
-- [`spine-torque2d`](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-torque2d)
|
|
|
+- [spine-cocos2d-iphone](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone)
|
|
|
+- [spine-cocos2dx](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx)
|
|
|
+- [spine-sfml](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml)
|
|
|
+- [spine-torque2d](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-torque2d)
|