Bezeichnung
gl.StencilOp -- legt Schablonentest-Aktionen fest
Übersicht
gl.StencilOp(fail, zfail, zpass)
Beschreibung
Schablonieren, wie z.B. Tiefenpufferung, aktiviert und deaktiviert das Zeichnen auf Pro-Pixel-Basis. Sie zeichnen mit GL-Zeichnungsgrundmustern in die Schablonenebenen, rendern dann Geometrie und Bilder und verwenden die Schablonenebenen, um Teile des Bildschirms auszublenden. Schablonieren wird typischerweise in Multipass-Rendering-Algorithmen verwendet, um Spezialeffekte wie Dekor, Konturen und konstruktive Solide-Geometrie-Rendering zu erzielen.

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
Behält den aktuellen Wert bei.

#GL_ZERO
Setzt den Wert des Schablonenpuffers auf 0.

#GL_REPLACE
Setzt den Wert des Schablonenpuffers auf ref, wie durch gl.StencilFunc() angegeben.

#GL_INCR
Erhöht den aktuellen Schablonenpufferwert. Festgelegt auf den maximal darstellbaren vorzeichenlosen Wert.

#GL_DECR
Verringert den aktuellen Schablonenpufferwert. Festgelegt auf 0.

#GL_INVERT
Bitweise wird der aktuelle Schablonenpufferwert invertiert.

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.

Eingaben
fail
gibt die Aktion an, die durchgeführt werden soll, wenn der Schablonentest fehlschlägt; der Initialwert ist #GL_KEEP (siehe oben)
zfail
gibt die Schablonenaktion an, wenn der Schablonentest bestanden wird, aber der Tiefenpuffer-Test fehlschlägt; zfail akzeptiert die gleichen symbolischen Konstanten wie fail; der Anfangswert ist #GL_KEEP
zpass
gibt die Schablonenaktion an, wenn sowohl der Schablonentest als auch die Tiefenpufferprüfung bestanden wird, oder wenn der Schablonentest bestanden wird und entweder kein Tiefenpuffer oder keine Tiefenpufferprüfung aktiviert ist; zpass akzeptiert die gleichen symbolischen Konstanten wie fail; der Anfangswert ist #GL_KEEP
Fehler
#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.

Verbundene get-operationen
gl.Get() mit einem der folgenden Argumente: #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


Navigation zeigen