Partager via


fonction glBlendFunc

La fonction glBlendFunc spécifie l’arithmétique des pixels.

Syntaxe

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

Paramètres

sfactor

Spécifie la façon dont les facteurs de fusion de sources rouge, vert, bleu et alpha sont calculés. Neuf constantes symboliques sont acceptées : GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA et GL_SRC_ALPHA_SATURATE.

dfactor

Spécifie la façon dont les facteurs de fusion de destination rouge, vert, bleu et alpha sont calculés. Huit constantes symboliques sont acceptées : GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA et GL_ONE_MINUS_DST_ALPHA.

Valeur renvoyée

Cette fonction ne retourne pas de valeur.

Codes d’erreur

Les codes d’erreur suivants peuvent être récupérés par la fonction glGetError .

Name Signification
GL_INVALID_ENUM
Sfactor ou dfactor n’était pas une valeur acceptée.
GL_INVALID_OPERATION
La fonction a été appelée entre un appel à glBegin et l’appel correspondant à glEnd.

Notes

En mode RVB, les pixels peuvent être dessinés à l’aide d’une fonction qui combine les valeurs RVBA entrantes (sources) avec les valeurs RVBA qui se trouvent déjà dans le framebuffer (valeurs de destination). Par défaut, la fusion est désactivée. Utilisez glEnable et glDisable avec l’argument GL_BLEND pour activer et désactiver la fusion.

Quand cette option est activée, glBlendFunc définit l’opération de fusion. Le paramètre sfactor spécifie les neuf méthodes utilisées pour mettre à l’échelle les composants de couleur source. Le paramètre dfactor spécifie les huit méthodes utilisées pour mettre à l’échelle les composants de couleur de destination. Les onze méthodes possibles sont décrites dans le tableau suivant. Chaque méthode définit quatre facteurs d’échelle un pour le rouge, le vert, le bleu et l’alpha.

Dans le tableau et dans les équations suivantes, les composants de couleur source et de destination sont appelés (R? , G? , B? , A? ) et (Rd , Gd , Bd , Ad ). Ils sont compris comme ayant des valeurs entières comprises entre zéro et (kR , kG , kR , kA ), où

kR = 2mR - 1

kG = 2mG - 1

kB = 2mB - 1

kA = 2mA - 1

et (mR , mG , mB , mA ) est le nombre de plans de bits rouge, vert, bleu et alpha.

Les facteurs d’échelle source et de destination sont appelés (sR , sG , sB , sA ) et (dR , dG , dB , dA ). Les facteurs d’échelle décrits dans le tableau, indiqués (fR , fG , fB , fA ), représentent les facteurs source ou de destination. Tous les facteurs d’échelle ont une plage [0,1].

Paramètre (fR , fG , fB , fA )
GL_ZERO (0,0,0,0)
GL_ONE (1,1,1,1)
GL_SRC_COLOR (R? / kR , G? / kG , B? / kB , A? / kA )
GL_ONE_MINUS_SRC_COLOR (1,1,1,1) - (R? / kR , G? / kG , B? / kB , A? / kA )
GL_DST_COLOR (Rd) / kR , Gd / kG , Bd / kB , Ad / kA )
GL_ONE_MINUS_DST_COLOR (1,1,1,1) - (Rd / kR , Gd / kG , Bd / kB , Ad / kA )
GL_SRC_ALPHA (A? / kA , A? / kA , A? / kA , A? / kA )
GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) - (A? / kA , A? / kA , A? / kA , A? / kA )
GL_DST_ALPHA (Ad / kA , Ad / kA , Ad / kA , Ad / kA )
GL_ONE_MINUS_DST_ALPHA (1,1,1,1) - (Ad / kA , Ad / kA , AdkA , Ad / / kA )
GL_SRC_ALPHA_SATURATE (i,i,i, 1)

Dans le tableau,

i = min (A? , kA - D ) / kA

Pour déterminer les valeurs RVBA fusionnées d’un pixel lors du dessin en mode RVBA, le système utilise les équations suivantes :

R (d) = min( kR , R? sR + RddR )

G (d) = min( kG , G? sG + GddG )

B (d) = min( kB, B? sB + BddB )

A (d) = min( kA , A? sA + AdD A )

Malgré la précision apparente des équations ci-dessus, l’arithmétique de fusion n’est pas exactement spécifiée, car la fusion fonctionne avec des valeurs de couleur d’entier imprécises. Toutefois, un facteur de fusion qui doit être égal à un est garanti de ne pas modifier sa multiplicand, et un facteur de fusion égal à zéro réduit son multiplicand à zéro. Ainsi, par exemple, quand sfactor est GL_SRC_ALPHA, dfactor est GL_ONE_MINUS_SRC_ALPHA et A ? est égal à kA, les équations réduisent au remplacement simple :

Rd = R ?

Gd = G?

Bd = B?

Ad = A?

Exemples

La transparence est mieux implémentée à l’aide de glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) avec des primitives triées de la plus lointaine à la plus proche. Notez que ce calcul de transparence ne nécessite pas la présence de plans de bits alpha dans le framebuffer.

Vous pouvez également utiliser glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) pour le rendu des points et des lignes anticrénelés dans un ordre arbitraire.

Pour optimiser l’anticrénelage des polygones, utilisez glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE) avec des polygones triés du plus proche au plus lointain. (Pour plus d’informations sur l’anticrénelage de polygones, consultez l’argument GL_POLYGON_SMOOTH dans glEnable .) Les plans de bits alpha de destination, qui doivent être présents pour que cette fonction de fusion fonctionne correctement, stockent la couverture accumulée.

L’alpha entrante (source) est une opacité matérielle, allant de 1,0 (KA ), représentant l’opacité complète, à 0,0 (0), représentant une transparence totale.

Lorsque vous activez plusieurs tampons de couleurs pour le dessin, chaque mémoire tampon activée est fusionnée séparément et le contenu de la mémoire tampon est utilisé pour la couleur de destination. (Voir glDrawBuffer.)

La fusion affecte uniquement le rendu RVBA. Il est ignoré par les convertisseurs d’index de couleur.

Les fonctions suivantes récupèrent des informations relatives à glBlendFunc :

glGet avec GL_BLEND_SRC d’arguments

glGet avec GL_BLEND_DST d’arguments

glIsEnabled avec argument GL_BLEND

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge
Windows 2000 Server [applications de bureau uniquement]
En-tête
Gl.h
Bibliothèque
Opengl32.lib
DLL
Opengl32.dll

Voir aussi

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc