您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

70 行
2.4 KiB

using System;
using System.Linq;
using UnityEngine;
namespace VRMShaders
{
public static class TextureConverter
{
public static readonly TextureFormat WithAlphaFormat = TextureFormat.ARGB32;
public static readonly TextureFormat WithoutAlphaFormat = TextureFormat.RGB24;
public static Texture2D CreateEmptyTextureWithSettings(Texture src, ColorSpace dstColorSpace, bool dstNeedsAlpha)
{
var texFormat = dstNeedsAlpha ? WithAlphaFormat : WithoutAlphaFormat;
var dst = new Texture2D(src.width, src.height, texFormat, src.HasMipMap(), dstColorSpace == ColorSpace.Linear);
dst.name = src.name;
dst.anisoLevel = src.anisoLevel;
dst.filterMode = src.filterMode;
dst.mipMapBias = src.mipMapBias;
dst.wrapMode = src.wrapMode;
dst.wrapModeU = src.wrapModeU;
dst.wrapModeV = src.wrapModeV;
dst.wrapModeW = src.wrapModeW;
return dst;
}
public static Texture2D CopyTexture(Texture src, ColorSpace dstColorSpace, bool dstNeedsAlpha, Material material)
{
RenderTextureReadWrite readWrite;
switch (dstColorSpace)
{
case ColorSpace.sRGB:
readWrite = RenderTextureReadWrite.sRGB;
break;
case ColorSpace.Linear:
readWrite = RenderTextureReadWrite.Linear;
break;
default:
throw new ArgumentOutOfRangeException(nameof(dstColorSpace), dstColorSpace, null);
}
var renderTexture = new RenderTexture(src.width, src.height, 0, RenderTextureFormat.ARGB32, readWrite);
if (material != null)
{
Graphics.Blit(src, renderTexture, material);
}
else
{
Graphics.Blit(src, renderTexture);
}
var dst = CreateEmptyTextureWithSettings(src, dstColorSpace, dstNeedsAlpha);
dst.ReadPixels(new Rect(0, 0, src.width, src.height), 0, 0);
dst.Apply();
RenderTexture.active = null;
if (Application.isEditor)
{
GameObject.DestroyImmediate(renderTexture);
}
else
{
GameObject.Destroy(renderTexture);
}
return dst;
}
}
}