Files
Test/Assets/ColbyO/VNTG/Scripts/PSX/PSXMaterialExtensions.cs
T
2026-11-01 23:39:55 +02:00

98 lines
3.9 KiB
C#

using UnityEngine;
//-----------------------------------------------------------------------
// Author: Colby-O
// File: PSXMaterialExtensions.cs
//-----------------------------------------------------------------------
namespace ColbyO.VNTG.PSX
{
public enum PSXTextureSampleMode { Point = 0, Bilinear = 1, N64 = 2 }
public enum PSXLightingMethod { Unlit = 0, Lit = 1, TexelLit = 2, VertexLit = 3 }
public enum PSXVertexJitterMode { Disabled = 0, ViewSpace = 1, ScreenSpace = 2 }
public enum DitherMode { Full, TextureRelative }
public enum PSXShadingMode { Default = 0, Flat = 1 }
public enum SkyboxMode { Cubemap = 0, Panoramic = 1, Procedual = 2 }
public enum ProcedualSkyboxMode { FlatGradient = 0, Space = 1 }
public static class PSXMaterialExtensions
{
private static readonly int TextureSampleModeID = Shader.PropertyToID("_TEXTURESAMPLEMODE");
private static readonly int LightingMethodID = Shader.PropertyToID("_LIGHTINGMETHOD");
private static readonly int VertexJitterModeID = Shader.PropertyToID("_VERTEXJITTERMODE");
private static readonly int DitherModeID = Shader.PropertyToID("_DITHERINGMETHOD");
private static readonly int SkyboxModeID = Shader.PropertyToID("_SKYBOXMODE");
private static readonly int ProcedualSkyboxModeID = Shader.PropertyToID("_PROCEDUALSKYBOXMODE");
public static void SetTextureSampleMode(this Material mat, PSXTextureSampleMode mode)
{
if (mat == null) return;
mat.SetFloat(TextureSampleModeID, (float)mode);
}
public static void SetLightingMethod(this Material mat, PSXLightingMethod method)
{
if (mat == null) return;
mat.SetFloat(LightingMethodID, (float)method);
}
public static void SetVertexJitterMode(this Material mat, PSXVertexJitterMode mode)
{
if (mat == null) return;
mat.SetFloat(VertexJitterModeID, (float)mode);
}
public static void SetDitherMode(this Material mat, DitherMode mode)
{
if (mat == null) return;
mat.SetFloat(DitherModeID, (float)mode);
}
public static void SetSkyboxMode(this Material mat, SkyboxMode mode)
{
if (mat == null) return;
mat.SetFloat(SkyboxModeID, (float)mode);
}
public static void SetProcedualSkyboxMode(this Material mat, ProcedualSkyboxMode mode)
{
if (mat == null) return;
mat.SetFloat(ProcedualSkyboxModeID, (float)mode);
}
public static PSXTextureSampleMode GetTextureSampleMode(this Material mat)
{
if (mat == null) return PSXTextureSampleMode.Point;
return (PSXTextureSampleMode)mat.GetFloat(TextureSampleModeID);
}
public static PSXLightingMethod GetLightingMethod(this Material mat)
{
if (mat == null) return PSXLightingMethod.Unlit;
return (PSXLightingMethod)mat.GetFloat(LightingMethodID);
}
public static PSXVertexJitterMode GetVertexJitterMode(this Material mat)
{
if (mat == null) return PSXVertexJitterMode.Disabled;
return (PSXVertexJitterMode)mat.GetFloat(VertexJitterModeID);
}
public static DitherMode GetDitherMode(this Material mat)
{
if (mat == null) return DitherMode.Full;
return (DitherMode)mat.GetFloat(DitherModeID);
}
public static SkyboxMode GetSkybox(this Material mat)
{
if (mat == null) return SkyboxMode.Procedual;
return (SkyboxMode)mat.GetFloat(SkyboxModeID);
}
public static ProcedualSkyboxMode GetProcedualSkyboxMode(this Material mat)
{
if (mat == null) return ProcedualSkyboxMode.FlatGradient;
return (ProcedualSkyboxMode)mat.GetFloat(ProcedualSkyboxModeID);
}
}
}