Example #1
0
        public VkSamplerState(
            VkDevice device,
            SamplerAddressMode addressU,
            SamplerAddressMode addressV,
            SamplerAddressMode addressW,
            SamplerFilter filter,
            int maxAnisotropy,
            RgbaFloat borderColor,
            DepthComparison comparison,
            int minimumLod,
            int maximumLod,
            int lodBias)
        {
            _device           = device;
            AddressU          = addressU;
            AddressV          = addressV;
            AddressW          = addressW;
            Filter            = filter;
            MaximumAnisotropy = maxAnisotropy;
            BorderColor       = borderColor;
            Comparison        = comparison;
            MinimumLod        = minimumLod;
            MaximumLod        = maximumLod;
            LodBias           = lodBias;

            VkSamplerCreateInfo samplerCI = VkSamplerCreateInfo.New();

            samplerCI.addressModeU = VkFormats.VeldridToVkSamplerAddressMode(addressU);
            samplerCI.addressModeV = VkFormats.VeldridToVkSamplerAddressMode(addressV);
            samplerCI.addressModeW = VkFormats.VeldridToVkSamplerAddressMode(addressW);
            VkFormats.GetFilterProperties(
                filter,
                out VkFilter minFilter,
                out VkFilter magFilter,
                out VkSamplerMipmapMode mipmapMode,
                out bool anisotropyEnable,
                out bool compareEnable);
            samplerCI.minFilter        = minFilter;
            samplerCI.magFilter        = magFilter;
            samplerCI.mipmapMode       = mipmapMode;
            samplerCI.maxAnisotropy    = maxAnisotropy;
            samplerCI.anisotropyEnable = anisotropyEnable;
            samplerCI.compareEnable    = compareEnable;
            samplerCI.minLod           = minimumLod;
            samplerCI.maxLod           = maximumLod;
            samplerCI.mipLodBias       = lodBias;
            samplerCI.compareOp        = VkFormats.VeldridToVkDepthComparison(comparison);
            samplerCI.borderColor      = VkBorderColor.FloatOpaqueWhite;
            VkResult result = vkCreateSampler(_device, ref samplerCI, null, out VkSampler sampler);

            CheckResult(result);
            Sampler = sampler;
        }