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