Partager via


Contrôles Gamma (Direct3D 9)

Les contrôles gamma vous permettent de modifier la façon dont le système affiche le contenu de la surface, sans affecter le contenu de la surface elle-même. Considérez ces contrôles comme des filtres très simples que Direct3D applique aux données en sortant d’une surface et avant qu’elles ne s’affichent à l’écran.

Les contrôles gamma sont une propriété d’une chaîne d’échange. Les contrôles Gamma permettent de modifier dynamiquement la façon dont les niveaux rouge, vert et bleu d’une surface sont mappés aux niveaux réels affichés par le système. En définissant les niveaux gamma, vous pouvez faire clignoter l’écran de l’utilisateur en couleurs ( rouge lorsque le caractère de l’utilisateur est photographié, vert lorsque le caractère récupère un nouvel élément, etc.) sans copier de nouvelles images dans la mémoire tampon de l’image pour obtenir l’effet. Vous pouvez également ajuster les niveaux de couleur pour appliquer un biais de couleur aux images dans la mémoire tampon arrière.

Il existe toujours au moins une chaîne d’échange (chaîne d’échange implicite) pour chaque appareil, car Direct3D 9 a une chaîne d’échange comme propriété de l’appareil. Étant donné que la rampe gamma est une propriété de la chaîne d’échange, la rampe gamma peut être appliquée lorsque la chaîne d’échange est fenêtré. La rampe gamma prend effet immédiatement. Aucune opération de synchronisation verticale n’est en attente.

Les méthodes SetGammaRamp et GetGammaRamp vous permettent de manipuler les niveaux de rampe qui affectent les composants de couleur rouge, vert et bleu des pixels de la surface avant d’être envoyés au convertisseur numérique-analogique (DAC) pour l’affichage.

Niveaux de la rampe gamma

Dans Direct3D, le terme de rampe gamma décrit un ensemble de valeurs qui mappent le niveau d’un composant de couleur particulier (rouge, vert, bleu) pour tous les pixels de la mémoire tampon d’image aux nouveaux niveaux reçus par la DAC pour l’affichage. Le remapping s’effectue au moyen de trois tables de recherche, une pour chaque composant de couleur.

Voici comment cela fonctionne : Direct3D prend un pixel de la mémoire tampon d’image et évalue ses composants de couleur rouge, vert et bleu. Chaque composant est représenté par une valeur comprise entre 0 et 65535. Direct3D prend la valeur d’origine et l’utilise pour indexer un tableau de 256 éléments (la rampe), où chaque élément contient une valeur qui remplace celle d’origine. Direct3D effectue ce processus de recherche et de remplacement pour chaque composant de couleur de chaque pixel dans la mémoire tampon d’image, modifiant ainsi les couleurs finales pour tous les pixels à l’écran.

Il est pratique de visualiser les valeurs de la rampe en les graphiques, comme indiqué dans les deux graphiques suivants. Le graphique de gauche montre une rampe qui ne modifie pas les couleurs du tout. Le graphique de droite montre une rampe qui impose un biais négatif au composant de couleur auquel il est appliqué.

graphiques des valeurs de la rampe gamma

Les éléments tableaux du graphique à gauche contiennent des valeurs identiques à leur index : 0 dans l’élément à l’index 0 et 65535 à l’index 255. Ce type de rampe est la valeur par défaut, car il ne modifie pas les valeurs d’entrée avant qu’elles ne soient affichées. Le graphique de droite fournit plus de variation ; sa rampe contient des valeurs comprises entre 0 dans le premier élément et 32768 dans le dernier élément, avec des valeurs comprises uniformément entre les deux. En effet, le composant de couleur qui utilise cette rampe apparaît désactivé sur l’affichage. Vous n’êtes pas limité à l’utilisation de graphiques linéaires ; si votre application peut affecter un mappage arbitraire si nécessaire. Vous pouvez même définir les entrées sur tous les zéros pour supprimer complètement un composant de couleur de l’affichage.

Définition et récupération des niveaux de rampe gamma

Les niveaux de rampe gamma sont des tables de recherche que Direct3D utilise pour mapper les composants de couleur de la mémoire tampon d’image aux nouveaux niveaux qui seront affichés. Vous pouvez définir et récupérer des niveaux de rampe pour la surface primaire en appelant les méthodes SetGammaRamp et GetGammaRamp . SetGammaRamp accepte deux paramètres et GetGammaRamp accepte un paramètre. Pour SetGammaRamp, le premier paramètre est D3DSGR_CALIBRATE ou D3DSGR_NO_CALIBRATION. Le deuxième paramètre, pRamp, est un pointeur vers une structure D3DGAMMARAMP . La structure D3DGAMMARAMP contient trois tableaux de 256 éléments de WORD, un tableau contenant chacun les rampes gamma rouges, vertes et bleues. GetGammaRamp a un paramètre qui prend un pointeur vers un type D3DGAMMARAMP qui sera rempli avec la rampe gamma actuelle.

Vous pouvez inclure la valeur D3DSGR_CALIBRATE pour le premier paramètre de SetGammaRamp pour appeler le calibrateur lors de la définition de nouveaux niveaux gamma. L’étalonnage des rampes gamma entraîne une surcharge de traitement et ne doit pas être utilisé fréquemment. La définition d’une rampe gamma étalonnée fournit une valeur gamma absolue et cohérente pour l’utilisateur, quels que soient l’adaptateur d’affichage et le moniteur.

Tous les systèmes ne prennent pas en charge l’étalonnage gamma. Pour déterminer si l’étalonnage gamma est pris en charge, appelez GetDeviceCaps et examinez le membre Caps2 de la structure D3DCAPS9 associée une fois la méthode retournée. Si l’indicateur de capacité D3DCAPS2_CANCALIBRATEGAMMA est présent, l’étalonnage gamma est pris en charge.

Lorsque vous définissez de nouveaux niveaux de rampe, gardez à l’esprit que les niveaux que vous définissez dans les tableaux ne sont utilisés que lorsque votre application est en mode plein écran exclusif. Chaque fois que votre application passe en mode normal, les niveaux de la rampe sont mis de côté, prenant effet à nouveau lorsque l’application rétablit le mode plein écran.

Si l’appareil ne prend pas en charge les rampes gamma dans le mode de présentation actuel de la chaîne d’échange (plein écran ou fenêtré), aucune valeur d’erreur n’est retournée. Les applications peuvent case activée les bits de capacité D3DCAPS2_FULLSCREENGAMMA et D3DCAPS2_CANCALIBRATEGAMMA dans le membre Caps2 du type D3DCAPS9 pour déterminer les fonctionnalités de l’appareil et déterminer si un étalonneur est installé.

Direct3D Surfaces