• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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