Sign in to follow this  
greggman

Texture Samplers

Recommended Posts

There's a feature of DirectX called "samplers" or "sampler state".  A sampler has the clamping/repeating/filtering settings used with a texture. This lets you use the same texture with in 2 different samplers with different settings
 
My experience is, except for the examples in books, I've never seen that ability used. I've never seen a game asset (shipped 17 games) that used a single texture in such a way that 2 samplers would be needed, one with the settings one way and other with the settings another way for the same texture. For the stuff I've worked on there's always been a 1 texture to 1 sampler mapping.
 
Do you know of any games that have needed to use more than 1 sampler for the same texture?
 
If you know of one please name the game and where in the game the feature is used.

Share this post


Link to post
Share on other sites

I'm not sure which version of D3D you're referring to, but you should be aware that under 10+ textures and samplers are completely decoupled.  This means that as well as using the same texture with two (or more) different samplers, you can also use the same sampler with two (or more) different textures.  HLSL code might look like:

 

float4 result = texture1.Sample (linearSampler, texcoords1) + texture2.Sample (linearSampler, texcoords2);

 

The usefulness of this is that it allows for sampler state to be set only once and then reused for multiple textures.

 

Worth noting that the same functionality is available under OpenGL (although it isn't exposed in GLSL) using GL_ARB_sampler_objects (which includes a discussion of the rationale behind it).

Share this post


Link to post
Share on other sites

Yeah it's not really about using the same texture multiple samplers within a given shader, it's more about decoupling texture state from sampler state. If you use 32 textures but only 4 different sampler configurations then you change a lot less state if the samplers are decoupled. It also lets you author shaders in such a way that you can just decide in code which sampler configuration to use rather than having to to set the state externally with D3D code.

Edited by MJP

Share this post


Link to post
Share on other sites

Setting up the sampler states in the shader can give you a finer level in control. They mostly become useful when you have to send multiple textures to the shader at once (as is common with bump/normal mapping, depth map sampling, etc). For instance, with a skybox, texture clamping would be preferred over tiling. It becomes crucial to bind the correct textures to the right sampler states, because some texture formats may not be compatible with certain states.

Share this post


Link to post
Share on other sites

Okay guys, I see your point. I've been in GL land for the last few years where all the state that's on a DX10+ sampler is actually directly on the texture. In that land, I've never needed to decouple a texture from a sampler (which I would have to effectively emulate). My artists have never come to given me a file with one texture used multiple ways.  So, the ability to use 2 samplers with 1 texture, while I understand it, isn't something I've ever needed to do. 

 

The ability to use 1 sampler with multiple textures adds something I guess but only because samplers are detached from textures on DX10+. Not because I actually need that functionality. Though I can see how if I did need it and I didn't have it I'd be screwed (would have to duplicate the texture).

 

thanks

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this