Back to the OpenGL extension cross reference

GL_ATI_vertex_streams


Name


    ATI_vertex_streams

Name Strings


    GL_ATI_vertex_streams

Contact


    Evan Hart, ATI Research (ehart 'at' ati.com)

Version


    Date: 8/7/2001
Revision: 0.30

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 <pname> parameters of GetIntegerv, GetFloatv, and
GetDoublev:

MAX_VERTEX_STREAMS_ATI 0x876B

Accepted by the <stream> 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 <pname> 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




Implementation Support


   List of OpenGL implementations supporting the GL_ATI_vertex_streams extension

Original File


   Original text file for the GL_ATI_vertex_streams extension


Page generated on Sun Nov 20 18:40:30 2005