using System;
using System.Threading.Tasks;
using UnityEngine;
namespace VRMShaders
{
///
/// get bytes for
///
/// runtime:
/// Texture2D.LoadImage
/// extact:
/// File.WriteAllBytes
///
///
public delegate Task<(byte[] binary, string mimeType)?> GetTextureBytesAsync();
///
/// 入力 glTF ファイルを Import した結果生成される、UnityEngine.Texture のアセット 1 つを確定させる Import 情報。
///
public readonly struct TextureDescriptor
{
public readonly string UnityObjectName;
public readonly Vector2 Offset;
public readonly Vector2 Scale;
public readonly SamplerParam Sampler;
public readonly TextureImportTypes TextureType;
// Parameters for Type:StandardMap
public readonly float MetallicFactor;
public readonly float RoughnessFactor;
public readonly GetTextureBytesAsync Index0;
public readonly GetTextureBytesAsync Index1;
public readonly GetTextureBytesAsync Index2;
public readonly GetTextureBytesAsync Index3;
public readonly GetTextureBytesAsync Index4;
public readonly GetTextureBytesAsync Index5;
///
/// この Texture が Unity に実アセットとして存在する際の一意な Key
///
public SubAssetKey SubAssetKey => new SubAssetKey(SubAssetKey.TextureType, UnityObjectName);
public TextureDescriptor(string name, Vector2 offset, Vector2 scale, SamplerParam sampler, TextureImportTypes textureType, float metallicFactor, float roughnessFactor,
GetTextureBytesAsync i0,
GetTextureBytesAsync i1,
GetTextureBytesAsync i2,
GetTextureBytesAsync i3,
GetTextureBytesAsync i4,
GetTextureBytesAsync i5)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentNullException(nameof(name));
}
UnityObjectName = name;
Offset = offset;
Scale = scale;
Sampler = sampler;
TextureType = textureType;
MetallicFactor = metallicFactor;
RoughnessFactor = roughnessFactor;
Index0 = i0;
Index1 = i1;
Index2 = i2;
Index3 = i3;
Index4 = i4;
Index5 = i5;
}
}
}