UniVRM/Assets/VRMShaders/GLTF/IO/Editor/Texture/EditorTextureUtility.cs

50 lines
1.7 KiB
C#

using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;
namespace VRMShaders
{
internal static class EditorTextureUtility
{
public static bool TryGetAsEditorTexture2DAsset(Texture texture, out Texture2D texture2D, out TextureImporter assetImporter)
{
texture2D = texture as Texture2D;
if (texture2D != null)
{
var path = AssetDatabase.GetAssetPath(texture2D);
if (!string.IsNullOrEmpty(path))
{
assetImporter = AssetImporter.GetAtPath(path) as TextureImporter;
if (assetImporter != null)
{
return true;
}
}
}
texture2D = null;
assetImporter = null;
return false;
}
public static bool TryGetOriginalTexturePixelSize(TextureImporter textureImporter, out Vector2Int size)
{
// private メソッド TextureImporter.GetWidthAndHeight を無理やり呼ぶ
var getSizeMethod = typeof(TextureImporter).GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance);
if (textureImporter != null && getSizeMethod != null)
{
var args = new object[2] { 0, 0 };
getSizeMethod.Invoke(textureImporter, args);
var originalWidth = (int)args[0];
var originalHeight = (int)args[1];
size = new Vector2Int(originalWidth, originalHeight);
return true;
}
size = default;
return false;
}
}
}