我目前正在使用DX9 / SM3,HLSL samplers上的MSDN文档似乎非常缺乏解释如何使用不同采样器类型的方法。更糟糕的是他们试图在一篇文章中介绍DX9和DX10,所以他们将所有关键词混在一起:
sampler 名称 = SamplerType {Texture =< texture_variable &gt ;; [ state_name = state_value ;] ...};
...
SamplerType
[in]采样器类型,它是以下之一: sampler , sampler1D , sampler2D , sampler3D , samplerCUBE , sampler_state , SamplerState 。
Direct3D 9和Direct3D 10之间的差异:
Direct3D 10支持另外一种采样器类型: SamplerComparisonState 。
我觉得与这篇文章相反,SamplerState
只是DX10。实际上我看到的所有代码都使用{{1>}来获取 SamplerType 。 BasicHLSL(DX9)的一个简单示例:
sampler_state
为什么所有不同的_SamplerType_s都存在,您何时会使用sampler MeshTextureSampler =
sampler_state
{
Texture = <g_MeshTexture>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
或sampler
代替sampler2D
?无论如何,你需要明确提取,例如sampler_state
,tex2D
,那么这里发生了什么?
答案 0 :(得分:4)
似乎有关DirectX 9语法的文档是错误的。我不是HLSL或DirectX的专家,但我一直只看到DirectX 9中的采样器被声明为:
SamplerType Name = sampler_state{ Texture = <texture_variable>; [state_name = state_value;] ... };
我可能会遗漏一些东西,但对我来说,上面的语法比文档中的语法更有意义。您声明具有给定类型的采样器,并指定采样器状态。
更新:显然这是错误的。我已经开始了a thread on the official forums,到目前为止,我只是确认它是错的。我还直接向DirectX团队发送了一封邮件。为了安全起见。
答案 1 :(得分:0)
sampler Name = SamplerType {Texture =; [state_name = state_value;]};
这是对的! 该声明仅对效果有效。
编辑:官方论坛在MSDN上。您可以使用“社区添加”发布建议或错误。