1Name 2 3 EXT_multisample 4 5Name Strings 6 7 GL_EXT_multisample 8 WGL_EXT_multisample 9 10Version 11 12 Last Modified Date: January 4, 1999 13 Author Revision: 1.2 14 15 Based on: SGIS_Multisample Specification Revision 1.14 16 17Number 18 19 209 20 21Dependencies 22 23 WGL_EXT_extensions_string is required. 24 WGL_EXT_pixel_format is required. 25 26Overview 27 28 This extension provides a mechanism to antialias all GL primitives: 29 points, lines, polygons, bitmaps, and images. The technique is to 30 sample all primitives multiple times at each pixel. The color sample 31 values are resolved to a single, displayable color each time a pixel 32 is updated, so the antialiasing appears to be automatic at the 33 application level. Because each sample includes depth and stencil 34 information, the depth and stencil functions perform equivalently 35 to the single-sample mode. 36 37 An additional buffer, called the multisample buffer, is added to 38 the framebuffer. Pixel sample values, including color, depth, and 39 stencil values, are stored in this buffer. When the framebuffer 40 includes a multisample buffer, it does not also include separate 41 depth or stencil buffers, even if the multisample buffer does not 42 store depth or stencil values. Color buffers (left/right, front/ 43 back, and aux) do coexist with the multisample buffer, however. 44 45 Multisample antialiasing is most valuable for rendering polygons, 46 because it requires no sorting for hidden surface elimination, and 47 it correctly handles adjacent polygons, object silhouettes, and 48 even intersecting polygons. If only points or lines are being 49 rendered, the "smooth" antialiasing mechanism provided by the base 50 GL may result in a higher quality image. This extension is designed 51 to allow multisample and smooth antialiasing techniques to be 52 alternated during the rendering of a single scene. 53 54Issues 55 56 * Should SamplePatternEXT be eliminated? Does anyone use this feature? 57 58 * Should WGL_SAMPLE_BUFFERS_EXT and SAMPLE_BUFFERS_EXT be eliminated? 59 Given the current specification, applications that query only 60 WGL_SAMPLES_EXT will be written, taking zero to mean that there is 61 no multisample buffer. 62 63New Procedures and Functions 64 65 void SampleMaskEXT(clampf value, 66 boolean invert); 67 68 void SamplePatternEXT(enum pattern); 69 70New Tokens 71 72 Accepted by the <attribute> parameter of wglGetPixelFormatAttribivEXT, 73 wglGetPixelFormatAttribfvEXT, and wglChoosePixelFormatExEXT: 74 75 WGL_SAMPLE_BUFFERS_EXT 0x2041 76 WGL_SAMPLES_EXT 0x2042 77 78 Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and 79 by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and 80 GetDoublev: 81 82 MULTISAMPLE_EXT 0x809D 83 SAMPLE_ALPHA_TO_MASK_EXT 0x809E 84 SAMPLE_ALPHA_TO_ONE_EXT 0x809F 85 SAMPLE_MASK_EXT 0x80A0 86 87 Accepted by the <mask> parameter of PushAttrib: 88 89 MULTISAMPLE_BIT_EXT 0x20000000 90 91 Accepted by the <pattern> parameter of SamplePatternEXT: 92 93 1PASS_EXT 0x80A1 94 2PASS_0_EXT 0x80A2 95 2PASS_1_EXT 0x80A3 96 4PASS_0_EXT 0x80A4 97 4PASS_1_EXT 0x80A5 98 4PASS_2_EXT 0x80A6 99 4PASS_3_EXT 0x80A7 100 101 Accepted by the <pname> parameter of GetBooleanv, GetDoublev, 102 GetIntegerv, and GetFloatv: 103 104 SAMPLE_BUFFERS_EXT 0x80A8 105 SAMPLES_EXT 0x80A9 106 SAMPLE_MASK_VALUE_EXT 0x80AA 107 SAMPLE_MASK_INVERT_EXT 0x80AB 108 SAMPLE_PATTERN_EXT 0x80AC 109 110Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation) 111 112 None 113 114Additions to Chapter 3 of the 1.2 Specification (Rasterization) 115 116 If SAMPLE_BUFFERS_EXT is one, the rasterization of all GL primitives 117 is changed, and is referred to as multisample rasterization. Otherwise 118 primitive rasterization operates as it is described in the GL 119 specification, and is referred to as single-sample rasterization. The 120 value of SAMPLE_BUFFERS_EXT is an implementation dependent constant, and 121 is queried by calling GetIntegerv with <pname> set to SAMPLE_BUFFERS_EXT. 122 123 During multisample rendering the contents of a pixel fragment are 124 changed in two ways. First, each fragment includes a coverage mask 125 with SAMPLES_EXT bits. The value of SAMPLES_EXT is an implementation 126 dependent constant, and is queried by calling GetIntegerv with <pname> 127 set to SAMPLES_EXT. Second, each fragment includes SAMPLES_EXT depth 128 values, instead of the single depth value that is maintained in 129 single-sample rendering mode. Each pixel fragment thus consists of 130 integer x and y grid coordinates, a color, SAMPLES_EXT depth values, 131 texture coordinates, a coverage value, and the SAMPLES_EXT-bit mask. 132 133 The behavior of multisample rasterization is a function of 134 MULTISAMPLE_EXT, which is enabled and disabled by calling Enable or 135 Disable, with <cap> set to MULTISAMPLE_EXT. Its value is queried using 136 IsEnabled, with <cap> set to MULTISAMPLE_EXT. 137 138 If MULTISAMPLE_EXT is disabled, multisample rasterization of all 139 primitives is equivalent to single-sample rasterization, except that the 140 fragment coverage mask is set to all ones. The depth values may all 141 be set to the single value that would have been assigned by single-sample 142 rasterization, or they may be assigned as described below for 143 MULTISAMPLE_EXT-enabled multisample rasterization. 144 145 If MULTISAMPLE_EXT is enabled, multisample rasterization of all 146 primitives differs substantially from single-sample rasterization. 147 It is understood that each pixel in the framebuffer has SAMPLES_EXT 148 locations associated with it. These locations are exact positions, 149 rather than regions or areas, and each is referred to as a sample point. 150 The sample points associated with a pixel may be located inside or 151 outside of the unit square that is considered to bound the pixel. 152 Furthermore, the pattern (relative location) of sample points may 153 be identical for each pixel in the framebuffer, or it may differ. 154 155 The locations of the sample points are relatively static; they change 156 only when SamplePatternEXT is called, as a repeatable function of 157 parameter <pattern>. The default pattern 1PASS_EXT is designed to 158 produce a well antialiased result in a single rendering pass. Patterns 159 2PASS_0_EXT and 2PASS_1_EXT together specify twice the number of 160 sample points per pixel. It is intended that a scene be completely 161 rendered using pattern 2PASS_0_EXT, then completely rendered again 162 using 2PASS_1_EXT. When these two images are averaged using the 163 accumulation buffer, the result is as if a single pass had been 164 rendered with a filter of twice SAMPLES_EXT sample points. Patterns 165 4PASS_0_EXT, 4PASS_1_EXT, 4PASS_2_EXT, and 4PASS_3_EXT together define 166 a pattern of four times SAMPLES_EXT sample points. They can be used 167 to accumulate an image after four complete rendering passes. It is 168 not possible to query the actual sample locations of a pixel. The 169 sample pattern mode is queried by calling GetIntegerv with <pname> 170 set to SAMPLE_PATTERN_EXT. By default the sample pattern is 1PASS_EXT. 171 172 If the sample patterns differ per pixel, they should be aligned to 173 window, not screen, boundaries. Otherwise rendering results will be 174 window-position specific. The invariance requirement described 175 in section 3.1 is relaxed for all enabled multisample rendering, 176 because the sample patterns may be a function of pixel location. 177 178 3.3.2 Point Multisample Rasterization 179 180 If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then 181 points are rasterized using the following algorithm, regardless of 182 whether point antialiasing (POINT_SMOOTH) is enabled or disabled. 183 Point rasterization produces a fragment for each framebuffer pixel 184 with one or more sample points that intersect the region lying within 185 the circle having diameter equal to the current point width and 186 centered at the point's (Xw,Yw). The coverage value for each fragment 187 is 1. Mask bits that correspond to sample points that intersect the 188 circular region are 1, other mask bits are 0. All depth values of the 189 fragment are assigned the depth value of the point being rasterized. 190 The data associated with each fragment are otherwise the data 191 associated with the point being rasterized. 192 193 Point size range and number of gradations are equivalent to those 194 supported for antialiased points. 195 196 3.4.4 Line Multisample Rasterization 197 198 If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then 199 lines are rasterized using the following algorithm, regardless of 200 whether line antialiasing (LINE_SMOOTH) is enabled or disabled. Line 201 rasterization produces a fragment for each framebuffer pixel with one 202 or more sample points that intersect the rectangular region that is 203 described in the Antialiasing section of 3.4.2 (Other Line Segment 204 Features). If line stippling is enabled, the rectangular region is 205 subdivided into adjacent unit-length rectangles, with some rectangles 206 eliminated according to the procedure given under Line Stipple, where 207 "fragment" is replaced by "rectangle". 208 209 The coverage value for each fragment is 1. Mask bits that correspond 210 to sample points that intersect a retained rectangle are 1, other mask 211 bits are 0. Each depth value is produced by substituting the 212 corresponding sample location into equation 3.1, then using the 213 result to evaluate equation 3.3. The data associated with each 214 fragment are otherwise computed by evaluating equation 3.1 at the 215 fragment center, then substituting into equation 3.2. 216 217 Line width range and number of gradations are equivalent to those 218 supported for antialiased lines. 219 220 3.5.7 Polygon Multisample Rasterization 221 222 If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then 223 polygons are rasterized using the following algorithm, regardless of 224 whether polygon antialiasing (POLYGON_SMOOTH) is enabled or disabled. 225 Polygon rasterization produces a fragment for each framebuffer pixel 226 with one or more sample points that satisfy the point sampling 227 criteria described in section 3.5.1, including the special treatment 228 for sample points that lie on a polygon boundary edge. If a polygon 229 is culled, based on its orientation and the CullFace mode, then no 230 fragments are produced during rasterization. Fragments are culled 231 by the polygon stipple just as they are for aliased and antialiased 232 polygons. 233 234 The coverage value for each fragment is 1. Mask bits that correspond 235 to sample points that satisfy the point sampling criteria are 1, other 236 mask bits are 0. Each depth value is produced by substituting the 237 corresponding sample location into the barycentric equations described 238 in section 3.5.1, using the approximation to equation 3.4 that omits 239 w components. The data associated with each fragment are otherwise 240 computed by barycentric evaluation using the fragment's center point. 241 242 The rasterization described above applies only to the FILL state of 243 PolygonMode. For POINT and LINE, the rasterizations described in 244 3.3.2 (Point Multisample Rasterization) and 3.4.4 (Line Multisample 245 Rasterization) apply. 246 247 3.6.6 Multisample Rasterization of Pixel Rectangles 248 249 If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then 250 pixel rectangles are rasterized using the following algorithm. 251 Let (Xrp,Yrp) be the current raster position. (If the current raster 252 position is invalid, then DrawPixels is ignored.) If a particular 253 group (index or components) is the nth in a row and belongs to the 254 mth row, consider the region in window coordinates bounded by the 255 rectangle with corners 256 257 (Xrp + Zx*n, Yrp + Zy*m) 258 259 and 260 261 (Xrp + Zx*(n+1), Yrp + Zy*(m+1)) 262 263 where Zx and Zy are the pixel zoom factors specified by PixelZoom, 264 and may each be either positive or negative. A fragment representing 265 group n,m is produced for each framebuffer pixel with one or more 266 sample points that lie inside, or on the bottom or left boundary, of 267 this rectangle. Each fragment so produced takes its associated data 268 from the group and from the current raster position, in a manner 269 consistent with the discussion in the Conversion to Fragments 270 subsection of section 3.6.4 of the GL specification. All depth 271 sample values are assigned the same value, taken either from the 272 group (if it is a depth component group) or from the current raster 273 position (if it is not). 274 275 A single pixel rectangle will generate multiple, perhaps very many 276 fragments for the same framebuffer pixel, depending on the pixel zoom 277 factors. 278 279 3.7.1 Bitmap Multisample Rasterization 280 281 If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then 282 bitmaps are rasterized using the following algorithm. If the current 283 raster position is invalid, the bitmap is ignored. Otherwise, a 284 screen-aligned array of pixel-size rectangles is constructed, with its 285 lower-left corner at (Xrp,Yrp), and its upper right corner at 286 (Xrp+w,Yrp+h), where w and h are the width and height of the bitmap. 287 Rectangles in this array are eliminated if the corresponding bit in the 288 bitmap is zero, and are retained otherwise. Bitmap rasterization 289 produces a fragment for each framebuffer pixel with one or more sample 290 points either inside or on the bottom or left edge of a retained 291 rectangle. 292 293 The coverage value for each fragment is 1. Mask bits that correspond 294 to sample points either inside or on the bottom or left edge of a 295 retained rectangle are 1, other mask bits are 0. The associated data 296 for each fragment are those associated with the current raster 297 position. Once the fragments have been produced, the current raster 298 position is updated exactly as it is in the single-sample rasterization 299 case. 300 301Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 302and the Frame Buffer) 303 304 4.1.2.5 Multisample Fragment Operations 305 306 [This section follows section 4.1.2 (Scissor test) and precedes section 307 4.1.3 (Alpha test)] 308 309 This step modifies fragment alpha and mask values, based on the values 310 of SAMPLE_ALPHA_TO_MASK_EXT, SAMPLE_ALPHA_TO_ONE_EXT, SAMPLE_MASK_EXT, 311 SAMPLE_MASK_VALUE_EXT, and SAMPLE_MASK_INVERT_EXT. No changes to the 312 fragment alpha or mask values are made at this step if MULTISAMPLE_EXT 313 is disabled, or if SAMPLE_BUFFERS_EXT is zero. 314 315 SAMPLE_ALPHA_TO_MASK_EXT, SAMPLE_ALPHA_TO_ONE_EXT, and SAMPLE_MASK_EXT 316 are enabled and disabled by calling Enable and Disable with <cap> 317 specified as one of the three token values. All three values are 318 queried by calling IsEnabled, with <cap> set to the desired token value. 319 If SAMPLE_ALPHA_TO_MASK_EXT is enabled, the fragment alpha value is 320 used to generate a temporary mask value, which is then ANDed with the 321 fragment mask value. Otherwise the fragment mask value is unchanged at 322 this point. 323 324 This specification does not require a specific algorithm for converting 325 an alpha value to a temporary mask value. It is intended that the number 326 of 1's in the temporary mask be proportional to the alpha value, with 327 all 1's corresponding to the maximum alpha value, and all 0's 328 corresponding to an alpha value of 0. It is also intended that the 329 algorithm be pseudo-random in nature, to avoid image artifacts due 330 to regular mask patterns. The algorithm can and probably should be 331 different at different pixel locations. If it does differ, it should 332 be defined relative to window, not screen, coordinates, so that 333 rendering results are invariant with respect to window position. 334 335 Next, if SAMPLE_ALPHA_TO_ONE_EXT is enabled, fragment alpha is replaced 336 by the maximum representable alpha value. Otherwise, fragment alpha 337 value is not changed. 338 339 Finally, if SAMPLE_MASK_EXT is enabled, the fragment mask is ANDed 340 with another temporary mask. This temporary mask is generated in the 341 same manner as the one described above, but as a function of the value 342 of SAMPLE_MASK_VALUE_EXT. The function need not be identical, but it 343 must have the same properties of proportionality and invariance. If 344 SAMPLE_MASK_INVERT_EXT is TRUE, the temporary mask is inverted (all 345 bit values are inverted) before it is ANDed with the fragment mask. 346 347 The values of SAMPLE_MASK_VALUE_EXT and SAMPLE_MASK_INVERT_EXT are 348 specified simultaneously by calling SampleMaskEXT, with <value> set 349 to the desired mask value, and <invert> set to TRUE or FALSE. <value> 350 is clamped to [0,1] before being stored as SAMPLE_MASK_VALUE_EXT. 351 SAMPLE_MASK_VALUE_EXT is queried by calling GetFloatv with <pname> set 352 to SAMPLE_MASK_VALUE_EXT. SAMPLE_MASK_INVERT_EXT is queried by calling 353 GetBooleanv with <pname> set to SAMPLE_MASK_INVERT_EXT. 354 355 4.1.9 Multisample Fragment Operations 356 357 If the DrawBuffers mode is NONE, no change is made to any multisample 358 or color buffer. Otherwise, fragment processing is as described below. 359 360 If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, the 361 stencil test, depth test, blending, and dithering operations described 362 in sections 4.1.4, 4.1.5, 4.1.6, and 4.1.7 are performed for each 363 pixel sample, rather than just once for each fragment. Failure 364 of the stencil or depth test results in termination of the processing 365 of that sample, rather than discarding of the fragment. All operations 366 are performed on the color, depth, and stencil values stored in the 367 multisample buffer (to be described in a following section). The 368 contents of the color buffers are not modified at this point. 369 370 Stencil, depth, blending, and dithering operations are performed 371 for a pixel sample only if that sample's fragment mask bit is 1. If 372 the corresponding mask bit is 0, no operations are performed for that 373 sample. Depth operations use the fragment depth value that is 374 specific to each sample. The single fragment color value is used for 375 all sample operations, however, as is the current stencil value. 376 377 If MULTISAMPLE_EXT is disabled, and SAMPLE_BUFFERS_EXT is one, the 378 fragment may be treated exactly as described above, with optimization 379 possible because the fragment mask must be all 1's. Further 380 optimization is allowed, however. An implementation may choose to 381 identify a centermost sample, and to perform stencil and depth tests 382 on only that sample. Regardless of the outcome of the stencil test, 383 all multisample buffer stencil sample values are set to the appropriate 384 new stencil value. If the depth test passes, all multisample buffer 385 depth sample values are set to the depth of the fragment's centermost 386 sample's depth value, and all multisample buffer color sample values 387 are set to the color value of the incoming fragment. Otherwise, no 388 change is made to any multisample buffer color or depth value. 389 390 After all operations have been completed on the multisample buffer, 391 the color sample values are combined to produce a single color value, 392 and that value is written into each color buffer that is currently 393 enabled, based on the DrawBuffers mode. The method of combination is 394 not specified, though a simple average computed independently for each 395 color component is recommended. 396 397 4.2.2.5 Fine Control of Multisample Buffer Updates 398 399 When SAMPLE_BUFFERS_EXT is one, ColorMask, DepthMask, and StencilMask 400 control the modification of values in the multisample buffer. The 401 color mask has no effect on modifications to the color buffers. If 402 the color mask is entirely disabled, the color sample values must 403 still be combined (as described above) and the result used to replace 404 the color values of the buffers enabled by DrawBuffers. 405 406 4.2.3.5 Clearing the Multisample Buffer 407 408 The color samples of the multisample buffer are cleared when one or 409 more color buffers are cleared, as specified by the Clear mask bit 410 COLOR_BUFFER_BIT and the DrawBuffers mode. If the DrawBuffers mode is 411 NONE, the color samples of the multisample buffer cannot be cleared. 412 413 Clear mask bits DEPTH_BUFFER_BIT and STENCIL_BUFFER_BIT indicate that 414 the depth and stencil samples of the multisample buffer are to be 415 cleared. If Clear mask bit DEPTH_BUFFER_BIT is specified, and if 416 the DrawBuffers mode is not NONE, then the multisample depth buffer 417 samples are cleared. Likewise, if Clear mask bit STENCIL_BUFFER_BIT 418 is specified, and if the DrawBuffers mode is not NONE, then the 419 multisample stencil buffer is cleared. 420 421 4.3.2 Reading Pixels 422 423 [These changes are made to the text in section 4.3.2, following the 424 subheading Obtaining Pixels from the Framebuffer.] 425 426 Follow the sentence "If there is no depth buffer, the error 427 INVALID_OPERATION occurs." with: If there is a multisample buffer 428 (SAMPLE_BUFFERS_EXT is 1) then values are obtained from the depth 429 samples in this buffer. It is recommended that the depth value 430 of the centermost sample be used, though implementations may choose 431 any function of the depth sample values at each pixel. 432 433 Follow the sentence "if there is no stencil buffer, the error 434 INVALID_OPERATION occurs." with: If there is a multisample buffer, 435 then values are obtained from the stencil samples in this buffer. 436 It is recommended that the stencil value of the centermost sample 437 be used, though implementations may choose any function of the stencil 438 sample values at each pixel. 439 440 This extension makes no change to the way that color values are 441 obtained from the framebuffer. 442 443Additions to Chapter 5 of the 1.0 Specification (Special Functions) 444 445 None 446 447Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 448 449 An additional group of state variables, MULTISAMPLE_BIT_EXT, is defined 450 by this extension. When PushAttrib is called with bit MULTISAMPLE_BIT_EXT 451 set, the multisample group of state variables is pushed onto the 452 attribute stack. When PopAttrib is called, these state variables are 453 restored to their previous values if they were pushed. Some multisample 454 state is included in the ENABLE_BIT group as well. In order to avoid 455 incompatibility with GL implementations that do not support 456 EXT_multisample, ALL_ATTRIB_BITS does not include MULTISAMPLE_BIT_EXT. 457 458Additions to the WGL Specification 459 460 The parameter WGL_SAMPLE_BUFFERS_EXT is added to wglGetPixelFormatAttrib*v. 461 When queried, by calling wglGetPixelFormatAttrib*v with <attributes> set 462 to WGL_SAMPLE_BUFFERS_EXT, it returns the number of multisample buffers 463 included in the pixel format. For a normal visual, the return value is 464 zero. A return value of one indicates that a single multisample buffer 465 is available. The number of samples per pixel is queried by calling 466 wglGetPixelFormatAttrib*v with <attrib> set to WGL_SAMPLES_EXT. It is 467 understood that the number of color, depth, and stencil bits per sample 468 in the multisample buffer are as specified by the WGL_*_SIZE parameters. 469 It is also understood that there are no single-sample depth or stencil 470 buffers associated with this visual -- the only depth and stencil 471 buffers are those in the multisample buffer. WGL_SAMPLES_EXT is zero 472 if WGL_SAMPLE_BUFFERS_EXT is zero. 473 474 wglChoosePixelFormatEx accepts WGL_SAMPLE_BUFFERS_EXT in <attributes>, 475 followed by the minimum number of multisample buffers that can be 476 accepted. Pixel formats with the smallest number of multisample buffers 477 that meets or exceeds the specified minimum number are preferred. 478 Currently operation with more than one multisample buffer is undefined, 479 so the returned value will be either zero or one. 480 481 wglChoosePixelFormatEx accepts WGL_SAMPLES_EXT in <attributes>, followed 482 by the minimum number of samples that can be accepted in the multisample 483 buffer. Visuals with the smallest number of samples that meets or 484 exceeds the specified minimum number are preferred. 485 486 If the color samples in the multisample buffer store fewer bits than 487 are stored in the color buffers, this fact will not be reported 488 accurately. Presumably a compression scheme is being employed, and is 489 expected to maintain an aggregate resolution equal to that of the 490 color buffers. 491 492Errors 493 494 INVALID_ENUM is generated if SamplePatternEXT parameter <pattern> is 495 not 1PASS_EXT, 2PASS_0_EXT, 2PASS_1_EXT, 4PASS_0_EXT, 4PASS_1_EXT, 496 4PASS_2_EXT, or 4PASS_3_EXT. 497 498 INVALID_OPERATION is generated if SampleMaskEXT or SamplePatternEXT 499 is called between the execution of Begin and the execution of the 500 corresponding End. 501 502New State 503 504 Get Value Get Command Type Initial Value Attribute 505 --------- ----------- ---- ------------- --------- 506 MULTISAMPLE_EXT IsEnabled B TRUE multisample/enable 507 SAMPLE_ALPHA_TO_MASK_EXT IsEnabled B FALSE multisample/enable 508 SAMPLE_ALPHA_TO_ONE_EXT IsEnabled B FALSE multisample/enable 509 SAMPLE_MASK_EXT IsEnabled B FALSE multisample/enable 510 SAMPLE_MASK_VALUE_EXT GetFloatv R+ 1 multisample 511 SAMPLE_MASK_INVERT_EXT GetBooleanv B FALSE multisample 512 SAMPLE_PATTERN_EXT GetIntegerv Z7 1PASS_EXT multisample 513 514New Implementation Dependent State 515 516 Get Value Get Command Type Minimum Value 517 --------- ----------- ---- ------------- 518 SAMPLE_BUFFERS_EXT GetIntegerv Z+ 0 519 SAMPLES_EXT GetIntegerv Z+ 0 520 521Revision History 522 523 April 19, 2000 - assigned extension #209. 524 June 1999 - added to the OpenGL extension registry. 525 January 1999 - Written by Intergraph. 526