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 Specification Update Policy Khronos-approved extension specifications are updated in response to issues and bugs prioritized by the Khronos OpenGL 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 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 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 , 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.