| Name |
| |
| OES_vertex_half_float |
| |
| Name Strings |
| |
| GL_OES_vertex_half_float |
| |
| 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 |
| |
| 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 |
| |
| IP Status |
| |
| None. |
| |
| Status |
| |
| Ratified by the Khronos BOP, July 22, 2005. |
| |
| Version |
| |
| April 22, 2007 (version #3) |
| |
| Number |
| |
| OpenGL ES Extension #38 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 2.0 specification |
| |
| Overview |
| |
| This extension adds a 16-bit floating pt data type (aka half float) |
| to vertex data specified using vertex arrays. The 16-bit floating-point |
| components have 1 sign bit, 5 exponent bits, and 10 mantissa bits. |
| |
| The half float data type can be very useful in specifying vertex attribute |
| data such as color, normals, texture coordinates etc. By using half floats |
| instead of floats, we reduce the memory requirements by half. Not only does |
| the memory footprint reduce by half, but the memory bandwidth required for |
| vertex transformations also reduces by the same amount approximately. |
| Another advantage of using half floats over short/byte data types is that we |
| do not needto scale the data. For example, using SHORT for texture coordinates |
| implies that we need to scale the input texture coordinates in the shader or |
| set an appropriate scale matrix as the texture matrix for fixed function pipeline. |
| Doing these additional scaling operations impacts vertex transformation |
| performance. |
| |
| Issues |
| |
| 1. Should there be a half-float version of VertexAttrib{1234}[v] functions |
| |
| RESOLUTION: No. |
| |
| There is no reason to support this, as these functions are not |
| performance or memory footprint critical. It is much more important that the |
| vertex data specified using vertex arrays be able to support half float data |
| format. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <type> parameter of VertexPointer, NormalPointer, |
| ColorPointer, SecondaryColorPointer, IndexPointer, FogCoordPointer, |
| TexCoordPointer, and VertexAttribPointer |
| |
| HALF_FLOAT_OES 0x8D61 |
| |
| Additions to Chapter 2 of the OpenGL 2.0 Specification (OpenGL Operation) |
| |
| Add a new section 2.1.2. This new section is copied from the |
| ARB_texture_float extension. |
| |
| 2.1.2 16-Bit Floating-Point Numbers |
| |
| A 16-bit floating-point number has a 1-bit sign (S), a 5-bit |
| exponent (E), and a 10-bit mantissa (M). The value of a 16-bit |
| floating-point number is determined by the following: |
| |
| (-1)^S * 0.0, if E == 0 and M == 0, |
| (-1)^S * 2^-14 * (M / 2^10), if E == 0 and M != 0, |
| (-1)^S * 2^(E-15) * (1 + M/2^10), if 0 < E < 31, |
| (-1)^S * INF, if E == 31 and M == 0, or |
| NaN, if E == 31 and M != 0, |
| |
| where |
| |
| S = floor((N mod 65536) / 32768), |
| E = floor((N mod 32768) / 1024), and |
| M = N mod 1024. |
| |
| Implementations are also allowed to use any of the following |
| alternative encodings: |
| |
| (-1)^S * 0.0, if E == 0 and M != 0, |
| (-1)^S * 2^(E-15) * (1 + M/2^10), if E == 31 and M == 0, or |
| (-1)^S * 2^(E-15) * (1 + M/2^10), if E == 31 and M != 0, |
| |
| Any representable 16-bit floating-point value is legal as input |
| to a GL command that accepts 16-bit floating-point data. The |
| result of providing a value that is not a floating-point number |
| (such as infinity or NaN) to such a command is unspecified, but |
| must not lead to GL interruption or termination. Providing a |
| denormalized number or negative zero to GL must yield predictable |
| results. |
| |
| Modifications to section 2.8 (Vertex Arrays) |
| |
| Add HALF_FLOAT_OES as a valid <type> value in Table 2.4. |
| |
| For <type> the values BYTE, SHORT, INT, FLOAT, and DOUBLE indicate |
| types byte, short, int, float, and double, respectively; and the values |
| UNSIGNED_BYTE, UNSIGNED_SHORT, and UNSIGNED_INT indicate types ubyte, |
| ushort, and uint, respectively. A <type> value of HALF_FLOAT_OES represents |
| a 16-bit floating point number with 1 sign bits, 5 exponent bits, |
| and 10 mantissa bits. |
| |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| None |
| |
| Revision History |
| |
| June 15, 2005 Aaftab Munshi First draft of extension. |
| June 22, 2005 Aaftab Munshi Renamed HALF_FLOAT token to HALF_FLOAT_OES |
| #3, 2007/04/22 Jon Leech Add version date and extension number. |