glActiveStencilFaceEXT
Inhaltsverzeichnis
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, glStencilOpSeparate
Hintergrundwissen : Stencilbuffer
Techniken : Volumetrische Stencilschatten
Extension : GL_EXT_stencil_two_side
Englische Originalversion ( Copyright NVIDIA Corporation, 2001-2002. )