mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-20 14:07:25 -05:00
77 lines
2.2 KiB
C#
77 lines
2.2 KiB
C#
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using VRMShaders;
|
|
using ColorSpace = VRMShaders.ColorSpace;
|
|
|
|
namespace UniGLTF.MeshUtility
|
|
{
|
|
public static class EditorChangeTextureType
|
|
{
|
|
[MenuItem("Assets/SaveAsPng", true)]
|
|
[MenuItem("Assets/SaveAsPngLinear", true)]
|
|
static bool IsTextureAsset()
|
|
{
|
|
return Selection.activeObject is Texture2D;
|
|
}
|
|
|
|
[MenuItem("Assets/SaveAsPng")]
|
|
static void SaveAsPng()
|
|
{
|
|
SaveAsPng(true);
|
|
}
|
|
|
|
[MenuItem("Assets/SaveAsPngLinear")]
|
|
static void SaveAsPngLinear()
|
|
{
|
|
SaveAsPng(false);
|
|
}
|
|
|
|
static void SaveAsPng(bool sRGB)
|
|
{
|
|
var texture = Selection.activeObject as Texture2D;
|
|
var path = SaveDialog(AssetsPath.FromAsset(texture));
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var (tex, mime) = new EditorTextureSerializer().ExportBytesWithMime(texture, sRGB ? ColorSpace.sRGB : ColorSpace.Linear);
|
|
|
|
File.WriteAllBytes(path, tex);
|
|
Debug.Log($"save: {path}");
|
|
|
|
var assetsPath = AssetsPath.FromFullpath(path);
|
|
|
|
EditorApplication.delayCall += () =>
|
|
{
|
|
assetsPath.ImportAsset();
|
|
var importer = assetsPath.GetImporter<TextureImporter>();
|
|
if (importer == null)
|
|
{
|
|
Debug.LogWarningFormat("fail to get TextureImporter: {0}", assetsPath);
|
|
}
|
|
importer.sRGBTexture = sRGB;
|
|
importer.SaveAndReimport();
|
|
Debug.Log($"sRGB: {sRGB}");
|
|
};
|
|
}
|
|
|
|
private static string m_lastExportDir;
|
|
static string SaveDialog(AssetsPath assetsPath)
|
|
{
|
|
// save dialog
|
|
var path = EditorUtility.SaveFilePanel(
|
|
"Save png",
|
|
assetsPath.Parent.FullPath,
|
|
$"{assetsPath.FileNameWithoutExtension}.png",
|
|
"png");
|
|
if (!string.IsNullOrEmpty(path))
|
|
{
|
|
m_lastExportDir = Path.GetDirectoryName(path).Replace("\\", "/");
|
|
}
|
|
return path;
|
|
}
|
|
}
|
|
}
|