Partager via


Textures à éléments multiples (Direct3D 9)

Les textures traditionnelles sont considérées comme des textures à élément unique. Les textures à éléments multiples permettent aux applications d’écrire simultanément dans plusieurs éléments d’une texture à partir du nuanceur de pixels. Le résultat du passage de rendu suivant est qu’une application peut utiliser un ou plusieurs éléments comme texture à élément unique, c’est-à-dire comme entrées dans le nuanceur de pixels. Ces éléments supplémentaires peuvent être considérés comme un magasin temporaire pour les résultats intermédiaires qui seront utilisés ultérieurement par l’application.

La première génération de matériel qui expose cette fonctionnalité présente les restrictions suivantes :

  • Toutes les surfaces de texture à plusieurs éléments seront allouées automatiquement. Cette limitation est résolue en la traitant comme un nouveau type de format de surface avec plusieurs canaux RVBA entrelacés.
  • Tous les éléments de la texture d’éléments multiples peuvent avoir la même profondeur de bits. Cette limitation est exprimée par le nom des nouveaux formats de surface.
  • Une texture à plusieurs éléments ne peut pas être la texture primaire/displayable. En d’autres termes, il doit être hors écran uniquement. Cette limitation est exprimée par l’énumération au format surface.
  • Aucun dithering, test alpha, buée, mélange, raster-op ou masquage n’est autorisé. Aucun traitement de nuanceur post-pixels n’est effectué, à l’exception du test z et du test de gabarit.
  • La texture ne peut pas être un mipmap. La création de la chaîne mip échoue.
  • Le même élément ne peut pas être défini en tant que texture en même temps qu’il s’agit d’une cible de rendu. Toutefois, différents éléments de la même surface de texture à éléments multiples peuvent être simultanément des textures et des cibles de rendu.
  • Aucun anti-attirail n’est pris en charge.
  • Les surfaces de texture à plusieurs éléments, lorsqu’elles sont utilisées comme texture, ne peuvent pas être filtrées. Cette limitation peut être vérifiée à l’aide de CheckDeviceFormat.
  • Les surfaces de texture à plusieurs éléments ne peuvent pas être verrouillées.
  • Plusieurs surfaces de texture à plusieurs éléments peuvent être utilisées simultanément en affectant chacune à différentes étapes, comme avec les textures normales.
  • Les surfaces de texture à plusieurs éléments prennent en charge la conversion de gamma de 2.2 à 1.0 lors d’une opération de lecture, comme avec d’autres formats de texture.
  • Certaines implémentations n’appliquent pas le masque d’écriture de sortie (D3DRS_COLORWRITEENABLE). Ceux qui peuvent avoir des masques d’écriture de couleur indépendants. Cela est exprimé à l’aide d’un nouveau bit de fonctionnalité. Le nombre de masques d’écriture couleur indépendants disponibles est égal au nombre maximal d’éléments dont l’appareil est capable.
  • Clear efface tous les éléments de la texture à éléments multiples qui est définie comme cible de rendu.

L’utilisation de textures à éléments multiples suit les étapes suivantes :

  1. Les applications découvrent la prise en charge de cette fonctionnalité en vérifiant la disponibilité des formats de texture à plusieurs éléments.
  2. L’application crée ces surfaces en appelant CreateTexture.
  3. L’application définit la surface en tant que cible de rendu à l’aide de l’appel SetRenderTarget . Le nuanceur de pixels fournit une sortie aux surfaces à l’aide de l’instruction mov - ps .
  4. SetTexture est appelé pour définir une surface de texture à plusieurs éléments sur une étape particulière. Comme pour les autres textures, la même surface peut être définie sur plusieurs étapes à la fois.
  5. SetSamplerState est appelé pour définir D3DSAMP_ELEMENTINDEX sur le numéro d’élément approprié dans la texture à plusieurs éléments à partir de laquelle l’échantillonneur échantillonne. La valeur par défaut de cet état est 0, ce qui signifie que les textures autres que plusieurs éléments fonctionnent. La définition de cet état sur un nombre inapproprié entraîne un comportement non défini : si la texture à plusieurs éléments ne comporte que deux éléments de large, mais que l’échantillonneur est invité à échantillonner à partir du quatrième élément, par exemple.

Prise en charge des API

Voici un résumé des éléments d’API qui prennent en charge les textures à plusieurs éléments :

  • Le format surface D3DFMT_MULTI2_ARGB8 exprime la nature entrelacée du format.

  • L’état de l’échantillonneur D3DSAMP_ELEMENTINDEX indique l’index d’élément à utiliser.

  • Les états de rendu suivants prennent en charge les textures à éléments multiples :

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLE s’applique au rendu de la cible (ou de l’élément) zéro.

  • L’indicateur D3DPMISCCAPS_INDEPENDENTWRITEMASKS indique que l’appareil prend en charge les masques d’écriture indépendants pour plusieurs textures d’éléments ou plusieurs cibles de rendu.

Pipeline de pixels