Members - Reputation: 134
Posted 29 January 2013 - 01:25 PM
Crossbones+ - Reputation: 10525
Posted 29 January 2013 - 02:14 PM
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).
It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.
Moderators - Reputation: 16213
Posted 29 January 2013 - 02:43 PM
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, 29 January 2013 - 09:05 PM.
Members - Reputation: 1486
Posted 29 January 2013 - 02:59 PM
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.
Members - Reputation: 134
Posted 29 January 2013 - 08:42 PM
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).