using RefreshCS; namespace MoonWorks.Graphics { /// /// All of the information that is used to create a sampler. /// public struct SamplerCreateInfo { /// /// Minification filter mode. Used when the image is downscaled. /// public Filter MinFilter; /// /// Magnification filter mode. Used when the image is upscaled. /// public Filter MagFilter; /// /// Filter mode applied to mipmap lookups. /// public SamplerMipmapMode MipmapMode; /// /// Horizontal addressing mode. /// public SamplerAddressMode AddressModeU; /// /// Vertical addressing mode. /// public SamplerAddressMode AddressModeV; /// /// Depth addressing mode. /// public SamplerAddressMode AddressModeW; /// /// Bias value added to mipmap level of detail calculation. /// public float MipLodBias; /// /// Enables anisotropic filtering. /// public bool AnisotropyEnable; /// /// Maximum anisotropy value. /// public float MaxAnisotropy; public bool CompareEnable; public CompareOp CompareOp; /// /// Clamps the LOD value to a specified minimum. /// public float MinLod; /// /// Clamps the LOD value to a specified maximum. /// public float MaxLod; /// /// If an address mode is set to ClampToBorder, will replace color with this color when samples are outside the [0, 1) range. /// public BorderColor BorderColor; public static readonly SamplerCreateInfo AnisotropicClamp = new SamplerCreateInfo { MinFilter = Filter.Linear, MagFilter = Filter.Linear, MipmapMode = SamplerMipmapMode.Linear, AddressModeU = SamplerAddressMode.ClampToEdge, AddressModeV = SamplerAddressMode.ClampToEdge, AddressModeW = SamplerAddressMode.ClampToEdge, CompareEnable = false, AnisotropyEnable = true, MaxAnisotropy = 4, MipLodBias = 0f, MinLod = 0, MaxLod = 1000 /* VK_LOD_CLAMP_NONE */ }; public static readonly SamplerCreateInfo AnisotropicWrap = new SamplerCreateInfo { MinFilter = Filter.Linear, MagFilter = Filter.Linear, MipmapMode = SamplerMipmapMode.Linear, AddressModeU = SamplerAddressMode.Repeat, AddressModeV = SamplerAddressMode.Repeat, AddressModeW = SamplerAddressMode.Repeat, CompareEnable = false, AnisotropyEnable = true, MaxAnisotropy = 4, MipLodBias = 0f, MinLod = 0, MaxLod = 1000 /* VK_LOD_CLAMP_NONE */ }; public static readonly SamplerCreateInfo LinearClamp = new SamplerCreateInfo { MinFilter = Filter.Linear, MagFilter = Filter.Linear, MipmapMode = SamplerMipmapMode.Linear, AddressModeU = SamplerAddressMode.ClampToEdge, AddressModeV = SamplerAddressMode.ClampToEdge, AddressModeW = SamplerAddressMode.ClampToEdge, CompareEnable = false, AnisotropyEnable = false, MipLodBias = 0f, MinLod = 0, MaxLod = 1000 }; public static readonly SamplerCreateInfo LinearWrap = new SamplerCreateInfo { MinFilter = Filter.Linear, MagFilter = Filter.Linear, MipmapMode = SamplerMipmapMode.Linear, AddressModeU = SamplerAddressMode.Repeat, AddressModeV = SamplerAddressMode.Repeat, AddressModeW = SamplerAddressMode.Repeat, CompareEnable = false, AnisotropyEnable = false, MipLodBias = 0f, MinLod = 0, MaxLod = 1000 }; public static readonly SamplerCreateInfo PointClamp = new SamplerCreateInfo { MinFilter = Filter.Nearest, MagFilter = Filter.Nearest, MipmapMode = SamplerMipmapMode.Nearest, AddressModeU = SamplerAddressMode.ClampToEdge, AddressModeV = SamplerAddressMode.ClampToEdge, AddressModeW = SamplerAddressMode.ClampToEdge, CompareEnable = false, AnisotropyEnable = false, MipLodBias = 0f, MinLod = 0, MaxLod = 1000 }; public static readonly SamplerCreateInfo PointWrap = new SamplerCreateInfo { MinFilter = Filter.Nearest, MagFilter = Filter.Nearest, MipmapMode = SamplerMipmapMode.Nearest, AddressModeU = SamplerAddressMode.Repeat, AddressModeV = SamplerAddressMode.Repeat, AddressModeW = SamplerAddressMode.Repeat, CompareEnable = false, AnisotropyEnable = false, MipLodBias = 0f, MinLod = 0, MaxLod = 1000 }; public Refresh.SamplerStateCreateInfo ToRefreshSamplerStateCreateInfo() { return new Refresh.SamplerStateCreateInfo { minFilter = (Refresh.Filter) MinFilter, magFilter = (Refresh.Filter) MagFilter, mipmapMode = (Refresh.SamplerMipmapMode) MipmapMode, addressModeU = (Refresh.SamplerAddressMode) AddressModeU, addressModeV = (Refresh.SamplerAddressMode) AddressModeV, addressModeW = (Refresh.SamplerAddressMode) AddressModeW, mipLodBias = MipLodBias, anisotropyEnable = Conversions.BoolToByte(AnisotropyEnable), maxAnisotropy = MaxAnisotropy, compareEnable = Conversions.BoolToByte(CompareEnable), compareOp = (Refresh.CompareOp) CompareOp, minLod = MinLod, maxLod = MaxLod, borderColor = (Refresh.BorderColor) BorderColor }; } } }