Name

    EXT_visual_info

Name Strings

    GLX_EXT_visual_info

Version

    $Date: 1995/10/06 00:47:08 $ $Revision: 1.14 $

Number

    28

Dependencies

    SGIS_multisample affects the definition of this extension

Overview

    This extension allows the user to request a particular X visual 
    type to be associated with a GLX visual, and allows the user
    to query the X visual type underlying a GLX visual.

    In addition, this extension provides a means to request a visual
    with a transparent pixel and to query whether a visual supports a
    transparent pixel value and the value of the transparent pixel.
    Note that the notion of level and transparent pixels are orthogonal as
    both layer 1 and layer 0 visuals may or may not have a transparent pixel
    value.

Issues
    The X server allows two types of transparency: pixel and mask.
    For mask, any pixel matching the transparency mask is transparent.
    Do we want to include masks? GLX_TRANSPARENT_PIXEL has been changed
    from a boolean to an enum to allow for this possibility.

    Alpha is no longer included in the transparent pixel, although it 
    may be useful in the future. Thus, we allow the TRANSPARENT_ALPHA_VALUE
    to be queried -- even though it is not used. In the future
    a GLX_TRANSPARENT_ALPHA or GLX_TRANSPARENT_RGBA transparency
    mode could be added.

    Keep tokens for GRAY_SCALE and STATIC_GRAY for future use, even
    though they don't match visuals now.

    Should glXChooseVisual ignore GLX_TRANSPARENT_INDEX_VALUE_EXT,
    GLX_TRANSPARENT_RED_VALUE_EXT, GLX_TRANSPARENT_GREEN_VALUE_EXT,
    GLX_TRANSPARENT_BLUE_VALUE_EXT, and GLX_TRANSPARENT_ALPHA_VALUE_EXT
    settings in attrib_list if GLX_TRANSPARENT_TYPE_EXT is not set (either 
    explicitly or implicitly) to a value other than GLX_NONE_EXT? Maybe it 
    should just match the requested attributes -- even if the request doesn't 
    make sense.

New Procedures and Functions

    None

New Tokens

    Accepted by the <attrib> parameter of glXGetConfig, and by the
    <attrib_list> parameter of glXChooseVisual: 

        GLX_X_VISUAL_TYPE_EXT           0x22
        GLX_TRANSPARENT_TYPE_EXT        0x23
        GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
        GLX_TRANSPARENT_RED_VALUE_EXT   0x25
        GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
        GLX_TRANSPARENT_BLUE_VALUE_EXT  0x27
        GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28

    Returned by glXGetConfig, and accepted by the <attrib_list>
    parameter of glXChooseVisual (following the GLX_X_VISUAL_TYPE_EXT 
    token):

        GLX_TRUE_COLOR_EXT              0x8002
        GLX_DIRECT_COLOR_EXT            0x8003
        GLX_PSEUDO_COLOR_EXT            0x8004
        GLX_STATIC_COLOR_EXT            0x8005
        GLX_GRAY_SCALE_EXT              0x8006
        GLX_STATIC_GRAY_EXT             0x8007

    Returned by glXGetConfig, and accepted by the <attrib_list>
    parameter of glXChooseVisual (following the GLX_TRANSPARENT_TYPE_EXT
    token):

        GLX_NONE_EXT                    0x8000
        GLX_TRANSPARENT_RGB_EXT         0x8008
        GLX_TRANSPARENT_INDEX_EXT       0x8009

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    None

Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and
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)

    None

Additions to the GLX Specification

    The X visual type of a GLX visual can be queried using glXGetConfig().

    The visual attribute GLX_TRANSPARENT_TYPE_EXT indicates whether or not
    the visual supports transparency, and if it does support transparency, 
    what type of transparency is available. If the attribute is set to 
    GLX_NONE_EXT then windows created with the visual will not have any 
    transparent pixels. If the attribute is GLX_TRANSPARENT_RGB_EXT or
    GLX_TRANSPARENT_INDEX_EXT then the visual supports transparency.
    GLX_TRANSPARENT_RGB_EXT is only applicable to TrueColor and DirectColor 
    visuals: a transparent pixel will be drawn when the red, green and blue 
    values which are read from the framebuffer are equal to 
    GLX_TRANSPARENT_RED_VALUE_EXT, GLX_TRANSPARENT_GREEN_VALUE_EXT and 
    GLX_TRANSPARENT_BLUE_VALUE_EXT, respectively. For PseudoColor and 
    StaticColor the transparency mode GLX_TRANSPARENT_INDEX_EXT is used.
    In this case, a transparent pixel will be drawn when the index value that
    is read from the framebuffer is equal to GLX_TRANSPARENT_INDEX_VALUE_EXT.

    If GLX_TRANSPARENT_TYPE_EXT is GLX_NONE_EXT or GLX_TRANSPARENT_RGB_EXT, 
    then the value returned for GLX_TRANSPARENT_INDEX_VALUE_EXT is undefined.
    If GLX_TRANSPARENT_TYPE_EXT is GLX_NONE_EXT or GLX_TRANSPARENT_INDEX_EXT,
    then the values returned for GLX_TRANSPARENT_RED_VALUE_EXT, 
    GLX_TRANSPARENT_GREEN_VALUE_EXT, and GLX_TRANSPARENT_BLUE_VALUE_EXT are
    undefined. When defined, GLX_TRANSPARENT_RED_VALUE_EXT, 
    GLX_TRANSPARENT_GREEN_VALUE_EXT, and GLX_TRANSPARENT_BLUE_VALUE_EXT are 
    integer framebuffer values between 0 and the maximum framebuffer value for 
    the component. For example, GLX_TRANSPARENT_RED_VALUE_EXT will range 
    between 0 and (2**GLX_RED_SIZE)-1.  (GLX_TRANSPARENT_ALPHA_VALUE_EXT is 
    for future use.)

        Attribute                 Type      Notes
        ---------                 ----      -----
        GLX_USE_GL                boolean   True if OpenGL rendering is supported
        GLX_BUFFER_SIZE           integer   depth of the color buffer
        GLX_LEVEL                 integer   frame buffer level
        GLX_RGBA                  boolean   True if in RGBA rendering is supported
        GLX_DOUBLEBUFFER          boolean   True if color buffers have front/back pairs
        GLX_STEREO                boolean   True if color buffers have left/right pairs
        GLX_AUX_BUFFERS           integer   number of auxiliary color buffers
        GLX_RED_SIZE              integer   number of bits of Red in the framebuffer
        GLX_GREEN_SIZE            integer   number of bits of Green in the framebuffer
        GLX_BLUE_SIZE             integer   number of bits of Blue in the framebuffer
        GLX_ALPHA_SIZE            integer   number of bits of Alpha in the framebuffer
        GLX_DEPTH_SIZE            integer   number of bits in the depth buffer
        GLX_STENCIL_SIZE          integer   number of bits in the stencil buffer
        GLX_ACCUM_RED_SIZE        integer   number of bits of Red in the accumulation buffer
        GLX_ACCUM_GREEN_SIZE      integer   number of bits of Green in the accumulation buffer
        GLX_ACCUM_BLUE_SIZE       integer   number of bits of Blue in the accumulation buffer
        GLX_ACCUM_ALPHA_SIZE      integer   number of bits of Alpha in the accumulation buffer
        GLX_SAMPLE_BUFFERS_SGIS   integer   number of multisample buffers
        GLX_SAMPLES_SGIS          integer   number of samples stored in each multisample buffer
        GLX_X_VISUAL_TYPE_EXT     integer   X visual type of the GLX visual
        GLX_TRANSPARENT_TYPE_EXT enum       None, TRANSPARENT_RGB_EXT, or TRANSPARENT_INDEX_EXT
        GLX_TRANSPARENT_INDEX_VALUE_EXT integer   transparent index value.
        GLX_TRANSPARENT_RED_VALUE_EXT   integer transparent red value.
        GLX_TRANSPARENT_GREEN_VALUE_EXT integer transparent green value.
        GLX_TRANSPARENT_BLUE_VALUE_EXT  integer transparent blue value.
        GLX_TRANSPARENT_ALPHA_VALUE_EXT integer transparent alpha value.

        Table 1: Configuration attributes

    glXGetConfig returns one of the values in table 2 (below) when called
    with attribute name GLX_X_VISUAL_TYPE_EXT.

        GLX token name                  X Visual Type
        --------------                  -------------
        GLX_TRUE_COLOR_EXT              TrueColor
        GLX_DIRECT_COLOR_EXT            DirectColor
        GLX_PSEUDO_COLOR_EXT            PseudoColor
        GLX_STATIC_COLOR_EXT            StaticColor
        GLX_GRAY_SCALE_EXT              GrayScale
        GLX_STATIC_GRAY_EXT             StaticGray

        Table 2: X visual type token values

    Replace the GLX specification discussion of glXChooseVisual with
    the following text:

    glXChooseVisual is used to find a visual that matches the client's
    specified attributes.

        XVisualInfo* glXChooseVisual( Display *dpy, int screen,
                                      int *attrib_list );

    glXChooseVisual returns a pointer to an XVisualInfo structure
    describing the visual that best meets a minimum specification.  The
    boolean GLX attributes of the visual that is returned will match the
    specification exactly.  The integer GLX attributes will meet or exceed
    the specified minimum values.  The enumerated GLX attributes are
    matched in an attribute-specific manner.  If no conforming visual
    exists, NULL is returned.

    The enumerated attribute GLX_X_VISUAL_TYPE_EXT specifies which X
    visual type is required for the requested GLX visual.  
    
    If GLX_RGBA is in <attrib_list>, then only GLX_TRUE_COLOR_EXT and 
    GLX_DIRECT_COLOR_EXT can produce a match. If GLX_X_VISUAL_TYPE_EXT
    is not in <attrib_list>, and if all other attributes are equivalent,
    then a TrueColor visual will be chosen in preference to a DirectColor
    visual.

    If GLX_RGBA is not in <attrib_list>, then only GLX_PSEUDO_COLOR_EXT and 
    GLX_STATIC_COLOR_EXT can produce a match. If GLX_X_VISUAL_TYPE_EXT
    is not in <attrib_list>, and if all other attributes are equivalent,
    then a PseudoColor visual will be chosen in preference to a StaticColor
    visual.

    The tokens GLX_GRAY_SCALE_EXT and GLX_STATIC_GRAY_EXT will not match
    current OpenGL enabled visuals, but are included for future use.

    If GLX_TRANSPARENT_TYPE_EXT is not included in <attrib_list>,
    then the attribute will be treated as a "don't care" and a
    visual with or without a transparent pixel may be chosen.
    If GLX_TRANSPARENT_TYPE_EXT is not included in <attrib_list>, or if it
    is set to GLX_NONE_EXT, then inclusion of GLX_TRANSPARENT_INDEX_VALUE_EXT, 
    GLX_TRANSPARENT_RED_VALUE_EXT, GLX_TRANSPARENT_GREEN_VALUE_EXT, 
    GLX_TRANSPARENT_BLUE_VALUE_EXT, or GLX_TRANSPARENT_ALPHA_VALUE_EXT
    will be ignored. 

    All boolean GLX attributes default to False except GLX_USE_GL, which
    defaults to True.  All integer attributes default to zero.

    Default specifications are superseded by the attributes included in
    <attrib_list>.  Integer attributes are immediately followed by the
    corresponding desired value.  Boolean attributes appearing in
    <attrib_list> have an implicit True value; such attributes are never
    followed by an explicit True or False value.  The list is terminated
    with None.

    To free the data returned, use XFree().

    NULL is returned if an undefined GLX attribute is encountered, or
    if an unacceptable enumerated attribute value is encountered.

GLX Protocol

    Seven new property type/property value pairs are included in the property 
    list of each visual returned by glXGetVisualConfigs. The property 
    type/property value pairs are encoded as

    4           ENUM                    property type
                0x22                    GLX_X_VISUAL_TYPE_EXT           
    4           ENUM                    property value
                0x8002                  GLX_TRUE_COLOR_EXT      
                0x8003                  GLX_DIRECT_COLOR_EXT
                0x8004                  GLX_PSEUDO_COLOR_EXT
                0x8005                  GLX_STATIC_COLOR_EXT    
                0x8006                  GLX_GRAY_SCALE_EXT
                0x8007                  GLX_STATIC_GRAY_EXT

    4           ENUM                    property type
                0x23                    GLX_TRANSPARENT_TYPE_EXT
    4           ENUM                    property value
                0x8000                  GLX_NONE_EXT
                0x8008                  GLX_TRANSPARENT_RGB_EXT
                0x8009                  GLX_TRANSPARENT_INDEX_EXT

    4           ENUM                    property type
                0x24                    GLX_TRANSPARENT_INDEX_VALUE_EXT
    4           BOOL32                  property value

    4           ENUM                    property type
                0x25                    GLX_TRANSPARENT_RED_VALUE_EXT
    4           INT32                   property value

    4           ENUM                    property type
                0x26                    GLX_TRANSPARENT_GREEN_VALUE_EXT
    4           INT32                   property value

    4           ENUM                    property type
                0x27                    GLX_TRANSPARENT_BLUE_VALUE_EXT
    4           INT32                   property value

    4           ENUM                    property type
                0x28                    GLX_TRANSPARENT_ALPHA_VALUE_EXT
    4           INT32                   property value


Dependencies on SGIS_multisample

    If SGIS_multisample is not supported, references to
    GLX_SAMPLE_BUFFERS_SGIS and GLX_SAMPLES_SGIS in this document are
    invalid and should be ignored.

Errors

    None

New State

    None

New Implementation Dependent State

    Get Value                           Get Command     Type
    ---------                           -----------     ----
    GLX_X_VISUAL_TYPE_EXT               glXGetConfig    Z6
    GLX_TRANSPARENT_TYPE_EXT            glXGetConfig
    GLX_TRANSPARENT_INDEX_VALUE_EXT     glXGetConfig    
    GLX_TRANSPARENT_RED_VALUE_EXT       glXGetConfig
    GLX_TRANSPARENT_GREEN_VALUE_EXT     glXGetConfig
    GLX_TRANSPARENT_BLUE_VALUE_EXT      glXGetConfig
    GLX_TRANSPARENT_ALPHA_VALUE_EXT     glXGetConfig
