1 INCOMPLETE - DO NOT RELEASE IMPLEMENTATIONS OF THIS EXTENSION 2 3Name 4 5 EXT_coordinate_frame 6 7Name Strings 8 9 GL_EXT_coordinate_frame 10 11Version 12 13 $Date: 1998/09/26 02:48:47 $ $Revision: 1.3 $ 14 15Number 16 17 156 18 19Dependencies 20 21 OpenGL 1.1 is required. 22 23Overview 24 25 This extension allows specifying a per-vertex tangent and binormal 26 vector in addition to the normal vector, defining a coordinate frame. 27 The coordinate frame is used in additional extensions which also build 28 on fragment lighting to achieve bump mapping. 29 30Patent Note 31 32 To the extent that SGI has patent rights that are unavoidably 33 infringed by all implementations of this extension, SGI will, upon 34 request, grant a license under such patent rights to the requesting 35 party subject to reasonable terms and conditions, and without 36 incremental charge or fee. Such license shall be non-exclusive, and 37 non-transferable, and shall be limited to implementations of the 38 extension in combination with any conformance certified 39 implementation of the OpenGL API. Such license is expressly 40 contingent upon a grant back of a non-exclusive, royalty-free, 41 perpetual, worldwide license to SGI and its OpenGL licensees under 42 the requesting party's patent rights that are unavoidably infringed 43 by all implementations of this extension or OpenGL. 44 45Issues 46 47 * Evaluators. 48 49 We need to address how evaluators can generate these values. 50 51New Procedures and Functions 52 53 void Tangent3{bdfis}EXT(T coords); 54 void Tangent3{bdfis}EXTv(T coords); 55 56 void Binormal3{bdfis}EXT(T coords); 57 void Binormal3{bdfis}vEXT(T coords); 58 59 void TangentPointerEXT(enum type, sizei stride, void *pointer); 60 void BinormalPointerEXT(enum type, sizei stride, void *pointer); 61 62New Tokens 63 64 Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and 65 by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and 66 GetDoublev: 67 68 TANGENT_ARRAY_EXT 0x8439 69 BINORMAL_ARRAY_EXT 0x843A 70 71 Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 72 GetFloatv, and GetDoublev: 73 74 CURRENT_TANGENT_EXT 0x843B 75 CURRENT_BINORMAL_EXT 0x843C 76 TANGENT_ARRAY_TYPE_EXT 0x843E 77 TANGENT_ARRAY_STRIDE_EXT 0x843F 78 BINORMAL_ARRAY_TYPE_EXT 0x8440 79 BINORMAL_ARRAY_STRIDE_EXT 0x8441 80 81 Accepted by the <pname> parameter of GetPointervEXT: 82 TANGENT_ARRAY_POINTER_EXT 0x8442 83 BINORMAL_ARRAY_POINTER_EXT 0x8443 84 85 Accepted by the <target> parameter of Map1,Map2: 86 87 MAP1_TANGENT_EXT 0x8444 88 MAP2_TANGENT_EXT 0x8445 89 MAP1_BINORMAL_EXT 0x8446 90 MAP2_BINORMAL_EXT 0x8447 91 92Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 93 94 Section 2.6 is amended to read: 95 96 In addition, a current normal, tangent, binormal, 97 current texture coordinates... 98 99 Figure 2.2 is amended to read 100 Current Normal,Tangent,Binormal... 101 102 Figure 2.6.3 is amended to read: 103 104 The only GL commands that are allowed within any Begin/End 105 pairs are the commands for specifying vertex coordinates, 106 normal coordinates, tangent coordinates, binormal coordinates, 107 and texture coordinates (Vertex, Color, Index, Normal, 108 Tangent, Binormal, TexCoord) 109 110 Section 2.7 is amended to read: 111 112 The current normal, tangent and binormal are set using 113 114 void Normal3{bsifd}( T coords ) ; 115 void Normal3{bsifd}v( T coords ) ; 116 void Tangent3{bsifd}EXT( T coords ) ; 117 void Tangent3{bsifd}vEXT( T coords ) ; 118 void Binormal3{bsifd}EXT( T coords ) ; 119 void Binormal3{bsifd}vEXT( T coords ) ; 120 121 The current normal, tangent and binormal are set to the given... 122 Byte, short, or integer values passed to Normal, Tangent or Binormal... 123 124 Section 2.8 is amended to read: 125 126 The client may specify up to 8 arrays: one each to store edge flags, 127 texture coordinates, colors, color indices, normals, tangents, binormals, 128 and vertices. 129 130 void TangentPointerEXT( enum type, sizei stride, void *pointer); 131 void BinormalPointerEXT( enum type, sizei stride, void *pointer); 132 133 Because normals, tangents and binormals are always specified... 134 NormalPointer, TangentPointerEXT and BinormalPointerEXT 135 136 etc, etc in 2.7. 137 138Additions to Chapter 3 of the 1.0 Specification (Rasterization) 139 140 None 141 142Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 143and the Frame Buffer) 144 145 None 146 147Additions to Chapter 5 of the 1.0 Specification (Special Functions) 148 149 Add MAP1_TANGENT_EXT and MAP1_BINORMAL_EXT to table 5.1 right after 150 the MAP1_NORMAL_EXT entry. 151 152 Change the section that starts with "Finally, if either MAP2_VERTEX_3 or 153 MAP2_VERTEX_4 is enabled, then the normal to the surface is computed." 154 155 to include "tangent and binormal" references after each reference to 156 normal. 157 158Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 159 160 tables are extended with state values from New State section 161 162Additions to the GLX Specification 163 164 None 165 166GLX Protocol 167 168 XXX - not yet complete 169 170Errors 171 172 INVALID_ENUM is generated if TangentPointerEXT parameter <type> is not 173 BYTE, SHORT, INT, FLOAT, or DOUBLE_EXT. 174 175 INVALID_VALUE is generated if TangentPointerEXT parameter <stride> or 176 <count> is negative. 177 178 INVALID_ENUM is generated if BinormalPointerEXT parameter <type> is not 179 BYTE, SHORT, INT, FLOAT, or DOUBLE_EXT. 180 181 INVALID_VALUE is generated if BinormalPointerEXT parameter <stride> or 182 <count> is negative. 183 184New State 185 186 Get Value Get Command Type Initial Value Attribute 187 --------- ----------- ---- ------------- --------- 188 189 CURRENT_TANGENT_EXT GetFloatv R3 1,0,0 current 190 CURRENT_BINORMAL_EXT GetFloatv R3 0,1,0 current 191 TANGENT_ARRAY_EXT IsEnabled B False vertex-array 192 TANGENT_ARRAY_TYPE_EXT GetIntegerv Z5 FLOAT vertex-array 193 TANGENT_ARRAY_STRIDE_EXT GetIntegerv Z+ 0 vertex-array 194 TANGENT_ARRAY_COUNT_EXT GetIntegerv Z+ 0 vertex-array 195 TANGENT_ARRAY_POINTER_EXT GetPointerv Z+ 0 vertex-array 196 BINORMAL_ARRAY_EXT IsEnabled B False vertex-array 197 BINORMAL_ARRAY_TYPE_EXT GetIntegerv Z5 FLOAT vertex-array 198 BINORMAL_ARRAY_STRIDE_EXT GetIntegerv Z+ 0 vertex-array 199 BINORMAL_ARRAY_COUNT_EXT GetIntegerv Z+ 0 vertex-array 200 BINORMAL_ARRAY_POINTER_EXT GetPointerv Z+ 0 vertex-array 201 202New Implementation Dependent State 203 204 None 205 206