glBlendFuncSeparate

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glBlendFuncSeparate

Name

glBlendFuncSeparate - setzt getrennte Blending-Faktoren für RGB- und Alphakomponenten.


Delphi-Spezifikation

procedure glBlendFuncSeparate(sfactorRGB: TGLenum; dfactorRGB: TGLenum;
                              sfactorAlpha: TGLenum; dfactorAlpha: TGLenum);


Parameter

sfactorRGB Gibt den Rot-, Grün- und Blauanteil des Quell-Blendfaktors an. Folgende symbolische Konstanten sind erlaubt : GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA und GL_SRC_ALPHA_SATURATE.

Defaultwert ist GL_ONE.

dfactorRGB Gibt den Rot-, Grün- und Blauanteil des Ziel-Blendfaktors an. Folgende symbolische Konstanten sind erlaubt : GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA und GL_SRC_ALPHA_SATURATE.

Defaultwert ist GL_ZERO.

sfactorAlpha Gibt den Alphaanteil des Quell-Blendfaktors an. Folgende symbolische Konstanten sind erlaubt : GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA und GL_SRC_ALPHA_SATURATE.

Defaultwert ist GL_ONE.

dfactorAlpha Gibt den Alphaanteil des Ziel-Blendfaktors an. Folgende symbolische Konstanten sind erlaubt : GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA und GL_SRC_ALPHA_SATURATE.

Defaultwert ist GL_ZERO.


Beschreibung

glBlendFuncSeparate ist eine Erweiterung von glBlendFunc und erlaubt es, für RGB- und Alphakomponenten getrennte Blendfaktoren für die momentan gesetzte Blendfunktion (glBlendFunc) anzugeben.

sfactorRGB und sfactorAlpha geben dabei an, welche Faktoren benutzt werden, um die Quellfarbkomponenten zu skalieren. dfactorRGB und dfactorAlpha geben an, welche der Faktoren benutzt werden, um die Zielfarbkomponenten zu skalieren. Die möglichen Faktoren werden in der folgenden Tabelle beschrieben, wobei sfactorRGB und dfactorRGB insgesamt drei Skalierungsfaktoren für die drei Komponenten einer RGB-Farbe besitzen, während sfactorAlpha und dfactorAlpha nur eine Komponente für den Alphakanal benötigt.

In der Tabelle (und allen folgenden Gleichungen), werden Quell- bzw. Zielfarbkomponenten als (Rs, Gs, Bs, As) und (Rd, Gd, Bd, Ad) dargestellt. Diese Komponenten besitzen Ganzzahlwerte, die zwischen 0 und (kR, kG, kB, kA) liegen, wobei

kc = 2^mc - 1;

und (mR, mG, mB, mA) gleich der Anzahl der Rot-, Grün-, Blau- und Alphabits ist.

Die mit (Rc, Gc, Bc, Ac) bezeichneten Farbkomponenten sind diejenigen, die vor dem Aufruf von glBlendFuncSeparate mit glBlendColor gesetzt wurden. (Rc, Gc, Bc, Ac) werden nicht mit (kR, kG, kB, kA) skaliert, da sie bereits im Intervall [0,1] liegen.

Quell- und Zielskalierungsfaktoren werden als (sR, sG, sB, sA) und (dR, dG, dB, dA) angegeben. Die in der Tabelle beschriebenen Skalierungsfaktoren, angegeben als (fR, fG, fB) und fA, repräsentieren entweder Quell- oder Zielfaktoren der RGB- und Alphakomponenten. Alle Skalierungsfaktoren liegen im Intervall [0,1].

Parameter (fR, fG, fB) fA
GL_ZERO (0, 0, 0) 0
GL_ONE (1, 1, 1) 1
GL_SRC_COLOR (Rs/kR, Gs/kG, Bs/kB) As/kA
GL_ONE_MINUS_SRC_COLOR (1, 1, 1) - (Rs/kR, Gs/kG, Bs/kB) 1 - As/kA
GL_DST_COLOR (Rd/kR, Gd/kG, Bd/kB) Ad/kA
GL_ONE_MINUS_DST_COLOR (1, 1, 1) - (Rd/kR, Gd/kG, Bd/kB) 1 - Ad/kA
GL_SRC_ALPHA (As/kA, As/kA, As/kA) As/kA
GL_ONE_MINUS_SRC_ALPHA (1, 1, 1) - (As/kA, As/kA, As/kA) 1 - As/kA
GL_DST_ALPHA (Ad/kA, Ad/kA, Ad/kA) Ad/kA
GL_ONE_MINUS_DST_ALPHA (1, 1, 1) - (Ad/kA, Ad/kA, Ad/kA) 1 - Ad/kA
GL_SRC_ALPHA_SATURATE (i, i, i) 1
GL_CONSTANT_COLOR (Rc, Gc, Bc) Ac
GL_ONE_MINUS_CONSTANT_COLOR (1, 1, 1, 1) - (Rc, Gc, Bc) 1 - Ac
GL_CONSTANT_ALPHA (Ac, Ac, Ac) Ac
GL_ONE_MINUS_CONSTANT_ALPHA (1, 1, 1) - (Ac, Ac, Ac) 1 - Ac

In der Tabelle ist

i = min(As, kA - Ad) /kA

Um die gemischten RGBA-Werte eines Pixels im RGBA-Modus zu ermitteln, nutzt das System standardmäßig folgende Gleichungen :

Rd = min(kR, RssR + RddR)
Gd = min(kG, GssG + GddR)
Bd = min(kB, BssB + BddB)
Ad = min(kA, AssB + AddA)

Trotz der offensichtlichen Präzision obiger Gleichungen, ist die Blendarithmetik aufgrund Blendoperationen mit unpräzisen Ganzzahlwerten nicht exakt spezifiziert. Bei einem Blendfaktor von 1 ist jedoch garantiert, dass dieser seinen Wert nicht verändert, und ein Blendfaktor gleich 0 setzt seinen Wert auf 0. Wenn sfactorAlpha z.B. GL_SCR_ALPHA ist, und dfactorAlpha gleich GL_ONE_MINUS_SRC_ALPHA, dann ist As gleich kA, und die Funktionen können auf ihre einfache Entsprechung reduziert werden :

Rd = Rs
Gd = Gs
Bd = Bs
Ad = As

Ab GL Version 1.2 oder falls die Erweiterung für Blendfunktionen vorhanden ist, werden die gemischten RGBA-Werte abhängig von der definierten Blendfunktion gesetzt. Siehe dazu glBlendEquation.


Hinweise

glBlendFuncSeparate ist erst ab OpenGL Version 1.4 oder höher nutzbar.

Der Alpha-Eingangswert (Quelle) kann im Endeffekt als Materialdurchlässigkeit betrachtet werden, von KA = 1, also komplett solide, bis KA= 0 reichend, was ein komplett transparentes (=unsichtbares) Material darstellen würde.

Wenn mehr als ein Farbpuffer zum Rendern aktiv ist, wird GL unter Nutzung des entsprechenden Pufferinhaltes als Zielkomponente für jeden dieser Puffer ein eigenes Blending durchführen. Siehe glDrawBuffer.

Blending funktioniert nur im RGBA-Modus, nicht jedoch im Farbindex-Modus.

Blending ist defaultmässig deaktiviert, kann jedoch mit glEnable/glDisable und dem Token GL_BLEND gesteuert werden.


Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn sfactorRGB, sfactorAlpha, dfactorRGB oder dfactorAlpha keine gültigen Werte darstellen.

GL_INVALID_OPERATION wird generiert, wenn glBlendFuncSeparate in einem glBegin-glEnd Block aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit Token GL_BLEND_SRC_RGB
glGet mit Token GL_BLEND_SRC_ALPHA
glGet mit Token GL_BLEND_DST_RGB
glGet mit Token GL_BLEND_DST_ALPHA
glGet mit Token GL_BLEND_COLOR
glIsEnabled mit dem Argument GL_BLEND.


Siehe auch

glAlphaFunc, glClear, glBlendColor, glBlendEquation, glBlendFunc, glDrawBuffer, glEnable, glLogicOp, glStencilFunc