• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    ATI_vertex_streams
4
5Name Strings
6
7    GL_ATI_vertex_streams
8
9Contact
10
11    Benj Lipchak, AMD (benj.lipchak 'at' amd.com)
12    Evan Hart, NVIDIA (ehart 'at' nvidia.com)
13
14Version
15
16    Date: 11/4/2006
17    Revision: 0.31
18
19Number
20
21    249
22
23Dependencies
24
25    OpenGL 1.0 is required.
26    ARB_vertex_blend is required.
27    This extension is written against the OpenGL 1.2.1 Specification.
28
29Overview
30
31    This extension adds the ability to handle sets of auxilliary
32    vertex and normal coordinates. These sets of auxilliary
33    coordinates are termed streams, and can be routed selectively
34    into the blend stages provided by the vertex blending extension.
35    This functionality enables software animation techniques such
36    as keyframe vertex morphing.
37
38
39
40IP Status
41
42    Unknown, but believed to be none.
43
44Issues
45
46
47
48New Procedures and Functions
49
50    void VertexStream{1234}{sifd}(enum stream, T coords)
51    void VertexStream{1234}{sifd}v(enum stream, T coords)
52
53    void NormalStream3{bsifd}(enum stream, T coords)
54    void NormalStream3{bsifd}v(enum stream, T coords)
55
56    void ClientActiveVertexStream(enum stream)
57
58    void VertexBlendEnv{if}(enum pname, T param)
59
60New Tokens
61
62    Accepted by the <pname> parameters of GetIntegerv, GetFloatv, and
63    GetDoublev:
64
65      MAX_VERTEX_STREAMS_ATI           0x876B
66
67    Accepted by the <stream> parameters of VertexStream and
68    ClientActiveVertexStream:
69
70      VERTEX_STREAM0_ATI:              0x876C
71      VERTEX_STREAM1_ATI:              0x876D
72      VERTEX_STREAM2_ATI:              0x876E
73      VERTEX_STREAM3_ATI:              0x876F
74      VERTEX_STREAM4_ATI:              0x8770
75      VERTEX_STREAM5_ATI:              0x8771
76      VERTEX_STREAM6_ATI:              0x8772
77      VERTEX_STREAM7_ATI:              0x8773
78
79
80    Accepted by the <pname> parameter of VertexBlendEnv:
81
82      VERTEX_SOURCE_ATI:               0x8774
83
84
85Additions to Chapter 2 of the OpenGL 1.2.1 Specification (Operation)
86
87    - (2.6, p. 12) Second paragraph changed to:
88
89          "Each vertex is specified with two, three, or four
90          coordinates. In addition, current auxilliary vertices,
91          a current normal, auxilliary normals, current texture
92          coordinates, and current color may be used in processing
93          each vertex. Normals are used by the GL in lighting
94          calculations; the current normals are three-dimensional
95          vectors that may be set by sending three coordinates that
96          specify them. Texture coordinates determine how a texture
97          image is mapped onto a primitive."
98
99    - (2.6, p. 12) Added after the second paragraph:
100
101          "Each auxilliary set of vertex and normal coordinates
102          is refered to as a vertex stream. The vertex coordinate and
103          normal for a vertex are the 0th stream, and each auxilliary
104          set rpovided by the implementation after that is refered to
105          as the ith stream. The number of streams supported by an
106          implementation is return by Get when the pname parameter is
107          MAX_VERTEX_STREAMS_ATI."
108
109    - (2.6.3, p. 19) First paragraph changed to:
110
111          "The only GL commands that are allowed within any Begin/End
112          pairs are the commands for specifying vertex coordinates,
113          auxilliary vertex coordinates, vertex color, normal
114          coordinates, auxilliary normal coordinates, and texture
115          coordinates (Vertex, VertexStream, Color, Index, Normal,
116          NormalStream, TexCoord), the ArrayElement command (see
117          section 2.8), the EvalCoord and EvalPoint commands (see
118          section 5.1), commands for specifying lighting material
119          parameters (Material commands; see section 2.13.2), display
120          list invocation commands (CallList and CallLists; see
121          section 5.4), and the EdgeFlag command. Executing any other
122          GL command between the execution of a Begin and the
123          corresponding execution of End results in the error
124          INVALID_OPERATION. Executing Begin after Begin has already
125          been executed but before an End is executed generates the
126          INVALID_OPERATION error, as does executing End without
127          a previous corresponding Begin."
128
129    - (2.7, p. 20) Added after the first paragraph:
130
131          "Alternatively, vertices and auxilliary vertices can be
132          specified with the commands
133
134              void VertexStream{234}{sifd}(enum stream, T coords)
135              void VertexStream{234}{sifd}v(enum stream, T coords)
136
137          These commands operate identically the the corresponding
138          Vertex commands, but they may specify which stream the
139          vertex data is to be placed in. If the stream parameter
140          specifies a stream greater than the one minus the maximum
141          number of streams reported by Get, then the error
142          INVALID_ENUM is generated."
143
144    - (2.7, p. 20) Added after the third paragraph:
145
146          "The normals and auxilliary normals may also be specified
147          with the commands
148
149              void NormalStream3{bsifd}(enum stream, T coords)
150              void NormalStream3{bsifd}v(enum stream, T coords)
151
152          These commands operate identically to the corresponding
153          Normal commands, but they allow the specification of which
154          vertex stream the normal is to be used with. If the stream
155          parameter is VERTEX_STREAM0_ATI, then this is the default
156          current normal. Otherwise, it is one of the auxilliary
157          normals. If the stream parameter specifies a stream greater
158          than one minus the maximum number reported by Get, then
159          the error INVALID_ENUM is generated."
160
161    - (2.8, p. 23) Added after the second paragraph:
162
163          "Additionally, auxillary vertex and normal data can be
164          specified through the VertexPointer and NormalPointer
165          commands. Whether these commands are affecting the primary
166          coordinates or the auxilliary coordinates is controlled by
167          the command:
168
169            void ClientActiveVertexStream(enum stream)
170
171          This sets the current client vertex stream, so that all
172          following VertexPointer and NormalPointer commands
173          affect that client stream. If ClientActiveVertexStream
174          is called with a stream greater than is reported as being
175          supported by get, then the error INVALID_ENUM is
176          generated."
177
178    - (2.10, p. 29) Added after the first paragraph:
179
180          "When vertex blending is enabled, and the vertex is
181          being transformed by multiple modelview matrices,
182          the auxiliary sets of vertex and normal data my be
183          supplied to a vertex unit to be transformed. Each
184          vertex unit transforms its currently selected stream.
185          The active vertex stream for a vertex unit is specified
186          by the command:
187
188            void VertexBlendEnv{if}(enum pname, T param)
189
190          This command changes the active vertex stream for the
191          currently selected vertex stage. Param must be less than
192          the maximum number of streams reported by get. The
193          select the current vertex stage to effect is done by
194          calling MatrixMode with MODELVIEWn_ARB, where n is
195          the vertex stage."
196
197
198
199Additions to Chapter 3:
200
201      None
202
203Additions to Chapter 4:
204
205      None
206
207Additions to Chapter 5:
208
209      Open issue with evaluators
210
211Additions to Chapter 6:
212
213      Rather obvious changes to Get
214
215Additions to Appendix A:
216
217      None
218
219
220
221
222