Scale UVs since Starling mangles textures to POT size.

This commit is contained in:
NathanSweet 2014-06-04 02:42:16 +02:00
parent e648aa66ae
commit 68da7f72de

View File

@ -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;
}
}
}