| 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 <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 |
| |
| |
| |
| |