glActiveStencilFaceEXT

Aus DGL Wiki
Version vom 10. November 2009, 18:04 Uhr von Dj3hut1 (Diskussion | Beiträge) (Neu erstellt)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

glActiveStencilFaceEXT

Name

glActiveStencilFaceEXT - Legt für zweiseitige Stenciltests die aktive Seite fest.


Delphi-Spezifikation

procedure glActiveStencilFaceEXT(face : GLenum);

Parameter

face Aktive Seite für zweiseitigen Stenciltest, entweder GL_BACK oder GL_FRONT.


Beschreibung

Setzt für zweiseite Stenciltests die aktive Stencilseite, welche bestimmt ob Stencilbezogene Befehle den Stencilzustand der Vorder- oder der Rückseite aktualisieren. Stencil-Befehle (glStencilFunc, glStencilOp und glStencilMask), die den Stencilzustand aktualisieren, aktualisieren den vorderen Stencilzustand, falls die aktive Stencilseite GL_FRONT und den hinteren Stencilzustand, falls die aktive Stencilseite GL_BACK ist. Zusätzlich geben Abfragen des Stencilzustands abhängig von der aktuell aktiven Stencilsteite den vorderen oder hinteren Stencilzustand zurück.

Mit zweiseiten Stenciltests erhält man möglicherweise eine bessere Performance für volumetrischen Stencilschatten und Constructive Solid Geometry (CSG)-Algorithmen, da nur noch einer statt zwei Renderpässen notwendig ist.

Hinweise

Die Funktion hat nur Auswirkungen, wenn der zweiseitige Stenciltest mithilfe von glEnable ( GL_STENCIL_TEST_TWO_SIDE_EXT ) aktiviert wurde.

Initial ist GL_FRONT aktiv.

Diese Funktion ( und die zugehörige Extension ) sollte möglichst nicht mehr ab OpenGL 2.0 verwendet werden, da dort bereits die Extension GL_ATI_separate_stencil integriert ist.

Fehlermeldungen

GL_INVALID_VALUE wird generiert, wenn face weder GL_BACK noch GL_FRONT ist.

GL_INVALID_OPERATION wird generiert wenn glActiveStencilFuncEXT innerhalb eines glBegin-glEnd Blocks aufgerufen wird.

Beispiele

Stencilschatten

Stencilschatten können mithilfe dieser Funktion und der Extension GL_EXT_stencil_wrap folgendermaßen in einem einzigen Pass gerendert werden :

glDepthMask(0);
glColorMask(0,0,0,0);
glDisable(GL_CULL_FACE);
glEnable(GL_STENCIL_TEST);
glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT);

glActiveStencilFaceEXT(GL_BACK);
glStencilOp(GL_KEEP,            // stencil test fail
            GL_KEEP,            // depth test fail
            GL_DECR_WRAP_EXT);  // depth test pass
glStencilMask(~0);
glStencilFunc(GL_ALWAYS, 0, ~0);

glActiveStencilFaceEXT(GL_FRONT);
glStencilOp(GL_KEEP,            // stencil test fail
            GL_KEEP,            // depth test fail
            GL_INCR_WRAP_EXT);  // depth test pass
glStencilMask(~0);
glStencilFunc(GL_ALWAYS, 0, ~0);

renderShadowVolumePolygons();


Zugehörige Wertrückgaben

glGet mit Token GL_ACTIVE_STENCIL_FACE_EXT
glIsEnabled mit Token GL_STENCIL_TEST_TWO_SIDE_EXT

Siehe auch

glStencilFunc, glStencilFuncSeparate, glStencilMask, glStencilMaskSeparate, glStencilOp


Hintergrundwissen : Stencilbuffer

Techniken : Volumetrische Stencilschatten

Extension : GL_EXT_stencil_two_side

Englische Originalversion ( Copyright NVIDIA Corporation, 2001-2002. )