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