9

私は現在 DX9/SM3 を使用していますが、HLSL サンプラーに関する MSDN ドキュメントには、さまざまなサンプラー タイプの使用方法の説明が非常に不足しているようです。さらに悪いことに、彼らは DX9 と DX10 を 1 つの記事でカバーしようとしているため、すべてのキーワードがごちゃまぜになっています。

sampler Name = SamplerType { Texture = < texture_variable >; [状態名=状態値;] ... };

...

サンプラーの種類

[in] 次のいずれかであるサンプラーの種類: samplersampler1Dsampler2Dsampler3DsamplerCUBEsampler_stateSamplerState

Direct3D 9 と Direct3D 10 の違い:

Direct3D 10 は、1 つの追加のサンプラー タイプをサポートします: SamplerComparisonState

この書き込みに反して、SamplerStateDX10のみのような気がします。私が目にする事実上すべてのコードは、 SamplerType を使用sampler_stateしています。BasicHLSL (DX9) からの簡単な例:

sampler MeshTextureSampler =
sampler_state
{
    Texture = <g_MeshTexture>;
    MipFilter = LINEAR;
    MinFilter = LINEAR;
    MagFilter = LINEAR;
};

samplerさまざまな_SamplerType_s がすべて存在するのはなぜsampler2Dですかsampler_state。とにかくフェッチするときは明示的である必要があります。たとえばtex2DtexCUBE、では、ここで何が起こっているのでしょうか?

4

2 に答える 2

4

あなたが正しい。それは非常に奇妙です。

DirectX 9 構文に関するドキュメントが間違っているようです。私は決して HLSL や DirectX の専門家ではありませんが、DirectX 9 のサンプラーが次のように宣言されているのを見たことがあるだけです。

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

何かが足りないかもしれませんが、私にとっては、上記の構文はドキュメントの構文よりも理にかなっています。特定のタイプのサンプラーを宣言し、サンプラーの状態を指定します。

更新:どうやらそれは間違っています。公式フォーラムでスレッドを開始しましたが、これまでのところ、それが間違っているという確認しか得られていません. また、DirectX チームに直接メールを送信しました。安全な側にいるだけです。

于 2009-08-19T20:16:27.023 に答える