From 580a91d8eea340c43edd6729484ead409d6c55e3 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Mon, 26 Feb 2024 16:46:05 +0100 Subject: [PATCH] [unity] Minor code adjustments following PR. (see #2461). --- .../GenericOnDemandTextureLoaderInspector.cs | 25 +++-- .../Editor/TextureImporterUtility.cs | 93 +++++++++++++++++++ ...cs.meta => TextureImporterUtility.cs.meta} | 0 .../Editor/TextureImporterUtils.cs | 61 ------------ .../Runtime/GenericOnDemandTextureLoader.cs | 8 +- .../package.json | 2 +- 6 files changed, 108 insertions(+), 81 deletions(-) create mode 100644 spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtility.cs rename spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/{TextureImporterUtils.cs.meta => TextureImporterUtility.cs.meta} (100%) delete mode 100644 spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs index 6c135c349..49bc1fe47 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/GenericOnDemandTextureLoaderInspector.cs @@ -186,7 +186,8 @@ namespace Spine.Unity.Editor { } string originalTextureName = System.IO.Path.GetFileNameWithoutExtension(originalPath); - string texturePath = string.Format("{0}/{1}.png", dataPath, loader.GetPlaceholderTextureName(originalTextureName)); + string texturePath = string.Format("{0}/{1}.png", + dataPath, loader.GetPlaceholderTextureName(originalTextureName)); Texture placeholderTexture = AssetDatabase.LoadAssetAtPath(texturePath); if (placeholderTexture == null) { AssetDatabase.CopyAsset(originalPath, texturePath); @@ -203,33 +204,30 @@ namespace Spine.Unity.Editor { importer.SaveAndReimport(); if (resizePhysically) { - bool hasOverridesToEnable = - TextureImporterUtils.TryDisableOverrides(importer, out List disabledPlatforms); + bool hasOverrides = TextureImporterUtility.DisableOverrides(importer, out List disabledPlatforms); Texture2D texture2D = AssetDatabase.LoadAssetAtPath(texturePath); if (texture2D) { Color[] maxTextureSizePixels = texture2D.GetPixels(); - // SetPixels works only for non-compressed textures using certain formats. - var nonCompressedTexture = + // SetPixels supports only uncompressed textures using certain formats. + Texture2D uncompressedTexture = new Texture2D(texture2D.width, texture2D.height, TextureFormat.RGBA32, false); + uncompressedTexture.SetPixels(maxTextureSizePixels); - nonCompressedTexture.SetPixels(maxTextureSizePixels); - - var bytes = nonCompressedTexture.EncodeToPNG(); + byte[] bytes = uncompressedTexture.EncodeToPNG(); string targetPath = Application.dataPath + "/../" + texturePath; System.IO.File.WriteAllBytes(targetPath, bytes); importer.isReadable = false; importer.SaveAndReimport(); - EditorUtility.SetDirty(nonCompressedTexture); + EditorUtility.SetDirty(uncompressedTexture); AssetDatabase.SaveAssets(); } - if (hasOverridesToEnable) { - TextureImporterUtils.EnableOverrides(importer, disabledPlatforms); - } + if (hasOverrides) + TextureImporterUtility.EnableOverrides(importer, disabledPlatforms); } placeholderTexture = AssetDatabase.LoadAssetAtPath(texturePath); } @@ -390,9 +388,8 @@ namespace Spine.Unity.Editor { public void DeletePlaceholderTextures (GenericOnDemandTextureLoader loader) { foreach (var materialMap in loader.placeholderMap) { var textures = materialMap.textures; - if (textures == null || textures.Length == 0) { + if (textures == null || textures.Length == 0) continue; - } Texture texture = textures[0].placeholderTexture; if (texture) diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtility.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtility.cs new file mode 100644 index 000000000..45777a87e --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtility.cs @@ -0,0 +1,93 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2024, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software or + * otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE + * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; + +namespace Spine.Unity.Editor { + + /// + /// Utility class for working with TextureImporter. + /// + public static class TextureImporterUtility { + + private static IEnumerable GetAllPlatforms() { + BuildTarget[] buildTargets = (BuildTarget[])Enum.GetValues(typeof(BuildTarget)); + var platformNames = buildTargets.Select(x => x.ToString()).ToList(); + + // Add additional platforms that are not part of BuildTarget enum. + platformNames.Add("Server"); + + return platformNames.ToArray(); + } + + /// Disables Texture Import settings platform overrides for all platforms. + /// The TextureImporter wrapper of the target texture asset. + /// A list populated with platforms where overrides were previously enabled and + /// which have now been disabled. + /// True if an override has been disabled for any platform, false otherwise. + public static bool DisableOverrides(TextureImporter importer, out List disabledPlatforms) { + IEnumerable platforms = GetAllPlatforms(); + disabledPlatforms = new List(); + + foreach (string platform in platforms) { + var platformSettings = importer.GetPlatformTextureSettings(platform); + if (!platformSettings.overridden) + continue; + + disabledPlatforms.Add(platform); + platformSettings.overridden = false; + importer.SetPlatformTextureSettings(platformSettings); + } + + if (disabledPlatforms.Count <= 0) + return false; + + importer.SaveAndReimport(); + return true; + } + + /// Enables Texture Import settings platform overrides for given platforms. + /// The TextureImporter wrapper of the target texture asset. + /// A list of platforms for which overrides shall be enabled. + public static void EnableOverrides(TextureImporter importer, List platformsToEnable) { + if (platformsToEnable.Count == 0) + return; + + foreach (string platform in platformsToEnable) { + TextureImporterPlatformSettings platformSettings = importer.GetPlatformTextureSettings(platform); + platformSettings.overridden = true; + importer.SetPlatformTextureSettings(platformSettings); + } + importer.SaveAndReimport(); + } + } +} diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs.meta b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtility.cs.meta similarity index 100% rename from spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs.meta rename to spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtility.cs.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs deleted file mode 100644 index 4c6b78f3e..000000000 --- a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Editor/TextureImporterUtils.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEditor; - -namespace Spine.Unity.Editor { - - /// - /// Utility class for working with TextureImporter. - /// - public static class TextureImporterUtils { - - private static IEnumerable GetAllPossiblePlatforms() { - BuildTarget[] buildTargets = (BuildTarget[])Enum.GetValues(typeof(BuildTarget)); - var platformNames = buildTargets.Select(x => x.ToString()).ToList(); - - // Add additional platforms that are not part of BuildTarget enum. - platformNames.Add("Server"); - - return platformNames.ToArray(); - } - - public static bool TryDisableOverrides(TextureImporter importer, out List disabledPlatforms) { - IEnumerable platforms = GetAllPossiblePlatforms(); - disabledPlatforms = new List(); - - foreach (string platform in platforms) { - var platformSettings = importer.GetPlatformTextureSettings(platform); - - if (!platformSettings.overridden) { - continue; - } - - disabledPlatforms.Add(platform); - platformSettings.overridden = false; - importer.SetPlatformTextureSettings(platformSettings); - } - - if (disabledPlatforms.Count <= 0) { - return false; - } - - importer.SaveAndReimport(); - return true; - } - - public static void EnableOverrides(TextureImporter importer, List platformsToEnable) { - if (platformsToEnable.Count == 0) { - return; - } - - foreach (string platform in platformsToEnable) { - var platformSettings = importer.GetPlatformTextureSettings(platform); - platformSettings.overridden = true; - importer.SetPlatformTextureSettings(platformSettings); - } - - importer.SaveAndReimport(); - } - } -} \ No newline at end of file diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs index 17913689f..c929b7dfd 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/Runtime/GenericOnDemandTextureLoader.cs @@ -195,10 +195,9 @@ namespace Spine.Unity { for (int i = 0, count = loadedDataAtMaterial.Length; i < count; ++i) { loadedDataAtMaterial[i].lastFrameRequested = -1; - var textures = placeholderMap[i].textures; - if (textures == null) { + PlaceholderTextureMapping[] textures = placeholderMap[i].textures; + if (textures == null) continue; - } int texturesAtMaterial = textures.Length; loadedDataAtMaterial[i].textureRequests = new TextureRequest[texturesAtMaterial]; @@ -270,9 +269,8 @@ namespace Spine.Unity { System.Action onTextureLoaded) { PlaceholderTextureMapping[] placeholderTextures = placeholderMap[materialIndex].textures; - if (placeholderTextures == null || textureIndex >= placeholderTextures.Length) { + if (placeholderTextures == null || textureIndex >= placeholderTextures.Length) return null; - } TargetReference targetReference = placeholderTextures[textureIndex].targetTextureReference; loadedDataAtMaterial[materialIndex].lastFrameRequested = Time.frameCount; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json index 61c36ba02..2268cefcc 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.on-demand-loading/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.on-demand-loading", "displayName": "Spine On-Demand Loading Extensions [Experimental]", "description": "This experimental plugin provides a generic basic implementation of on-demand texture loading for the spine-unity runtime. You might want to use the available com.esotericsoftware.spine.addressables package which depends on this package.\nPlease be sure to test this package first and create backups of your project before using.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime (via the spine-unity unitypackage), version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.0-preview.3", + "version": "4.1.0-preview.4", "unity": "2018.3", "author": { "name": "Esoteric Software",