2009-08-19 14 views
9

Ich arbeite mit DX9/SM3 im Moment, und die MSDN-Dokumentation auf HLSL samplers scheint zu fehlen deutlich zu erklären, wie die verschiedenen Sampler-Typen zu verwenden. Noch schlimmer ist, sie versuchen, DX9 und DX10 in einem einzigen Artikel zu bedecken, so dass sie durcheinander zusammen alle Schlüsselwörter:Wozu dienen die verschiedenen HLSL-Sampler-Typen?

Sampler Namen = SamplerType {Texture = < texture_variable>; [state_name = state_value;] ...};

...

SamplerType

[in] Der Typ sampler, die eine der folgenden ist: sampler, sampler1D, sampler2D, sampler3D, samplerCUBE, sampler_state, SamplerState.

Unterschiede zwischen Direct3D 9 und Direct3D 10:

Direct3D 10 unterstützt eine zusätzliche sampler Typ: SamplerComparisonState.

Ich habe das Gefühl, dass im Gegensatz zu dieser Zuschreibung, SamplerState DX10 ist nur. Praktisch der gesamte Code, den ich sehe, verwendet sampler_state für SamplerType. Ein kurzes Beispiel aus BasicHLSL (DX9):

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

Warum alle haben die verschiedenen _SamplerType_s existieren und wann würden Sie, verwenden Sie sagen, sampler oder sampler2D statt sampler_state? Sie müssen beim Abrufen trotzdem explizit sein, z. tex2D, texCUBE, was geht hier vor?

Antwort

4

Sie haben Recht. Das ist sehr seltsam.

Es scheint, als ob die Dokumentation zur DirectX 9-Syntax falsch ist. Ich bin keineswegs ein Experte auf entweder HLSL oder DirectX, aber ich habe immer nur Sampler so gesehen erklärte in DirectX 9:

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

ich mir etwas fehlen könnte aber die obige Syntax macht mehr Sinn als der in der Dokumentation. Sie deklarieren einen Sampler mit einem bestimmten Typ und geben den Sampler-Status an.

UPDATE: Anscheinend ist es falsch. Ich habe a thread on the official forums gestartet und bis jetzt habe ich nur eine Bestätigung bekommen, dass es falsch ist. Ich habe auch eine Mail direkt an das DirectX-Team gesendet. Nur um auf der sicheren Seite zu sein.

+2

gewarnt werden, wird [email protected] nicht aktiv überwacht. – Goz

+0

Wusste das nicht, danke. Nun, ich habe auch den betreffenden Artikel bewertet und Feedback gegeben, also wird das vielleicht funktionieren. – Tchami

+0

Danke, froh, dass ich es nicht verloren habe. Ich schaffte es, mein altes DX9 CHM auszugraben und es hatte einen viel saubereren Artikel. DX9 unterstützt sogar Sampler-Arrays, aber Sie würden das nie von der neu verpfuschten MSDN-Seite erfahren. –

0

Sampler Name = SamplerType {Textur =; [state_name = state_value;]};

Es ist korrekt! Die Deklaration gilt nur für Effekte.

EDIT: die offiziellen Foren sind auf MSDN. Sie können einen Vorschlag oder einen Fehler mit "Community Additions" posten.