コード例 #1
0
ファイル: SamplerHolder.cs プロジェクト: scese250/Ryujinx
        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));
        }
コード例 #2
0
 public ISampler CreateSampler(GAL.SamplerCreateInfo info)
 {
     return(new SamplerHolder(this, _device, info));
 }