75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
//////////////////////////////////////////////////////
|
|
// MicroVerse
|
|
// Copyright (c) Jason Booth
|
|
//////////////////////////////////////////////////////
|
|
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
#if UNITY_2020_2_OR_NEWER
|
|
using UnityEditor.AssetImporters;
|
|
#else
|
|
using UnityEditor.Experimental.AssetImporters;
|
|
#endif
|
|
using System.IO;
|
|
|
|
// Allows you to read/write any texture format from unity as if it's a native format.
|
|
namespace JBooth.MicroVerseCore
|
|
{
|
|
[ScriptedImporter(1, "poissondisk")]
|
|
public class PoissonDiscImporter : ScriptedImporter
|
|
{
|
|
public static void Write(Texture2D r, string path, bool mips, bool linear)
|
|
{
|
|
var filePath = path + ".poissondisk";
|
|
|
|
if (File.Exists(filePath))
|
|
{
|
|
AssetDatabase.MakeEditable(filePath);
|
|
}
|
|
|
|
using (var bw = new BinaryWriter(File.Open(path + ".poissondisk", FileMode.OpenOrCreate)))
|
|
{
|
|
bw.Write(0);
|
|
bw.Write((int)r.format);
|
|
bw.Write(r.width);
|
|
bw.Write(r.height);
|
|
bw.Write(mips);
|
|
bw.Write(linear);
|
|
|
|
var bytes = r.GetRawTextureData();
|
|
bw.Write(bytes.Length);
|
|
bw.Write(r.GetRawTextureData());
|
|
}
|
|
}
|
|
|
|
public override void OnImportAsset(AssetImportContext ctx)
|
|
{
|
|
using (var r = new BinaryReader(File.Open(ctx.assetPath, FileMode.Open)))
|
|
{
|
|
int version = r.ReadInt32();
|
|
if (version != 0)
|
|
{
|
|
Debug.LogError("Version mismatch in poissondisk aseset");
|
|
return;
|
|
}
|
|
TextureFormat format = (TextureFormat)r.ReadInt32();
|
|
|
|
int width = r.ReadInt32();
|
|
int height = r.ReadInt32();
|
|
bool mips = r.ReadBoolean();
|
|
|
|
|
|
bool linear = r.ReadBoolean();
|
|
int length = r.ReadInt32();
|
|
|
|
byte[] bytes = r.ReadBytes(length);
|
|
var tex = new Texture2D(width, height, format, mips, linear);
|
|
tex.LoadRawTextureData(bytes);
|
|
tex.Apply();
|
|
ctx.AddObjectToAsset("main obj", tex);
|
|
ctx.SetMainObject(tex);
|
|
}
|
|
|
|
}
|
|
}
|
|
} |