glStencilOp
[New
- Windows 95, OEM Service Release 2]
The glStencilOp
function sets the stencil test actions.
void glStencilOp(
GLenum fail, |
|
GLenum zfail, |
|
GLenum zpass |
|
); |
|
Parameters
fail
The action to
take when the stencil test fails. The following six symbolic constants are
accepted:
GL_KEEP
Keeps the
current value.
GL_ZERO
Sets the
stencil buffer value to zero.
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 zero.
GL_INVERT
Bitwise
inverts the current stencil buffer value.
zfail
Stencil
action when the stencil test passes, but the depth test fails. Accepts the same
symbolic constants as fail.
zpass
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. Accepts the same symbolic constants as fail.
Remarks
Stenciling,
like z-buffering, enables and disables drawing on a per-pixel basis. You
draw into the stencil planes using OpenGL 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. The test is
enabled with glEnable
The glStencilOp
function 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.
Stencil
buffer values are treated as unsigned integers. When incremented and decremented,
values are clamped to 0 and 2^n - 1, where n is the value returned by querying GL_STENCIL_BITS.
The other two
arguments to glStencilOp specify stencil buffer actions should
subsequent depth buffer tests succeed (zpass) or fail (zfail).
(See glDepthFunc
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.
The following
functions retrieve information related to glStencilOp:
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
Error Codes
The following
are the error codes generated and their conditions.
Error
Code |
Condition |
GL_INVALID_ENUM
|
fail, zfail, or zpass was any value other
than the six defined constant values. |
GL_INVALID_OPERATION
|
glStencilOp was called between a call to glBegin and the
corresponding call to glEnd. |
See Also