目前,我正在使用DX9 / SM3,并且HLSL samplers上的MSDN文档似乎非常缺乏解释如何使用不同采样器类型的信息。更糟糕的是,他们试图在一篇文章中介绍DX9和DX10,因此他们将所有关键字混为一谈:
采样器名称= SamplerType {Texture = ; [state_name = state_value;] ...};
...
采样器类型
[in]采样器类型,它是以下之一:sampler,sampler1D,sampler2D,sampler3D,samplerCUBE,sampler_state和SamplerState。
Direct3D 9和Direct3D 10之间的区别:
Direct3D 10支持一种附加的采样器类型:SamplerComparisonState。
我感觉与这篇文章相反,SamplerState
仅是DX10。我看到的几乎所有代码都对SamplerType使用sampler_state
。来自BasicHLSL(DX9)的简单示例:
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中的采样器这样声明:
SamplerType Name = sampler_state{ Texture = <texture_variable>; [state_name = state_value;] ... };
我可能会遗漏一些东西,但是对我来说,以上语法比文档中的语法更有意义。您声明具有给定类型的采样器,并指定采样器状态。
更新:显然这是错误的。我已经开始a thread on the official forums了,到目前为止我只得到一个确认,那就是错误的。我还直接向DirectX小组发送了一封邮件。只是为了安全起见。