blob: 98c6767e5e4fb144577ffb27d645af34f1a8016c [file] [log] [blame]
Name Strings
Aaftab Munshi (
Copyright (c) 2005-2013 The Khronos Group Inc. Copyright terms at
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
IP Status
Ratified by the Khronos BOP, July 22, 2005.
April 22, 2007 (version #3)
OpenGL ES Extension #38
This extension is written against the OpenGL 2.0 specification
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
1. Should there be a half-float version of VertexAttrib{1234}[v] functions
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
New Procedures and Functions
New Tokens
Accepted by the <type> parameter of VertexPointer, NormalPointer,
ColorPointer, SecondaryColorPointer, IndexPointer, FogCoordPointer,
TexCoordPointer, and VertexAttribPointer
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,
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
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
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.
New State
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.