Esempio n. 1
0
        /// <summary>
        /// Gets the sampler state with the given requested quality level.
        /// </summary>
        /// <param name="qualityLevel">The quality level to get the sampler state for.</param>
        internal D3D11.SamplerState GetSamplerState(TextureSamplerQualityLevel qualityLevel)
        {
            switch (qualityLevel)
            {
            case TextureSamplerQualityLevel.High:
                return(m_samplerStateHigh.Value);

            case TextureSamplerQualityLevel.Medium:
                return(m_samplerStateMedium.Value);

            case TextureSamplerQualityLevel.Low:
                return(m_samplerStateLow.Value);
            }

            return(m_samplerStateLow.Value);
        }
            /// <summary>
            /// Creates a default texture sampler state.
            /// </summary>
            /// <param name="device">The device to create the state for.</param>
            /// <param name="samplerQualityLevel">The target sampler quality</param>
            public static D3D11.ID3D11SamplerState CreateDefaultTextureSampler(EngineDevice device, TextureSamplerQualityLevel samplerQualityLevel)
            {
                device.EnsureNotNull(nameof(device));

                // Set state parameters
                var samplerDesk = D3D11.SamplerDescription.Default;

                switch (device.DriverLevel)
                {
                case HardwareDriverLevel.Direct3D11:
                case HardwareDriverLevel.Direct3D10:
                    switch (samplerQualityLevel)
                    {
                    case TextureSamplerQualityLevel.High:
                        if (!device.IsHighDetailSupported)
                        {
                            goto case TextureSamplerQualityLevel.Low;
                        }
                        samplerDesk.AddressU      = D3D11.TextureAddressMode.Wrap;
                        samplerDesk.AddressV      = D3D11.TextureAddressMode.Wrap;
                        samplerDesk.Filter        = D3D11.Filter.Anisotropic;
                        samplerDesk.MaxAnisotropy = 16;
                        break;

                    case TextureSamplerQualityLevel.Medium:
                        if (!device.IsHighDetailSupported)
                        {
                            goto case TextureSamplerQualityLevel.Low;
                        }
                        samplerDesk.AddressU      = D3D11.TextureAddressMode.Wrap;
                        samplerDesk.AddressV      = D3D11.TextureAddressMode.Wrap;
                        samplerDesk.Filter        = D3D11.Filter.Anisotropic;
                        samplerDesk.MaxAnisotropy = 8;
                        break;

                    case TextureSamplerQualityLevel.Low:
                        samplerDesk.AddressU = D3D11.TextureAddressMode.Wrap;
                        samplerDesk.AddressV = D3D11.TextureAddressMode.Wrap;
                        samplerDesk.Filter   = D3D11.Filter.MinMagMipLinear;
                        break;
                    }
                    break;

                default:
                    samplerDesk.AddressU = D3D11.TextureAddressMode.Wrap;
                    samplerDesk.AddressV = D3D11.TextureAddressMode.Wrap;
                    samplerDesk.Filter   = D3D11.Filter.MinMagMipLinear;
                    break;
                }

                // Create the state object finally
                return(device.DeviceD3D11_1.CreateSamplerState(samplerDesk));
            }