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

9 directx shader direct3d hlsl

我目前正在使用DX9/SM3,关于HLSL采样器的MSDN文档似乎非常缺乏解释如何使用不同采样器类型的方法.更糟糕的是,他们试图在一篇文章中介绍DX9和DX10,所以他们将所有关键词混在一起:

sampler Name = SamplerType {Texture = < texture_variable >; [ state_name = state_value ;] ...};

...

SamplerType

[in]采样器类型,它是以下之一:sampler,sampler1D,sampler2D,sampler3D,samplerCUBE,sampler_state,SamplerState.

Direct3D 9和Direct3D 10之间的差异:

Direct3D 10支持一种额外的采样器类型:SamplerComparisonState.

我觉得与这篇文章相反的SamplerState是DX10.实际上我看到的所有代码都sampler_state用于SamplerType.BasicHLSL(DX9)的一个简单示例:

sampler MeshTextureSampler =
sampler_state
{
    Texture = <g_MeshTexture>;
    MipFilter = LINEAR;
    MinFilter = LINEAR;
    MagFilter = LINEAR;
};
Run Code Online (Sandbox Code Playgroud)

为什么所有不同的_SamplerType_s都存在,何时使用,比方说samplersampler2D代替sampler_state?你需要获取的时候,无论如何,如要明确tex2D,texCUBE又怎样是怎么回事?

Tch*_*ami 4

你说得对。这很奇怪。

DirectX 9 语法的文档似乎是错误的。我绝不是 HLSL 或 DirectX 方面的专家,但我一直只看到 DirectX 9 中的采样器是这样声明的:

SamplerType Name = sampler_state{   Texture = <texture_variable>;   [state_name = state_value;]   ... }; 
Run Code Online (Sandbox Code Playgroud)

我可能遗漏了一些东西,但对我来说,上面的语法比文档中的语法更有意义。您声明具有给定类型的采样器,并指定采样器状态。

更新:显然这是错误的。我已经在官方论坛上发起了一个帖子,到目前为止我只得到确认这是错误的。我还直接向 DirectX 团队发送了一封邮件。只是为了安全起见。

  • 请注意,directx@microsoft.com 并未受到主动监控。 (2认同)