OLD | NEW |
---|---|
1 Name | 1 Name |
2 | 2 |
3 CHROMIUM_path_rendering | 3 CHROMIUM_path_rendering |
4 | 4 |
5 Name Strings | 5 Name Strings |
6 | 6 |
7 GL_CHROMIUM_path_rendering | 7 GL_CHROMIUM_path_rendering |
8 | 8 |
9 Version | 9 Version |
10 | 10 |
11 Last Modifed Date: August 14, 2014 | 11 Last Modifed Date: August 14, 2014 |
12 | 12 |
13 Dependencies | 13 Dependencies |
14 | 14 |
15 OpenGL ES 3.0 is required. | 15 OpenGL ES 3.0 is required. |
16 | 16 |
17 Overview | 17 Overview |
18 | 18 |
19 This extensions implements path rendering using | 19 This extensions implements path rendering using |
20 OpenGL API. | 20 OpenGL API. |
21 | 21 |
22 New Tokens | 22 New Tokens |
23 | 23 |
24 Accepted by the <matrixMode> parameter of MatrixLoadfCHROMIUM and | 24 Accepted by the <matrixMode> parameter of MatrixLoadfCHROMIUM and |
25 MatrixLoadIdentityCHROMIUM: | 25 MatrixLoadIdentityCHROMIUM: |
26 PATH_MODELVIEW_CHROMIUM 0x1700 | 26 PATH_MODELVIEW_CHROMIUM 0x1700 |
27 PATH_PROJECTION_CHROMIUM 0x1701 | 27 PATH_PROJECTION_CHROMIUM 0x1701 |
28 | 28 |
29 Accepted in elements of the <commands> array parameter of | |
30 PathCommandsCHROMIUM: | |
31 CLOSE_PATH_CHROMIUM 0x00 | |
32 MOVE_TO_CHROMIUM 0x02 | |
33 LINE_TO_CHROMIUM 0x04 | |
34 QUADRATIC_CURVE_TO_CHROMIUM 0x0A | |
35 CUBIC_CURVE_TO_CHROMIUM 0x0C | |
36 | |
29 Accepted by the <pname> parameter of GetIntegerv, | 37 Accepted by the <pname> parameter of GetIntegerv, |
30 GetFloatv: | 38 GetFloatv: |
31 PATH_MODELVIEW_MATRIX_CHROMIUM 0x0BA6 | 39 PATH_MODELVIEW_MATRIX_CHROMIUM 0x0BA6 |
32 PATH_PROJECTION_MATRIX_CHROMIUM 0x0BA7 | 40 PATH_PROJECTION_MATRIX_CHROMIUM 0x0BA7 |
33 | 41 |
42 Accepted by the <pname> parameter of PathParameter{if}CHROMIUM: | |
43 PATH_STROKE_WIDTH_CHROMIUM 0x9075 | |
44 PATH_INITIAL_END_CAP_CHROMIUM 0x9077 | |
45 PATH_TERMINAL_END_CAP_CHROMIUM 0x9078 | |
46 PATH_JOIN_STYLE_CHROMIUM 0x9079 | |
47 PATH_MITER_LIMIT_CHROMIUM 0x907a | |
48 | |
49 Accepted by the <value> parameter of PathParameter{if}CHROMIUM: | |
50 FLAT_CHROMIUM 0x1D00 | |
51 SQUARE_CHROMIUM 0x90a3 | |
52 ROUND_CHROMIUM 0x90a4 | |
53 BEVEL_CHROMIUM 0x90A6 | |
54 MITER_REVERT_CHROMIUM 0x90A7 | |
55 | |
56 Accepted by the <fillMode> parameter of StencilFillPathCHROMIUM: | |
57 COUNT_UP_CHROMIUM 0x9088 | |
58 COUNT_DOWN_CHROMIUM 0x9089 | |
59 | |
34 | 60 |
35 New Procedures and Functions | 61 New Procedures and Functions |
36 | 62 |
37 void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix) | 63 void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix) |
38 | 64 |
39 Takes a pointer to a 4x4 matrix stored in column-major order as 16 | 65 Takes a pointer to a 4x4 matrix stored in column-major order as 16 |
40 consecutive floating-point values. The matrixMode specifies which | 66 consecutive floating-point values. The matrixMode specifies which |
41 matrix, PATH_MODELVIEW_CHROMIUM or PATH_PROJECTION_CHROMIUM is used. | 67 matrix, PATH_MODELVIEW_CHROMIUM or PATH_PROJECTION_CHROMIUM is used. |
42 | 68 |
43 The funcition specifies either modelview or projection matrix | 69 The funcition specifies either modelview or projection matrix |
44 to be used with path rendering API calls. | 70 to be used with path rendering API calls. |
45 | 71 |
46 void MatrixLoadIdentityCHROMIUM(enum matrixMode) | 72 void MatrixLoadIdentityCHROMIUM(enum matrixMode) |
47 | 73 |
48 Effectively calls MatrixLoadf with the identity matrix. | 74 Effectively calls MatrixLoadf with the identity matrix. |
49 | 75 |
76 uint GenPathsCHROMIUM(sizei range) | |
77 | |
78 Returns an integer /n/ such that names /n/, ..., /n+range-1/ are | |
79 previously unused (i.e. there are /range/ previously unused path object | |
80 names starting at /n/). These names are marked as used, for the | |
81 purposes of subsequent GenPathsCHROMIUM only, but they do not acquire | |
82 path object state until each particular name is used to specify | |
83 a path object. | |
84 | |
85 Returns 0 if no new path name was marked as used. Reasons for this | |
86 include lack of free path names or range being 0. | |
87 | |
88 void DeletePathsCHROMIUM(uint path, sizei range) | |
89 | |
90 Deletes a path object where /path/ contains /range/ names of path objects to | |
91 be delete. After a path object is deleted, its name is again unused. | |
92 Unused names in /paths/ are silently ignored. | |
93 | |
94 boolean IsPathCHROMIUM(uint path); | |
95 | |
96 The query returns TRUE if /path/ is the name of a path object. If path is | |
97 not the name of a path object, or if an error condition occurs, | |
98 IsPathCHROMIUM returns FALSE. A name retuned by GenPathsCHROMIUM, but | |
99 without a path specified for it yet, is not the name of a path object. | |
100 | |
101 void PathCommandsCHROMIUM(uint path, sizei numCommands, | |
102 const ubyte* commands, sizei numCoords, | |
103 enum coordType, const GLfloat* coords) | |
104 | |
105 Specifies a path object commands for /path/ where /numCommands/ | |
106 indicates the number of path commands, read from the array | |
107 /commands/, with which to initialize that path's command sequence. | |
108 These path commands reference coordinates read sequentially from the | |
109 /coords/ array. | |
110 | |
111 The /numCommands/ elements of the /commands/ array must be tokens | |
112 in Table 5.pathCommands. The command sequence matches | |
113 the element order of the /commands/ array. Each command references | |
114 a number of coordinates specified by "Coordinate count" column of | |
115 Table 5.pathCommands, starting with the first (zero) element of | |
116 the /coords/ array and advancing by the coordinate count for each | |
117 command. If any of these /numCommands/ command values are not | |
118 listed in the "Token" column of Table | |
119 5.pathCommands, the INVALID_ENUM error is generated. | |
120 | |
121 The INVALID_OPERATION error is generated if /numCoords/ does not | |
122 equal the number of coordinates referenced by the command sequence | |
123 specified by /numCommands/ and /commands/ (so /numCoords/ provides a | |
124 sanity check that the /coords/ array is being interpreted properly). | |
125 The error INVALID_VALUE is generated if either /numCommands/ or | |
126 /numCoords/ is negative. | |
127 | |
128 The error INVALID_OPERATION is generated if /path/ is | |
129 not an existing path object. | |
130 | |
131 If the PathCommandsCHROMIUM command results in an error, the path object | |
132 named /path/ is not changed; if there is no error, the prior contents | |
133 of /path/, if /path/ was an existent path object, are lost and the | |
134 path object name /path/ becomes used. | |
135 | |
136 void PathParameterfCHROMIUM(uint path, enum pname, float value) | |
137 void PathParameteriCHROMIUM(uint path, enum pname, int value) | |
138 | |
139 The commands specify the value of path parameters for the specified path | |
140 object named /path/. The error INVALID_OPERATION is generated if /path/ is | |
141 not an existing path object. | |
142 | |
143 Each parameter has a single (scalar) value. | |
144 | |
145 /pname/ must be one of the tokens in the "Name" column of | |
146 Table 5.pathParameters. | |
147 The required values or range of each allowed parameter name token | |
148 is listed in Table 5.pathParameter's "Required Values/Range" column. | |
149 | |
150 For values of /pname/ listed in Table 5.pathsParameters, the specified | |
151 parameter is specified by /value/ when /value/ is a float or int, | |
152 or if /value/ is a pointer to a float or int, accessed through that | |
153 pointer. The error INVALID_VALUE is generated if the specified | |
154 value is negative for parameters required to be non-negative in | |
155 Table 5.pathParameters. Values specified to be clamped to the [0,1] range | |
156 in Table 5.pathParameters are so clamped prior to setting the | |
157 specified path parameter to that clamped value. | |
vmiura
2014/10/03 22:56:01
I don't see parameters specified to be clamped in
Kimmo Kinnunen
2014/10/06 11:26:13
Good catch, the sentence refers to a property that
| |
158 | |
159 The error INVALID_VALUE is generated if the specified parameter value | |
160 is not within the require range for parameters typed float or integer. | |
161 The error INVALID_ENUM is generated if the specified parameter value | |
162 is not one of the listed tokens for parameters typed enum. | |
163 | |
164 void PathStencilFuncCHROMIUM(enum func, int ref, uint mask) | |
165 | |
166 Configures the stencil function, stencil reference value, and stencil read | |
167 mask to be used by the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM | |
168 commands described subsequently. The parameters accept the same values | |
169 allowed by the StencilFunc command. | |
170 | |
171 void StencilFillPathCHROMIUM(uint path, enum fillMode, uint mask) | |
172 | |
173 The function transforms into window space the outline of the path object | |
174 named /path/ based on the current modelview, projection and viewport, | |
175 transforms (ignoring any vertex and/or geometry shader or program that might | |
176 be active/enabled) and then updates the stencil values of all /accessible | |
177 samples/ (explained below) in the framebuffer. Each sample's stencil buffer | |
178 value is updated based on the winding number of that sample with respect to | |
179 the transformed outline of the path object with any non-closed subpath | |
180 forced closed and the specified /fillMode/. | |
181 | |
182 If /path/ does not name an existing path object, the command does | |
183 nothing (and no error is generated). | |
184 | |
185 If the path's command sequence specifies unclosed subpaths (so not | |
186 contours) due to MOVE_TO_CHROMIUM commands, such subpaths are trivially | |
187 closed by connecting with a line segment the initial and terminal | |
188 control points of each such path command subsequence. | |
189 | |
190 Transformation of a path's outline works by taking all positions on the | |
191 path's outline in 2D path space (x,y) and constructing an object space | |
192 position (x,y,0,1) that is then used similar to as with the (xo,yo,zo,wo) | |
193 position in section 2.12 ("Fixed-Function Vertex Transformation") of OpenGL | |
194 3.2 (unabridged) Specification (Special Functions) to compute corresponding | |
195 eye-space coordinates (xe,ye,ze,we) and clip-space coordinates | |
196 (xc,yc,zc,wc). A path outline's clip-space coordinates are further | |
197 transformed into window space similar to as described in section 2.16 | |
198 ("Coordinate Transformations"). This process provides a mapping 2D path | |
199 coordinates to 2D window coordinates. The resulting 2D window coordinates | |
200 are undefined if any of the transformations involved are singular or may be | |
201 inaccurate if any of the transformations (or their combination) are | |
202 ill-conditioned. | |
203 | |
204 The winding number for a sample with respect to the path outline, | |
205 transformed into window space, is computed by counting the (signed) | |
206 number of revolutions around the sample point when traversing each | |
207 (trivially closed if necessary) contour once in the transformed path. | |
208 This traversal is performed in the order of the path's command | |
209 sequence. Starting from an initially zero winding count, each | |
210 counterclockwise revolution when the front face mode is CCW (or | |
211 clockwise revolution when the front face mode is CW) around the sample | |
212 point increments the winding count by one; while each clockwise | |
213 revolution when the front face mode is CCW (or counterclockwise | |
214 revolution when the front face mode is CW) around the sample point | |
215 decrements the winding count by one. | |
216 | |
217 The /mask/ parameter controls what subset of stencil bits are affected | |
vmiura
2014/10/03 22:56:01
What are the constraints on /mask/ values?
Kimmo Kinnunen
2014/10/06 11:26:13
Depends on your viewpoint? See below.
| |
218 by the command. | |
219 | |
220 The /fillMode/ parameter must be one of INVERT, COUNT_UP_CHROMIUM | |
221 or COUNT_DOWN_CHROMIUM; otherwise the INVALID_ENUM error | |
222 is generated. INVERT inverts the bits set in the effective /mask/ | |
223 value for each sample's stencil value if the winding number for the | |
224 given sample is odd. COUNT_UP_CHROMIUM adds with modulo n arithmetic the | |
225 winding number of each sample with the sample's prior stencil buffer | |
226 value; the result of this addition is written into the sample's | |
227 stencil value but the bits of the stencil value not set in the | |
228 effective /mask/ value are left unchanged. COUNT_DOWN_CHROMIUM subtracts | |
229 with modulo /n/ arithmetic the winding number of each sample with the | |
230 sample's prior stencil buffer value; the result of this subtraction is | |
231 written into the sample's stencil value but the bits of the stencil | |
232 value not set in the effective /mask/ value are left unchanged. | |
233 | |
234 The value of /n/ for the modulo /n/ arithmetic used by COUNT_UP_CHROMIUM | |
235 and COUNT_DOWN_CHROMIUM is the effective /mask/+1. The error INVALID_VALUE | |
236 is generated if /fillMode/ is COUNT_UP_CHROMIUM or COUNT_DOWN_CHROMIUM and | |
237 the effective /mask/+1 is not an integer power of two. | |
Kimmo Kinnunen
2014/10/06 11:26:13
So from one perspective, all /mask/ values are val
| |
238 | |
239 ACCESSIBLE SAMPLES WITH RESPECT TO A TRANSFORMED PATH | |
240 | |
241 The accessible samples of a transformed path that are updated are | |
242 the samples that remain after discarding the following samples: | |
243 | |
244 * Any sample that would be clipped similar to as specified in section | |
245 2.22 ("Primitive Clipping") of OpenGL 3.2 (unabridged) Specification | |
246 (Special Functions) because its corresponding position in clip space | |
247 (xc,yc,zc,wc) or (xe,ye,ze,we) would be clipped by the clip volume | |
248 or enabled client-defined clip planes. | |
249 | |
250 * Any sample that would fail the pixel ownership test (section | |
251 4.1.1) if rasterized. | |
252 | |
253 * Any sample that would fail the scissor test (section 4.1.2) | |
254 if SCISSOR_TEST is enabled. | |
255 | |
256 And for the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM commands | |
257 (so not applicable to the CoverFillPathCHROMIUM and CoverStrokePathCHROMIUM | |
258 commands): | |
259 * Any sample that would fail the (implicitly enabled) stencil test | |
260 with the stencil function configured based on the path stencil | |
261 function state configured by PathStencilFuncCHROMIUM. In the case | |
262 of the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM | |
263 commands, the effective stencil read | |
264 mask for the stencil mask is treated as the value of | |
265 PATH_STENCIL_VALUE_MASK bit-wise ANDed with the bit-invert of the | |
266 effective /mask/ parameter value; otherwise, for the cover commands, | |
267 the stencil test operates normally. In the case the stencil test | |
268 fails during a path stencil operation, the stencil fail operation is | |
269 ignored and the pixel's stencil value is left undisturbed (as if the | |
270 stencil operation was KEEP). | |
271 | |
272 * The state of the face culling (CULL_FACE) enable is ignored. | |
273 | |
274 void StencilStrokePathCHROMIUM(uint path, int reference, uint mask) | |
275 | |
276 Transforms into window space the stroked region of the path object named | |
277 /path/ based on the current modelview, projection and viewport transforms | |
278 (ignoring any vertex and/or geometry shader or program that might be | |
279 active/enabled) and then updates the stencil values of a subset of the | |
280 accessible samples (see above) in the framebuffer. | |
281 | |
282 If /path/ does not name an existing path object, the command does | |
283 nothing (and no error is generated). | |
284 | |
285 The path object's specified stroke width (in path space) determines | |
286 the width of the path's stroked region. | |
287 | |
288 The stroke of a transformed path's outline | |
289 is the region of window space defined by the union of: | |
290 | |
291 * Sweeping an orthogonal centered line segment of the (above | |
292 determined) effective stroke width along each path segment | |
293 in the path's transformed outline. | |
294 | |
295 * End cap regions (explained below) appended to the initial | |
296 and terminal control points of non-closed command sequences | |
297 in the path. For a sequence of commands that form a closed | |
298 contour, the end cap regions are ignored. | |
299 | |
300 * Join style regions (explained below) between connected path | |
301 segments meet. | |
302 | |
303 Any accessible samples within the union of these three regions are | |
304 considered within the path object's stroke. | |
305 | |
306 The /mask/ parameter controls what subset of stencil bits are affected | |
307 by the command. | |
308 | |
309 A sample's stencil bits that are set in the effective /mask/ value | |
310 are updated with the specified stencil /reference/ value if the | |
311 sample is accessible (as specified above) and within the stroke of | |
312 the transformed path's outline. | |
313 | |
314 Every path object has an initial and terminal end cap parameter | |
315 that is one of FLAT_CHROMIUM, SQUARE_CHROMIUM or | |
316 ROUND_CHROMIUM. There are no samples within a FLAT_CHROMIUM end cap. | |
317 The SQUARE_CHROMIUM cap extends centered and tangent to the given end | |
318 (initial or terminal) of the subpath for half the effective stroke | |
319 width; in other words, a square cap is a half-square that kisses | |
320 watertightly the end of a subpath. The ROUND_CHROMIUM cap appends | |
321 a semi-circle, centered and tangent, with the diameter of the | |
322 effective stroke width to the given end (initial or terminal) of the | |
323 subpath; in other words, a round cap is a semi-circle that kisses | |
324 watertightly the end of a subpath. | |
325 | |
326 Every path object has a join style that is one of BEVEL_CHROMIUM, | |
327 ROUND_CHROMIUM or MITER_REVERT_CHROMIUM. Each path object also has a miter | |
328 limit value. The BEVEL_CHROMIUM join style inserts a triangle with two | |
329 vertices at the outside corners where two connected path segments join and a | |
330 third vertex at the common end point shared by the two path segments. The | |
331 ROUND_CHROMIUM join style inserts a wedge-shaped portion of a circle | |
332 centered at the common end point shared by the two path segments; the radius | |
333 of the circle is half the effective stroke width. The MITER_REVERT_CHROMIUM | |
334 join style inserts a quadrilateral with two opposite vertices at the outside | |
335 corners where the two connected path segments join and two opposite vertices | |
336 with one on the path's junction between the two joining path segments and | |
337 the other at the common end point shared by the two path segments. However, | |
338 the MITER_REVERT_CHROMIUM join style behaves as the BEVEL_CHROMIUM style if | |
339 the sine of half the angle between the two joined segments is less than the | |
340 path object's PATH_STROKE_WIDTH value divided by the path's | |
341 PATH_MITER_LIMIT_CHROMIUM value. | |
342 | |
343 void CoverFillPathCHROMIUM(uint path) | |
344 | |
345 The command transforms into window space the outline of the path object | |
346 named /path/ based on the current modelview, projection and viewport | |
347 transforms (ignoring any vertex and/or geometry shader or program that might | |
348 be active/enabled) and rasterizes a subset of the accessible samples in the | |
349 framebuffer guaranteed to include all samples that would have a net | |
350 stencil value change if StencilFillPathCHROMIUM were issued with the same | |
351 modelview, projection, and viewport state. During this rasterization, the | |
352 stencil test operates normally and as configured; the expectation is the | |
353 stencil test will be used to discard samples not determined "covered" by a | |
354 prior StencilFillPathCHROMIUM command. | |
355 | |
356 If /path/ does not name an existing path object, the command does | |
357 nothing (and no error is generated). | |
358 | |
359 The subset of accessible pixels that are rasterized are within a bounding | |
360 box (expected to be reasonably tight) surrounding all the samples guaranteed | |
361 to be rasterized by CoverFillPathCHROMIUM. The bounding box must be | |
362 orthogonally aligned to the path space coordinate system. (The area of the | |
363 bounding box in path space is guaranteed to be greater than or equal the | |
364 area of the convex hull in path space.) Each rasterized sample will be | |
365 rasterized once and exactly once. | |
366 | |
367 While samples with a net stencil change /must/ be rasterized, | |
368 implementations are explicitly allowed to vary in the rasterization | |
369 of samples for which StencilFillPathCHROMIUM would /not/ change sample's | |
370 net stencil value. This means implementations are allowed to (and, | |
371 in fact, are expected to) conservatively "exceed" the region strictly | |
372 stenciled by the path object. | |
373 | |
374 CoverFillPathCHROMIUM /requires/ the following rasterization invariance: | |
375 calling CoverFillPathCHROMIUM for the same (unchanged) path object with | |
376 fixed (unchanged) modelview, projection, and viewport transform state | |
377 with the same (unchanged) set of accessible samples will rasterize | |
378 the exact same set of samples with identical interpolated values | |
379 for respective fragment/sample locations. | |
380 | |
381 void CoverStrokePathCHROMIUM(uint path) | |
382 | |
383 The command operates in the same manner as CoverFillPathCHROMIUM except the | |
384 region guaranteed to be rasterized is, rather than the region within | |
385 /path/'s filled outline, instead the region within the /path/'s stroked | |
386 region as determined by StencilStrokePathCHROMIUM. During this | |
387 rasterization, the stencil test operates normally and as configured; the | |
388 expectation is the stencil test will be used to discard samples not | |
389 determined "covered" by a prior StencilStrokePathCHROMIUM command. | |
390 | |
391 If /path/ does not name an existing path object, the command does | |
392 nothing (and no error is generated). | |
393 | |
394 Analogous to the rasterization guarantee of CoverFillPathCHROMIUM with | |
395 respect to StencilFillPathCHROMIUM, CoverStrokePathCHROMIUM guarantees that | |
396 all samples rasterized by StencilStrokePathCHROMIUM, given the same | |
397 transforms and accessible pixels and stroke width, will also be rasterized | |
398 by the corresponding CoverStrokePathCHROMIUM. | |
399 | |
400 CoverStrokePathCHROMIUM /requires/ the following rasterization invariance: | |
401 calling CoverStrokePathCHROMIUM for the same (unchanged) path object with | |
402 fixed (unchanged) modelview, projection, and viewport transform state and | |
403 with the same (unchanged) set of accessible samples will rasterize the exact | |
404 same set of samples with identical interpolated values for respective | |
405 fragment/sample locations. | |
406 | |
407 void StencilThenCoverFillPathCHROMIUM(uint path, enum fillMode, uint mask) | |
408 | |
409 The command is equivalent to the two commands | |
410 | |
411 StencilFillPathCHROMIUM(path, fillMode, mask); | |
412 CoverFillPathCHROMIUM(path); | |
413 | |
414 unless either command would generate an error; for any such error | |
415 other than OUT_OF_MEMORY, only that error is generated. | |
416 | |
417 void StencilThenCoverStrokePathCHROMIUM(uint path, int reference, uint mask) | |
418 | |
419 The command is equivalent to the two commands | |
420 | |
421 StencilStrokePathCHROMIUM(path, reference, mask); | |
422 CoverStrokePathCHROMIUM(path); | |
423 | |
424 unless either command would generate an error; for any such error | |
425 other than OUT_OF_MEMORY, only that error is generated. | |
426 | |
427 | |
50 Errors | 428 Errors |
51 | 429 |
52 None. | 430 None. |
53 | 431 |
54 New State | 432 New State |
55 | 433 |
56 Get Value Type Get Command Initial Description | 434 Get Value Type Get Command Initial Description |
57 ----------------------------- ----- ------------ -------- ---------------- --- | 435 ----------------------------- ----- ------------ -------- ---------------- --- |
58 PATH_MODELVIEW_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current modelvi ew | 436 PATH_MODELVIEW_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current modelvi ew |
59 matrix for path rendering | 437 matrix for path rendering |
60 PATH_PROJECTION_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current project ion | 438 PATH_PROJECTION_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current project ion |
61 matrix for path rendering | 439 matrix for path rendering |
440 PATH_STENCIL_FUNC_CHROMIUM Z8 GetIntegerv ALWAYS path stenciling function | |
441 PATH_STENCIL_REF_CHROMIUM Z+ GetIntegerv 0 path stenciling | |
442 reference value | |
443 PATH_STENCIL_VALUE_MASK_CHROMIUM path stencil re ad | |
444 Z+ GetIntegerv 1's mask | |
445 | |
446 Tables | |
447 Table 5.pathCommands: Path Commands | |
448 | |
449 Coordinate | |
450 Token Description count | |
451 ========================== ===================== ========== | |
452 MOVE_TO_CHROMIUM Absolute move 2 | |
453 current point | |
454 -------------------------- --------------------- ---------- | |
455 CLOSE_PATH_CHROMIUM Close path 0 | |
456 -------------------------- --------------------- ---------- | |
457 LINE_TO_CHROMIUM Absolute line 2 | |
458 -------------------------- --------------------- ---------- | |
459 QUADRATIC_CURVE_TO_CHROMIUM Absolute quadratic 4 | |
460 CUBIC_CURVE_TO_CHROMIUM Absolute cubic 6 | |
461 Bezier segment | |
462 -------------------------- --------------------- ---------- | |
463 | |
464 Table 5.pathParameters | |
465 Name Type Required Values or Range | |
466 ------------------------------- ------- ---------------------------------- ------------- | |
467 PATH_STROKE_WIDTH_CHROMIUM float non-negative | |
468 PATH_INITIAL_END_CAP_CHROMIUM enum FLAT, SQUARE_CHROMIUM, ROUND_CHROM IUM | |
469 PATH_TERMINAL_END_CAP_CHROMIUM enum FLAT, SQUARE_CHROMIUM, ROUND_CHROM IUM | |
470 PATH_JOIN_STYLE_CHROMIUM enum MITER_REVERT_CHROMIUM, BEVEL_CHROM IUM, ROUND_CHROMIUM | |
471 PATH_MITER_LIMIT_CHROMIUM float non-negative | |
472 | |
473 | |
474 Issues | |
475 | |
476 1. Should there be a distinct stencil function state for path | |
477 stenciling? | |
478 | |
479 RESOLVED: YES. glPathStencilFunc sets the state. How the | |
480 stencil state needs to be configured for path covering is | |
481 different than how the stencil function is configured typically | |
482 for path stenciling. | |
483 | |
484 For example, stencil covering might use | |
485 glStencilFunc(GL_NOT_EQUAL,0,~0) while path stenciling would | |
486 use GL_ALWAYS for the path stenciling stencil test. | |
487 | |
488 However there are other situations such as path clipping where it | |
489 is useful to have the path stencil function configured differently | |
490 such as glPathStencilFunc(GL_NOT_EQUAL, 0x00, 0x80) or other | |
491 similar path clipping test. | |
492 | |
493 2. Since my Cover*Path* skips the vertex shader, what does it mean exactly | |
494 wrt a fully linked program? What happens to the fragment shader's input | |
495 varyings that are not filled by the vertex shader + rasterizer? | |
496 | |
497 It is possible that input varyings from a shader may not be written | |
498 as output varyings of a preceding shader. In this case, the unwritten | |
499 input varying values are undefined. Implementations are encouraged to | |
500 zero these undefined input varying values. | |
62 | 501 |
63 Revision History | 502 Revision History |
64 | 503 |
65 14/8/2014 Documented the extension | 504 14/8/2014 Documented the extension |
OLD | NEW |