Name ATI_vertex_streams Name Strings GL_ATI_vertex_streams Contact Benj Lipchak, AMD (benj.lipchak 'at' amd.com) Evan Hart, NVIDIA (ehart 'at' nvidia.com) Version Date: 11/4/2006 Revision: 0.31 Number 249 Dependencies OpenGL 1.0 is required. ARB_vertex_blend is required. This extension is written against the OpenGL 1.2.1 Specification. Overview This extension adds the ability to handle sets of auxilliary vertex and normal coordinates. These sets of auxilliary coordinates are termed streams, and can be routed selectively into the blend stages provided by the vertex blending extension. This functionality enables software animation techniques such as keyframe vertex morphing. IP Status Unknown, but believed to be none. Issues New Procedures and Functions void VertexStream{1234}{sifd}(enum stream, T coords) void VertexStream{1234}{sifd}v(enum stream, T coords) void NormalStream3{bsifd}(enum stream, T coords) void NormalStream3{bsifd}v(enum stream, T coords) void ClientActiveVertexStream(enum stream) void VertexBlendEnv{if}(enum pname, T param) New Tokens Accepted by the parameters of GetIntegerv, GetFloatv, and GetDoublev: MAX_VERTEX_STREAMS_ATI 0x876B Accepted by the parameters of VertexStream and ClientActiveVertexStream: VERTEX_STREAM0_ATI: 0x876C VERTEX_STREAM1_ATI: 0x876D VERTEX_STREAM2_ATI: 0x876E VERTEX_STREAM3_ATI: 0x876F VERTEX_STREAM4_ATI: 0x8770 VERTEX_STREAM5_ATI: 0x8771 VERTEX_STREAM6_ATI: 0x8772 VERTEX_STREAM7_ATI: 0x8773 Accepted by the parameter of VertexBlendEnv: VERTEX_SOURCE_ATI: 0x8774 Additions to Chapter 2 of the OpenGL 1.2.1 Specification (Operation) - (2.6, p. 12) Second paragraph changed to: "Each vertex is specified with two, three, or four coordinates. In addition, current auxilliary vertices, a current normal, auxilliary normals, current texture coordinates, and current color may be used in processing each vertex. Normals are used by the GL in lighting calculations; the current normals are three-dimensional vectors that may be set by sending three coordinates that specify them. Texture coordinates determine how a texture image is mapped onto a primitive." - (2.6, p. 12) Added after the second paragraph: "Each auxilliary set of vertex and normal coordinates is refered to as a vertex stream. The vertex coordinate and normal for a vertex are the 0th stream, and each auxilliary set rpovided by the implementation after that is refered to as the ith stream. The number of streams supported by an implementation is return by Get when the pname parameter is MAX_VERTEX_STREAMS_ATI." - (2.6.3, p. 19) First paragraph changed to: "The only GL commands that are allowed within any Begin/End pairs are the commands for specifying vertex coordinates, auxilliary vertex coordinates, vertex color, normal coordinates, auxilliary normal coordinates, and texture coordinates (Vertex, VertexStream, Color, Index, Normal, NormalStream, TexCoord), the ArrayElement command (see section 2.8), the EvalCoord and EvalPoint commands (see section 5.1), commands for specifying lighting material parameters (Material commands; see section 2.13.2), display list invocation commands (CallList and CallLists; see section 5.4), and the EdgeFlag command. Executing any other GL command between the execution of a Begin and the corresponding execution of End results in the error INVALID_OPERATION. Executing Begin after Begin has already been executed but before an End is executed generates the INVALID_OPERATION error, as does executing End without a previous corresponding Begin." - (2.7, p. 20) Added after the first paragraph: "Alternatively, vertices and auxilliary vertices can be specified with the commands void VertexStream{234}{sifd}(enum stream, T coords) void VertexStream{234}{sifd}v(enum stream, T coords) These commands operate identically the the corresponding Vertex commands, but they may specify which stream the vertex data is to be placed in. If the stream parameter specifies a stream greater than the one minus the maximum number of streams reported by Get, then the error INVALID_ENUM is generated." - (2.7, p. 20) Added after the third paragraph: "The normals and auxilliary normals may also be specified with the commands void NormalStream3{bsifd}(enum stream, T coords) void NormalStream3{bsifd}v(enum stream, T coords) These commands operate identically to the corresponding Normal commands, but they allow the specification of which vertex stream the normal is to be used with. If the stream parameter is VERTEX_STREAM0_ATI, then this is the default current normal. Otherwise, it is one of the auxilliary normals. If the stream parameter specifies a stream greater than one minus the maximum number reported by Get, then the error INVALID_ENUM is generated." - (2.8, p. 23) Added after the second paragraph: "Additionally, auxillary vertex and normal data can be specified through the VertexPointer and NormalPointer commands. Whether these commands are affecting the primary coordinates or the auxilliary coordinates is controlled by the command: void ClientActiveVertexStream(enum stream) This sets the current client vertex stream, so that all following VertexPointer and NormalPointer commands affect that client stream. If ClientActiveVertexStream is called with a stream greater than is reported as being supported by get, then the error INVALID_ENUM is generated." - (2.10, p. 29) Added after the first paragraph: "When vertex blending is enabled, and the vertex is being transformed by multiple modelview matrices, the auxiliary sets of vertex and normal data my be supplied to a vertex unit to be transformed. Each vertex unit transforms its currently selected stream. The active vertex stream for a vertex unit is specified by the command: void VertexBlendEnv{if}(enum pname, T param) This command changes the active vertex stream for the currently selected vertex stage. Param must be less than the maximum number of streams reported by get. The select the current vertex stage to effect is done by calling MatrixMode with MODELVIEWn_ARB, where n is the vertex stage." Additions to Chapter 3: None Additions to Chapter 4: None Additions to Chapter 5: Open issue with evaluators Additions to Chapter 6: Rather obvious changes to Get Additions to Appendix A: None