Chromium Code Reviews| 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 | 
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 Accepted by the <matrixMode> parameter of MatrixLoadfCHROMIUM and | 24 Accepted by the <matrixMode> parameter of MatrixLoadfCHROMIUM and | 
| 25 MatrixLoadIdentityCHROMIUM: | 25 MatrixLoadIdentityCHROMIUM: | 
| 26 MODELVIEW_CHROMIUM 0x1700 | 26 MODELVIEW_CHROMIUM 0x1700 | 
| 27 PROJECTION_CHROMIUM 0x1701 | 27 PROJECTION_CHROMIUM 0x1701 | 
| 28 | 28 | 
| 29 Accepted by the <pname> parameter of GetIntegerv, | 29 Accepted by the <pname> parameter of GetIntegerv, | 
| 30 GetFloatv: | 30 GetFloatv: | 
| 31 MODELVIEW_MATRIX_CHROMIUM 0x0BA6 | 31 MODELVIEW_MATRIX_CHROMIUM 0x0BA6 | 
| 32 PROJECTION_MATRIX_CHROMIUM 0x0BA7 | 32 PROJECTION_MATRIX_CHROMIUM 0x0BA7 | 
| 33 | 33 | 
| 34 Accepted by the <pname> parameter of GetIntegerv: | |
| 35 MAX_TEXTURE_COORDS_CHROMIUM 0x8871 | |
| 36 | |
| 37 Accepted by the <pname> parameter of PathParameter{if}CHROMIUM: | |
| 38 PATH_STROKE_WIDTH_CHROMIUM 0x9075 | |
| 39 PATH_INITIAL_END_CAP_CHROMIUM 0x9077 | |
| 40 PATH_TERMINAL_END_CAP_CHROMIUM 0x9078 | |
| 41 PATH_JOIN_STYLE_CHROMIUM 0x9079 | |
| 42 PATH_MITER_LIMIT_CHROMIUM 0x907a | |
| 43 | |
| 44 Accepted by the <value> parameter of PathParameter{if}CHROMIUM: | |
| 45 FLAT_CHROMIUM 0x1D00 | |
| 46 SQUARE_CHROMIUM 0x90a3 | |
| 47 ROUND_CHROMIUM 0x90a4 | |
| 48 BEVEL_CHROMIUM 0x90A6 | |
| 49 MITER_REVERT_CHROMIUM 0x90A7 | |
| 50 | |
| 51 Accepted by the <fillMode> parameter of StencilFillPathCHROMIUM and | |
| 52 StencilFillPathInstancedCHROMIUM: | |
| 53 COUNT_UP_CHROMIUM 0x9088 | |
| 54 COUNT_DOWN_CHROMIUM 0x9089 | |
| 55 | |
| 56 Accepted by the <genMode> parameter of PathTexGenCHROMIUM: | |
| 57 OBJECT_LINEAR_CHROMIUM 0x2401 | |
| 58 EYE_LINEAR_CHROMIUM 0x2400 | |
| 59 | |
| 60 Accepted by the <coverMode> parameter of CoverFillPathCHROMIUM, | |
| 61 CoverFillPathInstancedCHROMIUM, CoverStrokePathCHROMIUM and | |
| 62 CoverStrokePathInstancedCHROMIUM: | |
| 63 BOUNDING_BOX_CHROMIUM 0x908d | |
| 64 | |
| 65 Accepted by the <transformType> parameter of | |
| 66 StencilFillPathInstancedCHROMIUM, StencilStrokePathInstancedCHROMIUM, | |
| 67 CoverFillPathInstancedCHROMIUM, and CoverStrokePathInstancedCHROMIUM: | |
| 68 TRANSLATE_X_CHROMIUM 0x908E | |
| 69 TRANSLATE_Y_CHROMIUM 0x908F | |
| 70 TRANSLATE_2D_CHROMIUM 0x9090 | |
| 71 TRANSLATE_3D_CHROMIUM 0x9091 | |
| 72 AFFINE_2D_CHROMIUM 0x9092 | |
| 73 AFFINE_3D_CHROMIUM 0x9094 | |
| 74 TRANSPOSE_AFFINE_2D_CHROMIUM 0x9096 | |
| 75 TRANSPOSE_AFFINE_3D_CHROMIUM 0x9098 | |
| 76 | |
| 77 Accepted by the <coverMode> parameter of CoverFillPathInstancedCHROMIUM, | |
| 78 CoverStrokePathInstancedCHROMIUM: | |
| 79 BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM 0x909C | |
| 80 | |
| 81 | |
| 34 | 82 | 
| 35 New Procedures and Functions | 83 New Procedures and Functions | 
| 36 | 84 | 
| 37 void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix); | 85 void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix); | 
| 38 | 86 | 
| 39 Takes a pointer to a 4x4 matrix stored in column-major order as 16 | 87 Takes a pointer to a 4x4 matrix stored in column-major order as 16 | 
| 40 consecutive floating-point values. The matrixMode specifies which | 88 consecutive floating-point values. The matrixMode specifies which | 
| 41 matrix, MODELVIEW_CHROMIUM or PROJECTION_CHROMIUM is used. | 89 matrix, MODELVIEW_CHROMIUM or PROJECTION_CHROMIUM is used. | 
| 42 | 90 | 
| 43 The funcition specifies either modelview or projection matrix | 91 The funcition specifies either modelview or projection matrix | 
| 44 to be used with path rendering API calls. | 92 to be used with path rendering API calls. | 
| 45 | 93 | 
| 46 void MatrixLoadIdentityCHROMIUM(enum matrixMode); | 94 void MatrixLoadIdentityCHROMIUM(enum matrixMode); | 
| 47 | 95 | 
| 48 Effectively calls MatrixLoadf with the identity matrix. | 96 Effectively calls MatrixLoadf with the identity matrix. | 
| 49 | 97 | 
| 98 uint GenPathsCHROMIUM(sizei range) | |
| 99 | |
| 100 Returns an integer /n/ such that names /n/, ..., /n+range-1/ are | |
| 101 previously unused (i.e. there are /range/ previously unused path object | |
| 102 names starting at /n/). These names are marked as used, for the | |
| 103 purposes of subsequent GenPathsCHROMIUM only, but they do not acquire | |
| 104 path object state until each particular name is used to specify | |
| 105 a path object. | |
| 106 | |
| 107 void DeletePathsCHROMIUM(uint path, sizei range) | |
| 108 | |
| 109 Deletes a path object where /path/ contains /range/ names of path objects to | |
| 110 be delete. After a path object is deleted, its name is again unused. | |
| 111 Unused names in /paths/ are silently ignored. | |
| 112 | |
| 113 void PathCommandsCHROMIUM(uint path, sizei numCommands, | |
| 114 const ubyte* commands, sizei numCoords, | |
| 115 enum coordType, const void* coords) | |
| 116 | |
| 117 Specifies a path object commands for /path/ where /numCommands/ | |
| 118 indicates the number of path commands, read from the array | |
| 119 /commands/, with which to initialize that path's command sequence. | |
| 120 These path commands reference coordinates read sequentially from the | |
| 121 /coords/ array. The type of the coordinates read from the /coords/ | |
| 122 array is determined by the /coordType/ parameter must be | |
| 123 FLOAT, otherwise INVALID_ENUM is generated. | |
| 124 | |
| 125 The /numCommands/ elements of the /commands/ array must be tokens | |
| 126 or character in Table 5.pathCommands. The command sequence matches | |
| 127 the element order of the /commands/ array. Each command references | |
| 128 a number of coordinates specified by "Coordinate count" column of | |
| 129 Table 5.pathCommands, starting with the first (zero) element of | |
| 130 the /coords/ array and advancing by the coordinate count for each | |
| 131 command. If any of these /numCommands/ command values are not | |
| 132 listed in the "Token" or "Character aliases" columns of Table | |
| 133 5.pathCommands, the INVALID_ENUM error is generated. | |
| 134 | |
| 135 The INVALID_OPERATION error is generated if /numCoords/ does not | |
| 136 equal the number of coordinates referenced by the command sequence | |
| 137 specified by /numCommands/ and /commands/ (so /numCoords/ provides a | |
| 138 sanity check that the /coords/ array is being interpreted properly). | |
| 139 The error INVALID_VALUE is generated if either /numCommands/ or | |
| 140 /numCoords/ is negative. | |
| 141 | |
| 142 The error INVALID_OPERATION is generated if /path/ is | |
| 143 not an existing path object. | |
| 144 | |
| 145 If the PathCommandsCHROMIUM command results in an error, the path object | |
| 146 named /path/ is not changed; if there is no error, the prior contents | |
| 147 of /path/, if /path/ was an existent path object, are lost and the | |
| 148 path object name /path/ becomes used. | |
| 149 | |
| 150 void PathParameterfCHROMIUM(uint path, enum pname, float value) | |
| 151 void PathParameteriCHROMIUM(uint path, enum pname, int value) | |
| 152 | |
| 153 The commands specify the value of path parameters for the specified path | |
| 154 object named /path/. The error INVALID_OPERATION is generated if /path/ is | |
| 155 not an existing path object. | |
| 156 | |
| 157 Each parameter has a single (scalar) value. | |
| 158 | |
| 159 /pname/ must be one of the tokens in the "Name" column of | |
| 160 Table 5.pathParameters. | |
| 161 The required values or range of each allowed parameter name token | |
| 162 is listed in Table 5.pathParameter's "Required Values/Range" column. | |
| 163 | |
| 164 For values of /pname/ listed in Table 5.pathsParameters, the specified | |
| 165 parameter is specified by /value/ when /value/ is a float or int, | |
| 166 or if /value/ is a pointer to a float or int, accessed through that | |
| 167 pointer. The error INVALID_VALUE is generated if the specified | |
| 168 value is negative for parameters required to be non-negative in | |
| 169 Table 5.pathParameters. Values specified to be clamped to the [0,1] range | |
| 170 in Table 5.pathParameters are so clamped prior to setting the | |
| 171 specified path parameter to that clamped value. | |
| 172 | |
| 173 The error INVALID_VALUE is generated if the specified parameter value | |
| 174 is not within the require range for parameters typed float or integer. | |
| 175 The error INVALID_ENUM is generated if the specified parameter value | |
| 176 is not one of the listed tokens for parameters typed enum. | |
| 177 | |
| 178 void PathStencilFuncCHROMIUM(enum func, int ref, uint mask) | |
| 179 | |
| 180 Configures the stencil function, stencil reference value, and stencil read | |
| 181 mask to be used by the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM | |
| 182 commands described subsequently. The parameters accept the same values | |
| 183 allowed by the StencilFunc command. | |
| 
 
piman
2014/04/24 22:26:36
Why do we need a separate state from the regular G
 
Kimmo Kinnunen
2014/04/25 12:46:30
Tried to answer this in the added "Issues" section
 
 | |
| 184 | |
| 185 void StencilFillPathCHROMIUM(uint path, enum fillMode, uint mask) | |
| 186 | |
| 187 The function transforms into window space the outline of the path object | |
| 188 named /path/ based on the current modelview, projection and viewport, | |
| 189 transforms (ignoring any vertex and/or geometry shader or program that might | |
| 190 be active/enabled) and then updates the stencil values of all /accessible | |
| 191 samples/ (explained below) in the framebuffer. Each sample's stencil buffer | |
| 192 value is updated based on the winding number of that sample with respect to | |
| 193 the transformed outline of the path object with any non-closed subpath | |
| 194 forced closed and the specified /fillMode/. | |
| 195 | |
| 196 If /path/ does not name an existing path object, the command does | |
| 197 nothing (and no error is generated). | |
| 198 | |
| 199 If the path's command sequence specifies unclosed subpaths (so not | |
| 200 contours) due to MOVE_TO_CHROMIUM commands, such subpaths are trivially | |
| 201 closed by connecting with a line segment the initial and terminal | |
| 202 control points of each such path command subsequence. | |
| 203 | |
| 204 Transformation of a path's outline works by taking all positions on the | |
| 205 path's outline in 2D path space (x,y) and constructing an object space | |
| 206 position (x,y,0,1) that is then used similar to as with the (xo,yo,zo,wo) | |
| 207 position in section 2.12 ("Fixed-Function Vertex Transformation") of OpenGL | |
| 208 3.2 (unabridged) Specification (Special Functions) to compute corresponding | |
| 209 eye-space coordinates (xe,ye,ze,we) and clip-space coordinates | |
| 210 (xc,yc,zc,wc). A path outline's clip-space coordinates are further | |
| 211 transformed into window space similar to as described in section 2.16 | |
| 212 ("Coordinate Transformations"). This process provides a mapping 2D path | |
| 213 coordinates to 2D window coordinates. The resulting 2D window coordinates | |
| 214 are undefined if any of the transformations involved are singular or may be | |
| 215 inaccurate if any of the transformations (or their combination) are | |
| 216 ill-conditioned. | |
| 217 | |
| 218 The winding number for a sample with respect to the path outline, | |
| 219 transformed into window space, is computed by counting the (signed) | |
| 220 number of revolutions around the sample point when traversing each | |
| 221 (trivially closed if necessary) contour once in the transformed path. | |
| 222 This traversal is performed in the order of the path's command | |
| 223 sequence. Starting from an initially zero winding count, each | |
| 224 counterclockwise revolution when the front face mode is CCW (or | |
| 225 clockwise revolution when the front face mode is CW) around the sample | |
| 226 point increments the winding count by one; while each clockwise | |
| 227 revolution when the front face mode is CCW (or counterclockwise | |
| 228 revolution when the front face mode is CW) around the sample point | |
| 229 decrements the winding count by one. | |
| 230 | |
| 231 The /mask/ parameter controls what subset of stencil bits are affected | |
| 232 by the command. | |
| 233 | |
| 234 The /fillMode/ parameter must be one of INVERT, COUNT_UP_CHROMIUM | |
| 235 or COUNT_DOWN_CHROMIUM; otherwise the INVALID_ENUM error | |
| 236 is generated. INVERT inverts the bits set in the effective /mask/ | |
| 237 value for each sample's stencil value if the winding number for the | |
| 238 given sample is odd. COUNT_UP_CHROMIUM adds with modulo n arithmetic the | |
| 239 winding number of each sample with the sample's prior stencil buffer | |
| 240 value; the result of this addition is written into the sample's | |
| 241 stencil value but the bits of the stencil value not set in the | |
| 242 effective /mask/ value are left unchanged. COUNT_DOWN_CHROMIUM subtracts | |
| 243 with modulo /n/ arithmetic the winding number of each sample with the | |
| 244 sample's prior stencil buffer value; the result of this subtraction is | |
| 245 written into the sample's stencil value but the bits of the stencil | |
| 246 value not set in the effective /mask/ value are left unchanged. | |
| 247 | |
| 248 The value of /n/ for the modulo /n/ arithmetic used by COUNT_UP_CHROMIUM | |
| 249 and COUNT_DOWN_CHROMIUM is the effective /mask/+1. The error INVALID_VALUE | |
| 250 is generated if /fillMode/ is COUNT_UP_CHROMIUM or COUNT_DOWN_CHROMIUM and | |
| 251 the effective /mask/+1 is not an integer power of two. | |
| 252 | |
| 253 ACCESSIBLE SAMPLES WITH RESPECT TO A TRANSFORMED PATH | |
| 254 | |
| 255 The accessible samples of a transformed path that are updated are | |
| 256 the samples that remain after discarding the following samples: | |
| 257 | |
| 258 * Any sample that would be clipped similar to as specified in section | |
| 259 2.22 ("Primitive Clipping") of OpenGL 3.2 (unabridged) Specification | |
| 260 (Special Functions) because its corresponding position in clip space | |
| 261 (xc,yc,zc,wc) or (xe,ye,ze,we) would be clipped by the clip volume | |
| 262 or enabled client-defined clip planes. | |
| 263 | |
| 264 * Any sample that would fail the pixel ownership test (section | |
| 265 4.1.1) if rasterized. | |
| 266 | |
| 267 * Any sample that would fail the scissor test (section 4.1.2) | |
| 268 if SCISSOR_TEST is enabled. | |
| 269 | |
| 270 And for the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM commands | |
| 271 (so not applicable to the CoverFillPathCHROMIUM and CoverStrokePathCHROMIUM | |
| 272 commands): | |
| 273 * Any sample that would fail the (implicitly enabled) stencil test | |
| 274 with the stencil function configured based on the path stencil | |
| 275 function state configured by PathStencilFuncCHROMIUM. In the case | |
| 276 of the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM | |
| 277 commands and their instanced versions, the effective stencil read | |
| 278 mask for the stencil mask is treated as the value of | |
| 279 PATH_STENCIL_VALUE_MASK bit-wise ANDed with the bit-invert of the | |
| 280 effective /mask/ parameter value; otherwise, for the cover commands, | |
| 281 the stencil test operates normally. In the case the stencil test | |
| 282 fails during a path stencil operation, the stencil fail operation is | |
| 283 ignored and the pixel's stencil value is left undisturbed (as if the | |
| 284 stencil operation was KEEP). | |
| 285 | |
| 286 * The state of the face culling (CULL_FACE) enable is ignored. | |
| 287 | |
| 288 void StencilStrokePathCHROMIUM(uint path, int reference, uint mask) | |
| 289 | |
| 290 Transforms into window space the stroked region of the path object named | |
| 291 /path/ based on the current modelview, projection and viewport transforms | |
| 292 (ignoring any vertex and/or geometry shader or program that might be | |
| 293 active/enabled) and then updates the stencil values of a subset of the | |
| 294 accessible samples (see above) in the framebuffer. | |
| 295 | |
| 296 If /path/ does not name an existing path object, the command does | |
| 297 nothing (and no error is generated). | |
| 298 | |
| 299 The path object's specified stroke width (in path space) determines | |
| 300 the width of the path's stroked region. | |
| 301 | |
| 302 The stroke of a transformed path's outline | |
| 303 is the region of window space defined by the union of: | |
| 304 | |
| 305 * Sweeping an orthogonal centered line segment of the (above | |
| 306 determined) effective stroke width along each path segment | |
| 307 in the path's transformed outline. | |
| 308 | |
| 309 * End cap regions (explained below) appended to the initial | |
| 310 and terminal control points of non-closed command sequences | |
| 311 in the path. For a sequence of commands that form a closed | |
| 312 contour, the end cap regions are ignored. | |
| 313 | |
| 314 * Join style regions (explained below) between connected path | |
| 315 segments meet. | |
| 316 | |
| 317 Any accessible samples within the union of these three regions are | |
| 318 considered within the path object's stroke. | |
| 319 | |
| 320 The /mask/ parameter controls what subset of stencil bits are affected | |
| 321 by the command. | |
| 322 | |
| 323 A sample's stencil bits that are set in the effective /mask/ value | |
| 324 are updated with the specified stencil /reference/ value if the | |
| 325 sample is accessible (as specified above) and within the stroke of | |
| 326 the transformed path's outline. | |
| 327 | |
| 328 Every path object has an initial and terminal end cap parameter | |
| 329 that is one of FLAT_CHROMIUM, SQUARE_CHROMIUM or | |
| 330 ROUND_CHROMIUM. There are no samples within a FLAT_CHROMIUM end cap. | |
| 331 The SQUARE_CHROMIUM cap extends centered and tangent to the given end | |
| 332 (initial or terminal) of the subpath for half the effective stroke | |
| 333 width; in other words, a square cap is a half-square that kisses | |
| 334 watertightly the end of a subpath. The ROUND_CHROMIUM cap appends | |
| 335 a semi-circle, centered and tangent, with the diameter of the | |
| 336 effective stroke width to the given end (initial or terminal) of the | |
| 337 subpath; in other words, a round cap is a semi-circle that kisses | |
| 338 watertightly the end of a subpath. | |
| 339 | |
| 340 Every path object has a join style that is one of BEVEL_CHROMIUM, | |
| 341 ROUND_CHROMIUM or MITER_REVERT_CHROMIUM. Each path object also has a miter | |
| 342 limit value. The BEVEL_CHROMIUM join style inserts a triangle with two | |
| 343 vertices at the outside corners where two connected path segments join and a | |
| 344 third vertex at the common end point shared by the two path segments. The | |
| 345 ROUND_CHROMIUM join style inserts a wedge-shaped portion of a circle | |
| 346 centered at the common end point shared by the two path segments; the radius | |
| 347 of the circle is half the effective stroke width. The MITER_REVERT_CHROMIUM | |
| 348 join style inserts a quadrilateral with two opposite vertices at the outside | |
| 349 corners where the two connected path segments join and two opposite vertices | |
| 350 with one on the path's junction between the two joining path segments and | |
| 351 the other at the common end point shared by the two path segments. However, | |
| 352 the MITER_REVERT_CHROMIUM join style behaves as the BEVEL_CHROMIUM style if | |
| 353 the sine of half the angle between the two joined segments is less than the | |
| 354 path object's PATH_STROKE_WIDTH value divided by the path's | |
| 355 PATH_MITER_LIMIT_CHROMIUM value. | |
| 356 | |
| 357 void PathTexGenCHROMIUM(enum texCoordSet, enum genMode, int components, | |
| 358 const float* coeffs) | |
| 359 | |
| 360 The function controls how texture coordinate sets are computed for fragment | |
| 361 shading operations that occur as a result of CoverFillPathCHROMIUM or | |
| 362 CoverStrokePathCHROMIUM. | |
| 
 
piman
2014/04/24 22:26:36
Can you describe how these texture coordinates int
 
Kimmo Kinnunen
2014/04/25 12:46:30
Good point, forgot these.
Added explanation that
 
 | |
| 363 | |
| 364 /texCoordSet/ must be one of TEXTURE0 through | |
| 365 TEXTUREn where /n/ is one less than the implementation-dependent | |
| 366 value of MAX_TEXTURE_COORDS_CHROMIUM; otherwise INVALID_ENUM is generated. | |
| 367 | |
| 368 /genMode/ must be one of NONE, OBJECT_LINEAR_CHROMIUM, or | |
| 369 EYE_LINEAR_CHROMIUM; otherwise INVALID_ENUM is generated. | |
| 370 | |
| 371 /components/ must be 0 if /genMode/ is NONE or for other allowed | |
| 372 /genMode/ values must be one of 1, 2, 3, or 4; otherwise INVALID_VALUE | |
| 373 is generated. /components/ determines how many texture coordinate | |
| 374 components of the texture coordinate set, how many coefficients read | |
| 375 from the /coeffs/ array, and the linear equations used to generate the | |
| 376 s, t, r, and q texture coordinates of the varying texture coordinate | |
| 377 set specified by /texCoordSet/. | |
| 378 | |
| 379 In the following equations, coeffs[i] is the /i/th element (base | |
| 380 zero) of the /coeffs/ array; sc, tc, rc, and qa are the s, t, r, | |
| 381 and q texture coordinates of the texture coordinate set indicated | |
| 382 by /texCoordSet/ when the path is covered; and x, y, z, and w are | |
| 383 determined by the /genMode/ in the same manner as PathColorGenCHROMIUM's | |
| 
 
piman
2014/04/24 22:26:36
PathColorGenCHROMIUM isn't in this extension.
 
Kimmo Kinnunen
2014/04/25 12:46:30
Removed. Added some explanation above.
 
 | |
| 384 /genMode/. | |
| 385 | |
| 386 If the /components/ is 0, no values from the /coeffs/ array are | |
| 387 accessed and the s, t, r, and q coordinates of a covered fragment's | |
| 388 varying texture coordinate set for /texCoordSet/ are computed: | |
| 389 | |
| 390 s = sc | |
| 391 t = tc | |
| 392 r = rc | |
| 393 q = qc | |
| 394 | |
| 395 If the /components/ is 1 and /genMode/ is OBJECT_LINEAR_CHROMIUM, 3 values | |
| 396 from the /coeffs/ array are accessed and the s, t, r, and q coordinates of a | |
| 397 covered fragment's varying texture coordinate set for /texCoordSet/ are | |
| 398 computed: | |
| 399 | |
| 400 s = coeffs[0] * x + coeffs[1] * y + coeffs[2] | |
| 401 t = tc | |
| 402 r = rc | |
| 403 q = qc | |
| 404 | |
| 405 Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 4 values are | |
| 406 accessed and the varying texture coordinate set for /texunit/ are | |
| 407 computed: | |
| 408 | |
| 409 s = coeffs[0] * xe + coeffs[1] * ye + coeffs[2] * ze + coeffs[3] * we | |
| 410 t = tc | |
| 411 r = rc | |
| 412 q = qc | |
| 413 | |
| 414 If the /components/ is 2 and /genMode/ is OBJECT_LINEAR_CHROMIUM, 6 values | |
| 415 from the /coeffs/ array are accessed and the s, t, r, and q coordinates of a | |
| 416 covered fragment's varying texture coordinate set for /texCoordSet/ are | |
| 417 computed: | |
| 418 | |
| 419 s = coeffs[0] * x + coeffs[1] * y + coeffs[2] | |
| 420 t = coeffs[3] * x + coeffs[4] * y + coeffs[5] | |
| 421 r = rc | |
| 422 q = qc | |
| 423 | |
| 424 Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 8 values are | |
| 425 accessed and the varying texture coordinate set for /texunit/ are | |
| 426 computed: | |
| 427 | |
| 428 s = coeffs[0] * xe + coeffs[1] * ye + coeffs[2] * ze + coeffs[3] * we | |
| 429 t = coeffs[4] * xe + coeffs[5] * ye + coeffs[6] * ze + coeffs[7] * we | |
| 430 r = rc | |
| 431 q = qc | |
| 432 | |
| 433 If the /components/ is 3 and /genMode/ is OBJECT_LINEAR_CHROMIUM or 9 values | |
| 434 from the /coeffs/ array are accessed and the s, t, r, and q coordinates of a | |
| 435 covered fragment's varying texture coordinate set for /texCoordSet/ are | |
| 436 computed: | |
| 437 | |
| 438 s = coeffs[0] * x + coeffs[1] * y + coeffs[2] | |
| 439 t = coeffs[3] * x + coeffs[4] * y + coeffs[5] | |
| 440 r = coeffs[6] * x + coeffs[7] * y + coeffs[8] | |
| 441 q = qc | |
| 442 | |
| 443 Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 12 values are | |
| 444 accessed and the varying texture coordinate set for /texunit/ are | |
| 445 computed: | |
| 446 | |
| 447 s = coeffs[0] * xe + coeffs[1] * ye + coeffs[2] * ze + coeffs[3] * we | |
| 448 t = coeffs[4] * xe + coeffs[5] * ye + coeffs[6] * ze + coeffs[7] * we | |
| 449 r = coeffs[8] * xe + coeffs[9] * ye + coeffs[10] * ze + coeffs[11] * we | |
| 450 q = qc | |
| 451 | |
| 452 If the /components/ is 4 and /genMode/ is OBJECT_LINEAR_CHROMIUM, 12 | |
| 453 values from the /coeffs/ array are accessed and the s, t, r, and q | |
| 454 coordinates of a covered fragment's varying texture coordinate set for | |
| 455 /texCoordSet/ are computed: | |
| 456 | |
| 457 s = coeffs[0] * x + coeffs[1] * y + coeffs[2] | |
| 458 t = coeffs[3] * x + coeffs[4] * y + coeffs[5] | |
| 459 r = coeffs[6] * x + coeffs[7] * y + coeffs[8] | |
| 460 q = coeffs[9] * x + coeffs[10] * y + coeffs[11] | |
| 461 | |
| 462 Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 16 values are | |
| 463 accessed and the varying texture coordinate set for /texunit/ are | |
| 464 computed: | |
| 465 | |
| 466 s = coeffs[0] * xe + coeffs[1] * ye + coeffs[2] * ze + coeffs[3] * w e | |
| 467 t = coeffs[4] * xe + coeffs[5] * ye + coeffs[6] * ze + coeffs[7] * w e | |
| 468 r = coeffs[8] * xe + coeffs[9] * ye + coeffs[10] * ze + coeffs[11] * w e | |
| 469 q = coeffs[12] * xe + coeffs[13] * ye + coeffs[14] * ze + coeffs[15] * w e | |
| 470 | |
| 471 The state required for path color generation for each texture | |
| 472 coordinate set is a four-valued integer for the path texture | |
| 473 coordinate set generation mode and 16 floating-point coefficients. | |
| 474 The initial mode is NONE and the coefficients are all initially zero. | |
| 475 | |
| 476 void CoverFillPathCHROMIUM(uint path, enum coverMode) | |
| 
 
piman
2014/04/24 22:26:36
Do we need coverMode if there can only be BOUNDING
 
Kimmo Kinnunen
2014/04/25 12:46:30
This is the "API discussion", see below.
 
 | |
| 477 | |
| 478 The command transforms into window space the outline of the path object | |
| 479 named /path/ based on the current modelview, projection and viewport | |
| 480 transforms (ignoring any vertex and/or geometry shader or program that might | |
| 481 be active/enabled) and rasterizes a subset of the accessible samples in the | |
| 482 framebuffer guaranteed to include all samples that would be have a net | |
| 
 
piman
2014/04/24 22:26:36
typo: "would be have" ->  "would have"
 
Kimmo Kinnunen
2014/04/25 12:46:30
Done.
 
 | |
| 483 stencil value change if StencilFillPathCHROMIUM were issued with the same | |
| 484 modelview, projection, and viewport state. During this rasterization, the | |
| 485 stencil test operates normally and as configured; the expectation is the | |
| 486 stencil test will be used to discard samples not determined "covered" by a | |
| 487 prior StencilFillPathCHROMIUM command. | |
| 488 | |
| 489 If /path/ does not name an existing path object, the command does | |
| 490 nothing (and no error is generated). | |
| 491 | |
| 492 /coverMode/ must be BOUNDING_BOX_CHROMIUM. | |
| 493 | |
| 494 When /coverMode/ is BOUNDING_BOX_CHROMIUM, the subset of accessible pixels | |
| 495 that are rasterized are within a bounding box (expected to be reasonably | |
| 496 tight) surrounding all the samples guaranteed to be rasterized by | |
| 497 CoverFillPathCHROMIUM. The bounding box must be orthogonally aligned to the | |
| 498 path space coordinate system. (The area of the bounding box in path space | |
| 499 is guaranteed to be greater than or equal the area of the convex hull in | |
| 500 path space.) Each rasterized sample will be rasterized once and exactly once | |
| 501 when BOUNDING_BOX_CHROMIUM is specified. | |
| 502 | |
| 503 While samples with a net stencil change /must/ be rasterized, | |
| 504 implementations are explicitly allowed to vary in the rasterization | |
| 505 of samples for which StencilFillPathCHROMIUM would /not/ change sample's | |
| 506 net stencil value. This means implementations are allowed to (and, | |
| 507 in fact, are expected to) conservatively "exceed" the region strictly | |
| 508 stenciled by the path object. | |
| 509 | |
| 510 CoverFillPathCHROMIUM /requires/ the following rasterization invariance: | |
| 511 calling CoverFillPathCHROMIUM for the same (unchanged) path object with | |
| 512 fixed (unchanged) modelview, projection, and viewport transform state | |
| 513 with the same (unchanged) set of accessible samples will rasterize | |
| 514 the exact same set of samples with identical interpolated values | |
| 515 for respective fragment/sample locations. | |
| 516 | |
| 517 void CoverStrokePathCHROMIUM(uint path, enum coverMode) | |
| 518 | |
| 519 The command operates in the same manner as CoverFillPathCHROMIUM except the | |
| 520 region guaranteed to be rasterized is, rather than the region within | |
| 521 /path/'s filled outline, instead the region within the /path/'s stroked | |
| 522 region as determined by StencilStrokePathCHROMIUM. During this | |
| 523 rasterization, the stencil test operates normally and as configured; the | |
| 524 expectation is the stencil test will be used to discard samples not | |
| 525 determined "covered" by a prior StencilStrokePathCHROMIUM command. | |
| 526 | |
| 527 /coverMode/ must be BOUNDING_BOX_CHROMIUM. | |
| 528 | |
| 529 If /path/ does not name an existing path object, the command does | |
| 530 nothing (and no error is generated). | |
| 531 | |
| 532 Analogous to the rasterization guarantee of CoverFillPathCHROMIUM with | |
| 533 respect to StencilFillPathCHROMIUM, CoverStrokePathCHROMIUM guarantees that | |
| 534 all samples rasterized by StencilStrokePathCHROMIUM, given the same | |
| 535 transforms and accessible pixels and stroke width, will also be rasterized | |
| 536 by the corresponding CoverStrokePathCHROMIUM. | |
| 537 | |
| 538 CoverStrokePathCHROMIUM /requires/ the following rasterization invariance: | |
| 539 calling CoverStrokePathCHROMIUM for the same (unchanged) path object with | |
| 540 fixed (unchanged) modelview, projection, and viewport transform state and | |
| 541 with the same (unchanged) set of accessible samples will rasterize the exact | |
| 542 same set of samples with identical interpolated values for respective | |
| 543 fragment/sample locations. | |
| 544 | |
| 545 void StencilFillPathInstancedCHROMIUM(sizei numPaths, | |
| 546 enum pathNameType, const void *paths, | |
| 
 
piman
2014/04/24 22:26:36
since pathNameType is always UNSIGNED_INT, why not
 
Kimmo Kinnunen
2014/04/25 12:46:30
"API discussion"
 
 | |
| 547 uint pathBase, | |
| 548 enum fillMode, uint mask, | |
| 549 enum transformType, | |
| 550 const float *transformValues); | |
| 551 | |
| 552 The command stencils a sequence of filled paths. | |
| 553 | |
| 554 The /pathBase/ is an offset added to the /numPaths/ path names read | |
| 555 from the /paths/ array (interpreted based on /pathNameType/). | |
| 556 | |
| 557 The /pathNameType/ determines the type of elements of the /paths/ | |
| 558 array and must be UNSIGNED_INT, otherwise INVALID_ENUM is generated. | |
| 559 | |
| 560 The /transformType/ must be one of NONE, TRANSLATE_X_CHROMIUM, | |
| 561 TRANSLATE_Y_CHROMIUM, TRANSLATE_2D_CHROMIUM, TRANSLATE_3D_CHROMIUM, | |
| 562 AFFINE_2D_CHROMIUM, AFFINE_3D_CHROMIUM, TRANSPOSE_AFFINE_2D_CHROMIUM, or | |
| 563 TRANSPOSE_AFFINE_3D_CHROMIUM. | |
| 564 | |
| 565 The /fillMode/ and /mask/ are validated identically to the same-named | |
| 566 parameters of StencilFillPathCHROMIUM. | |
| 567 | |
| 568 The StencilFillPathInstancedCHROMIUM command is equivalent to: | |
| 569 | |
| 570 const float *v = transformValues; | |
| 571 for (int i = 0; i<numPaths; i++) { | |
| 572 float m[16]; | |
| 573 | |
| 574 GetFloatv(MODELVIEW_MATRIX, m); // save matrix | |
| 575 v = applyTransformType(transformType, v); | |
| 576 uint pathName; | |
| 577 bool stopEarly = getPathName(pathNameType, paths, pathBase, pathName); | |
| 
 
piman
2014/04/24 22:26:36
getPathName returns an int instead of a bool... ma
 
Kimmo Kinnunen
2014/04/25 12:46:30
Done. (Made getPathName to return (GL)bool).
 
 | |
| 578 if (stopEarly) | |
| 579 return; | |
| 580 StencilFillPathCHROMIUM(pathName, fillMode, mask); | |
| 581 MatrixLoadfCHROMIUM(MODELVIEW, m); // restore matrix | |
| 582 } | |
| 583 | |
| 584 assuming these helper functions for applyTransformType and | |
| 585 getPathName: | |
| 586 | |
| 587 const float *applyTransformType(enum transformType, const float *v) | |
| 588 { | |
| 589 float m[16]; | |
| 590 switch (transformType) { | |
| 591 case NONE: | |
| 592 break; | |
| 593 case TRANSLATE_X_CHROMIUM: | |
| 594 // translate the MODELVIEW matrix with value v[0] | |
| 595 v++; | |
| 596 break; | |
| 597 case TRANSLATE_Y_CHROMIUM: | |
| 598 // translate the MODELVIEW matrix with value v[0] | |
| 599 v++; | |
| 600 break; | |
| 601 case TRANSLATE_2D_CHROMIUM: | |
| 602 // translate the MODELVIEW matrix with values v[0] and v[1] | |
| 603 v+=2; | |
| 604 break; | |
| 605 case TRANSLATE_3D_CHROMIUM: | |
| 606 // translate the MODELVIEW matrix with values v[0], v[1] and v[2] | |
| 607 v+=3; | |
| 608 break; | |
| 609 case AFFINE_2D_CHROMIUM: | |
| 610 m[0] =v[0]; m[4] =v[2]; m[8] =0; m[12]=v[4]; | |
| 611 m[1] =v[1]; m[5] =v[3]; m[9] =0; m[13]=v[5]; | |
| 612 m[2] =0; m[6] =0; m[10]=1; m[14]=0; | |
| 613 m[3] =0; m[7] =0; m[11]=0; m[15]=1; | |
| 614 v += 6; | |
| 615 // multiply the MODELVIEW matrix with m | |
| 616 break; | |
| 617 case TRANSPOSE_AFFINE_2D_CHROMIUM: | |
| 618 m[0] =v[0]; m[4] =v[1]; m[8] =0; m[12]=v[2]; | |
| 619 m[1] =v[3]; m[5] =v[4]; m[9] =0; m[13]=v[5]; | |
| 620 m[2] =0; m[6] =0; m[10]=1; m[14]=0; | |
| 621 m[3] =0; m[7] =0; m[11]=0; m[15]=1; | |
| 622 v += 6; | |
| 623 // multiply the MODELVIEW matrix with m | |
| 624 break; | |
| 625 case AFFINE_3D_CHROMIUM: | |
| 626 m[0] =v[0]; m[4] =v[3]; m[8] =v[6]; m[12]=v[9]; | |
| 627 m[1] =v[1]; m[5] =v[4]; m[9] =v[7]; m[13]=v[10]; | |
| 628 m[2] =v[2]; m[6] =v[5]; m[10]=v[8]; m[14]=v[11]; | |
| 629 m[3] =0; m[7] =0; m[11]=1; m[15]=0; | |
| 630 v += 12; | |
| 631 // multiply the MODELVIEW matrix with m | |
| 632 break; | |
| 633 case TRANSPOSE_AFFINE_3D_CHROMIUM: | |
| 634 m[0] =v[0]; m[4] =v[1]; m[8] =v[2]; m[12]=v[3]; | |
| 635 m[1] =v[4]; m[5] =v[5]; m[9] =v[6]; m[13]=v[7]; | |
| 636 m[2] =v[8]; m[6] =v[9]; m[10]=v[10]; m[14]=v[11]; | |
| 637 m[3] =0; m[7] =0; m[11]=1; m[15]=0; | |
| 638 v += 12; | |
| 639 // multiply the MODELVIEW matrix with m | |
| 640 break; | |
| 641 default: // generate INVALID_ENUM | |
| 642 } | |
| 643 return v; | |
| 644 } | |
| 645 | |
| 646 int getPathName(enum pathNameType, const void *&paths, | |
| 647 uint pathBase, uint &pathName) | |
| 648 { | |
| 649 switch (pathNameType) { | |
| 650 case UNSIGNED_INT: | |
| 651 { | |
| 652 const uint *p = (const uint*)paths; | |
| 653 pathName = pathBase + p[0]; | |
| 654 paths = p+1; | |
| 655 return 1; | |
| 656 } | |
| 657 default: // generate INVALID_ENUM | |
| 658 } | |
| 659 } | |
| 660 | |
| 661 | |
| 662 void StencilStrokePathInstancedCHROMIUM(sizei numPaths, | |
| 663 enum pathNameType, const void *paths, | |
| 664 uint pathBase, | |
| 665 int reference, uint mask, | |
| 666 enum transformType, | |
| 667 const float *transformValues); | |
| 668 | |
| 669 The command stencils a sequence of stroked paths and is equivalent to: | |
| 670 | |
| 671 const float *v = transformValues; | |
| 672 for (int i = 0; i<numPaths; i++) { | |
| 673 float m[16]; | |
| 674 GetFloatv(MODELVIEW_MATRIX, m); // save matrix | |
| 675 v = applyTransformType(transformType, v); | |
| 676 uint pathName; | |
| 677 bool stopEarly = getPathName(pathNameType, paths, pathBase, pathName); | |
| 678 if (stopEarly) | |
| 679 return; | |
| 680 StencilStrokePathCHROMIUM(pathName, reference, mask); | |
| 681 MatrixLoadfCHROMIUM(MODELVIEW, m); // restore matrix | |
| 682 } | |
| 683 | |
| 684 assume the helper functions for applyTransformType and | |
| 685 getPathName defined above. | |
| 686 | |
| 687 void CoverFillPathInstancedCHROMIUM(sizei numPaths, | |
| 688 enum pathNameType, const void *paths, | |
| 689 uint pathBase, | |
| 690 enum coverMode, | |
| 691 enum transformType, | |
| 692 const float *transformValues); | |
| 693 | |
| 694 /coverMode/ must be BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM. | |
| 695 | |
| 696 The command covers a sequence of filled paths and is equivalent to: | |
| 697 | |
| 698 renderBoundingBox(FALSE, | |
| 699 numPaths, | |
| 700 pathNameType, paths, | |
| 701 pathBase, | |
| 702 transformType, transformValues); | |
| 703 | |
| 704 assuming these helper functions for applyTransformType and | |
| 705 getPathName defined above as well as: | |
| 706 | |
| 707 void renderBoundingBox(bool shouldRenderStroke, | |
| 708 sizei numPaths, | |
| 709 enum pathNameType, | |
| 710 const void *paths, | |
| 711 uint pathBase, | |
| 712 enum transformType, | |
| 713 const float *transformValues) | |
| 714 { | |
| 715 boolean hasBounds = FALSE; | |
| 716 float boundsUnion[4], bounds[4]; | |
| 717 | |
| 718 const float *v = transformValues; | |
| 719 for (int i = 0; i<numPaths; i++) { | |
| 720 uint pathName; | |
| 721 bool stopEarly = getPathName(pathNameType, paths, pathBase, pathName ); | |
| 722 if (stopEarly) | |
| 723 return; | |
| 724 if (IsPath(pathName)) { | |
| 725 GetPathBoundingBox(pathName, shouldRenderStroke, bounds); | |
| 726 switch (transformType) { | |
| 727 case NONE: | |
| 728 break; | |
| 729 case TRANSLATE_X_CHROMIUM: | |
| 730 bounds[0] += v[0]; | |
| 731 bounds[2] += v[0]; | |
| 732 v += 1; | |
| 733 break; | |
| 734 case TRANSLATE_Y_CHROMIUM: | |
| 735 bounds[1] += v[0]; | |
| 736 bounds[3] += v[0]; | |
| 737 v += 1; | |
| 738 break; | |
| 739 case TRANSLATE_2D_CHROMIUM: | |
| 740 bounds[0] += v[0]; | |
| 741 bounds[1] += v[1]; | |
| 742 bounds[2] += v[0]; | |
| 743 bounds[3] += v[1]; | |
| 744 v += 2; | |
| 745 break; | |
| 746 case TRANSLATE_3D_CHROMIUM: // ignores v[2] | |
| 747 bounds[0] += v[0]; | |
| 748 bounds[1] += v[1]; | |
| 749 bounds[2] += v[0]; | |
| 750 bounds[3] += v[1]; | |
| 751 v += 3; | |
| 752 break; | |
| 753 case AFFINE_2D_CHROMIUM: | |
| 754 bounds[0] = bounds[0]*v[0] + bounds[0]*v[2] + v[4]; | |
| 755 bounds[1] = bounds[1]*v[1] + bounds[1]*v[3] + v[5]; | |
| 756 bounds[2] = bounds[2]*v[0] + bounds[2]*v[2] + v[4]; | |
| 757 bounds[3] = bounds[3]*v[1] + bounds[3]*v[3] + v[5]; | |
| 758 v += 6; | |
| 759 break; | |
| 760 case TRANSPOSE_AFFINE_2D_CHROMIUM: | |
| 761 bounds[0] = bounds[0]*v[0] + bounds[0]*v[1] + v[2]; | |
| 762 bounds[1] = bounds[1]*v[3] + bounds[1]*v[4] + v[5]; | |
| 763 bounds[2] = bounds[2]*v[0] + bounds[2]*v[1] + v[2]; | |
| 764 bounds[3] = bounds[3]*v[3] + bounds[3]*v[4] + v[5]; | |
| 765 v += 6; | |
| 766 break; | |
| 767 case AFFINE_3D_CHROMIUM: // ignores v[2], v[5], v[6..8], v[11] | |
| 768 bounds[0] = bounds[0]*v[0] + bounds[0]*v[3] + v[9]; | |
| 769 bounds[1] = bounds[1]*v[1] + bounds[1]*v[4] + v[10]; | |
| 770 bounds[2] = bounds[2]*v[0] + bounds[2]*v[3] + v[9]; | |
| 771 bounds[3] = bounds[3]*v[1] + bounds[3]*v[4] + v[10]; | |
| 772 v += 12; | |
| 773 break; | |
| 774 case TRANSPOSE_AFFINE_3D_CHROMIUM: // ignores v[2], v[6], v[8..11 ] | |
| 775 bounds[0] = bounds[0]*v[0] + bounds[0]*v[1] + v[3]; | |
| 776 bounds[1] = bounds[1]*v[4] + bounds[1]*v[5] + v[7]; | |
| 777 bounds[2] = bounds[2]*v[0] + bounds[2]*v[1] + v[3]; | |
| 778 bounds[3] = bounds[3]*v[4] + bounds[3]*v[5] + v[7]; | |
| 779 v += 12; | |
| 780 break; | |
| 781 default: // generate INVALID_ENUM | |
| 782 } | |
| 783 if (bounds[0] > bounds[2]) { | |
| 784 float t = bounds[2]; | |
| 785 bounds[2] = bounds[0]; | |
| 786 bounds[0] = t; | |
| 787 } | |
| 788 if (bounds[1] > bounds[3]) { | |
| 789 float t = bounds[3]; | |
| 790 bounds[3] = bounds[1]; | |
| 791 bounds[1] = t; | |
| 792 } | |
| 793 if (hasBounds) { | |
| 794 if (bounds[0] < boundsUnion[0]) { | |
| 795 boundsUnion[0] = bounds[0]; | |
| 796 } | |
| 797 if (bounds[1] < boundsUnion[1]) { | |
| 798 boundsUnion[1] = bounds[1]; | |
| 799 } | |
| 800 if (bounds[2] > boundsUnion[2]) { | |
| 801 boundsUnion[2] = bounds[2]; | |
| 802 } | |
| 803 if (bounds[3] > boundsUnion[3]) { | |
| 804 boundsUnion[3] = bounds[3]; | |
| 805 } | |
| 806 } else { | |
| 807 for (int i=0; i<4; i++) { | |
| 808 boundsUnion[i] = bounds[i]; | |
| 809 } | |
| 810 hasBounds = TRUE; | |
| 811 } | |
| 812 } | |
| 813 } | |
| 814 if (hasBounds) { | |
| 815 Rectf(bounds[0], bounds[1], bounds[2], bounds[3]); | |
| 816 } | |
| 817 } | |
| 818 | |
| 819 Where helper IsPath checks if the path is a defined, | |
| 820 GetPathBoundingBox returns bounding box for the path with or without | |
| 821 stroking, and Rectf renders a rectangle. | |
| 822 | |
| 823 void CoverStrokePathInstancedCHROMIUM(sizei numPaths, | |
| 
 
piman
2014/04/24 22:26:36
Would it make sense to combine this with CoverFill
 
Kimmo Kinnunen
2014/04/25 12:46:30
This is the "API discussion".
 
 | |
| 824 enum pathNameType, const void *paths, | |
| 825 uint pathBase, | |
| 826 enum coverMode, | |
| 827 enum transformType, | |
| 828 const float *transformValues); | |
| 829 | |
| 830 /coverMode/ must be BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM. | |
| 831 | |
| 832 The command covers a sequence of stroked paths and is equivalent to: | |
| 833 | |
| 834 renderBoundingBox(TRUE, | |
| 835 numPaths, | |
| 836 pathNameType, paths, | |
| 837 pathBase, | |
| 838 transformType, transformValues); | |
| 839 | |
| 840 assuming these helper functions defined above. | |
| 841 | |
| 842 | |
| 843 | |
| 50 Errors | 844 Errors | 
| 51 | 845 | 
| 52 None. | 846 None. | 
| 53 | 847 | 
| 54 New State | 848 New State | 
| 55 | 849 | 
| 56 Get Value Type Get Command Initial Description | 850 Get Value Type Get Command Initial Description | 
| 57 ------------------------- ----- ------------ -------- ------------------- | 851 ------------------------- ----- ------------ -------- ------------------- | 
| 58 MODELVIEW_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current modelview | 852 MODELVIEW_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current modelview | 
| 59 matrix for path rend ering | 853 matrix for path rend ering | 
| 60 PROJECTION_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current projection | 854 PROJECTION_MATRIX_CHROMIUM 16xR GetFloatv all 0's Current projection | 
| 61 matrix for path rend ering | 855 matrix for path rend ering | 
| 856 PATH_STENCIL_FUNC_CHROMIUM Z8 GetIntegerv ALWAYS path stenciling func tion | |
| 857 PATH_STENCIL_REF_CHROMIUM Z+ GetIntegerv 0 path stenciling | |
| 858 reference value | |
| 859 PATH_STENCIL_VALUE_MASK_CHROMIUM path stencil read | |
| 860 Z+ GetIntegerv 1's mask | |
| 861 | |
| 862 Tables | |
| 863 Table 5.pathCommands: Path Commands | |
| 864 | |
| 865 Character Coordinate | |
| 866 Token Description alias count | |
| 867 ========================== ===================== ========== ========== | |
| 868 MOVE_TO_NV Absolute move 'M' 2 | |
| 
 
piman
2014/04/24 22:26:36
nit: _CHROMIUM (here and below)
 
Kimmo Kinnunen
2014/04/25 12:46:30
Done.
 
 | |
| 869 current point | |
| 870 -------------------------- --------------------- ---------- ---------- | |
| 871 CLOSE_PATH_NV Close path 'Z' or 'z' 0 | |
| 872 -------------------------- --------------------- ---------- ---------- | |
| 873 LINE_TO_NV Absolute line 'L' 2 | |
| 874 -------------------------- --------------------- ---------- ---------- | |
| 875 QUADRATIC_CURVE_TO_NV Absolute quadratic 'Q' 4 | |
| 876 CUBIC_CURVE_TO_NV Absolute cubic 'C' 6 | |
| 877 Bezier segment | |
| 878 -------------------------- --------------------- ---------- ---------- | |
| 879 | |
| 880 Table 5.pathParameters | |
| 881 Name Type Required Values or Range | |
| 882 ------------------------------- ------- ---------------------------------- ------------- | |
| 883 PATH_STROKE_WIDTH_CHROMIUM float non-negative | |
| 884 PATH_INITIAL_END_CAP_CHROMIUM enum FLAT, SQUARE_CHROMIUM, ROUND_CHROM IUM | |
| 885 PATH_TERMINAL_END_CAP_CHROMIUM enum FLAT, SQUARE_CHROMIUM, ROUND_CHROM IUM | |
| 886 PATH_JOIN_STYLE_CHROMIUM enum MITER_REVERT_CHROMIUM, BEVEL_CHROM IUM, ROUND_CHROMIUM | |
| 887 PATH_MITER_LIMIT_CHROMIUM float non-negative | |
| 62 | 888 | 
| 63 Revision History | 889 Revision History | 
| 64 | 890 | 
| 65 23/4/2014 Documented the extension | 891 23/4/2014 Documented the extension | 
| OLD | NEW |