using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OpenTK.Graphics.OpenGL; using OpenTK; namespace Toolbox.Library { public enum STTextureWrapMode { Repeat, Mirror, Clamp, } public enum STTextureMagFilter { Nearest, Linear, } public enum STTextureMinFilter { LinearMipMapNearest, Nearest, Linear, NearestMipmapLinear, NearestMipmapNearest, } public class STTextureTransform { public Vector2 Scale { get; set; } public float Rotate { get; set; } public Vector2 Translate { get; set; } } public class STGenericMatTexture { public int mapMode = 0; public STTextureWrapMode WrapModeS = STTextureWrapMode.Repeat; public STTextureWrapMode WrapModeT = STTextureWrapMode.Repeat; public STTextureWrapMode WrapModeW = STTextureWrapMode.Clamp; public STTextureMinFilter MinFilter = STTextureMinFilter.Linear; public STTextureMagFilter MagFilter = STTextureMagFilter.Linear; public string Name; public string SamplerName; public int textureUnit; public TextureState textureState = TextureState.Unbinded; //Determine the state the texture is in. //If the texture is binded we don't need to bind it again unless it's animated or replaced public enum TextureState { Unbinded, Binded, Animated, Replaced, } /// /// Gets the texture that links to this material texture map /// Used for UV editor /// /// public virtual STGenericTexture GetTexture() { return null; } public virtual STTextureTransform Transform { get; set; } public TextureType Type; //An enum for the assumed texture type by sampler //Many games have a consistant type of samplers and type. _a0 for diffuse, _n0 for normal, ect public enum TextureType { Unknown = 0, Diffuse = 1, Normal = 2, Specular = 3, Emission = 4, DiffuseLayer2 = 5, TeamColor = 6, Transparency = 7, Shadow = 8, AO = 9, Light = 10, Roughness = 11, Metalness = 12, MRA = 13, //Combined pbr texture HAL uses for KSA SphereMap = 14, SubSurfaceScattering = 15, } public static readonly Dictionary minfilter = new Dictionary() { { STTextureMinFilter.LinearMipMapNearest, TextureMinFilter.LinearMipmapLinear}, { STTextureMinFilter.Nearest, TextureMinFilter.Nearest}, { STTextureMinFilter.Linear, TextureMinFilter.Linear}, { STTextureMinFilter.NearestMipmapLinear, TextureMinFilter.NearestMipmapLinear}, { STTextureMinFilter.NearestMipmapNearest, TextureMinFilter.NearestMipmapNearest}, }; public static readonly Dictionary magfilter = new Dictionary() { { STTextureMagFilter.Linear, TextureMagFilter.Linear}, { STTextureMagFilter.Nearest, TextureMagFilter.Nearest}, { (STTextureMagFilter)3, TextureMagFilter.Linear}, }; public static Dictionary wrapmode = new Dictionary(){ { STTextureWrapMode.Repeat, TextureWrapMode.Repeat}, { STTextureWrapMode.Mirror, TextureWrapMode.MirroredRepeat}, { STTextureWrapMode.Clamp, TextureWrapMode.ClampToEdge}, { (STTextureWrapMode)3, TextureWrapMode.ClampToEdge}, { (STTextureWrapMode)4, TextureWrapMode.ClampToEdge}, { (STTextureWrapMode)5, TextureWrapMode.ClampToEdge}, }; } }