Name

    MESA_release_buffers

Name Strings

    GLX_MESA_release_buffers

Contact

    Brian Paul (brian 'at' mesa3d.org)

Status

    Shipping since Mesa 2.0 in October, 1996.

Version

    Last Modified Date:  8 June 2000

Number

    217

Dependencies

    OpenGL 1.0 or later is required.
    GLX 1.0 or later is required.

Overview

    Mesa's implementation of GLX is entirely implemented on the client side.
    Therefore, Mesa cannot immediately detect when an X window or pixmap is
    destroyed in order to free any ancilliary data associated with the window
    or pixmap.

    The glxMesaReleaseBuffers() function can be used to explicitly indicate
    when the back color buffer, depth buffer, stencil buffer, and/or accum-
    ulation buffer associated with a drawable can be freed.

IP Status

    Open-source; freely implementable.

Issues

    None.

New Procedures and Functions

    Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d );

New Tokens

    None.

Additions to Chapter 3 of the GLX 1.3 Specification (Functions and Errors)

    The function

	Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d );

    causes all software ancilliary buffers (back buffer, depth, stencil,
    accum, etc) associated with the named drawable to be immediately
    deallocated.  True is returned if <d> is a valid Mesa GLX drawable,
    else False is returned.  After calling glXReleaseBuffersMESA, the
    drawable should no longer be used for GL rendering.  Results of
    attempting to do so are undefined.


GLX Protocol

    None, since this is a client-side operation.

Errors

    None.

New State

    None.

Revision History

    8 June 2000 - initial specification
