État de test alpha (Direct3D 9)
Les applications C++ peuvent utiliser le test alpha pour contrôler le moment où les pixels sont écrits sur la surface de la cible de rendu. En utilisant l’état de rendu D3DRS_ALPHATESTENABLE , votre application définit l’appareil Direct3D actuel de sorte qu’il teste chaque pixel en fonction d’une fonction de test alpha. Si le test réussit, le pixel est écrit sur la surface. Si ce n’est pas le cas, Direct3D ignore le pixel. Sélectionnez la fonction de test alpha avec l’état de rendu D3DRS_ALPHAFUNC . Votre application peut définir une valeur alpha de référence pour tous les pixels à comparer à l’aide de l’état de rendu D3DRS_ALPHAREF .
L’utilisation la plus courante des tests alpha est d’améliorer les performances lors de la rastérisation d’objets presque transparents. Si les données de couleur en cours de rastérisation sont plus opaques que la couleur d’un pixel donné (D3DPCMPCAPS_GREATEREQUAL), le pixel est écrit. Sinon, le rastériseur ignore complètement le pixel, ce qui permet d’enregistrer le traitement nécessaire pour fusionner les deux couleurs. L’exemple de code suivant vérifie si une fonction de comparaison donnée est prise en charge et, le cas échéant, définit les paramètres de fonction de comparaison nécessaires pour améliorer les performances pendant le rendu.
// This code example assumes that pCaps is a
// D3DCAPS9 structure that was filled with a
// previous call to IDirect3D9::GetDeviceCaps.
if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}
// If the comparison is not supported, render anyway.
// The only drawback is no performance gain.
Tous les matériels ne prennent pas en charge toutes les fonctionnalités de test alpha. Vous pouvez case activée les fonctionnalités de l’appareil en appelant la méthode IDirect3D9::GetDeviceCaps. Après avoir récupéré les fonctionnalités de l’appareil, case activée le membre AlphaCmpCaps de la structure D3DCAPS9 associée pour la fonction de comparaison souhaitée. Si le membre AlphaCmpCaps contient uniquement la fonctionnalité D3DPCMPCAPS_ALWAYS ou uniquement la fonctionnalité D3DPCMPCAPS_NEVER, le pilote ne prend pas en charge les tests alpha.
Rubriques connexes