瀏覽代碼

Refactoring: RegionAttachment vertices, texture->rendererObject...

- Vertices are no longer stored on RegionAttachment. The vertices are temporary state, not part of RegionAttachment's persistent state like UVs and offset.
- AtlasPage and RegionAttachment "texture" field is renamed to "rendererObject". This is a better name as it may not be a texture.
- AtlasAttachmentLoader uses the AtlasRegion as the rendererObject. This enables a renderer to use region information if needed. The page rendererObject is still available.
- Better "enum" look up for AS3.
- Unity4 example doesn't use a compressed material.
NathanSweet 12 年之前
父節點
當前提交
80fdba02a1
共有 27 個文件被更改,包括 80 次插入136 次删除
  1. 1 1
      spine-as3/spine-as3/src/spine/SkeletonJson.as
  2. 3 3
      spine-as3/spine-as3/src/spine/atlas/Atlas.as
  3. 0 20
      spine-as3/spine-as3/src/spine/atlas/Format.as
  4. 0 20
      spine-as3/spine-as3/src/spine/atlas/TextureFilter.as
  5. 0 12
      spine-as3/spine-as3/src/spine/atlas/TextureWrap.as
  6. 0 10
      spine-as3/spine-as3/src/spine/attachments/AttachmentType.as
  7. 3 2
      spine-as3/spine-as3/src/spine/attachments/RegionAttachment.as
  8. 1 1
      spine-c/example/main.c
  9. 1 1
      spine-c/include/spine/Atlas.h
  10. 2 3
      spine-c/include/spine/RegionAttachment.h
  11. 2 2
      spine-c/src/spine/AtlasAttachmentLoader.c
  12. 9 9
      spine-c/src/spine/RegionAttachment.c
  13. 1 1
      spine-cocos2d-iphone/src/spine/CCSkeleton.m
  14. 2 2
      spine-cocos2d-iphone/src/spine/spine-cocos2d-iphone.m
  15. 1 1
      spine-cocos2dx/src/spine/CCSkeleton.cpp
  16. 12 11
      spine-cocos2dx/src/spine/spine-cocos2dx.cpp
  17. 2 2
      spine-csharp/src/Atlas.cs
  18. 1 1
      spine-csharp/src/Attachments/AtlasAttachmentLoader.cs
  19. 2 5
      spine-csharp/src/Attachments/RegionAttachment.cs
  20. 13 12
      spine-sfml/src/spine/spine-sfml.cpp
  21. 2 2
      spine-starling/spine-starling-example/src/Game.as
  22. 7 4
      spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as
  23. 7 6
      spine-unity/Assets/Plugins/Spine/SkeletonComponent.cs
  24. 二進制
      spine-unity/Assets/examples/Unity 4/spineboy/spineboy.unity
  25. 3 1
      spine-unity/Assets/examples/data/spineboy.png.meta
  26. 4 3
      spine-xna/src/SkeletonRenderer.cs
  27. 1 1
      spine-xna/src/XnaTextureLoader.cs

+ 1 - 1
spine-as3/spine-as3/src/spine/SkeletonJson.as

@@ -117,7 +117,7 @@ public class SkeletonJson {
 	private function readAttachment (skin:Skin, name:String, map:Object) : Attachment {
 		name = map["name"] || name;
 
-		var type:AttachmentType = AttachmentType.valueOf(map["type"] || "region");
+		var type:AttachmentType = AttachmentType[map["type"] || "region"];
 		var attachment:Attachment = attachmentLoader.newAttachment(skin, type, name);
 
 		if (attachment is RegionAttachment) {

+ 3 - 3
spine-as3/spine-as3/src/spine/atlas/Atlas.as

@@ -38,11 +38,11 @@ public class Atlas {
 				page = new AtlasPage();
 				page.name = line;
 
-				page.format = Format.fromString(reader.readValue());
+				page.format = Format[reader.readValue()];
 
 				reader.readTuple(tuple);
-				page.minFilter = TextureFilter.fromString(tuple[0]);
-				page.magFilter = TextureFilter.fromString(tuple[1]);
+				page.minFilter = TextureFilter[tuple[0]];
+				page.magFilter = TextureFilter[tuple[1]];
 
 				var direction:String = reader.readValue();
 				page.uWrap = TextureWrap.clampToEdge;

+ 0 - 20
spine-as3/spine-as3/src/spine/atlas/Format.as

@@ -16,26 +16,6 @@ public class Format {
 		this.ordinal = ordinal;
 		this.name = name;
 	}
-
-	static public function fromString (name:String) : Format {
-		switch (name.toLowerCase()) {
-		case "alpha":
-			return alpha;
-		case "intensity":
-			return intensity;
-		case "luminanceAlpha":
-			return luminanceAlpha;
-		case "rgb565":
-			return rgb565;
-		case "rgba4444":
-			return rgba4444;
-		case "rgb888":
-			return rgb888;
-		case "rgba8888":
-			return rgba8888;
-		}
-		throw new ArgumentError("Unknown format: " + name);
-	}
 }
 
 }

+ 0 - 20
spine-as3/spine-as3/src/spine/atlas/TextureFilter.as

@@ -16,26 +16,6 @@ public class TextureFilter {
 		this.ordinal = ordinal;
 		this.name = name;
 	}
-
-	static public function fromString (name:String) : TextureFilter {
-		switch (name.toLowerCase()) {
-		case "nearest":
-			return nearest;
-		case "linear":
-			return linear;
-		case "mipMap":
-			return mipMap;
-		case "mipMapNearestNearest":
-			return mipMapNearestNearest;
-		case "mipMapLinearNearest":
-			return mipMapLinearNearest;
-		case "mipMapNearestLinear":
-			return mipMapNearestLinear;
-		case "mipMapLinearLinear":
-			return mipMapLinearLinear;
-		}
-		throw new ArgumentError("Unknown texture filter: " + name);
-	}
 }
 
 }

+ 0 - 12
spine-as3/spine-as3/src/spine/atlas/TextureWrap.as

@@ -12,18 +12,6 @@ public class TextureWrap {
 		this.ordinal = ordinal;
 		this.name = name;
 	}
-
-	static public function fromString (name:String) : TextureWrap {
-		switch (name.toLowerCase()) {
-		case "mirroredRepeat":
-			return mirroredRepeat;
-		case "clampToEdge":
-			return clampToEdge;
-		case "repeat":
-			return repeat;
-		}
-		throw new ArgumentError("Unknown texture wrap: " + name);
-	}
 }
 
 }

+ 0 - 10
spine-as3/spine-as3/src/spine/attachments/AttachmentType.as

@@ -11,16 +11,6 @@ public class AttachmentType {
 		this.ordinal = ordinal;
 		this.name = name;
 	}
-
-	static public function valueOf (name:String) : AttachmentType {
-		switch (name) {
-		case "region":
-			return region;
-		case "regionSequence":
-			return regionSequence;
-		}
-		return null;
-	}
 }
 
 }

+ 3 - 2
spine-as3/spine-as3/src/spine/attachments/RegionAttachment.as

@@ -27,12 +27,13 @@ public dynamic class RegionAttachment extends Attachment {
 	public var regionOriginalWidth:Number; // Unrotated, unstripped size.
 	public var regionOriginalHeight:Number;
 
-	public var vertices:Vector.<Number> = new Vector.<Number>();
 	public var offset:Vector.<Number> = new Vector.<Number>();
 	public var uvs:Vector.<Number> = new Vector.<Number>();
 
 	public function RegionAttachment (name:String) {
 		super(name);
+		offset.length = 8;
+		uvs.length = 8;
 	}
 
 	public function setUVs (u:Number, v:Number, u2:Number, v2:Number, rotate:Boolean) : void {
@@ -85,7 +86,7 @@ public dynamic class RegionAttachment extends Attachment {
 		offset[Y4] = localYCos + localX2Sin;
 	}
 
-	public function updateVertices (bone:Bone) : void {
+	public function updateVertices (bone:Bone, vertices:Vector.<Number>) : void {
 		var x:Number = bone.worldX;
 		var y:Number = bone.worldY;
 		var m00:Number = bone.m00;

+ 1 - 1
spine-c/example/main.c

@@ -8,7 +8,7 @@
 /**/
 
 void _AtlasPage_createTexture (AtlasPage* self, const char* path) {
-	self->texture = 0;
+	self->rendererObject = 0;
 	self->width = 123;
 	self->height = 456;
 }

+ 1 - 1
spine-c/include/spine/Atlas.h

@@ -56,7 +56,7 @@ struct AtlasPage {
 	AtlasFilter minFilter, magFilter;
 	AtlasWrap uWrap, vWrap;
 
-	void* texture;
+	void* rendererObject;
 	int width, height;
 
 	AtlasPage* next;

+ 2 - 3
spine-c/include/spine/RegionAttachment.h

@@ -44,20 +44,19 @@ struct RegionAttachment {
 	Attachment super;
 	float x, y, scaleX, scaleY, rotation, width, height;
 
-	void* texture;
+	void* rendererObject;
 	int regionOffsetX, regionOffsetY; /* Pixels stripped from the bottom left, unrotated. */
 	int regionWidth, regionHeight; /* Unrotated, stripped pixel size. */
 	int regionOriginalWidth, regionOriginalHeight; /* Unrotated, unstripped pixel size. */
 
 	float offset[8];
-	float vertices[8];
 	float uvs[8];
 };
 
 RegionAttachment* RegionAttachment_create (const char* name);
 void RegionAttachment_setUVs (RegionAttachment* self, float u, float v, float u2, float v2, int/*bool*/rotate);
 void RegionAttachment_updateOffset (RegionAttachment* self);
-void RegionAttachment_updateVertices (RegionAttachment* self, Slot* slot);
+void RegionAttachment_computeVertices (RegionAttachment* self, Slot* slot, float* vertices);
 
 #ifdef __cplusplus
 }

+ 2 - 2
spine-c/src/spine/AtlasAttachmentLoader.c

@@ -41,7 +41,7 @@ Attachment* _AtlasAttachmentLoader_newAttachment (AttachmentLoader* loader, Skin
 			return 0;
 		}
 		attachment = RegionAttachment_create(name);
-		attachment->texture = region->page->texture;
+		attachment->rendererObject = region;
 		RegionAttachment_setUVs(attachment, region->u, region->v, region->u2, region->v2, region->rotate);
 		attachment->regionOffsetX = region->offsetX;
 		attachment->regionOffsetY = region->offsetY;
@@ -66,4 +66,4 @@ AtlasAttachmentLoader* AtlasAttachmentLoader_create (Atlas* atlas) {
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 9 - 9
spine-c/src/spine/RegionAttachment.c

@@ -94,17 +94,17 @@ void RegionAttachment_updateOffset (RegionAttachment* self) {
 	self->offset[VERTEX_Y4] = localYCos + localX2Sin;
 }
 
-void RegionAttachment_updateVertices (RegionAttachment* self, Slot* slot) {
+void RegionAttachment_computeVertices (RegionAttachment* self, Slot* slot, float* vertices) {
 	float* offset = self->offset;
 	Bone* bone = slot->bone;
-	self->vertices[VERTEX_X1] = offset[VERTEX_X1] * bone->m00 + offset[VERTEX_Y1] * bone->m01 + bone->worldX;
-	self->vertices[VERTEX_Y1] = offset[VERTEX_X1] * bone->m10 + offset[VERTEX_Y1] * bone->m11 + bone->worldY;
-	self->vertices[VERTEX_X2] = offset[VERTEX_X2] * bone->m00 + offset[VERTEX_Y2] * bone->m01 + bone->worldX;
-	self->vertices[VERTEX_Y2] = offset[VERTEX_X2] * bone->m10 + offset[VERTEX_Y2] * bone->m11 + bone->worldY;
-	self->vertices[VERTEX_X3] = offset[VERTEX_X3] * bone->m00 + offset[VERTEX_Y3] * bone->m01 + bone->worldX;
-	self->vertices[VERTEX_Y3] = offset[VERTEX_X3] * bone->m10 + offset[VERTEX_Y3] * bone->m11 + bone->worldY;
-	self->vertices[VERTEX_X4] = offset[VERTEX_X4] * bone->m00 + offset[VERTEX_Y4] * bone->m01 + bone->worldX;
-	self->vertices[VERTEX_Y4] = offset[VERTEX_X4] * bone->m10 + offset[VERTEX_Y4] * bone->m11 + bone->worldY;
+	vertices[VERTEX_X1] = offset[VERTEX_X1] * bone->m00 + offset[VERTEX_Y1] * bone->m01 + bone->worldX;
+	vertices[VERTEX_Y1] = offset[VERTEX_X1] * bone->m10 + offset[VERTEX_Y1] * bone->m11 + bone->worldY;
+	vertices[VERTEX_X2] = offset[VERTEX_X2] * bone->m00 + offset[VERTEX_Y2] * bone->m01 + bone->worldX;
+	vertices[VERTEX_Y2] = offset[VERTEX_X2] * bone->m10 + offset[VERTEX_Y2] * bone->m11 + bone->worldY;
+	vertices[VERTEX_X3] = offset[VERTEX_X3] * bone->m00 + offset[VERTEX_Y3] * bone->m01 + bone->worldX;
+	vertices[VERTEX_Y3] = offset[VERTEX_X3] * bone->m10 + offset[VERTEX_Y3] * bone->m11 + bone->worldY;
+	vertices[VERTEX_X4] = offset[VERTEX_X4] * bone->m00 + offset[VERTEX_Y4] * bone->m01 + bone->worldX;
+	vertices[VERTEX_Y4] = offset[VERTEX_X4] * bone->m10 + offset[VERTEX_Y4] * bone->m11 + bone->worldY;
 }
 
 #ifdef __cplusplus

+ 1 - 1
spine-cocos2d-iphone/src/spine/CCSkeleton.m

@@ -143,7 +143,7 @@
 		Slot* slot = _skeleton->slots[i];
 		if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
 		RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
-		CCTextureAtlas* regionTextureAtlas = (CCTextureAtlas*)attachment->texture;
+		CCTextureAtlas* regionTextureAtlas = (CCTextureAtlas*)attachment->rendererObject;
 		if (regionTextureAtlas != textureAtlas) {
 			if (textureAtlas) {
 				[textureAtlas drawQuads];

+ 2 - 2
spine-cocos2d-iphone/src/spine/spine-cocos2d-iphone.m

@@ -34,14 +34,14 @@ void _AtlasPage_createTexture (AtlasPage* self, const char* path) {
 	CCTexture2D* texture = [[CCTextureCache sharedTextureCache] addImage:@(path)];
 	CCTextureAtlas* textureAtlas = [[CCTextureAtlas alloc] initWithTexture:texture capacity:4];
 	[textureAtlas retain];
-	self->texture = textureAtlas;
+	self->rendererObject = textureAtlas;
 	CGSize size = texture.contentSizeInPixels;
 	self->width = size.width;
 	self->height = size.height;
 }
 
 void _AtlasPage_disposeTexture (AtlasPage* self) {
-	[(CCTextureAtlas*)self->texture release];
+	[(CCTextureAtlas*)self->rendererObject release];
 }
 
 char* _Util_readFile (const char* path, int* length) {

+ 1 - 1
spine-cocos2dx/src/spine/CCSkeleton.cpp

@@ -135,7 +135,7 @@ void CCSkeleton::draw () {
 		Slot* slot = skeleton->slots[i];
 		if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
 		RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
-		CCTextureAtlas* regionTextureAtlas = (CCTextureAtlas*)attachment->texture;
+		CCTextureAtlas* regionTextureAtlas = (CCTextureAtlas*)((AtlasRegion*)attachment->rendererObject)->page->rendererObject;
 		if (regionTextureAtlas != textureAtlas) {
 			if (textureAtlas) {
 				textureAtlas->drawQuads();

+ 12 - 11
spine-cocos2dx/src/spine/spine-cocos2dx.cpp

@@ -34,13 +34,13 @@ void _AtlasPage_createTexture (AtlasPage* self, const char* path) {
 	CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(path);
 	CCTextureAtlas* textureAtlas = CCTextureAtlas::createWithTexture(texture, 4);
 	textureAtlas->retain();
-	self->texture = textureAtlas;
+	self->rendererObject = textureAtlas;
 	self->width = texture->getPixelsWide();
 	self->height = texture->getPixelsHigh();
 }
 
 void _AtlasPage_disposeTexture (AtlasPage* self) {
-	((CCTextureAtlas*)self->texture)->release();
+	((CCTextureAtlas*)self->rendererObject)->release();
 }
 
 char* _Util_readFile (const char* path, int* length) {
@@ -54,7 +54,8 @@ char* _Util_readFile (const char* path, int* length) {
 /**/
 
 void RegionAttachment_updateQuad (RegionAttachment* self, Slot* slot, ccV3F_C4B_T2F_Quad* quad) {
-	RegionAttachment_updateVertices(self, slot);
+	float vertices[8];
+	RegionAttachment_computeVertices(self, slot, vertices);
 
 	GLubyte r = slot->skeleton->r * slot->r * 255;
 	GLubyte g = slot->skeleton->g * slot->g * 255;
@@ -77,14 +78,14 @@ void RegionAttachment_updateQuad (RegionAttachment* self, Slot* slot, ccV3F_C4B_
 	quad->br.colors.b = b;
 	quad->br.colors.a = a;
 
-	quad->bl.vertices.x = self->vertices[VERTEX_X1];
-	quad->bl.vertices.y = self->vertices[VERTEX_Y1];
-	quad->tl.vertices.x = self->vertices[VERTEX_X2];
-	quad->tl.vertices.y = self->vertices[VERTEX_Y2];
-	quad->tr.vertices.x = self->vertices[VERTEX_X3];
-	quad->tr.vertices.y = self->vertices[VERTEX_Y3];
-	quad->br.vertices.x = self->vertices[VERTEX_X4];
-	quad->br.vertices.y = self->vertices[VERTEX_Y4];
+	quad->bl.vertices.x = vertices[VERTEX_X1];
+	quad->bl.vertices.y = vertices[VERTEX_Y1];
+	quad->tl.vertices.x = vertices[VERTEX_X2];
+	quad->tl.vertices.y = vertices[VERTEX_Y2];
+	quad->tr.vertices.x = vertices[VERTEX_X3];
+	quad->tr.vertices.y = vertices[VERTEX_Y3];
+	quad->br.vertices.x = vertices[VERTEX_X4];
+	quad->br.vertices.y = vertices[VERTEX_Y4];
 
 	quad->bl.texCoords.u = self->uvs[VERTEX_X1];
 	quad->bl.texCoords.v = self->uvs[VERTEX_Y1];

+ 2 - 2
spine-csharp/src/Atlas.cs

@@ -173,7 +173,7 @@ namespace Spine {
 
 		public void Dispose () {
 			for (int i = 0, n = pages.Count; i < n; i++)
-				textureLoader.Unload(pages[i].texture);
+				textureLoader.Unload(pages[i].rendererObject);
 		}
 	}
 
@@ -210,7 +210,7 @@ namespace Spine {
 		public TextureFilter magFilter;
 		public TextureWrap uWrap;
 		public TextureWrap vWrap;
-		public Object texture;
+		public Object rendererObject;
 		public int width, height;
 	}
 

+ 1 - 1
spine-csharp/src/Attachments/AtlasAttachmentLoader.cs

@@ -40,7 +40,7 @@ namespace Spine {
 				AtlasRegion region = atlas.FindRegion(name);
 				if (region == null) throw new Exception("Region not found in atlas: " + name + " (" + type + ")");
 				RegionAttachment attachment = new RegionAttachment(name);
-				attachment.Texture = region.page.texture;
+				attachment.RendererObject = region.page.rendererObject;
 				attachment.SetUVs(region.u, region.v, region.u2, region.v2, region.rotate);
 				attachment.RegionOffsetX = region.offsetX;
 				attachment.RegionOffsetY = region.offsetY;

+ 2 - 5
spine-csharp/src/Attachments/RegionAttachment.cs

@@ -45,7 +45,7 @@ namespace Spine {
 		public float Width { get; set; }
 		public float Height { get; set; }
 
-		public Object Texture { get; set; }
+		public Object RendererObject { get; set; }
 		public float RegionOffsetX { get; set; }
 		public float RegionOffsetY { get; set; } // Pixels stripped from the bottom left, unrotated.
 		public float RegionWidth { get; set; }
@@ -54,13 +54,11 @@ namespace Spine {
 		public float RegionOriginalHeight { get; set; } // Unrotated, unstripped size.
 
 		public float[] Offset { get; private set; }
-		public float[] Vertices { get; private set; }
 		public float[] UVs { get; private set; }
 
 		public RegionAttachment (string name)
 			: base(name) {
 			Offset = new float[8];
-			Vertices = new float[8];
 			UVs = new float[8];
 			ScaleX = 1;
 			ScaleY = 1;
@@ -124,14 +122,13 @@ namespace Spine {
 			offset[Y4] = localYCos + localX2Sin;
 		}
 
-		public void UpdateVertices (Bone bone) {
+		public void ComputeVertices (Bone bone, float[] vertices) {
 			float x = bone.WorldX;
 			float y = bone.WorldY;
 			float m00 = bone.M00;
 			float m01 = bone.M01;
 			float m10 = bone.M10;
 			float m11 = bone.M11;
-			float[] vertices = Vertices;
 			float[] offset = Offset;
 			vertices[X1] = offset[X1] * m00 + offset[Y1] * m01 + x;
 			vertices[Y1] = offset[X1] * m10 + offset[Y1] * m11 + y;

+ 13 - 12
spine-sfml/src/spine/spine-sfml.cpp

@@ -38,14 +38,14 @@ namespace spine {
 void _AtlasPage_createTexture (AtlasPage* self, const char* path) {
 	Texture* texture = new Texture();
 	if (!texture->loadFromFile(path)) return;
-	self->texture = texture;
+	self->rendererObject = texture;
 	Vector2u size = texture->getSize();
 	self->width = size.x;
 	self->height = size.y;
 }
 
 void _AtlasPage_disposeTexture (AtlasPage* self) {
-	delete (Texture*)self->texture;
+	delete (Texture*)self->rendererObject;
 }
 
 char* _Util_readFile (const char* path, int* length) {
@@ -78,12 +78,13 @@ void SkeletonDrawable::update (float deltaTime) {
 
 void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const {
 	vertexArray->clear();
+	float vertexPositions[8];
 	for (int i = 0; i < skeleton->slotCount; ++i) {
 		Slot* slot = skeleton->slots[i];
 		Attachment* attachment = slot->attachment;
 		if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
 		RegionAttachment* regionAttachment = (RegionAttachment*)attachment;
-		RegionAttachment_updateVertices(regionAttachment, slot);
+		RegionAttachment_computeVertices(regionAttachment, slot, vertexPositions);
 
 		Uint8 r = skeleton->r * slot->r * 255;
 		Uint8 g = skeleton->g * slot->g * 255;
@@ -108,17 +109,17 @@ void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const {
 		vertices[3].color.b = b;
 		vertices[3].color.a = a;
 
-		vertices[0].position.x = regionAttachment->vertices[VERTEX_X1];
-		vertices[0].position.y = regionAttachment->vertices[VERTEX_Y1];
-		vertices[1].position.x = regionAttachment->vertices[VERTEX_X2];
-		vertices[1].position.y = regionAttachment->vertices[VERTEX_Y2];
-		vertices[2].position.x = regionAttachment->vertices[VERTEX_X3];
-		vertices[2].position.y = regionAttachment->vertices[VERTEX_Y3];
-		vertices[3].position.x = regionAttachment->vertices[VERTEX_X4];
-		vertices[3].position.y = regionAttachment->vertices[VERTEX_Y4];
+		vertices[0].position.x = vertexPositions[VERTEX_X1];
+		vertices[0].position.y = vertexPositions[VERTEX_Y1];
+		vertices[1].position.x = vertexPositions[VERTEX_X2];
+		vertices[1].position.y = vertexPositions[VERTEX_Y2];
+		vertices[2].position.x = vertexPositions[VERTEX_X3];
+		vertices[2].position.y = vertexPositions[VERTEX_Y3];
+		vertices[3].position.x = vertexPositions[VERTEX_X4];
+		vertices[3].position.y = vertexPositions[VERTEX_Y4];
 
 		// SMFL doesn't handle batching for us, so we'll just force a single texture per skeleton.
-		states.texture = (Texture*)regionAttachment->texture;
+		states.texture = (Texture*)((AtlasRegion*)regionAttachment->rendererObject)->page->rendererObject;
 
 		Vector2u size = states.texture->getSize();
 		vertices[0].texCoords.x = regionAttachment->uvs[VERTEX_X1] * size.x;

+ 2 - 2
spine-starling/spine-starling-example/src/Game.as

@@ -43,9 +43,9 @@ public class Game extends Sprite {
 		skeleton.setAnimationStateData(stateData);
 		skeleton.x = 320;
 		skeleton.y = 420;
-		/*skeleton.setAnimation("walk", true);
+		skeleton.setAnimation("walk", true);
 		skeleton.addAnimation("jump", false, 3);
-		skeleton.addAnimation("walk", true);*/
+		skeleton.addAnimation("walk", true);
 
 		addChild(skeleton);
 		Starling.juggler.add(skeleton);

+ 7 - 4
spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as

@@ -19,12 +19,15 @@ public class SkeletonSprite extends DisplayObject implements IAnimatable {
 	static private var tempMatrix:Matrix = new Matrix();
 
 	private var _skeleton:Skeleton;
+	private var vertices:Vector.<Number> = new Vector.<Number>();
 
 	public function SkeletonSprite (skeletonData:SkeletonData) {
 		Bone.yDown = true;
 
 		_skeleton = new Skeleton(skeletonData);
 		_skeleton.updateWorldTransform();
+		
+		vertices.length = 8;
 	}
 
 	public function advanceTime (delta:Number) : void {
@@ -37,8 +40,8 @@ public class SkeletonSprite extends DisplayObject implements IAnimatable {
 			var slot:Slot = drawOrder[i];
 			var regionAttachment:RegionAttachment = slot.attachment as RegionAttachment;
 			if (regionAttachment != null) {
-				regionAttachment.updateVertices(slot.bone);
-				var vertices:Vector.<Number> = regionAttachment.vertices;
+				var vertices:Vector.<Number> = this.vertices;
+				regionAttachment.updateVertices(slot.bone, vertices);
 				var r:Number = skeleton.r * slot.r;
 				var g:Number = skeleton.g * slot.g;
 				var b:Number = skeleton.b * slot.b;
@@ -95,8 +98,8 @@ public class SkeletonSprite extends DisplayObject implements IAnimatable {
 			if (!regionAttachment)
 				continue;
 
-			regionAttachment.updateVertices(slot.bone);
-			var vertices:Vector.<Number> = regionAttachment.vertices;
+			var vertices:Vector.<Number> = this.vertices;
+			regionAttachment.updateVertices(slot.bone, vertices);
 
 			value = vertices[0];
 			if (value < minX)

+ 7 - 6
spine-unity/Assets/Plugins/Spine/SkeletonComponent.cs

@@ -43,6 +43,7 @@ public class SkeletonComponent : MonoBehaviour {
 	private Vector2[] uvs;
 	private int[] triangles;
 	private int quadCount;
+	private float[] vertexPositions = new float[8];
 
 	public void Clear () {
 		GetComponent<MeshFilter>().mesh = null;
@@ -125,6 +126,7 @@ public class SkeletonComponent : MonoBehaviour {
 		}
 
 		// Setup mesh.
+		float[] vertexPositions = this.vertexPositions;
 		int quadIndex = 0;
 		Color color = new Color();
 		for (int i = 0, n = drawOrder.Count; i < n; i++) {
@@ -133,13 +135,12 @@ public class SkeletonComponent : MonoBehaviour {
 			if (attachment is RegionAttachment) {
 				RegionAttachment regionAttachment = (RegionAttachment)attachment;
 				
-				regionAttachment.UpdateVertices(slot.Bone);
-				float[] regionVertices = regionAttachment.Vertices;
+				regionAttachment.ComputeVertices(slot.Bone, vertexPositions);
 				int vertexIndex = quadIndex * 4;
-				vertices[vertexIndex] = new Vector3(regionVertices[RegionAttachment.X1], regionVertices[RegionAttachment.Y1], 0);
-				vertices[vertexIndex + 1] = new Vector3(regionVertices[RegionAttachment.X4], regionVertices[RegionAttachment.Y4], 0);
-				vertices[vertexIndex + 2] = new Vector3(regionVertices[RegionAttachment.X2], regionVertices[RegionAttachment.Y2], 0);
-				vertices[vertexIndex + 3] = new Vector3(regionVertices[RegionAttachment.X3], regionVertices[RegionAttachment.Y3], 0);
+				vertices[vertexIndex] = new Vector3(vertexPositions[RegionAttachment.X1], vertexPositions[RegionAttachment.Y1], 0);
+				vertices[vertexIndex + 1] = new Vector3(vertexPositions[RegionAttachment.X4], vertexPositions[RegionAttachment.Y4], 0);
+				vertices[vertexIndex + 2] = new Vector3(vertexPositions[RegionAttachment.X2], vertexPositions[RegionAttachment.Y2], 0);
+				vertices[vertexIndex + 3] = new Vector3(vertexPositions[RegionAttachment.X3], vertexPositions[RegionAttachment.Y3], 0);
 				
 				color.a = skeleton.A * slot.A;
 				color.r = skeleton.R * slot.R * color.a;

二進制
spine-unity/Assets/examples/Unity 4/spineboy/spineboy.unity


+ 3 - 1
spine-unity/Assets/examples/data/spineboy.png.meta

@@ -19,7 +19,8 @@ TextureImporter:
   isReadable: 0
   grayScaleToAlpha: 0
   generateCubemap: 0
-  textureFormat: -1
+  seamlessCubemap: 0
+  textureFormat: -3
   maxTextureSize: 1024
   textureSettings:
     filterMode: -1
@@ -31,3 +32,4 @@ TextureImporter:
   compressionQuality: 50
   textureType: -1
   buildTargetSettings: []
+  userData: 

+ 4 - 3
spine-xna/src/SkeletonRenderer.cs

@@ -35,6 +35,7 @@ namespace Spine {
 		BasicEffect effect;
 		RasterizerState rasterizerState;
 		public BlendState BlendState { get; set; }
+		float[] vertices = new float[8];
 
 		public SkeletonRenderer (GraphicsDevice device) {
 			this.device = device;
@@ -76,7 +77,7 @@ namespace Spine {
 				RegionAttachment regionAttachment = slot.Attachment as RegionAttachment;
 				if (regionAttachment != null) {
 					SpriteBatchItem item = batcher.CreateBatchItem();
-					item.Texture = (Texture2D)regionAttachment.Texture;
+					item.Texture = (Texture2D)regionAttachment.RendererObject;
 
 					byte r = (byte)(skeleton.R * slot.R * 255);
 					byte g = (byte)(skeleton.G * slot.G * 255);
@@ -99,8 +100,8 @@ namespace Spine {
 					item.vertexTR.Color.B = b;
 					item.vertexTR.Color.A = a;
 
-					regionAttachment.UpdateVertices(slot.Bone);
-					float[] vertices = regionAttachment.Vertices;
+					float[] vertices = this.vertices;
+					regionAttachment.ComputeVertices(slot.Bone, vertices);
 					item.vertexTL.Position.X = vertices[RegionAttachment.X1];
 					item.vertexTL.Position.Y = vertices[RegionAttachment.Y1];
 					item.vertexTL.Position.Z = 0;

+ 1 - 1
spine-xna/src/XnaTextureLoader.cs

@@ -38,7 +38,7 @@ namespace Spine {
 
 		public void Load (AtlasPage page, String path) {
 			Texture2D texture = Util.LoadTexture(device, path);
-			page.texture = texture;
+			page.rendererObject = texture;
 			page.width = texture.Width;
 			page.height = texture.Height;
 		}