Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: gpu/GLES2/extensions/CHROMIUM/CHROMIUM_path_rendering.txt

Issue 169403005: command_buffer: Implement path rendering functions for CHROMIUM_path_rendering (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nv-pr-02-texgen
Patch Set: rebase and cleanup ids Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW
« no previous file with comments | « gpu/BUILD.gn ('k') | gpu/GLES2/gl2chromium.h » ('j') | gpu/GLES2/gl2chromium.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698