From 68da7f72dea216d8cdb299bc1cabe713b10f1845 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Wed, 4 Jun 2014 02:42:16 +0200 Subject: [PATCH] Scale UVs since Starling mangles textures to POT size. --- .../attachments/AtlasAttachmentLoader.as | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as b/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as index ec3e733bb..27162ba32 100644 --- a/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as +++ b/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as @@ -48,7 +48,9 @@ public class AtlasAttachmentLoader implements AttachmentLoader { throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); var attachment:RegionAttachment = new RegionAttachment(name); attachment.rendererObject = region; - attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + var scaleX:Number = region.page.width / nextPOT(region.page.width); + var scaleY:Number = region.page.height / nextPOT(region.page.height); + attachment.setUVs(region.u * scaleX, region.v * scaleY, region.u2 * scaleX, region.v2 * scaleY, region.rotate); attachment.regionOffsetX = region.offsetX; attachment.regionOffsetY = region.offsetY; attachment.regionWidth = region.width; @@ -64,10 +66,12 @@ public class AtlasAttachmentLoader implements AttachmentLoader { throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); var attachment:MeshAttachment = new MeshAttachment(name); attachment.rendererObject = region; - attachment.regionU = region.u; - attachment.regionV = region.v; - attachment.regionU2 = region.u2; - attachment.regionV2 = region.v2; + var scaleX:Number = region.page.width / nextPOT(region.page.width); + var scaleY:Number = region.page.height / nextPOT(region.page.height); + attachment.regionU = region.u * scaleX; + attachment.regionV = region.v * scaleY; + attachment.regionU2 = region.u2 * scaleX; + attachment.regionV2 = region.v2 * scaleY; attachment.regionRotate = region.rotate; attachment.regionOffsetX = region.offsetX; attachment.regionOffsetY = region.offsetY; @@ -84,10 +88,12 @@ public class AtlasAttachmentLoader implements AttachmentLoader { throw new Error("Region not found in atlas: " + path + " (skinned mesh attachment: " + name + ")"); var attachment:SkinnedMeshAttachment = new SkinnedMeshAttachment(name); attachment.rendererObject = region; - attachment.regionU = region.u; - attachment.regionV = region.v; - attachment.regionU2 = region.u2; - attachment.regionV2 = region.v2; + var scaleX:Number = region.page.width / nextPOT(region.page.width); + var scaleY:Number = region.page.height / nextPOT(region.page.height); + attachment.regionU = region.u * scaleX; + attachment.regionV = region.v * scaleY; + attachment.regionU2 = region.u2 * scaleX; + attachment.regionV2 = region.v2 * scaleY; attachment.regionRotate = region.rotate; attachment.regionOffsetX = region.offsetX; attachment.regionOffsetY = region.offsetY; @@ -101,6 +107,16 @@ public class AtlasAttachmentLoader implements AttachmentLoader { public function newBoundingBoxAttachment (skin:Skin, name:String) : BoundingBoxAttachment { return new BoundingBoxAttachment(name); } + + static public function nextPOT (value:int) : int { + value--; + value |= value >> 1; + value |= value >> 2; + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; + return value + 1; + } } }