Objet de texture
Dans Direct3D 10, vous spécifiez les échantillonneurs et les textures indépendamment ; l’échantillonnage de texture est implémenté à l’aide d’un objet de texture avec modèle. Cet objet de texture avec modèle a un format spécifique, retourne un type spécifique et implémente plusieurs méthodes.
Différences entre Direct3D 9 et Direct3D 10 :
- Dans Direct3D 9, les échantillonneurs sont liés à des textures spécifiques.
- Dans Direct3D 10, les textures et les échantillonneurs sont des objets indépendants. Chaque objet de texture avec modèle implémente des méthodes d’échantillonnage de texture qui prennent à la fois la texture et l’échantillonneur comme paramètres d’entrée.
Tous les formats ne sont pas pris en charge pour toutes les fonctions. Vous devez donc utiliser CheckFeatureSupport pour vérifier si un format est pris en charge pour une utilisation particulière.
Voici la syntaxe permettant de créer tous les objets de texture (à l’exception des objets multi-échantillonnés).
Object1 [<Type>] Name; |
---|
Les objets multi-échantillonnés (Texture2DMS et Texture2DMSArray) nécessitent que la taille de texture soit explicitement indiquée et exprimée sous la forme du nombre d’échantillons.
Object2 [<Type, Samples>] Name; |
---|
Paramètres
Item | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Object |
Objet de texture. Doit être l’un des types suivants.
|
||||||||||||||||||||||||
Type |
facultatif. Tout type HLSL scalaire ou type HLSL vectoriel, entouré de crochets pointus. Le type par défaut est float4. |
||||||||||||||||||||||||
Nom |
Chaîne ASCII qui spécifie le nom de l’objet de texture. |
||||||||||||||||||||||||
Exemples |
Le nombre d’échantillons (compris entre 1 et 128). |
Exemple 1
Voici un exemple de déclaration d’un objet de texture.
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
Méthodes d’objet de texture
Chaque objet de texture implémente certaines méthodes ; voici le tableau qui répertorie toutes les méthodes. Consultez la page de référence de chaque méthode pour voir quels objets peuvent utiliser quelle méthode.
Méthode de texture | Description | vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|---|---|
CalculateLevelOfDetail | Calculer le LOD retourne un résultat limité. | x | |||||
CalculateLevelOfDetailUnclamped | Calculer le LOD retourne un résultat non limité. | x | |||||
Gather | Obtient les quatre échantillons (composant rouge uniquement) qui seraient utilisés pour l’interpolation bilinéaire lors de l’échantillonnage d’une texture. | x | x | x | |||
GetDimensions | Obtenez la dimension de texture d’un niveau mipmap spécifié. | x | x | x | x | x | x |
GetDimensions (MultiSample) | Obtenez la dimension de texture d’un niveau mipmap spécifié. | x | x | x | |||
GetSamplePosition | Obtenez la position de l’échantillon spécifié. | x | x | x | |||
Charge | Chargez des données sans filtrage ni échantillonnage. | x | x | x | x | x | x |
Load (Multisample) | Chargez des données sans filtrage ni échantillonnage. | x | x | x | x | ||
Exemple | Échantillonnez une texture. | x | x | ||||
SampleBias | Échantillonnez une texture, après avoir appliqué la valeur de biais au niveau mipmap. | x | x | ||||
SampleCmp | Échantillonnez une texture à l’aide d’une valeur de comparaison pour rejeter des échantillons. | x | x | ||||
SampleCmpLevelZero | Échantillonnez une texture (niveau mipmap 0 uniquement), à l’aide d’une valeur de comparaison pour rejeter des échantillons. | x | x | x | x | x | x |
SampleGrad | Échantillonnez une texture à l’aide d’un dégradé pour influencer la façon dont l’emplacement de l’échantillon est calculé. | x | x | x | x | x | x |
SampleLevel | Échantillonnez une texture au niveau mipmap spécifié. | x | x | x | x | x | x |
Type renvoyé
Le type de retour d’une méthode d’objet de texture est float4, sauf indication contraire, à l’exception des objets de texture anti-alias multi-échantillonnés qui ont toujours besoin du type et du nombre d’échantillons spécifiés. Le type de retour est identique au type de ressource de texture (DXGI_FORMAT). En d’autres termes, il peut s’agir de l’un des types suivants.
Type | Description |
---|---|
virgule flottante | Float 32 bits (voir Règles à virgule flottante pour connaître les différences du float IEEE) |
int | Entier 32 bits signé |
nombre entier non signé | Entier non signé 32 bits |
snorm | Float 32 bits compris entre -1 et 1 (voir Règles à virgule flottante pour connaître les différences du float IEEE) |
unorm | Flotteur 32 bits compris entre 0 et 1 (voir Règles à virgule flottante pour connaître les différences du float IEEE) |
n’importe quel type de texture ou struct | Le nombre de composants retournés doit être compris entre un et trois inclus. |
En outre, le type de retour peut être n’importe quel type de texture incluant une structure, mais il doit être inférieur à quatre composants, par exemple, un type float1 retourne un composant.
Valeurs par défaut pour les composants manquants dans une texture
La valeur par défaut des composants manquants dans un type de ressource de texture est égale à zéro pour n’importe quel composant, à l’exception du composant alpha (A) ; la valeur par défaut du composant A manquant est une. La façon dont celle-ci apparaît au nuanceur dépend du type de ressource de texture. Il prend la forme du premier composant typé qui est réellement présent dans le type de ressource de texture (à partir de la gauche dans l’ordre RVBA). Si cette forme est UNORM ou FLOAT, la valeur par défaut de la valeur A manquante est 1.0f. Si la forme est SINT ou UINT, la valeur par défaut de la valeur A manquante est 0x1.
Par exemple, lorsqu’un nuanceur lit le type de ressource de texture DXGI_FORMAT_R24_UNORM_X8_TYPELESS, les valeurs par défaut pour G et B sont égales à zéro et la valeur par défaut pour A est 1,0f ; lorsqu’un nuanceur lit le type de ressource de texture DXGI_FORMAT_R16G16_UINT, la valeur par défaut de B est égale à zéro et la valeur par défaut pour A est 0x00000001 ; lorsqu’un nuanceur lit le type de ressource de texture DXGI_FORMAT_R16_SINT, les valeurs par défaut pour G et B sont égales à zéro et la valeur par défaut pour A est 0x00000001.
Exemple 2
Voici un exemple d’échantillonnage de texture à l’aide d’une méthode de texture.
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
Modèle de nuanceur minimal
Cet objet est pris en charge dans les modèles de nuanceur suivants.
Modèle de nuanceur | Pris en charge |
---|---|
Modèle de nuanceur 4 et modèles de nuanceur supérieur | oui |