What are all the different HLSL sampler types for?
目前,我正在使用DX9 / SM3,并且关于HLSL采样器的MSDN文档似乎非常缺乏解释如何使用不同采样器类型的信息。更糟糕的是,他们试图在一篇文章中介绍DX9和DX10,因此他们将所有关键字混为一谈:
sampler Name = SamplerType { Texture =
; [state_name = state_value;] ... };
...
SamplerType
[in] The sampler type, which is one of the following: sampler, sampler1D, sampler2D, sampler3D, samplerCUBE, sampler_state, SamplerState.
Differences between Direct3D 9 and Direct3D 10:
Direct3D 10 supports one additional sampler type: SamplerComparisonState.
blockquote>
我感觉与本文相反,
SamplerState 仅是DX10。我看到的几乎所有代码都将sampler_state 用于SamplerType。来自BasicHLSL(DX9)的快速示例:
1
2
3
4
5
6
7
8 sampler MeshTextureSampler =
sampler_state
{
Texture = <g_MeshTexture>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};为什么存在所有不同的_SamplerType_s,以及何时使用
sampler 或sampler2D 而不是sampler_state ?无论如何,提取时都需要明确。tex2D ,texCUBE ,那么这是怎么回事?
您是对的。这很奇怪。
似乎DirectX 9语法的文档错误。我绝不是HLSL或DirectX的专家,但我一直只看到DirectX 9中的采样器是这样声明的:
1 SamplerType Name = sampler_state{ Texture = <texture_variable>; [state_name = state_value;] ... };我可能遗漏了一些东西,但是对我来说,以上语法比文档中的语法更有意义。您声明具有给定类型的采样器,并指定采样器状态。
更新:显然这是错误的。我已经在官方论坛上发起了一个话题,到目前为止,我仅得到了确认它是错误的信息。我还直接向DirectX小组发送了一封邮件。只是为了安全起见。
采样器名称= SamplerType {Texture =; [state_name = state_value;]};
是正确的!
该声明仅对效果有效。编辑:官方论坛在MSDN上。您可以使用" Community Additions "发布建议或错误。