public unsafe SamplerHolder(VulkanGraphicsDevice gd, Device device, GAL.SamplerCreateInfo info) { _gd = gd; gd.Samplers.Add(this); (Filter minFilter, SamplerMipmapMode mipFilter) = EnumConversion.Convert(info.MinFilter); var borderColor = GetConstrainedBorderColor(info.BorderColor, out var cantConstrain); var samplerCreateInfo = new Silk.NET.Vulkan.SamplerCreateInfo() { SType = StructureType.SamplerCreateInfo, MagFilter = info.MagFilter.Convert(), MinFilter = minFilter, MipmapMode = mipFilter, AddressModeU = info.AddressU.Convert(), AddressModeV = info.AddressV.Convert(), AddressModeW = info.AddressP.Convert(), MipLodBias = info.MipLodBias, AnisotropyEnable = info.MaxAnisotropy != 1f, MaxAnisotropy = info.MaxAnisotropy, CompareEnable = info.CompareMode == CompareMode.CompareRToTexture, CompareOp = info.CompareOp.Convert(), MinLod = info.MinLod, MaxLod = info.MaxLod, BorderColor = borderColor, UnnormalizedCoordinates = false // TODO: Use unnormalized coordinates. }; SamplerCustomBorderColorCreateInfoEXT customBorderColor; if (cantConstrain && gd.SupportsCustomBorderColor) { var color = new ClearColorValue( info.BorderColor.Red, info.BorderColor.Green, info.BorderColor.Blue, info.BorderColor.Alpha); customBorderColor = new SamplerCustomBorderColorCreateInfoEXT() { SType = StructureType.SamplerCustomBorderColorCreateInfoExt, CustomBorderColor = color }; samplerCreateInfo.PNext = &customBorderColor; } gd.Api.CreateSampler(device, samplerCreateInfo, null, out var sampler).ThrowOnError(); _sampler = new Auto <DisposableSampler>(new DisposableSampler(gd.Api, device, sampler)); }
public ISampler CreateSampler(GAL.SamplerCreateInfo info) { return(new SamplerHolder(this, _device, info)); }