add Sampler info
	
		
			
	
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
							parent
							
								
									690cf0dabd
								
							
						
					
					
						commit
						c75fc8ca23
					
				| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
---
 | 
			
		||||
title: "Sampler"
 | 
			
		||||
date: 2021-01-25T20:48:35-08:00
 | 
			
		||||
weight: 3
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
You might be familiar with the concept of "sampling" in music, where artists take a small segment of recorded music and recontextualize it in another work. Similarly, in graphics applications, sampling refers to the process of looking up segments of texture information in a shader so the data can be used.
 | 
			
		||||
 | 
			
		||||
Samplers tell the renderer how upscaling or downscaling scenarios should be filtered. They can also cause the texture to repeat or mirror itself, among other possibilities.
 | 
			
		||||
 | 
			
		||||
To create a sampler, define a `SamplerState` struct:
 | 
			
		||||
 | 
			
		||||
```cs
 | 
			
		||||
var mySamplerState = new SamplerState
 | 
			
		||||
{
 | 
			
		||||
    MinFilter = Filter.Linear,
 | 
			
		||||
    MagFilter = Filter.Linear,
 | 
			
		||||
    MipmapMode = SamplerMipmapMode.Linear,
 | 
			
		||||
    AddressModeU = SamplerAddressMode.Repeat,
 | 
			
		||||
    AddressModeV = SamplerAddressMode.Repeat,
 | 
			
		||||
    AddressModeW = SamplerAddressMode.Repeat,
 | 
			
		||||
    CompareEnable = false,
 | 
			
		||||
    AnisotropyEnable = false,
 | 
			
		||||
    MipLodBias = 0f,
 | 
			
		||||
    MinLod = 0,
 | 
			
		||||
    MaxLod = 1000
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var mySampler = new Sampler(GraphicsDevice, mySamplerState);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The same sampler can be used in conjunction with as many different textures as you like. We will discuss this more when we get into command buffers.
 | 
			
		||||
 | 
			
		||||
There are some common `SamplerState`s that are provided for you, for example `SamplerState.PointClamp`. Have a look at the `SamplerState` definition to see them all.
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ var textureCreateInfo = new TextureCreateInfo
 | 
			
		|||
    IsCube      = false,
 | 
			
		||||
    LevelCount  = 1,
 | 
			
		||||
    SampleCount = SampleCount.One,
 | 
			
		||||
    UsageFlags  = TextureUsageFlags.SamplerBit
 | 
			
		||||
    UsageFlags  = TextureUsageFlags.Sampler
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var myTexture = new Texture(GraphicsDevice, textureCreateInfo);
 | 
			
		||||
| 
						 | 
				
			
			@ -39,9 +39,9 @@ myTexture.SetData(pixels);
 | 
			
		|||
Of course, having to fill in all this data every time is kind of cumbersome, so we have some shortcut methods for common texture usages.
 | 
			
		||||
 | 
			
		||||
```cs
 | 
			
		||||
var my2DTexture = Texture.CreateTexture2D(GraphicsDevice, 128, 128, ColorFormat.R8G8B8A8, TextureUsageFlags.SamplerBit);
 | 
			
		||||
var my3DTexture = Texture.CreateTexture3D(GraphicsDevice, 128, 128, ColorFormat.R8G8B8A8, TextureUsageFlags.SamplerBit);
 | 
			
		||||
var myCubeTexture = Texture.CreateTextureCube(GraphicsDevice, 128, ColorFormat.R8G8B8A8, TextureUsageFlags.SamplerBit);
 | 
			
		||||
var my2DTexture = Texture.CreateTexture2D(GraphicsDevice, 128, 128, ColorFormat.R8G8B8A8, TextureUsageFlags.Sampler);
 | 
			
		||||
var my3DTexture = Texture.CreateTexture3D(GraphicsDevice, 128, 128, ColorFormat.R8G8B8A8, TextureUsageFlags.Sampler);
 | 
			
		||||
var myCubeTexture = Texture.CreateTextureCube(GraphicsDevice, 128, ColorFormat.R8G8B8A8, TextureUsageFlags.Sampler);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
There is also a built-in PNG loader that creates a 2D R8G8B8A8 texture and fills it with pixel data.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue