Sampler states control how textures are sampled in shaders, how they're filtered and addressed.
Modern GPUs allow binding of 128 textures in a shader, however you are limited to only 16 bound samplers.
This is generally more than enough if you reuse samplers for multiple textures.
Sampler states are defined as you normally would in HLSL, but should be annotated with the desired options.
Texture2D MyCoolTexture;
Texture2D MyOtherCoolTexture;
SamplerState MyPixelySampler < Filter( Point ); >;
// Using the samplers
float4 color1 = MyCoolTexture.Sample( MyPixelySampler, uv );
float4 color2 = MyOtherCoolTexture.Sample( MyPixelySampler, uv );
Annotation | Description | Possible Values |
---|---|---|
Filter | Filtering mode used for texture sampling. | Point, Linear, Anisotropic |
AddressU | Texture coordinate addressing mode for the U direction. | Wrap, Mirror, Clamp, Border, Mirror_Once |
AddressV | Texture coordinate addressing mode for the V direction. | Wrap, Mirror, Clamp, Border, Mirror_Once |
AddressW | Texture coordinate addressing mode for the W direction. | Wrap, Mirror, Clamp, Border, Mirror_Once |
MaxAniso | Maximum anisotropy level allowed for anisotropic filtering. | Integer value (e.g., 2, 4, 8, 16, etc.) |
Enum | Description |
---|---|
Point | Same as MinMagMipPoint |
Bilinear | Same as MinMagLinearMipPoint |
Trilinear | Same as MinMagMipLinear |
Anisotropic | Anisotropic filtering, controlled by MaxAniso |
MinMagMipPoint | Minify/magnify/mipmap using point sampling. |
MinMagPointMipLinear | Minify/magnify using point sampling, mipmap using linear interpolation. |
MinPointMagLinearMipPoint | Minify using point sampling, magnify using linear sampling, mipmap using point sampling. |
MinPointMagMipLinear | Minify using point sampling, magnify using point sampling, mipmap using linear interpolation. |
MinLinearMagMipPoint | Minify using linear interpolation, magnify using point sampling, mipmap using point sampling. |
MinLinearMagPointMipLinear | Minify using linear interpolation, magnify using point sampling, mipmap using linear interpolation. |
MinMagLinearMipPoint | Minify/magnify using linear sampling, mipmap using point sampling. |
MinMagMipLinear | Minify/magnify/mipmap using linear interpolation. |
ComparisonMinMagMipPoint | Comparison minify/magnify/mipmap using point sampling. |
ComparisonMinMagPointMipLinear | Comparison minify/magnify using point sampling, mipmap using linear interpolation. |
ComparisonMinPointMagLinearMipPoint | Comparison minify using point sampling, magnify using linear sampling, mipmap using point sampling. |
ComparisonMinPointMagMipLinear | Comparison minify using point sampling, magnify using point sampling, mipmap using linear interpolation. |
ComparisonMinLinearMagMipPoint | Comparison minify using linear interpolation, magnify using point sampling, mipmap using point sampling. |
ComparisonMinLinearMagPointMipLinear | Comparison minify using linear interpolation, magnify using point sampling, mipmap using linear interpolation. |
ComparisonMinMagLinearMipPoint | Comparison minify/magnify using linear sampling, mipmap using point sampling. |
ComparisonMinMagMipLinear | Comparison minify/magnify/mipmap using linear interpolation. |
ComparisonAnisotropic | Comparison anisotropic filtering. |
Here are some common predefined sampler states you can use in your shaders.
Sampler State | Description |
---|---|
g_sAniso | Anisotropic filtering with a maximum anisotropy level of 8. |
g_sBilinearClamp | Bilinear filtering with texture coordinate addressing mode set to clamp for U, V, and W directions. |
g_sTrilinearWrap | Trilinear filtering with texture coordinate addressing mode set to wrap for U, V, and W directions. |
g_sTrilinearClamp | Trilinear filtering with texture coordinate addressing mode set to clamp for U, V, and W directions. |
g_sPointClamp | Point filtering with texture coordinate addressing mode set to clamp for U, V, and W directions. |
g_sPointWrap | Point filtering with texture coordinate addressing mode set to wrap for U and V directions, and clamp for W direction. |
CreateTexture2D & Tex2D macros create and sample coupled textures and samplers, this is how older graphics APIs (DX9) and should be avoided due to it's limitations.