gl.StencilOp(fail, zfail, zpass)
Der Schablonentest eliminiert bedingt ein Pixel basierend auf dem Ergebnis
eines Vergleichs zwischen dem Wert im Schablonenpuffer und einem Referenzwert.
Um den Test zu aktivieren und zu deaktivieren, rufen Sie
gl.Enable() und gl.Disable() mit dem
Argument #GL_STENCIL_TEST
auf; um es zu steuern, rufen Sie den Befehl
gl.StencilFunc() auf.
gl.StencilOp()
nimmt drei Argumente an, die anzeigen, was mit dem
gespeicherten Schablonenwert passiert, während das Schablonieren aktiviert
ist. Wenn der Schablonentest fehlschlägt, wird keine Änderung an den
Farb- oder Tiefenpuffern des Pixels vorgenommen und fail
gibt an, was
mit dem Inhalt des Schablonenpuffer passiert. Die folgenden acht Aktionen
sind möglich.
#GL_KEEP
#GL_ZERO
#GL_REPLACE
#GL_INCR
#GL_DECR
#GL_INVERT
Schablonenpufferwerte werden als vorzeichenlose Ganzzahlen behandelt. Beim
Inkrementieren und Dekrementieren werden die Werte auf 0 und 2^n - 1 festgelegt,
wobei n der Wert ist, der bei der Abfrage von #GL_STENCIL_BITS
zurückgegeben
wird.
Die beiden anderen Argumente zu gl.StencilOp()
spezifizieren
Schablonenpufferaktionen, die davon abhängen, ob nachfolgende
Tiefenpuffer-Tests erfolgreich (zpass
) oder fehlgeschlagen
(zfail
) sind. Siehe gl.DepthFunc für Details. Die Aktionen
werden mit den gleichen acht symbolischen Konstanten wie fail
angegeben. Beachten Sie, dass zfail
ignoriert wird, wenn
es keinen Tiefenpuffer gibt oder wenn der Tiefenpuffer nicht
aktiviert ist. In diesen Fällen geben fail
und zpass
die Schablonenaktion an, wenn der Schablonentest fehlschlägt bzw.
besteht.
Zunächst ist der Schablonentest deaktiviert. Wenn es keinen Schablonenpuffer
gibt, kann keine Schablonenmodifikation stattfinden und es ist, als ob der
Schablonentest immer bestanden würde, unabhängig von einem Aufruf von
gl.StencilOp()
.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
#GL_KEEP
(siehe oben)zfail
akzeptiert die
gleichen symbolischen Konstanten wie fail
; der Anfangswert ist #GL_KEEP
zpass
akzeptiert die gleichen symbolischen Konstanten wie
fail
; der Anfangswert ist #GL_KEEP
#GL_INVALID_ENUM
wird erzeugt, wenn fail
, zfail
oder zpass
ein anderer
Wert als die acht definierten konstanten Werte ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.StencilOp()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
#GL_STENCIL_FAIL
,
#GL_STENCIL_PASS_DEPTH_PASS
, #GL_STENCIL_PASS_DEPTH_FAIL
,
#GL_STENCIL_BACK_FAIL
oder #GL_STENCIL_BITS
gl.IsEnabled() mit dem Argument #GL_STENCIL_TEST