Name

    EXT_visual_rating

Name Strings

    GLX_EXT_visual_rating

Version

    $Date: 1996/03/12 03:12:47 $ $Revision: 1.7 $

Number

    44

Dependencies

    None

Overview

    This extension allows servers to identify a particular GLX visual as 
    undesirable. A new visual attribute is introduced, providing a way
    for servers to specify caveats (e.g., slow) for a visual. The attribute 
    may be queried using glXGetConfig, and can therefore be used by 
    application-specific visual selection routines. The new attribute is 
    also used by glXChooseVisual to discriminate against visuals with
    caveats.

    This extension allows servers to export visuals with improved features
    or image quality, but lower performance or greater system burden,
    without having to have these visuals selected preferentially.  It is
    intended to insure that most applications get the "right" visual, not
    that all applications do.

Issues

    It is possible for an application to unknowingly select a visual with 
    caveats, if it is unaware of the GLX_VISUAL_CAVEAT_EXT attribute. Also, if 
    the server supports this extension but the client library does not, then 
    glXChooseVisual may select a visual with caveats. The latter problem can be 
    rectified if/when this extension is incorporated into GLX 1.3, since the 
    server knows the clients version and can avoid exporting visuals with 
    caveats to client libraries that don't know how to handle them. (Note that 
    the server does not know which GLX extensions a client supports.)

Reasoning

    This extension is designed to be automatic -- applications don't have
    to use it explicitly. glXChooseVisual always prefers visuals with
    no caveats.

    Because visuals that don't have a GLX_VISUAL_CAVEAT_EXT attribute are 
    treated as good visuals, applications need not concern themselves with 
    whether a server supports EXT_visual_rating or not.  This allows 
    operation to be automatic.

    The new visual attribute is defined as an enumerated type so additional
    caveats, such as GLX_RESOURCE_HOG_EXT, can be introduced in the future.

New Procedures and Functions

    None

New Tokens

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

        GLX_VISUAL_CAVEAT_EXT           0x20

    Returned by the <value> parameter of glXGetConfig (when <attribute> is set 
    to GLX_VISUAL_CAVEAT_EXT) and accepted by the <attrib_list> parameter of 
    glXChooseVIsual (following the GLX_VISUAL_CAVEAT_EXT token):

        GLX_NONE_EXT                    0x8000
        GLX_SLOW_VISUAL_EXT             0x8001
        GLX_NON_CONFORMANT_VISUAL_EXT   0x800D

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 Frame Buffer)

    None

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

    When called with <attribute> set to GLX_VISUAL_CAVEAT_EXT, glXGetConfig
    returns in parameter <value> one of three values: GLX_NONE_EXT, 
    GLX_SLOW_VISUAL_EXT or GLX_NON_CONFORMANT_VISUAL_EXT. The returned value 
    is known as the rating of the visual.

    If the GLX_VISUAL_CAVEAT_EXT attribute is not specified in the <attrib_list>
    parameter of glXChooseVisual then preference is given to visuals with no 
    caveats (i.e., visuals with this attribute set to GLX_NONE_EXT). If the 
    GLX_VISUAL_CAVEAT_EXT attribute is specified, then glXChooseVisual will 
    match the specified value exactly. For example, if the value is specified 
    as GLX_NONE_EXT, then only visuals with no caveats will be considered.

    If the server doesn't support EXT_visual_rating, GLX client implementations 
    treat all visuals as if they had the GLX_VISUAL_CAVEAT_EXT attribute set to 
    GLX_NONE_EXT. Individual visuals that do not have this attribute set are 
    also assumed to have no caveats.

    A client that supports EXT_visual_rating will insure that the string
    GLX_EXT_visual_rating is returned by glXQueryExtensionsString,
    regardless of whether the server supports EXT_visual_rating.

GLX Protocol

    A single additional property type/property value pair may be included in
    the property list of each visual returned by glXGetVisualConfigs.  This
    property type/property value pair is encoded as

     4         ENUM            property type
               0x20            GLX_VISUAL_CAVEAT_EXT
     4         ENUM            property value
               0x8000          GLX_NONE_EXT
               0x8001          GLX_SLOW_VISUAL_EXT
               0x800D          GLX_NON_CONFORMANT_VISUAL_EXT


    If this property type/property value pair is not specified for a visual,
    then the value is assumed to be GLX_NONE_EXT.


Errors

    None

New State

    No GL state

New Implementation Dependent State

   None
