Texture, objet
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 modèle. Cet objet de texture modèle a un format spécifique, retourne un type spécifique et implémente plusieurs méthodes.
Différences entre Direct3D9 et Direct3D10 :
- 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 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.
Voici la syntaxe de création de tous les objets de texture (à l’exception d’objets multi-échantillonnés).
Nom de l’objet1 [<Type>] ; |
---|
Les objets multiamplés (Texture2DMS et Texture2DMSArray) nécessitent que la taille de texture soit explicitement indiquée et exprimée en tant que nombre d’échantillons.
Nom de l’objet2 [<Type, Exemples>] ; |
---|
Paramètres
Élément | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Objet |
Objet texture. Doit être l’un des types suivants.
|
||||||||||||||||||||||||
Type |
facultatif. Tout type HLSL scalaire ou type HLSL vectoriel, entouré de crochets d’angle. Le type par défaut est float4. |
||||||||||||||||||||||||
Nom |
Chaîne ASCII qui spécifie le nom de l’objet texture. |
||||||||||||||||||||||||
Échantillons |
Nombre d’échantillons (compris entre 1 et 128). |
Exemple 1
Voici un exemple de déclaration d’un objet texture.
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
Méthodes d’objet Texture
Chaque objet 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 cette méthode.
Texture, méthode | Description | vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|---|---|
CalculateLevelOfDetail | Calculez le LOD, retournez un résultat serré. | x | |||||
CalculateLevelOfDetailUnclamped | Calculez le LOD, retournez un résultat non défini. | x | |||||
Recueillir | Obtient les quatre exemples (composant rouge uniquement) qui seraient utilisés pour l’interpolation biligne lors de l’échantillonnage d’une texture. | x | x | x | |||
GetDimensions | Obtenez la dimension de texture pour un niveau mipmap spécifié. | x | x | x | x | x | x |
GetDimensions (MultiSample) | Obtenez la dimension de texture pour un niveau mipmap spécifié. | x | x | x | |||
GetSamplePosition | Obtenez la position de l’exemple spécifié. | x | x | x | |||
Load | Chargez des données sans filtrage ni échantillonnage. | x | x | x | x | x | x |
Charger (multisample) | Chargez des données sans filtrage ni échantillonnage. | x | x | x | x | ||
Exemple | Échantillonner une texture. | x | x | ||||
SampleBias | Échantillonner une texture, après avoir appliqué la valeur de biais au niveau mipmap. | x | x | ||||
SampleCmp | Échantillonner une texture à l’aide d’une valeur de comparaison pour rejeter des échantillons. | x | x | ||||
SampleCmpLevelZero | Échantillonner une texture (niveau mipmap 0 uniquement), à l’aide d’une valeur de comparaison pour rejeter les échantillons. | x | x | x | x | x | x |
SampleGrad | Échantillonner 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 | Échantillonner une texture au niveau mipmap spécifié. | x | x | x | x | x | x |
Type de retour
Le type de retour d’une méthode d’objet de texture est float4, sauf indication contraire, à l’exception des objets de texture anticrénelés 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 |
---|---|
float | Float 32 bits (voir Règles à virgule flottante pour connaître les différences par rapport au 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 inclus (voir Règles à virgule flottante pour connaître les différences entre ieee float) |
unorm | Float 32 bits compris entre 0 et 1 inclus (voir Règles à virgule flottante pour connaître les différences entre ieee float) |
n’importe quel type de texture ou struct | Le nombre de composants retournés doit être compris entre 1 et 3 inclus. |
En outre, le type de retour peut être n’importe quel type de texture incluant une structure, mais il doit être inférieur à 4 composants tels qu’un type float1 qui retourne un composant.
Valeurs par défaut pour les composants manquants dans une texture
La valeur par défaut pour les 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 pour l’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 ce formulaire est UNORM ou FLOAT, la valeur par défaut de l’erreur A manquante est 1,0f. Si le formulaire est SINT ou UINT, la valeur par défaut du A manquant 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 | Prise en charge |
---|---|
Modèle de nuanceur 4 et modèles de nuanceur supérieur | Oui |