Name

    OES_mapbuffer

Name Strings

    GL_OES_mapbuffer

Contact

    Aaftab Munshi (amunshi@ati.com)

Notice

    Copyright (c) 2005-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

IP Status

    None.

Status

    Ratified by the Khronos BOP, July 22, 2005.

Version

    Last Modifed Date: March 31, 2013

Number

    OpenGL ES Extension #29    

Dependencies

    OpenGL ES 1.1 is required.

Overview

    This extension adds to the vertex buffer object functionality supported
    by OpenGL ES 1.1 or ES 2.0 by allowing the entire data storage of a
    buffer object to be mapped into the client's address space.

Issues

 
New Tokens

    Accepted by the <access> parameter of MapBufferOES:

      WRITE_ONLY_OES               0x88B9

    Accepted by the <value> parameter of GetBufferParameteriv:

      BUFFER_ACCESS_OES            0x88BB
      BUFFER_MAPPED_OES            0x88BC

    Accepted by the <pname> parameter of GetBufferPointervOES:

      BUFFER_MAP_POINTER_OES       0x88BD

New Procedures and Functions

    void GetBufferPointervOES(enum target, enum pname, void** params)

    void *MapBufferOES(enum target, enum access)

    boolean UnmapBufferOES(enum target)

    Please refer to the OpenGL 2.0 specification for details on how
    these functions work.  One departure from desktop OpenGL 2.0 is
    that the <access> parameter to MapBufferOES must be WRITE_ONLY_OES.
    
    Note that any portion of a mapped buffer that is not written
    will retain its original contents.

Errors

    None.

New State

(table 6.8)
                                                  Initial
Get Value              Type  Get Command          Value           Description
---------              ----  -----------          -----           -----------
BUFFER_ACCESS_OES      Z1    GetBufferParameteriv WRITE_ONLY_OES  buffer map flag
BUFFER_MAPPED_OES      B     GetBufferParameteriv FALSE           buffer map flag
BUFFER_MAP_POINTER_OES Y     GetBufferPointervOES NULL            mapped buffer pointer

Revision History

    03/31/2013    Benj Lipchak     Clarify that unwritten data is preserved
    11/12/2007    Benj Lipchak     Mention only WRITE_ONLY access is allowed,
                                   some additional tokens needed
    11/05/2007    Benj Lipchak     Change API version requirement, fix typos
    09/19/2007    Benj Lipchak     Added OES suffixes, GetBufferPointervOES
    07/06/2005    Aaftab Munshi    Created the extension
