• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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