From 7ad3ab81326b29ea8fd19652be1d726423ccd274 Mon Sep 17 00:00:00 2001 From: Masataka SUMI Date: Thu, 13 May 2021 18:36:25 +0900 Subject: [PATCH] Throw Exception if exporting non-readable Texture2D. --- .../GLTF/IO/Runtime/TextureExporter.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Assets/VRMShaders/GLTF/IO/Runtime/TextureExporter.cs b/Assets/VRMShaders/GLTF/IO/Runtime/TextureExporter.cs index a8f089f4a..0a7b49f6e 100644 --- a/Assets/VRMShaders/GLTF/IO/Runtime/TextureExporter.cs +++ b/Assets/VRMShaders/GLTF/IO/Runtime/TextureExporter.cs @@ -200,7 +200,6 @@ namespace VRMShaders /// /// 画像のバイト列を得る /// - /// /// /// public static (byte[] bytes, string mime) GetTextureBytesWithMime(Texture2D texture) @@ -213,20 +212,21 @@ namespace VRMShaders return (png, "image/png"); } } - catch (Exception ex) + catch (ArgumentException ex) { // fail to EncodeToPng // System.ArgumentException: not readable, the texture memory can not be accessed from scripts. You can make the texture readable in the Texture Import Settings. Debug.LogWarning(ex); + + // Read/Write が許可されていない Texture2D オブジェクトはこの関数に渡されるべきではない。 + // なぜなら Texture2D の色空間は、対応する glTF プロパティ指定の色空間と一致していなければならないが + // Read/Write が許可されていない場合、その条件を守って変換することができないからである。 + // したがって、この関数に渡す前に glTF プロパティ指定の色空間を加味して Copy Texture して、それを渡すべきである。 + + throw; } - { - // try copy and EncodeToPng - var copy = TextureConverter.CopyTexture(texture, TextureImportTypes.sRGB, null); - var png = copy.EncodeToPNG(); - UnityEngine.Object.DestroyImmediate(copy); - return (png, "image/png"); - } + throw new ArgumentException("Invalid Texture2D"); } } }