forked from BSVino/docs.gl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
glStencilOp.xhtml
103 lines (103 loc) · 9.33 KB
/
glStencilOp.xhtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<div class="refentry" title="glStencilOp"><a id="glStencilOp"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>glStencilOp — set stencil test actions</p></div><div class="refsynopsisdiv" title="C Specification"><h2>C Specification</h2><div class="funcsynopsis"><table class="funcprototype-table"><tr><td><code class="funcdef">void <b class="fsfunc">glStencilOp</b>(</code></td><td>GLenum <var class="pdparam">fail</var>, </td></tr><tr><td> </td><td>GLenum <var class="pdparam">zfail</var>, </td></tr><tr><td> </td><td>GLenum <var class="pdparam">zpass</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1" title="Parameters"><a id="parameters"></a><h2>Parameters</h2><div class="variablelist"><dl><dt><span class="term">
<em class="parameter"><code>fail</code></em>
</span></dt><dd><p>Specifies the action to take when the stencil test
fails. Six symbolic constants are accepted:
<code class="constant">GL_KEEP</code>,
<code class="constant">GL_ZERO</code>,
<code class="constant">GL_REPLACE</code>,
<code class="constant">GL_INCR</code>,
<code class="constant">GL_DECR</code>, and
<code class="constant">GL_INVERT</code>. The initial value is
<code class="constant">GL_KEEP</code>.</p></dd><dt><span class="term">
<em class="parameter"><code>zfail</code></em>
</span></dt><dd><p>Specifies the stencil action when the stencil test
passes, but the depth test fails.
<em class="parameter"><code>zfail</code></em> accepts the same symbolic constants as
<em class="parameter"><code>fail</code></em>. The initial value is
<code class="constant">GL_KEEP</code>.</p></dd><dt><span class="term">
<em class="parameter"><code>zpass</code></em>
</span></dt><dd><p>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.
<em class="parameter"><code>zpass</code></em> accepts the same symbolic constants as
<em class="parameter"><code>fail</code></em>. The initial value is
<code class="constant">GL_KEEP</code>.</p></dd></dl></div></div><div class="refsect1" title="Description"><a id="description"></a><h2>Description</h2><p>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.</p><p>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 stencil test, call
<a class="citerefentry" href="glEnable"><span class="citerefentry"><span class="refentrytitle">glEnable</span></span></a> and
<a class="citerefentry" href="glDisable"><span class="citerefentry"><span class="refentrytitle">glDisable</span></span></a>
with argument <code class="constant">GL_STENCIL_TEST</code>.
To control it, call
<a class="citerefentry" href="glStencilFunc"><span class="citerefentry"><span class="refentrytitle">glStencilFunc</span></span></a>.
Stenciling is initially disabled.
</p><p><code class="function">glStencilOp</code>
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 <em class="parameter"><code>fail</code></em>
specifies what happens to the stencil buffer contents. The
following six actions are possible.</p><div class="variablelist"><dl><dt><span class="term">
<code class="constant">GL_KEEP</code>
</span></dt><dd><p>Keeps the current value.</p></dd><dt><span class="term">
<code class="constant">GL_ZERO</code>
</span></dt><dd><p>Sets the stencil buffer value to 0.</p></dd><dt><span class="term">
<code class="constant">GL_REPLACE</code>
</span></dt><dd><p>Sets the stencil buffer value to
<em class="parameter"><code>ref</code></em>, as specified by
<a class="citerefentry" href="glStencilFunc"><span class="citerefentry"><span class="refentrytitle">glStencilFunc</span></span></a>.</p></dd><dt><span class="term">
<code class="constant">GL_INCR</code>
</span></dt><dd><p>Increments the current stencil buffer value. Clamps
to the maximum representable unsigned value.</p></dd><dt><span class="term">
<code class="constant">GL_DECR</code>
</span></dt><dd><p>Decrements the current stencil buffer value. Clamps
to 0.</p></dd><dt><span class="term">
<code class="constant">GL_INVERT</code>
</span></dt><dd><p>Bitwise inverts the current stencil buffer value.</p></dd></dl></div><p>Stencil buffer values are treated as unsigned integers.
When incremented and decremented, values are clamped to 0 and
<math overflow="scroll">
<msup><mn>2</mn><mi>n</mi></msup><mo>-</mo><mn>1</mn>
</math>,
where <em class="replaceable"><code>n</code></em> is the value returned by querying
<code class="constant">GL_STENCIL_BITS</code>.</p><p>The other two arguments to <code class="function">glStencilOp</code>
specify stencil buffer actions that depend on whether
subsequent depth buffer tests succeed (<em class="parameter"><code>zpass</code></em>)
or fail
(<em class="parameter"><code>zfail</code></em>) (see
<a class="citerefentry" href="glDepthFunc"><span class="citerefentry"><span class="refentrytitle">glDepthFunc</span></span></a>).
The actions are specified using the same six symbolic constants as
<em class="parameter"><code>fail</code></em>. Note that <em class="parameter"><code>zfail</code></em>
is ignored when there is no depth buffer, or when the depth
buffer is not enabled. In these cases, <em class="parameter"><code>fail</code></em> and
<em class="parameter"><code>zpass</code></em>
specify stencil action when the stencil test fails and passes,
respectively.</p></div><div class="refsect1" title="Notes"><a id="notes"></a><h2>Notes</h2><p>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
<code class="function">glStencilOp</code>.</p></div><div class="refsect1" title="Errors"><a id="errors"></a><h2>Errors</h2><p><code class="constant">GL_INVALID_ENUM</code> is generated if
<em class="parameter"><code>fail</code></em>,
<em class="parameter"><code>zfail</code></em>, or
<em class="parameter"><code>zpass</code></em>
is any value other than the six defined constant values.</p></div><div class="refsect1" title="Associated Gets"><a id="associatedgets"></a><h2>Associated Gets</h2><p>
<a class="citerefentry" href="glGet"><span class="citerefentry"><span class="refentrytitle">glGet</span></span></a>
with argument <code class="constant">GL_STENCIL_BITS</code>
</p></div><div class="refsect1" title="See Also"><a id="seealso"></a><h2>See Also</h2><p>
<a class="citerefentry" href="glAlphaFunc"><span class="citerefentry"><span class="refentrytitle">glAlphaFunc</span></span></a>,
<a class="citerefentry" href="glBlendFunc"><span class="citerefentry"><span class="refentrytitle">glBlendFunc</span></span></a>,
<a class="citerefentry" href="glDepthFunc"><span class="citerefentry"><span class="refentrytitle">glDepthFunc</span></span></a>,
<a class="citerefentry" href="glEnable"><span class="citerefentry"><span class="refentrytitle">glEnable</span></span></a>,
<a class="citerefentry" href="glGet"><span class="citerefentry"><span class="refentrytitle">glGet</span></span></a>,
<a class="citerefentry" href="glLogicOp"><span class="citerefentry"><span class="refentrytitle">glLogicOp</span></span></a>,
<a class="citerefentry" href="glStencilFunc"><span class="citerefentry"><span class="refentrytitle">glStencilFunc</span></span></a>
</p></div><div class="refsect1" title="Copyright"><a id="copyright"></a><h2>Copyright</h2><p>
Copyright © 2003-2004
Silicon Graphics, Inc. This document is licensed under the SGI
Free Software B License. For details, see
<a class="ulink" href="https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/" target="_top">https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/</a>.
</p></div></div>