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 s’applique aux données, car il laisse une surface et avant qu’il ne soit rendu sur 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 rouges, verts et bleus d’une surface sont mappés aux niveaux réels affichés par le système. En définissant des niveaux gamma, vous pouvez faire en sorte que l’écran de l’utilisateur affiche des couleurs flash - rouge lorsque le caractère de l’utilisateur est tourné, vert lorsque le caractère récupère un nouvel élément, et ainsi de suite - sans copier de nouvelles images dans la mémoire tampon d’image pour atteindre l’effet. Vous pouvez également ajuster les niveaux de couleur pour appliquer un biais de couleur aux images de la mémoire tampon arrière.
Il existe toujours au moins une chaîne d’échange (la 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. Il n’y a pas d’attente pour une opération de synchronisation verticale.
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 qu’ils ne soient envoyés au convertisseur numérique à analogique (DAC) pour l’affichage.
Niveaux de rampe gamma
Dans Direct3D, le terme « rampe gamma » décrit un ensemble de valeurs qui mappent le niveau d’un composant de couleur spécifique ( 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 est effectué par le biais de trois tables de recherche, une pour chaque composant de couleur.
Voici comment cela fonctionne : Direct3D prend un pixel à partir de la mémoire tampon d’images et évalue ses composants de couleur rouge, vert et bleu individuels. 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 rampe en les graphe, comme indiqué dans les deux graphiques suivants. Le graphique gauche affiche une rampe qui ne modifie pas les couleurs du tout. Le graphique droit montre une rampe qui impose un biais négatif au composant de couleur auquel il est appliqué.
Les éléments de tableau du graphique sur la 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 elle ne modifie pas les valeurs d’entrée avant qu’elles ne soient affichées. Le graphique de droite fournit plus de variantes ; sa rampe contient des valeurs comprises entre 0 dans le premier élément et 32768 dans le dernier élément. L’effet est que 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 toutes 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 efficaces que Direct3D utilise pour mapper les composants de couleur de mémoire tampon de trame aux nouveaux niveaux qui seront affichés. Vous pouvez définir et récupérer des niveaux de rampe pour la surface principale 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 256 tableaux d’éléments de WORD, un tableau chacun contenant 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 calibrar 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ée fréquemment. La définition d’une rampe gamma étalonnée fournit une valeur gamma cohérente et absolue pour l’utilisateur, quel que soit 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, puis examinez le membre Caps2 de la structure de 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 sont utilisés uniquement lorsque votre application est en mode plein écran et exclusif. Chaque fois que votre application passe en mode normal, les niveaux de rampe sont mis de côté, en 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 vérifier 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 si un calibrator est installé.
Rubriques connexes