什么是不同的HLSL采样器类型?

时间:2009-08-19 17:37:45

标签: directx direct3d shader hlsl

我目前正在使用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_statetex2D,那么这里发生了什么?

2 个答案:

答案 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上。您可以使用“社区添加”发布建议或错误。