Define Color Conversion Extension

This commit is contained in:
Masataka SUMI
2021-05-07 19:26:51 +09:00
parent 07a3de4baa
commit 8db745ea23
2 changed files with 76 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
using System;
using UnityEngine;
namespace UniGLTF
{
public enum ColorSpace
{
sRGB,
Linear,
}
public static class ColorConversionExtensions
{
public static float[] ToFloat4(this Color src, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
{
var dst = src.ConvertColorSpace(srcColorSpace, dstColorSpace);
return new float[] {dst.r, dst.g, dst.b, dst.a};
}
public static float[] ToFloat3(this Color src, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
{
var dst = src.ConvertColorSpace(srcColorSpace, dstColorSpace);
return new float[] {dst.r, dst.g, dst.b};
}
public static Color ToColor4(this float[] src, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
{
if (src == null || src.Length < 4)
{
Debug.LogWarning("Invalid argument.");
return Color.magenta;
}
return new Color(src[0], src[1], src[2], src[3]).ConvertColorSpace(srcColorSpace, dstColorSpace);
}
public static Color ToColor3(this float[] src, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
{
if (src == null || src.Length < 3)
{
Debug.LogWarning("Invalid argument.");
return Color.magenta;
}
return new Color(src[0], src[1], src[2], 1f).ConvertColorSpace(srcColorSpace, dstColorSpace);
}
private static Color ConvertColorSpace(this Color srcColor, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
{
// Need pattern matching :(
if (srcColorSpace == ColorSpace.sRGB && dstColorSpace == ColorSpace.sRGB)
{
return srcColor;
}
else if (srcColorSpace == ColorSpace.sRGB && dstColorSpace == ColorSpace.Linear)
{
return srcColor.linear;
}
else if (srcColorSpace == ColorSpace.Linear && dstColorSpace == ColorSpace.sRGB)
{
return srcColor.gamma;
}
else if (srcColorSpace == ColorSpace.Linear && dstColorSpace == ColorSpace.Linear)
{
return srcColor;
}
else
{
throw new ArgumentException();
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c2b6bc13ed6e459e98834507edfede07
timeCreated: 1620378376