Name

glStencilOp -	set stencil test actions

Python Specification

glStencilOp
	glStencilOp(fail, zfail, zpass) -> None

C Specification

void glStencilOp( GLenum fail,
                  GLenum zfail,
                  GLenum zpass )

Parameters

fail	 Specifies the action to take when the stencil test
       fails.	 Six symbolic constants	are accepted:
       GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR,	GL_DECR, and
       GL_INVERT. The	initial	value is GL_KEEP.

zfail	 Specifies the stencil action when the stencil test
       passes, but the depth test fails.  zfail accepts the
       same symbolic constants as fail. The initial value is
       GL_KEEP.

zpass	 Specifies the stencil action when both	the stencil
       test and the depth test pass, or when the stencil
       test passes and either	there is no depth buffer or
       depth testing is not enabled.	zpass accepts the same
       symbolic constants as fail. The initial value is
       GL_KEEP.

Description

Stenciling, like depth-buffering, enables and	disables
drawing on a per-pixel basis.	 You draw into the stencil
planes using GL drawing primitives, then render geometry and
images, using	the stencil planes to mask out portions	of the
screen.  Stenciling is typically used	in multipass rendering
algorithms to	achieve	special	effects, such as decals,
outlining, and constructive solid geometry rendering.

The stencil test conditionally eliminates a pixel based on
the outcome of a comparison between the value	in the stencil
buffer and a reference value.	To enable and disable the
test,	call glEnable and glDisable with argument
GL_STENCIL_TEST; to control it, call glStencilFunc.

glStencilOp takes three arguments that indicate what happens
to the stored	stencil	value while stenciling is enabled.  If
the stencil test fails, no change is made to the pixel's
color	or depth buffers, and fail specifies what happens to
the stencil buffer contents.	The following six actions are
possible.

GL_KEEP	  Keeps	the current value.

GL_ZERO	  Sets the stencil buffer value	to 0.

GL_REPLACE	  Sets the stencil buffer value	to ref,	as
                specified by glStencilFunc.

GL_INCR	  Increments the current stencil buffer	value.
                Clamps to the	maximum	representable unsigned
                value.

GL_DECR	  Decrements the current stencil buffer	value.
                Clamps to 0.

GL_INVERT	  Bitwise inverts the current stencil buffer
                value.

Stencil buffer values	are treated as unsigned	integers.
When incremented and decremented, values are clamped to 0
and 2n-1, where n is the value returned by querying
GL_STENCIL_BITS.

The other two	arguments to glStencilOp specify stencil
buffer actions that depend on	whether	subsequent depth
buffer tests succeed (zpass) or fail (zfail) (see
glDepthFunc).	 The actions are specified using the same six
symbolic constants as	fail.  Note that zfail is ignored when
there	is no depth buffer, or when the	depth buffer is	not
enabled.  In these cases, fail and zpass specify stencil
action when the stencil test fails and passes, respectively.

Notes

Initially the	stencil	test is	disabled.  If there is no
stencil buffer, no stencil modification can occur and	it is
as if	the stencil tests always pass, regardless of any call
to glStencilOp.

Errors

GL_INVALID_ENUM is generated if fail,	zfail, or zpass	is any
value	other than the six defined constant values.

GL_INVALID_OPERATION is generated if glStencilOp is executed
between the execution	of glBegin and the corresponding
execution of glEnd.

Associated Gets

glGet	with argument GL_STENCIL_FAIL
glGet	with argument GL_STENCIL_PASS_DEPTH_PASS
glGet	with argument GL_STENCIL_PASS_DEPTH_FAIL
glGet	with argument GL_STENCIL_BITS
glIsEnabled with argument GL_STENCIL_TEST

See Also

glAlphaFunc, glBlendFunc, glDepthFunc, glEnable, glLogicOp,
glStencilFunc

:: Documentation :: References :: GL ::
:: Index (n/a) ::