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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top