Browse Source

[unity] Fixed `GetRepackedSkin` partially ignoring `textureFormat` argument. Closes #1593. Also added optional `TextureFormat` array parameter for additional texture layers.

Harald Csaszar 5 years ago
parent
commit
0f341f0594

+ 15 - 7
spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs

@@ -250,7 +250,7 @@ namespace Spine.Unity.AttachmentTools {
 						regionIndexes.Add(existingIndex); // Store the region index for the eventual new attachment.
 						regionIndexes.Add(existingIndex); // Store the region index for the eventual new attachment.
 					} else {
 					} else {
 						originalRegions.Add(region);
 						originalRegions.Add(region);
-						texturesToPack.Add(region.ToTexture(mipmaps : mipmaps)); // Add the texture to the PackTextures argument
+						texturesToPack.Add(region.ToTexture(textureFormat, mipmaps)); // Add the texture to the PackTextures argument
 						existingRegions.Add(region, newRegionIndex); // Add the region to the dictionary of known regions
 						existingRegions.Add(region, newRegionIndex); // Add the region to the dictionary of known regions
 						regionIndexes.Add(newRegionIndex); // Store the region index for the eventual new attachment.
 						regionIndexes.Add(newRegionIndex); // Store the region index for the eventual new attachment.
 						newRegionIndex++;
 						newRegionIndex++;
@@ -322,11 +322,13 @@ namespace Spine.Unity.AttachmentTools {
 		public static Skin GetRepackedSkin (this Skin o, string newName, Material materialPropertySource, out Material outputMaterial, out Texture2D outputTexture,
 		public static Skin GetRepackedSkin (this Skin o, string newName, Material materialPropertySource, out Material outputMaterial, out Texture2D outputTexture,
 			int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps,
 			int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps,
 			bool useOriginalNonrenderables = true, bool clearCache = false,
 			bool useOriginalNonrenderables = true, bool clearCache = false,
-			int[] additionalTexturePropertyIDsToCopy = null, Texture2D[] additionalOutputTextures = null) {
+			int[] additionalTexturePropertyIDsToCopy = null, Texture2D[] additionalOutputTextures = null,
+			TextureFormat[] additionalTextureFormats = null) {
 
 
 			return GetRepackedSkin(o, newName, materialPropertySource.shader, out outputMaterial, out outputTexture,
 			return GetRepackedSkin(o, newName, materialPropertySource.shader, out outputMaterial, out outputTexture,
 				maxAtlasSize, padding, textureFormat, mipmaps, materialPropertySource,
 				maxAtlasSize, padding, textureFormat, mipmaps, materialPropertySource,
-				clearCache, useOriginalNonrenderables, additionalTexturePropertyIDsToCopy, additionalOutputTextures);
+				clearCache, useOriginalNonrenderables, additionalTexturePropertyIDsToCopy, additionalOutputTextures,
+				additionalTextureFormats);
 		}
 		}
 
 
 		/// <summary>
 		/// <summary>
@@ -337,7 +339,8 @@ namespace Spine.Unity.AttachmentTools {
 		public static Skin GetRepackedSkin (this Skin o, string newName, Shader shader, out Material outputMaterial, out Texture2D outputTexture,
 		public static Skin GetRepackedSkin (this Skin o, string newName, Shader shader, out Material outputMaterial, out Texture2D outputTexture,
 			int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps,
 			int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps,
 			Material materialPropertySource = null, bool clearCache = false, bool useOriginalNonrenderables = true,
 			Material materialPropertySource = null, bool clearCache = false, bool useOriginalNonrenderables = true,
-			int[] additionalTexturePropertyIDsToCopy = null, Texture2D[] additionalOutputTextures = null) {
+			int[] additionalTexturePropertyIDsToCopy = null, Texture2D[] additionalOutputTextures = null,
+			TextureFormat[] additionalTextureFormats = null) {
 
 
 			outputTexture = null;
 			outputTexture = null;
 
 
@@ -378,8 +381,10 @@ namespace Spine.Unity.AttachmentTools {
 						originalRegions.Add(region);
 						originalRegions.Add(region);
 						for (int i = 0; i < numTextureParamsToRepack; ++i) {
 						for (int i = 0; i < numTextureParamsToRepack; ++i) {
 							Texture2D regionTexture = (i == 0 ?
 							Texture2D regionTexture = (i == 0 ?
-								region.ToTexture(mipmaps : mipmaps) :
-								region.ToTexture(mipmaps : mipmaps, texturePropertyId : additionalTexturePropertyIDsToCopy[i - 1]));
+								region.ToTexture(textureFormat, mipmaps) :
+								region.ToTexture((additionalTextureFormats != null && i - 1 < additionalTextureFormats.Length) ?
+									additionalTextureFormats[i - 1] : textureFormat,
+									mipmaps, additionalTexturePropertyIDsToCopy[i - 1]));
 							texturesToPackAtParam[i].Add(regionTexture); // Add the texture to the PackTextures argument
 							texturesToPackAtParam[i].Add(regionTexture); // Add the texture to the PackTextures argument
 						}
 						}
 						existingRegions.Add(region, newRegionIndex); // Add the region to the dictionary of known regions
 						existingRegions.Add(region, newRegionIndex); // Add the region to the dictionary of known regions
@@ -405,7 +410,10 @@ namespace Spine.Unity.AttachmentTools {
 			Rect[] rects = null;
 			Rect[] rects = null;
 			for (int i = 0; i < numTextureParamsToRepack; ++i) {
 			for (int i = 0; i < numTextureParamsToRepack; ++i) {
 				// Fill a new texture with the collected attachment textures.
 				// Fill a new texture with the collected attachment textures.
-				var newTexture = new Texture2D(maxAtlasSize, maxAtlasSize, textureFormat, mipmaps);
+				var newTexture = new Texture2D(maxAtlasSize, maxAtlasSize,
+									(additionalTextureFormats != null && i - 1 < additionalTextureFormats.Length) ?
+									additionalTextureFormats[i - 1] : textureFormat,
+									mipmaps);
 				newTexture.mipMapBias = AtlasUtilities.DefaultMipmapBias;
 				newTexture.mipMapBias = AtlasUtilities.DefaultMipmapBias;
 				var texturesToPack = texturesToPackAtParam[i];
 				var texturesToPack = texturesToPackAtParam[i];
 				if (texturesToPack.Count > 0) {
 				if (texturesToPack.Count > 0) {