INCOMPLETE - DO NOT RELEASE IMPLEMENTATIONS OF THIS EXTENSION Name EXT_coordinate_frame Name Strings GL_EXT_coordinate_frame Version $Date: 1998/09/26 02:48:47 $ $Revision: 1.3 $ Number 156 Dependencies OpenGL 1.1 is required. Overview This extension allows specifying a per-vertex tangent and binormal vector in addition to the normal vector, defining a coordinate frame. The coordinate frame is used in additional extensions which also build on fragment lighting to achieve bump mapping. Patent Note To the extent that SGI has patent rights that are unavoidably infringed by all implementations of this extension, SGI will, upon request, grant a license under such patent rights to the requesting party subject to reasonable terms and conditions, and without incremental charge or fee. Such license shall be non-exclusive, and non-transferable, and shall be limited to implementations of the extension in combination with any conformance certified implementation of the OpenGL API. Such license is expressly contingent upon a grant back of a non-exclusive, royalty-free, perpetual, worldwide license to SGI and its OpenGL licensees under the requesting party's patent rights that are unavoidably infringed by all implementations of this extension or OpenGL. Issues * Evaluators. We need to address how evaluators can generate these values. New Procedures and Functions void Tangent3{bdfis}EXT(T coords); void Tangent3{bdfis}EXTv(T coords); void Binormal3{bdfis}EXT(T coords); void Binormal3{bdfis}vEXT(T coords); void TangentPointerEXT(enum type, sizei stride, void *pointer); void BinormalPointerEXT(enum type, sizei stride, void *pointer); New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, and by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: TANGENT_ARRAY_EXT 0x8439 BINORMAL_ARRAY_EXT 0x843A Accepted by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: CURRENT_TANGENT_EXT 0x843B CURRENT_BINORMAL_EXT 0x843C TANGENT_ARRAY_TYPE_EXT 0x843E TANGENT_ARRAY_STRIDE_EXT 0x843F BINORMAL_ARRAY_TYPE_EXT 0x8440 BINORMAL_ARRAY_STRIDE_EXT 0x8441 Accepted by the parameter of GetPointervEXT: TANGENT_ARRAY_POINTER_EXT 0x8442 BINORMAL_ARRAY_POINTER_EXT 0x8443 Accepted by the parameter of Map1,Map2: MAP1_TANGENT_EXT 0x8444 MAP2_TANGENT_EXT 0x8445 MAP1_BINORMAL_EXT 0x8446 MAP2_BINORMAL_EXT 0x8447 Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) Section 2.6 is amended to read: In addition, a current normal, tangent, binormal, current texture coordinates... Figure 2.2 is amended to read Current Normal,Tangent,Binormal... Figure 2.6.3 is amended to read: The only GL commands that are allowed within any Begin/End pairs are the commands for specifying vertex coordinates, normal coordinates, tangent coordinates, binormal coordinates, and texture coordinates (Vertex, Color, Index, Normal, Tangent, Binormal, TexCoord) Section 2.7 is amended to read: The current normal, tangent and binormal are set using void Normal3{bsifd}( T coords ) ; void Normal3{bsifd}v( T coords ) ; void Tangent3{bsifd}EXT( T coords ) ; void Tangent3{bsifd}vEXT( T coords ) ; void Binormal3{bsifd}EXT( T coords ) ; void Binormal3{bsifd}vEXT( T coords ) ; The current normal, tangent and binormal are set to the given... Byte, short, or integer values passed to Normal, Tangent or Binormal... Section 2.8 is amended to read: The client may specify up to 8 arrays: one each to store edge flags, texture coordinates, colors, color indices, normals, tangents, binormals, and vertices. void TangentPointerEXT( enum type, sizei stride, void *pointer); void BinormalPointerEXT( enum type, sizei stride, void *pointer); Because normals, tangents and binormals are always specified... NormalPointer, TangentPointerEXT and BinormalPointerEXT etc, etc in 2.7. Additions to Chapter 3 of the 1.0 Specification (Rasterization) None Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and the Frame Buffer) None Additions to Chapter 5 of the 1.0 Specification (Special Functions) Add MAP1_TANGENT_EXT and MAP1_BINORMAL_EXT to table 5.1 right after the MAP1_NORMAL_EXT entry. Change the section that starts with "Finally, if either MAP2_VERTEX_3 or MAP2_VERTEX_4 is enabled, then the normal to the surface is computed." to include "tangent and binormal" references after each reference to normal. Additions to Chapter 6 of the 1.0 Specification (State and State Requests) tables are extended with state values from New State section Additions to the GLX Specification None GLX Protocol XXX - not yet complete Errors INVALID_ENUM is generated if TangentPointerEXT parameter is not BYTE, SHORT, INT, FLOAT, or DOUBLE_EXT. INVALID_VALUE is generated if TangentPointerEXT parameter or is negative. INVALID_ENUM is generated if BinormalPointerEXT parameter is not BYTE, SHORT, INT, FLOAT, or DOUBLE_EXT. INVALID_VALUE is generated if BinormalPointerEXT parameter or is negative. New State Get Value Get Command Type Initial Value Attribute --------- ----------- ---- ------------- --------- CURRENT_TANGENT_EXT GetFloatv R3 1,0,0 current CURRENT_BINORMAL_EXT GetFloatv R3 0,1,0 current TANGENT_ARRAY_EXT IsEnabled B False vertex-array TANGENT_ARRAY_TYPE_EXT GetIntegerv Z5 FLOAT vertex-array TANGENT_ARRAY_STRIDE_EXT GetIntegerv Z+ 0 vertex-array TANGENT_ARRAY_COUNT_EXT GetIntegerv Z+ 0 vertex-array TANGENT_ARRAY_POINTER_EXT GetPointerv Z+ 0 vertex-array BINORMAL_ARRAY_EXT IsEnabled B False vertex-array BINORMAL_ARRAY_TYPE_EXT GetIntegerv Z5 FLOAT vertex-array BINORMAL_ARRAY_STRIDE_EXT GetIntegerv Z+ 0 vertex-array BINORMAL_ARRAY_COUNT_EXT GetIntegerv Z+ 0 vertex-array BINORMAL_ARRAY_POINTER_EXT GetPointerv Z+ 0 vertex-array New Implementation Dependent State None