| Name | |
| EXT_multisample | |
| Name Strings | |
| GL_EXT_multisample | |
| WGL_EXT_multisample | |
| Version | |
| Last Modified Date: January 4, 1999 | |
| Author Revision: 1.2 | |
| Based on: SGIS_Multisample Specification Revision 1.14 | |
| Number | |
| 209 | |
| Dependencies | |
| WGL_EXT_extensions_string is required. | |
| WGL_EXT_pixel_format is required. | |
| Overview | |
| This extension provides a mechanism to antialias all GL primitives: | |
| points, lines, polygons, bitmaps, and images. The technique is to | |
| sample all primitives multiple times at each pixel. The color sample | |
| values are resolved to a single, displayable color each time a pixel | |
| is updated, so the antialiasing appears to be automatic at the | |
| application level. Because each sample includes depth and stencil | |
| information, the depth and stencil functions perform equivalently | |
| to the single-sample mode. | |
| An additional buffer, called the multisample buffer, is added to | |
| the framebuffer. Pixel sample values, including color, depth, and | |
| stencil values, are stored in this buffer. When the framebuffer | |
| includes a multisample buffer, it does not also include separate | |
| depth or stencil buffers, even if the multisample buffer does not | |
| store depth or stencil values. Color buffers (left/right, front/ | |
| back, and aux) do coexist with the multisample buffer, however. | |
| Multisample antialiasing is most valuable for rendering polygons, | |
| because it requires no sorting for hidden surface elimination, and | |
| it correctly handles adjacent polygons, object silhouettes, and | |
| even intersecting polygons. If only points or lines are being | |
| rendered, the "smooth" antialiasing mechanism provided by the base | |
| GL may result in a higher quality image. This extension is designed | |
| to allow multisample and smooth antialiasing techniques to be | |
| alternated during the rendering of a single scene. | |
| Issues | |
| * Should SamplePatternEXT be eliminated? Does anyone use this feature? | |
| * Should WGL_SAMPLE_BUFFERS_EXT and SAMPLE_BUFFERS_EXT be eliminated? | |
| Given the current specification, applications that query only | |
| WGL_SAMPLES_EXT will be written, taking zero to mean that there is | |
| no multisample buffer. | |
| New Procedures and Functions | |
| void SampleMaskEXT(clampf value, | |
| boolean invert); | |
| void SamplePatternEXT(enum pattern); | |
| New Tokens | |
| Accepted by the <attribute> parameter of wglGetPixelFormatAttribivEXT, | |
| wglGetPixelFormatAttribfvEXT, and wglChoosePixelFormatExEXT: | |
| WGL_SAMPLE_BUFFERS_EXT 0x2041 | |
| WGL_SAMPLES_EXT 0x2042 | |
| Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and | |
| by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and | |
| GetDoublev: | |
| MULTISAMPLE_EXT 0x809D | |
| SAMPLE_ALPHA_TO_MASK_EXT 0x809E | |
| SAMPLE_ALPHA_TO_ONE_EXT 0x809F | |
| SAMPLE_MASK_EXT 0x80A0 | |
| Accepted by the <mask> parameter of PushAttrib: | |
| MULTISAMPLE_BIT_EXT 0x20000000 | |
| Accepted by the <pattern> parameter of SamplePatternEXT: | |
| 1PASS_EXT 0x80A1 | |
| 2PASS_0_EXT 0x80A2 | |
| 2PASS_1_EXT 0x80A3 | |
| 4PASS_0_EXT 0x80A4 | |
| 4PASS_1_EXT 0x80A5 | |
| 4PASS_2_EXT 0x80A6 | |
| 4PASS_3_EXT 0x80A7 | |
| Accepted by the <pname> parameter of GetBooleanv, GetDoublev, | |
| GetIntegerv, and GetFloatv: | |
| SAMPLE_BUFFERS_EXT 0x80A8 | |
| SAMPLES_EXT 0x80A9 | |
| SAMPLE_MASK_VALUE_EXT 0x80AA | |
| SAMPLE_MASK_INVERT_EXT 0x80AB | |
| SAMPLE_PATTERN_EXT 0x80AC | |
| Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation) | |
| None | |
| Additions to Chapter 3 of the 1.2 Specification (Rasterization) | |
| If SAMPLE_BUFFERS_EXT is one, the rasterization of all GL primitives | |
| is changed, and is referred to as multisample rasterization. Otherwise | |
| primitive rasterization operates as it is described in the GL | |
| specification, and is referred to as single-sample rasterization. The | |
| value of SAMPLE_BUFFERS_EXT is an implementation dependent constant, and | |
| is queried by calling GetIntegerv with <pname> set to SAMPLE_BUFFERS_EXT. | |
| During multisample rendering the contents of a pixel fragment are | |
| changed in two ways. First, each fragment includes a coverage mask | |
| with SAMPLES_EXT bits. The value of SAMPLES_EXT is an implementation | |
| dependent constant, and is queried by calling GetIntegerv with <pname> | |
| set to SAMPLES_EXT. Second, each fragment includes SAMPLES_EXT depth | |
| values, instead of the single depth value that is maintained in | |
| single-sample rendering mode. Each pixel fragment thus consists of | |
| integer x and y grid coordinates, a color, SAMPLES_EXT depth values, | |
| texture coordinates, a coverage value, and the SAMPLES_EXT-bit mask. | |
| The behavior of multisample rasterization is a function of | |
| MULTISAMPLE_EXT, which is enabled and disabled by calling Enable or | |
| Disable, with <cap> set to MULTISAMPLE_EXT. Its value is queried using | |
| IsEnabled, with <cap> set to MULTISAMPLE_EXT. | |
| If MULTISAMPLE_EXT is disabled, multisample rasterization of all | |
| primitives is equivalent to single-sample rasterization, except that the | |
| fragment coverage mask is set to all ones. The depth values may all | |
| be set to the single value that would have been assigned by single-sample | |
| rasterization, or they may be assigned as described below for | |
| MULTISAMPLE_EXT-enabled multisample rasterization. | |
| If MULTISAMPLE_EXT is enabled, multisample rasterization of all | |
| primitives differs substantially from single-sample rasterization. | |
| It is understood that each pixel in the framebuffer has SAMPLES_EXT | |
| locations associated with it. These locations are exact positions, | |
| rather than regions or areas, and each is referred to as a sample point. | |
| The sample points associated with a pixel may be located inside or | |
| outside of the unit square that is considered to bound the pixel. | |
| Furthermore, the pattern (relative location) of sample points may | |
| be identical for each pixel in the framebuffer, or it may differ. | |
| The locations of the sample points are relatively static; they change | |
| only when SamplePatternEXT is called, as a repeatable function of | |
| parameter <pattern>. The default pattern 1PASS_EXT is designed to | |
| produce a well antialiased result in a single rendering pass. Patterns | |
| 2PASS_0_EXT and 2PASS_1_EXT together specify twice the number of | |
| sample points per pixel. It is intended that a scene be completely | |
| rendered using pattern 2PASS_0_EXT, then completely rendered again | |
| using 2PASS_1_EXT. When these two images are averaged using the | |
| accumulation buffer, the result is as if a single pass had been | |
| rendered with a filter of twice SAMPLES_EXT sample points. Patterns | |
| 4PASS_0_EXT, 4PASS_1_EXT, 4PASS_2_EXT, and 4PASS_3_EXT together define | |
| a pattern of four times SAMPLES_EXT sample points. They can be used | |
| to accumulate an image after four complete rendering passes. It is | |
| not possible to query the actual sample locations of a pixel. The | |
| sample pattern mode is queried by calling GetIntegerv with <pname> | |
| set to SAMPLE_PATTERN_EXT. By default the sample pattern is 1PASS_EXT. | |
| If the sample patterns differ per pixel, they should be aligned to | |
| window, not screen, boundaries. Otherwise rendering results will be | |
| window-position specific. The invariance requirement described | |
| in section 3.1 is relaxed for all enabled multisample rendering, | |
| because the sample patterns may be a function of pixel location. | |
| 3.3.2 Point Multisample Rasterization | |
| If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then | |
| points are rasterized using the following algorithm, regardless of | |
| whether point antialiasing (POINT_SMOOTH) is enabled or disabled. | |
| Point rasterization produces a fragment for each framebuffer pixel | |
| with one or more sample points that intersect the region lying within | |
| the circle having diameter equal to the current point width and | |
| centered at the point's (Xw,Yw). The coverage value for each fragment | |
| is 1. Mask bits that correspond to sample points that intersect the | |
| circular region are 1, other mask bits are 0. All depth values of the | |
| fragment are assigned the depth value of the point being rasterized. | |
| The data associated with each fragment are otherwise the data | |
| associated with the point being rasterized. | |
| Point size range and number of gradations are equivalent to those | |
| supported for antialiased points. | |
| 3.4.4 Line Multisample Rasterization | |
| If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then | |
| lines are rasterized using the following algorithm, regardless of | |
| whether line antialiasing (LINE_SMOOTH) is enabled or disabled. Line | |
| rasterization produces a fragment for each framebuffer pixel with one | |
| or more sample points that intersect the rectangular region that is | |
| described in the Antialiasing section of 3.4.2 (Other Line Segment | |
| Features). If line stippling is enabled, the rectangular region is | |
| subdivided into adjacent unit-length rectangles, with some rectangles | |
| eliminated according to the procedure given under Line Stipple, where | |
| "fragment" is replaced by "rectangle". | |
| The coverage value for each fragment is 1. Mask bits that correspond | |
| to sample points that intersect a retained rectangle are 1, other mask | |
| bits are 0. Each depth value is produced by substituting the | |
| corresponding sample location into equation 3.1, then using the | |
| result to evaluate equation 3.3. The data associated with each | |
| fragment are otherwise computed by evaluating equation 3.1 at the | |
| fragment center, then substituting into equation 3.2. | |
| Line width range and number of gradations are equivalent to those | |
| supported for antialiased lines. | |
| 3.5.7 Polygon Multisample Rasterization | |
| If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then | |
| polygons are rasterized using the following algorithm, regardless of | |
| whether polygon antialiasing (POLYGON_SMOOTH) is enabled or disabled. | |
| Polygon rasterization produces a fragment for each framebuffer pixel | |
| with one or more sample points that satisfy the point sampling | |
| criteria described in section 3.5.1, including the special treatment | |
| for sample points that lie on a polygon boundary edge. If a polygon | |
| is culled, based on its orientation and the CullFace mode, then no | |
| fragments are produced during rasterization. Fragments are culled | |
| by the polygon stipple just as they are for aliased and antialiased | |
| polygons. | |
| The coverage value for each fragment is 1. Mask bits that correspond | |
| to sample points that satisfy the point sampling criteria are 1, other | |
| mask bits are 0. Each depth value is produced by substituting the | |
| corresponding sample location into the barycentric equations described | |
| in section 3.5.1, using the approximation to equation 3.4 that omits | |
| w components. The data associated with each fragment are otherwise | |
| computed by barycentric evaluation using the fragment's center point. | |
| The rasterization described above applies only to the FILL state of | |
| PolygonMode. For POINT and LINE, the rasterizations described in | |
| 3.3.2 (Point Multisample Rasterization) and 3.4.4 (Line Multisample | |
| Rasterization) apply. | |
| 3.6.6 Multisample Rasterization of Pixel Rectangles | |
| If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then | |
| pixel rectangles are rasterized using the following algorithm. | |
| Let (Xrp,Yrp) be the current raster position. (If the current raster | |
| position is invalid, then DrawPixels is ignored.) If a particular | |
| group (index or components) is the nth in a row and belongs to the | |
| mth row, consider the region in window coordinates bounded by the | |
| rectangle with corners | |
| (Xrp + Zx*n, Yrp + Zy*m) | |
| and | |
| (Xrp + Zx*(n+1), Yrp + Zy*(m+1)) | |
| where Zx and Zy are the pixel zoom factors specified by PixelZoom, | |
| and may each be either positive or negative. A fragment representing | |
| group n,m is produced for each framebuffer pixel with one or more | |
| sample points that lie inside, or on the bottom or left boundary, of | |
| this rectangle. Each fragment so produced takes its associated data | |
| from the group and from the current raster position, in a manner | |
| consistent with the discussion in the Conversion to Fragments | |
| subsection of section 3.6.4 of the GL specification. All depth | |
| sample values are assigned the same value, taken either from the | |
| group (if it is a depth component group) or from the current raster | |
| position (if it is not). | |
| A single pixel rectangle will generate multiple, perhaps very many | |
| fragments for the same framebuffer pixel, depending on the pixel zoom | |
| factors. | |
| 3.7.1 Bitmap Multisample Rasterization | |
| If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, then | |
| bitmaps are rasterized using the following algorithm. If the current | |
| raster position is invalid, the bitmap is ignored. Otherwise, a | |
| screen-aligned array of pixel-size rectangles is constructed, with its | |
| lower-left corner at (Xrp,Yrp), and its upper right corner at | |
| (Xrp+w,Yrp+h), where w and h are the width and height of the bitmap. | |
| Rectangles in this array are eliminated if the corresponding bit in the | |
| bitmap is zero, and are retained otherwise. Bitmap rasterization | |
| produces a fragment for each framebuffer pixel with one or more sample | |
| points either inside or on the bottom or left edge of a retained | |
| rectangle. | |
| The coverage value for each fragment is 1. Mask bits that correspond | |
| to sample points either inside or on the bottom or left edge of a | |
| retained rectangle are 1, other mask bits are 0. The associated data | |
| for each fragment are those associated with the current raster | |
| position. Once the fragments have been produced, the current raster | |
| position is updated exactly as it is in the single-sample rasterization | |
| case. | |
| Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations | |
| and the Frame Buffer) | |
| 4.1.2.5 Multisample Fragment Operations | |
| [This section follows section 4.1.2 (Scissor test) and precedes section | |
| 4.1.3 (Alpha test)] | |
| This step modifies fragment alpha and mask values, based on the values | |
| of SAMPLE_ALPHA_TO_MASK_EXT, SAMPLE_ALPHA_TO_ONE_EXT, SAMPLE_MASK_EXT, | |
| SAMPLE_MASK_VALUE_EXT, and SAMPLE_MASK_INVERT_EXT. No changes to the | |
| fragment alpha or mask values are made at this step if MULTISAMPLE_EXT | |
| is disabled, or if SAMPLE_BUFFERS_EXT is zero. | |
| SAMPLE_ALPHA_TO_MASK_EXT, SAMPLE_ALPHA_TO_ONE_EXT, and SAMPLE_MASK_EXT | |
| are enabled and disabled by calling Enable and Disable with <cap> | |
| specified as one of the three token values. All three values are | |
| queried by calling IsEnabled, with <cap> set to the desired token value. | |
| If SAMPLE_ALPHA_TO_MASK_EXT is enabled, the fragment alpha value is | |
| used to generate a temporary mask value, which is then ANDed with the | |
| fragment mask value. Otherwise the fragment mask value is unchanged at | |
| this point. | |
| This specification does not require a specific algorithm for converting | |
| an alpha value to a temporary mask value. It is intended that the number | |
| of 1's in the temporary mask be proportional to the alpha value, with | |
| all 1's corresponding to the maximum alpha value, and all 0's | |
| corresponding to an alpha value of 0. It is also intended that the | |
| algorithm be pseudo-random in nature, to avoid image artifacts due | |
| to regular mask patterns. The algorithm can and probably should be | |
| different at different pixel locations. If it does differ, it should | |
| be defined relative to window, not screen, coordinates, so that | |
| rendering results are invariant with respect to window position. | |
| Next, if SAMPLE_ALPHA_TO_ONE_EXT is enabled, fragment alpha is replaced | |
| by the maximum representable alpha value. Otherwise, fragment alpha | |
| value is not changed. | |
| Finally, if SAMPLE_MASK_EXT is enabled, the fragment mask is ANDed | |
| with another temporary mask. This temporary mask is generated in the | |
| same manner as the one described above, but as a function of the value | |
| of SAMPLE_MASK_VALUE_EXT. The function need not be identical, but it | |
| must have the same properties of proportionality and invariance. If | |
| SAMPLE_MASK_INVERT_EXT is TRUE, the temporary mask is inverted (all | |
| bit values are inverted) before it is ANDed with the fragment mask. | |
| The values of SAMPLE_MASK_VALUE_EXT and SAMPLE_MASK_INVERT_EXT are | |
| specified simultaneously by calling SampleMaskEXT, with <value> set | |
| to the desired mask value, and <invert> set to TRUE or FALSE. <value> | |
| is clamped to [0,1] before being stored as SAMPLE_MASK_VALUE_EXT. | |
| SAMPLE_MASK_VALUE_EXT is queried by calling GetFloatv with <pname> set | |
| to SAMPLE_MASK_VALUE_EXT. SAMPLE_MASK_INVERT_EXT is queried by calling | |
| GetBooleanv with <pname> set to SAMPLE_MASK_INVERT_EXT. | |
| 4.1.9 Multisample Fragment Operations | |
| If the DrawBuffers mode is NONE, no change is made to any multisample | |
| or color buffer. Otherwise, fragment processing is as described below. | |
| If MULTISAMPLE_EXT is enabled, and SAMPLE_BUFFERS_EXT is one, the | |
| stencil test, depth test, blending, and dithering operations described | |
| in sections 4.1.4, 4.1.5, 4.1.6, and 4.1.7 are performed for each | |
| pixel sample, rather than just once for each fragment. Failure | |
| of the stencil or depth test results in termination of the processing | |
| of that sample, rather than discarding of the fragment. All operations | |
| are performed on the color, depth, and stencil values stored in the | |
| multisample buffer (to be described in a following section). The | |
| contents of the color buffers are not modified at this point. | |
| Stencil, depth, blending, and dithering operations are performed | |
| for a pixel sample only if that sample's fragment mask bit is 1. If | |
| the corresponding mask bit is 0, no operations are performed for that | |
| sample. Depth operations use the fragment depth value that is | |
| specific to each sample. The single fragment color value is used for | |
| all sample operations, however, as is the current stencil value. | |
| If MULTISAMPLE_EXT is disabled, and SAMPLE_BUFFERS_EXT is one, the | |
| fragment may be treated exactly as described above, with optimization | |
| possible because the fragment mask must be all 1's. Further | |
| optimization is allowed, however. An implementation may choose to | |
| identify a centermost sample, and to perform stencil and depth tests | |
| on only that sample. Regardless of the outcome of the stencil test, | |
| all multisample buffer stencil sample values are set to the appropriate | |
| new stencil value. If the depth test passes, all multisample buffer | |
| depth sample values are set to the depth of the fragment's centermost | |
| sample's depth value, and all multisample buffer color sample values | |
| are set to the color value of the incoming fragment. Otherwise, no | |
| change is made to any multisample buffer color or depth value. | |
| After all operations have been completed on the multisample buffer, | |
| the color sample values are combined to produce a single color value, | |
| and that value is written into each color buffer that is currently | |
| enabled, based on the DrawBuffers mode. The method of combination is | |
| not specified, though a simple average computed independently for each | |
| color component is recommended. | |
| 4.2.2.5 Fine Control of Multisample Buffer Updates | |
| When SAMPLE_BUFFERS_EXT is one, ColorMask, DepthMask, and StencilMask | |
| control the modification of values in the multisample buffer. The | |
| color mask has no effect on modifications to the color buffers. If | |
| the color mask is entirely disabled, the color sample values must | |
| still be combined (as described above) and the result used to replace | |
| the color values of the buffers enabled by DrawBuffers. | |
| 4.2.3.5 Clearing the Multisample Buffer | |
| The color samples of the multisample buffer are cleared when one or | |
| more color buffers are cleared, as specified by the Clear mask bit | |
| COLOR_BUFFER_BIT and the DrawBuffers mode. If the DrawBuffers mode is | |
| NONE, the color samples of the multisample buffer cannot be cleared. | |
| Clear mask bits DEPTH_BUFFER_BIT and STENCIL_BUFFER_BIT indicate that | |
| the depth and stencil samples of the multisample buffer are to be | |
| cleared. If Clear mask bit DEPTH_BUFFER_BIT is specified, and if | |
| the DrawBuffers mode is not NONE, then the multisample depth buffer | |
| samples are cleared. Likewise, if Clear mask bit STENCIL_BUFFER_BIT | |
| is specified, and if the DrawBuffers mode is not NONE, then the | |
| multisample stencil buffer is cleared. | |
| 4.3.2 Reading Pixels | |
| [These changes are made to the text in section 4.3.2, following the | |
| subheading Obtaining Pixels from the Framebuffer.] | |
| Follow the sentence "If there is no depth buffer, the error | |
| INVALID_OPERATION occurs." with: If there is a multisample buffer | |
| (SAMPLE_BUFFERS_EXT is 1) then values are obtained from the depth | |
| samples in this buffer. It is recommended that the depth value | |
| of the centermost sample be used, though implementations may choose | |
| any function of the depth sample values at each pixel. | |
| Follow the sentence "if there is no stencil buffer, the error | |
| INVALID_OPERATION occurs." with: If there is a multisample buffer, | |
| then values are obtained from the stencil samples in this buffer. | |
| It is recommended that the stencil value of the centermost sample | |
| be used, though implementations may choose any function of the stencil | |
| sample values at each pixel. | |
| This extension makes no change to the way that color values are | |
| obtained from the framebuffer. | |
| Additions to Chapter 5 of the 1.0 Specification (Special Functions) | |
| None | |
| Additions to Chapter 6 of the 1.0 Specification (State and State Requests) | |
| An additional group of state variables, MULTISAMPLE_BIT_EXT, is defined | |
| by this extension. When PushAttrib is called with bit MULTISAMPLE_BIT_EXT | |
| set, the multisample group of state variables is pushed onto the | |
| attribute stack. When PopAttrib is called, these state variables are | |
| restored to their previous values if they were pushed. Some multisample | |
| state is included in the ENABLE_BIT group as well. In order to avoid | |
| incompatibility with GL implementations that do not support | |
| EXT_multisample, ALL_ATTRIB_BITS does not include MULTISAMPLE_BIT_EXT. | |
| Additions to the WGL Specification | |
| The parameter WGL_SAMPLE_BUFFERS_EXT is added to wglGetPixelFormatAttrib*v. | |
| When queried, by calling wglGetPixelFormatAttrib*v with <attributes> set | |
| to WGL_SAMPLE_BUFFERS_EXT, it returns the number of multisample buffers | |
| included in the pixel format. For a normal visual, the return value is | |
| zero. A return value of one indicates that a single multisample buffer | |
| is available. The number of samples per pixel is queried by calling | |
| wglGetPixelFormatAttrib*v with <attrib> set to WGL_SAMPLES_EXT. It is | |
| understood that the number of color, depth, and stencil bits per sample | |
| in the multisample buffer are as specified by the WGL_*_SIZE parameters. | |
| It is also understood that there are no single-sample depth or stencil | |
| buffers associated with this visual -- the only depth and stencil | |
| buffers are those in the multisample buffer. WGL_SAMPLES_EXT is zero | |
| if WGL_SAMPLE_BUFFERS_EXT is zero. | |
| wglChoosePixelFormatEx accepts WGL_SAMPLE_BUFFERS_EXT in <attributes>, | |
| followed by the minimum number of multisample buffers that can be | |
| accepted. Pixel formats with the smallest number of multisample buffers | |
| that meets or exceeds the specified minimum number are preferred. | |
| Currently operation with more than one multisample buffer is undefined, | |
| so the returned value will be either zero or one. | |
| wglChoosePixelFormatEx accepts WGL_SAMPLES_EXT in <attributes>, followed | |
| by the minimum number of samples that can be accepted in the multisample | |
| buffer. Visuals with the smallest number of samples that meets or | |
| exceeds the specified minimum number are preferred. | |
| If the color samples in the multisample buffer store fewer bits than | |
| are stored in the color buffers, this fact will not be reported | |
| accurately. Presumably a compression scheme is being employed, and is | |
| expected to maintain an aggregate resolution equal to that of the | |
| color buffers. | |
| Errors | |
| INVALID_ENUM is generated if SamplePatternEXT parameter <pattern> is | |
| not 1PASS_EXT, 2PASS_0_EXT, 2PASS_1_EXT, 4PASS_0_EXT, 4PASS_1_EXT, | |
| 4PASS_2_EXT, or 4PASS_3_EXT. | |
| INVALID_OPERATION is generated if SampleMaskEXT or SamplePatternEXT | |
| is called between the execution of Begin and the execution of the | |
| corresponding End. | |
| New State | |
| Get Value Get Command Type Initial Value Attribute | |
| --------- ----------- ---- ------------- --------- | |
| MULTISAMPLE_EXT IsEnabled B TRUE multisample/enable | |
| SAMPLE_ALPHA_TO_MASK_EXT IsEnabled B FALSE multisample/enable | |
| SAMPLE_ALPHA_TO_ONE_EXT IsEnabled B FALSE multisample/enable | |
| SAMPLE_MASK_EXT IsEnabled B FALSE multisample/enable | |
| SAMPLE_MASK_VALUE_EXT GetFloatv R+ 1 multisample | |
| SAMPLE_MASK_INVERT_EXT GetBooleanv B FALSE multisample | |
| SAMPLE_PATTERN_EXT GetIntegerv Z7 1PASS_EXT multisample | |
| New Implementation Dependent State | |
| Get Value Get Command Type Minimum Value | |
| --------- ----------- ---- ------------- | |
| SAMPLE_BUFFERS_EXT GetIntegerv Z+ 0 | |
| SAMPLES_EXT GetIntegerv Z+ 0 | |
| Revision History | |
| April 19, 2000 - assigned extension #209. | |
| June 1999 - added to the OpenGL extension registry. | |
| January 1999 - Written by Intergraph. |