-
Notifications
You must be signed in to change notification settings - Fork 94
/
gl_ViewportIndex.xhtml
169 lines (168 loc) · 10.3 KB
/
gl_ViewportIndex.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<div class="refentry" id="gl_ViewportIndex">
<div class="titlepage"></div>
<div class="refnamediv">
<h2>Name</h2>
<p>gl_ViewportIndex — contains the index of the viewport to be used in viewport transformation and scissoring</p>
</div>
<div class="refsynopsisdiv">
<h2>Declaration</h2>
<p>
</p>
<pre class="programlisting">// In geometry shaders</pre>
<p>
<code class="fieldsynopsis"><span class="modifier">out </span><span class="type">int </span><span class="varname">gl_ViewportIndex </span>;</code>
</p>
<p>
</p>
<pre class="programlisting">// In fragment shaders</pre>
<p>
<code class="fieldsynopsis"><span class="modifier">in </span><span class="type">int </span><span class="varname">gl_ViewportIndex </span>;</code>
</p>
</div>
<div class="refsect1" id="description">
<h2>Description</h2>
<p>
In the geometry language, <code class="varname">gl_ViewportIndex</code> is used to specify the index
of the viewport to which the next primitive emitted from the shader should be drawn. Primitives generated
by the geometry shader will undergo viewport transformation and scissor testing using the viewport
transformation and scissor rectangle selected by the value of <code class="varname">gl_ViewportIndex</code>.
The viewport index used will come from one of the vertices in the primitive being shaded. However, which
vertex the viewport index comes from is implementation-defined, and so it is recommended to use the same
viewport index for all vertices of a primitive. If a geometry shader does not assign a value to
<code class="varname">gl_ViewportIndex</code>, viewport transform and scissor rectangle zero will be used.
If a geometry shader statically assigns a value to <code class="varname">gl_ViewportIndex</code> and there
is a path through the shader that does not assign a value to <code class="varname">gl_ViewportIndex</code>,
the value of <code class="varname">gl_ViewportIndex</code> is undefined for executions of the shader that take
that path.
</p>
<p>
In the fragment language, <code class="varname">gl_ViewportIndex</code> will have the same value that was written to the
output variable <code class="varname">gl_ViewportIndex</code> in the geometry stage. If the geometry stage does not dynamically
assign to <code class="varname">gl_ViewportIndex</code>, the value of <code class="varname">gl_ViewportIndex</code> in the fragment shader will be undefined. If
the geometry stage makes no static assignment to <code class="varname">gl_ViewportIndex</code>, the fragment stage will read zero.
Otherwise, the fragment stage will read the same value written by the geometry stage, even if that value is
out of range. If a fragment shader contains a static access to <code class="varname">gl_ViewportIndex</code>, it will count against the
implementation defined limit for the maximum number of inputs to the fragment stage.
</p>
</div>
{$pipelinestall}{$examples}
<div class="refsect1" id="versions">
<h2>Version Support</h2>
<div class="informaltable">
<table style="border-collapse: collapse; border-top: 2px solid ; border-bottom: 2px solid ; border-left: 2px solid ; border-right: 2px solid ; ">
<colgroup>
<col style="text-align: left; "/>
<col style="text-align: center; " class="firstvers"/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; "/>
<col style="text-align: center; " class="lastvers"/>
</colgroup>
<thead>
<tr>
<th style="text-align: left; border-right: 2px solid ; ">
</th>
<th style="text-align: center; border-bottom: 2px solid ; " colspan="12">
<span class="bold"><strong>OpenGL Shading Language Version</strong></span>
</th>
</tr>
<tr>
<th style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>Function Name</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>1.10</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>1.20</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>1.30</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>1.40</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>1.50</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>3.30</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>4.00</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>4.10</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>4.20</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>4.30</strong></span>
</th>
<th style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">
<span class="bold"><strong>4.40</strong></span>
</th>
<th style="text-align: center; border-bottom: 2px solid ; ">
<span class="bold"><strong>4.50</strong></span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left; border-right: 2px solid ; border-bottom: 2px solid ; ">gl_ViewportIndex (geometry stage)</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; border-bottom: 2px solid ; ">✔</td>
<td style="text-align: center; border-bottom: 2px solid ; ">✔</td>
</tr>
<tr>
<td style="text-align: left; border-right: 2px solid ; ">gl_ViewportIndex (fragment stage)</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">-</td>
<td style="text-align: center; border-right: 2px solid ; ">✔</td>
<td style="text-align: center; border-right: 2px solid ; ">✔</td>
<td style="text-align: center; ">✔</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="refsect1" id="seealso">
<h2>See Also</h2>
<p>
<a class="citerefentry" href="gl_Layer"><span class="citerefentry"><span class="refentrytitle">gl_Layer</span></span></a>
</p>
</div>
<div class="refsect1" id="Copyright">
<h2>Copyright</h2>
<p>
Copyright © 2011-2014 Khronos Group.
This material may be distributed subject to the terms and conditions set forth in
the Open Publication License, v 1.0, 8 June 1999.
<a class="link" href="https://opencontent.org/openpub/" target="_top">https://opencontent.org/openpub/</a>.
</p>
</div>
</div>