| Name |
| |
| ARB_half_float_vertex |
| |
| Name Strings |
| |
| GL_ARB_half_float_vertex |
| |
| Contact |
| |
| Daniel Koch, TransGaming, Inc (daniel 'at' transgaming.com) |
| |
| Notice |
| |
| Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Status |
| |
| Approved by the ARB on July 11, 2008 |
| |
| Version |
| |
| Last Modified Date: August 7, 2008 |
| Version 5 |
| |
| Number |
| |
| ARB Extension #48 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 2.1 Specification |
| |
| Based on the NV_half_float and OES_vertex_half_float extensions. |
| |
| Overview |
| |
| This extension extends the usage of the half-precision (16-bit) floating- |
| point quantities introduced in ARB_half_float_pixel for usage in specifying |
| vertex array data. |
| |
| This extension allows applications to use half-precision floating point data |
| when specifying vertices. This can allow applications to reduce their |
| memory footprint, as well as the memory bandwidth required for vertex data. |
| |
| This extension extends the existing vertex array commands to accept the new |
| data type. |
| |
| |
| Issues |
| |
| 1. How is this extension different from NV_half_float or |
| ARB_half_float_pixel? |
| |
| This extension adds the commands for specifying half-precision |
| vertex data that were initially introduced in the NV_half_float |
| extension but were specifically excluded from the |
| ARB_half_float_pixel extension. The functionality added in this |
| extension is a proper subset of the vertex functionality defined in |
| the NV_half_float extension. |
| |
| 2. Should we provide immediate-mode entry points for half-precision |
| vertex data? |
| |
| No. We expect the immediate-mode API to be deprecated in the near |
| future and thus do not wish to encumber implementors with adding a |
| significant number of additional entry points that would have |
| limited usefulness. Additionaly, the half-precision floating point |
| vertex data is only interesting when it is specified in array format |
| (i.e., for saving storage space). If an application is using |
| immediate mode APIs to load the vertex data, it does not seem overly |
| onerous to require them to convert to one of the more standard data |
| types. |
| |
| 3. What is the half-precision floating point format? |
| |
| This is the same 16-bit floating point format that is defined in |
| Section 2.1.2 of the ARB_texture_float and ARB_half_float_pixel |
| extensions. |
| |
| 4. How does this extension differ from OES_vertex_half_float? |
| |
| It is intended to have the same functionality, however there are a |
| few minor changes spec-wise: |
| |
| a) this extension defines the additional GLX protocol, as was done |
| in the NV_half_float extension. |
| b) this extension uses the value of the HALF_FLOAT_ARB (0x140B) |
| token that is already defined in the desktop version of the |
| ARB_half_float_pixel extension (which is the same as the value |
| of the HALF_FLOAT_NV token from the NV_half_float extension). |
| The OES_vertex_half_float and OES_texture_half_float extensions |
| use the HALF_FLOAT_OES (0x8D61) token. |
| |
| The logical progression is to define this as an ARB extension which |
| is intended to supersede both the OES extension and the |
| functionality from NV_half_float. |
| |
| 5. Why don't the new tokens and entry points in this extension have |
| "ARB" suffixes like other ARB extensions? |
| |
| RESOLVED: Unlike a normal ARB extension, this is a strict subset of |
| functionality already approved in OpenGL 3.0. This extension exists |
| only to support that functionality on older hardware that cannot |
| implement a full OpenGL 3.0 driver. Since there are no possible |
| behavior changes between the ARB extension and core features, source |
| code compatibility is improved by not using suffixes on the |
| extension. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <type> argument of VertexPointer, NormalPointer, |
| ColorPointer, SecondaryColorPointer, FogCoordPointer, TexCoordPointer, |
| and VertexAttribPointer: |
| |
| HALF_FLOAT 0x140B |
| |
| Additions to Chapter 2 of the OpenGL 2.1 Specification (OpenGL Operation) |
| |
| Modify Section 2.8, Vertex Arrays, p. 23 |
| |
| (Modify 1st paragraph on p. 24) ... For <type>, the values BYTE, SHORT, |
| INT, FLOAT, HALF_FLOAT, and DOUBLE indicate types byte, short, int, |
| float, half, and double, respectively. ... |
| |
| (Modify Table 2.4, p. 25) |
| |
| Command Sizes Types |
| ------------------ ------- --------------------------------- |
| VertexPointer 2,3,4 short, int, float, half, double |
| NormalPointer 3 byte, short, int, float, half, |
| double |
| ColorPointer 3,4 byte, ubyte, short, ushort, int, |
| uint, float, half, double |
| SecondaryColorPointer 3 byte, ubyte, short, ushort, int, |
| uint, float, half, double |
| IndexPointer 1 ubyte, short, int, float, double |
| FogCoordPointer 1 float, half, double |
| TexCoordPointer 1,2,3,4 short, int, float, half, double |
| EdgeFlagPointer 1 boolean |
| VertexAttribPointer 1 byte, ubyte, short, ushort, int, |
| uint, float, half, double |
| |
| Table 2.4: Vertex array sizes (values per vertex) and data types. |
| |
| Modify Section 2.13, Colors and Coloring, p.44 |
| |
| (Modify Table 2.6, p. 59) Add new row to the table: |
| |
| GL Type Conversion |
| ------- ---------- |
| half c |
| |
| |
| Additions to Chapter 3 of the OpenGL 2.1 Specification (Rasterization) |
| |
| None. |
| |
| |
| Additions to Chapter 4 of the OpenGL 2.1 Specification (Per-Fragment |
| Operations and the Framebuffer) |
| |
| None. |
| |
| |
| Additions to Chapter 5 of the OpenGL 2.1 Specification (Special Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the OpenGL 2.1 Specification (State and |
| State Requests) |
| |
| None. |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None. |
| |
| GLX Protocol (Modification to the GLX 1.3 Protocol Encoding Specification) |
| |
| Add to Section 1.4 (p.2), Common Types |
| |
| FLOAT16 A 16-bit floating-point value in the format specified |
| in the ARB_half_float_pixel extension specification. |
| |
| Modify Section 2.3.4, GL Rendering Commands That May Be Large (p. 127) |
| |
| (Modify the ARRAY_INFO portion of the DrawArrays encoding (p.129) to |
| reflect the new data type supported by vertex arrays.) |
| |
| ARRAY_INFO |
| |
| 4 enum data type |
| 0x1400 i=1 BYTE |
| 0x1401 i=1 UNSIGNED_BYTE |
| 0x1402 i=2 SHORT |
| ... |
| 0x140B i=2 HALF_FLOAT |
| 4 INT32 j |
| 4 ENUM array type |
| ... |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| None |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- --------- -------------------------------------------- |
| 1 1/22/08 dgkoch Initial version based on the NV_half_float |
| and ARB_half_float_pixel specification. Updated |
| to reference OpenGL 2.1 spec. |
| 2 1/22/08 dgkoch Made some grammatical clarifications. |
| 3 2/01/08 dgkoch Clarify dependencies and interactions with other |
| extensions. |
| 4 2/25/08 dgkoch Add issue #4. |
| 5 8/07/08 jleech Remove _ARB suffix. |
| |