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

Specification Update Policy

    Khronos-approved extension specifications are updated in response to
    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
    extensions which have been promoted to a core Specification, fixes will
    first appear in the latest version of that core Specification, and will
    eventually be backported to the extension document. This policy is
    described in more detail at
        https://www.khronos.org/registry/OpenGL/docs/update_policy.php

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                                               

