Quels sont les différents types d'échantillonneur HLSL pour?
Question
Je travaille avec DX9 / SM3 en ce moment, et la documentation MSDN sur échantillonneurs HLSL semble manquer cruellement à expliquer comment utiliser les différents types d'échantillonneur. Ce qui est pire est qu'ils essaient de couvrir DX9 et DX10 dans un seul article, ils pêle-mêle ensemble tous les mots-clés:
sampler Nom = SamplerType {Texture = << em> texture_variable >; [ state_name = state_value ;] ...};
...
SamplerType
[en] Le type d'échantillonnage, qui est l'un des éléments suivants: sampler , sampler1D , sampler2D , sampler3D , samplerCube , sampler_state , SamplerState .
Les différences entre Direct3D 9 et Direct3D 10:
Direct3D 10 prend en charge un type d'échantillonnage supplémentaire:. SamplerComparisonState
Je reçois le sentiment que, contrairement à ce writeup, SamplerState
est DX10 seulement. Pratiquement tout le code que je vois utilise sampler_state
pour SamplerType . Un exemple rapide de BasicHLSL (DX9):
sampler MeshTextureSampler =
sampler_state
{
Texture = <g_MeshTexture>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
Pourquoi tous les différents _SamplerType_s existent et quand l'utiliser, par exemple, ou sampler
sampler2D
au lieu de sampler_state
? Vous devez être explicite lors de la récupération de toute façon, par exemple tex2D
, texCUBE
, donc ce qui se passe ici?
La solution
Vous avez raison. C'est très étrange.
Il semble que la documentation sur la syntaxe DirectX 9 est erroné. Je ne suis absolument pas un expert de chaque HLSL ou DirectX, mais je ne l'ai toujours vu échantillonneurs en DirectX 9 étant déclarés comme ceci:
SamplerType Name = sampler_state{ Texture = <texture_variable>; [state_name = state_value;] ... };
Je pourrais manquer quelque chose, mais pour moi la syntaxe ci-dessus est plus logique que celui dans la documentation. Vous déclarez un échantillonneur avec un type donné, et spécifie l'état de l'échantillonneur.
Mise à jour: Apparemment, il est faux. J'ai commencé un fil sur les forums officiels et jusqu'à présent, je l'ai seulement obtenu une confirmation qu'il est faux. J'ai aussi envoyé un courrier directement à l'équipe DirectX. Juste pour être du bon côté.
Autres conseils
sampler Name = SamplerType {Texture =; [State_name = state_value;]};
Il est correct! La déclaration est valable uniquement pour les effets.
EDIT: les forums officiels sont sur MSDN. Vous pouvez poster une suggestion ou une erreur en utilisant « la Communauté » Additions.