/// <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)); }