Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
SamplerState.Direct3D.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 #if SILICONSTUDIO_PARADOX_GRAPHICS_API_DIRECT3D
4 using System;
5 using SharpDX;
6 
7 using SiliconStudio.Core.Mathematics;
8 
9 namespace SiliconStudio.Paradox.Graphics
10 {
11  /// <summary>
12  /// Describes a sampler state used for texture sampling.
13  /// </summary>
14  public partial class SamplerState
15  {
16  /// <summary>
17  /// Initializes a new instance of the <see cref="SamplerState"/> class.
18  /// </summary>
19  /// <param name="device">The device.</param>
20  /// <param name="name">The name.</param>
21  /// <param name="samplerStateDescription">The sampler state description.</param>
22  private SamplerState(GraphicsDevice device, SamplerStateDescription samplerStateDescription) : base(device)
23  {
24  Description = samplerStateDescription;
25 
26  CreateNativeDeviceChild();
27  }
28 
29  /// <inheritdoc/>
30  protected internal override void OnDestroyed()
31  {
32  base.OnDestroyed();
33  DestroyImpl();
34  }
35 
36  /// <inheritdoc/>
37  protected internal override bool OnRecreate()
38  {
39  base.OnRecreate();
40  CreateNativeDeviceChild();
41  return true;
42  }
43 
44  private void CreateNativeDeviceChild()
45  {
46  SharpDX.Direct3D11.SamplerStateDescription nativeDescription;
47 
48  nativeDescription.AddressU = (SharpDX.Direct3D11.TextureAddressMode)Description.AddressU;
49  nativeDescription.AddressV = (SharpDX.Direct3D11.TextureAddressMode)Description.AddressV;
50  nativeDescription.AddressW = (SharpDX.Direct3D11.TextureAddressMode)Description.AddressW;
51  nativeDescription.BorderColor = ColorHelper.Convert(Description.BorderColor);
52  nativeDescription.ComparisonFunction = (SharpDX.Direct3D11.Comparison)Description.CompareFunction;
53  nativeDescription.Filter = (SharpDX.Direct3D11.Filter)Description.Filter;
54  nativeDescription.MaximumAnisotropy = Description.MaxAnisotropy;
55  nativeDescription.MaximumLod = Description.MaxMipLevel;
56  nativeDescription.MinimumLod = Description.MinMipLevel;
57  nativeDescription.MipLodBias = Description.MipMapLevelOfDetailBias;
58 
59  // For 9.1, anisotropy cannot be larger then 2
60  // mirror once is not supported either
61  if (GraphicsDevice.Features.Profile == GraphicsProfile.Level_9_1)
62  {
63  // TODO: Min with user-value instead?
64  nativeDescription.MaximumAnisotropy = 2;
65 
66  if (nativeDescription.AddressU == SharpDX.Direct3D11.TextureAddressMode.MirrorOnce)
67  nativeDescription.AddressU = SharpDX.Direct3D11.TextureAddressMode.Mirror;
68  if (nativeDescription.AddressV == SharpDX.Direct3D11.TextureAddressMode.MirrorOnce)
69  nativeDescription.AddressV = SharpDX.Direct3D11.TextureAddressMode.Mirror;
70  if (nativeDescription.AddressW == SharpDX.Direct3D11.TextureAddressMode.MirrorOnce)
71  nativeDescription.AddressW = SharpDX.Direct3D11.TextureAddressMode.Mirror;
72  }
73 
74  NativeDeviceChild = new SharpDX.Direct3D11.SamplerState(NativeDevice, nativeDescription);
75  }
76  }
77 }
78 #endif
TextureAddressMode
Identify a technique for resolving texture coordinates that are outside of the boundaries of a textur...
GraphicsProfile
Identifies the set of supported devices for the demo based on device capabilities.