Name

    OES_matrix_get

Name Strings

    GL_OES_matrix_get

Contact

    Aaftab Munshi (amunshi@ati.com)

Notice

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

Status

    Ratified by the Khronos BOP, Aug 5, 2004.

Version

    Last Modified Date: July 16, 2004

Number

    OpenGL ES Extension #11

Dependencies

    OpenGL 1.5 is required

Overview

    Many applications require the ability to be able to read the
    GL matrices.  OpenGL ES 1.1 will allow an application to read
    the matrices using the GetFloatv command for the common profile
    and the GetFixedv command for the common-lite profile.

    In cases where the common-lite implementation stores matrices
    and performs matrix operations internally using floating pt 
    (example would be OpenGL ES implementations that support JSR184 etc.)
    the GL cannot return the floating pt matrix elements since the float
    data type is not supported by the common-lite profile.
    Using GetFixedv to get the matrix data will result in a loss of
    information.

    To take care of this issue, new tokens are proposed by this
    extension.  These tokens will allow the GL to return a 
    representation of the floating pt matrix elements as as an array
    of integers, according to the IEEE 754 floating pt "single format"
    bit layout.

    Bit 31 represents the sign of the floating pt number.
    Bits 30 - 23 represent the exponent of the floating pt number.
    Bits 22 - 0 represent the mantissa of the floating pt number.

IP Status

    There is no intellectual property associated with this extension.

Issues

    None known.

New Procedures and Functions


New Tokens

    Accepted by the <pname> parameter of GetIntegerv:

        MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES  0x898d
        PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898e
        TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES    0x898f

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

    None.

Additions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization)

    None.

Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment
Operations and the Frame Buffer)

    None.

Additions to Chapter 5 of the OpenGL 1.4 Specification (Special
Functions)

    None.

Additions to Chapter 6 of the OpenGL 1.4 Specification (State and
State Requests)

    The new matrix tokens return the matrix elements as exponent
    and mantissa terms.  These tokens will allow the GL to return a 
    representation of the floating pt matrix elements as as an array
    of integers, according to the IEEE 754 floating pt "single format"
    bit layout.

Errors

    None.

New State


Get Value                                 Type            Command      Value    
---------                                 ----            -------     -------  
MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES    4* x 4* x Z    GetIntegerv    0     
PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES   4* x 4* x Z    GetIntegerv    0
TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES      4* x 4* x Z    GetIntegerv    0


Revision History


June 30, 2004    Aaftab Munshi    Initial version of document
July 16, 2004    Aaftab Munshi    Removed the description of NaN & denorms                                               

