varray.c revision 3baefe663bb15b4fd60921155de38c12ec2758c4
1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library
327558a160a9fe91745728d7626995cd88f8fe339Brian Paul * Version:  5.1
45e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
527558a160a9fe91745728d7626995cd88f8fe339Brian Paul * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
65e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a
8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"),
9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation
10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions:
135e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software.
165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
26fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h"
27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "context.h"
28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enable.h"
29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enums.h"
30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "dlist.h"
31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "light.h"
32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "macros.h"
33ea39f042c378c234b573ceead4c5194020d949c4Brian Paul#include "state.h"
34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "texstate.h"
355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h"
36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "varray.h"
3723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#include "math/m_translate.h"
38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
39485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell
40fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
41fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
43fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
44cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
455e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
462edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (size < 2 || size > 4) {
4708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" );
48afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
502edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
5108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(stride)" );
52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
545e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
564753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glVertexPointer( sz %d type %s stride %d )\n", size,
574753d60dd070bb08d0116076bcc08025c86ce857Brian Paul                  _mesa_lookup_enum_by_nr( type ), stride);
58afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
592edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   /* always need to check that <type> is legal */
602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SHORT:
622edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Vertex.StrideB = size * sizeof(GLshort);
63afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
64afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INT:
652edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Vertex.StrideB = size * sizeof(GLint);
66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
67afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FLOAT:
682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Vertex.StrideB = size * sizeof(GLfloat);
69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DOUBLE:
712edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Vertex.StrideB = size * sizeof(GLdouble);
72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
7408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glVertexPointer(type)" );
75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return;
76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
772edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
782edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
792edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.Vertex.StrideB = stride;
802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
81afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Vertex.Size = size;
82afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Vertex.Type = type;
83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Vertex.Stride = stride;
84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Vertex.Ptr = (void *) ptr;
85a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
86cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ctx->Array.NewState |= _NEW_ARRAY_VERTEX;
8723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
8823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.VertexPointer)
8923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.VertexPointer( ctx, size, type, stride, ptr );
90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
91afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
93afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
94afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
95fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
96fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
97afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
98fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
99cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
1005e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
1012edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
10208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" );
103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
1074753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glNormalPointer( type %s stride %d )\n",
1084753d60dd070bb08d0116076bcc08025c86ce857Brian Paul                  _mesa_lookup_enum_by_nr( type ), stride);
109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1102edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_BYTE:
1122edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Normal.StrideB = 3 * sizeof(GLbyte);
113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SHORT:
1152edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Normal.StrideB = 3 * sizeof(GLshort);
116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INT:
1182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Normal.StrideB = 3 * sizeof(GLint);
119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FLOAT:
1212edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Normal.StrideB = 3 * sizeof(GLfloat);
122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DOUBLE:
1242edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Normal.StrideB = 3 * sizeof(GLdouble);
125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
12708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glNormalPointer(type)" );
128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return;
129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
1302edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
1312edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.Normal.StrideB = stride;
1322edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
133bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul   ctx->Array.Normal.Size = 3;
134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Normal.Type = type;
135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Normal.Stride = stride;
136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Normal.Ptr = (void *) ptr;
137a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
138ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_NORMAL;
13923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
14023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.NormalPointer)
14123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.NormalPointer( ctx, type, stride, ptr );
142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
146fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
147fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
149fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
150cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
151fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul
1522edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (size < 3 || size > 4) {
15308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(size)" );
154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (stride<0) {
15708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(stride)" );
158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
1624753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glColorPointer( sz %d type %s stride %d )\n", size,
1634753d60dd070bb08d0116076bcc08025c86ce857Brian Paul                  _mesa_lookup_enum_by_nr( type ), stride);
164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1652edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_BYTE:
1672edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLbyte);
168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_UNSIGNED_BYTE:
1702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLubyte);
171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SHORT:
1732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLshort);
174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_UNSIGNED_SHORT:
1762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLushort);
177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INT:
1792edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLint);
180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_UNSIGNED_INT:
1822edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLuint);
183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FLOAT:
1852edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLfloat);
186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DOUBLE:
1882edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.Color.StrideB = size * sizeof(GLdouble);
189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
19108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glColorPointer(type)" );
192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return;
193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
1942edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
1952edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
1962edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.Color.StrideB = stride;
1972edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Color.Size = size;
199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Color.Type = type;
200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Color.Stride = stride;
201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Color.Ptr = (void *) ptr;
202a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
203ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_COLOR0;
20423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
20523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.ColorPointer)
20623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.ColorPointer( ctx, size, type, stride, ptr );
207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
211fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
212fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell_mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr)
213fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{
214fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   GET_CURRENT_CONTEXT(ctx);
215cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
2165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
2172edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
21808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glFogCoordPointer(stride)" );
219fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      return;
220fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   }
221fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
2222edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
223fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_FLOAT:
224fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         ctx->Array.FogCoord.StrideB =  sizeof(GLfloat);
225fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
226fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_DOUBLE:
227fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         ctx->Array.FogCoord.StrideB =  sizeof(GLdouble);
228fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
229fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      default:
23008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glFogCoordPointer(type)" );
231fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         return;
232fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   }
2332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
2342edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
2352edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.FogCoord.StrideB = stride;
2362edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
237bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul   ctx->Array.FogCoord.Size = 1;
238fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.FogCoord.Type = type;
239fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.FogCoord.Stride = stride;
240fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.FogCoord.Ptr = (void *) ptr;
241a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
242ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_FOGCOORD;
24323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
24423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.FogCoordPointer)
24523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.FogCoordPointer( ctx, type, stride, ptr );
246fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell}
247fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
248fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
249fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwellvoid
250fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
252fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
253cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
2545e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
2552edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
25608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" );
257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
2602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_UNSIGNED_BYTE:
262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctx->Array.Index.StrideB =  sizeof(GLubyte);
263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SHORT:
265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctx->Array.Index.StrideB =  sizeof(GLshort);
266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INT:
268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctx->Array.Index.StrideB =  sizeof(GLint);
269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FLOAT:
271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctx->Array.Index.StrideB =  sizeof(GLfloat);
272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DOUBLE:
274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctx->Array.Index.StrideB =  sizeof(GLdouble);
275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
27708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glIndexPointer(type)" );
278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return;
279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
2802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
2812edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
2822edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.Index.StrideB = stride;
2832edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
284bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul   ctx->Array.Index.Size = 1;
285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Index.Type = type;
286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Index.Stride = stride;
287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.Index.Ptr = (void *) ptr;
288a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
289ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_INDEX;
29023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
29123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.IndexPointer)
29223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.IndexPointer( ctx, type, stride, ptr );
293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
296fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwellvoid
2975e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen_mesa_SecondaryColorPointerEXT(GLint size, GLenum type,
298fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell			       GLsizei stride, const GLvoid *ptr)
299fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{
300fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   GET_CURRENT_CONTEXT(ctx);
301cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
302fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
303fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   if (size != 3 && size != 4) {
3042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(size)" );
305fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      return;
306fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   }
3072edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
3082edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(stride)" );
309fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      return;
310fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   }
311fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
312fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
3134753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glSecondaryColorPointer( sz %d type %s stride %d )\n",
314d09a1d8b29ae5841ae39b5c24c3f4693dd750559Brian Paul                  size, _mesa_lookup_enum_by_nr( type ), stride);
315fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
3162edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
317fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_BYTE:
3182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLbyte);
319fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
320fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_UNSIGNED_BYTE:
3212edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLubyte);
322fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
323fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_SHORT:
3242edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLshort);
325fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
326fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_UNSIGNED_SHORT:
3272edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLushort);
328fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
329fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_INT:
3302edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLint);
331fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
332fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_UNSIGNED_INT:
3332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLuint);
334fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
335fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_FLOAT:
3362edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLfloat);
337fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
338fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      case GL_DOUBLE:
3392edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.SecondaryColor.StrideB = size * sizeof(GLdouble);
340fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         break;
341fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell      default:
34208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glSecondaryColorPointer(type)" );
343fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell         return;
344fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   }
3452edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
3462edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
3472edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.SecondaryColor.StrideB = stride;
3482edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
349fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.SecondaryColor.Size = 3; /* hardwire */
350fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.SecondaryColor.Type = type;
351fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.SecondaryColor.Stride = stride;
352fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell   ctx->Array.SecondaryColor.Ptr = (void *) ptr;
353a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
354ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_COLOR1;
35523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
35623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.SecondaryColorPointer)
35723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.SecondaryColorPointer( ctx, size, type, stride, ptr );
358fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell}
359fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
360fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell
361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
362fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
3632edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
3642edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul                      const GLvoid *ptr)
365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
366fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
367cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GLuint texUnit = ctx->Array.ActiveTexture;
368cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
3702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (size < 1 || size > 4) {
37108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(size)" );
372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
3742edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
37508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(stride)" );
376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
3804753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glTexCoordPointer(unit %u sz %d type %s stride %d)\n",
3814753d60dd070bb08d0116076bcc08025c86ce857Brian Paul                  texUnit, size, _mesa_lookup_enum_by_nr( type ), stride);
382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
3832edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   /* always need to check that <type> is legal */
3842edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SHORT:
3862edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLshort);
387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INT:
3892edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLint);
390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FLOAT:
3922edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLfloat);
393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DOUBLE:
3952edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLdouble);
396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
39808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glTexCoordPointer(type)" );
399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return;
400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
4012edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4022edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
4032edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.TexCoord[texUnit].StrideB = stride;
4042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.TexCoord[texUnit].Size = size;
406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.TexCoord[texUnit].Type = type;
407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.TexCoord[texUnit].Stride = stride;
408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.TexCoord[texUnit].Ptr = (void *) ptr;
409a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
410ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_TEXCOORD(texUnit);
41123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
41223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.TexCoordPointer)
41323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.TexCoordPointer( ctx, size, type, stride, ptr );
414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
417fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
4182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
420fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   const GLboolean *ptr = (GLboolean *)vptr;
422cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (stride<0) {
42508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" );
426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.EdgeFlag.Stride = stride;
429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.EdgeFlag.StrideB = stride ? stride : sizeof(GLboolean);
430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   ctx->Array.EdgeFlag.Ptr = (GLboolean *) ptr;
431a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell   ctx->NewState |= _NEW_ARRAY;
432ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul   ctx->Array.NewState |= _NEW_ARRAY_EDGEFLAG;
43323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell
43423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell   if (ctx->Driver.EdgeFlagPointer)
43523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell      ctx->Driver.EdgeFlagPointer( ctx, stride, ptr );
436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
43992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paulvoid
44092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul_mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
44192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul                            GLsizei stride, const GLvoid *ptr)
4422edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul{
4432edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   GET_CURRENT_CONTEXT(ctx);
4442edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
4452edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
446b7752724d930aa8b93617829d814b20509f85069Brian Paul   if (index >= VERT_ATTRIB_MAX) {
4472edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(index)");
4482edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      return;
4492edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   }
4502edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4512edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (size < 1 || size > 4) {
4522edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size)");
4532edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      return;
4542edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   }
4552edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4562edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride < 0) {
4572edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(stride)");
4582edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      return;
4592edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   }
4602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4612edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (type == GL_UNSIGNED_BYTE && size != 4) {
4622edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size!=4)");
4632edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      return;
4642edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   }
4652edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4662edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   /* check for valid 'type' and compute StrideB right away */
4672edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   switch (type) {
4682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      case GL_UNSIGNED_BYTE:
469ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLubyte);
4702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         break;
4712edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      case GL_SHORT:
472ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLshort);
4732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         break;
4742edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      case GL_FLOAT:
475ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLfloat);
4762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         break;
4772edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      case GL_DOUBLE:
478ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLdouble);
4792edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         break;
4802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      default:
4812edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerNV(type)" );
4822edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul         return;
4832edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   }
4842edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4852edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   if (stride)
4862edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Array.VertexAttrib[index].StrideB = stride;
487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
4882edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   ctx->Array.VertexAttrib[index].Stride = stride;
4892edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   ctx->Array.VertexAttrib[index].Size = size;
4902edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   ctx->Array.VertexAttrib[index].Type = type;
491b7752724d930aa8b93617829d814b20509f85069Brian Paul   ctx->Array.VertexAttrib[index].Ptr = (void *) ptr;
4922edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
4932edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul   ctx->NewState |= _NEW_ARRAY;
494b7752724d930aa8b93617829d814b20509f85069Brian Paul   ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index);
4952edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul
496b7752724d930aa8b93617829d814b20509f85069Brian Paul   if (ctx->Driver.VertexAttribPointer)
4972edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul      ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr );
4982edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul}
499afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
5001f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
5011f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid
50292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul_mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
50392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul                             GLboolean normalized,
50492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul                             GLsizei stride, const GLvoid *ptr)
50592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul{
50692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   GET_CURRENT_CONTEXT(ctx);
50792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
50892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
50992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   if (index >= ctx->Const.MaxVertexProgramAttribs) {
51092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(index)");
51192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      return;
51292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   }
51392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
51492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   if (size < 1 || size > 4) {
51592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(size)");
51692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      return;
51792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   }
51892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
51992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   if (stride < 0) {
52092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(stride)");
52192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      return;
52292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   }
52392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
52492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   if (type == GL_UNSIGNED_BYTE && size != 4) {
52592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(size!=4)");
52692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      return;
52792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   }
52892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
52992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   /* check for valid 'type' and compute StrideB right away */
530196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul   /* NOTE: more types are supported here than in the NV extension */
53192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   switch (type) {
532196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul      case GL_BYTE:
533196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLbyte);
534196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         break;
53592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      case GL_UNSIGNED_BYTE:
53692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLubyte);
53792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         break;
53892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      case GL_SHORT:
53992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLshort);
54092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         break;
541196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul      case GL_UNSIGNED_SHORT:
542196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLushort);
543196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         break;
544196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul      case GL_INT:
545196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLint);
546196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         break;
547196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul      case GL_UNSIGNED_INT:
548196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLuint);
549196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul         break;
55092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      case GL_FLOAT:
55192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLfloat);
55292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         break;
55392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      case GL_DOUBLE:
55492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLdouble);
55592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         break;
55692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      default:
55792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerARB(type)" );
55892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul         return;
55992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   }
56092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
56192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   if (stride)
56292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      ctx->Array.VertexAttrib[index].StrideB = stride;
56392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
56492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->Array.VertexAttrib[index].Stride = stride;
56592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->Array.VertexAttrib[index].Size = size;
56692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->Array.VertexAttrib[index].Type = type;
56792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->Array.VertexAttrib[index].Normalized = normalized;
56892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->Array.VertexAttrib[index].Ptr = (void *) ptr;
56992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
57092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->NewState |= _NEW_ARRAY;
57192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index);
57292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
57392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   /* XXX fix
57492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   if (ctx->Driver.VertexAttribPointer)
57592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr );
57692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul   */
57792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul}
57892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
57992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
58092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul
58192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paulvoid
5821f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
5831f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul                       GLsizei count, const GLvoid *ptr)
5841f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{
5851f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   (void) count;
5861f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   _mesa_VertexPointer(size, type, stride, ptr);
5871f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul}
5881f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
5891f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
5901f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid
5911f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
5921f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul                       const GLvoid *ptr)
5931f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{
5941f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   (void) count;
5951f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   _mesa_NormalPointer(type, stride, ptr);
5961f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul}
5971f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
5981f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
5991f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid
6001f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count,
6011f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul                      const GLvoid *ptr)
6021f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{
6031f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   (void) count;
6041f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   _mesa_ColorPointer(size, type, stride, ptr);
6051f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul}
6061f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6071f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6081f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid
6091f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
6101f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul                      const GLvoid *ptr)
6111f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{
6121f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   (void) count;
6131f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   _mesa_IndexPointer(type, stride, ptr);
6141f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul}
6151f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6161f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6171f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid
6181f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
6191f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul                         GLsizei count, const GLvoid *ptr)
6201f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{
6211f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   (void) count;
6221f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   _mesa_TexCoordPointer(size, type, stride, ptr);
6231f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul}
6241f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6251f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6261f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid
6271f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr)
6281f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{
6291f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   (void) count;
6301f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul   _mesa_EdgeFlagPointer(stride, ptr);
6311f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul}
6321f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6331f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6341f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
6351f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul
636fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid
637fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
638afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
639fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
640afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLboolean tflag, cflag, nflag;  /* enable/disable flags */
641afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLint tcomps, ccomps, vcomps;   /* components per texcoord, color, vertex */
642afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
643f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell   GLenum ctype = 0;               /* color type */
644f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell   GLint coffset = 0, noffset = 0, voffset;/* color, normal, vertex offsets */
645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLint defstride;                /* default stride */
646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLint c, f;
647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLint coordUnitSave;
6485e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen
649cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
650cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
651afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   f = sizeof(GLfloat);
652afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   c = f * ((4*sizeof(GLubyte) + (f-1)) / f);
653afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
654afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (stride<0) {
65508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul      _mesa_error( ctx, GL_INVALID_VALUE, "glInterleavedArrays(stride)" );
656afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return;
657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
659afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   switch (format) {
660afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_V2F:
661afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_FALSE;  nflag = GL_FALSE;
662afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 0;  vcomps = 2;
663afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 0;
664afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 2*f;
665afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
666afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_V3F:
667afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_FALSE;  nflag = GL_FALSE;
668afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 0;  vcomps = 3;
669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 0;
670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 3*f;
671afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_C4UB_V2F:
673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_TRUE;  nflag = GL_FALSE;
674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 4;  vcomps = 2;
675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_UNSIGNED_BYTE;
676afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 0;
677afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = c;
678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = c + 2*f;
679afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
680afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_C4UB_V3F:
681afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_TRUE;  nflag = GL_FALSE;
682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 4;  vcomps = 3;
683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_UNSIGNED_BYTE;
684afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 0;
685afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = c;
686afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = c + 3*f;
687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
688afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_C3F_V3F:
689afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_TRUE;  nflag = GL_FALSE;
690afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 3;  vcomps = 3;
691afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_FLOAT;
692afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 0;
693afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 3*f;
694afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 6*f;
695afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
696afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_N3F_V3F:
697afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_FALSE;  nflag = GL_TRUE;
698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 0;  vcomps = 3;
699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         noffset = 0;
700afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 3*f;
701afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 6*f;
702afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
703afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_C4F_N3F_V3F:
704afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_FALSE;  cflag = GL_TRUE;  nflag = GL_TRUE;
705afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 0;  ccomps = 4;  vcomps = 3;
706afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_FLOAT;
707afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 0;
708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         noffset = 4*f;
709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 7*f;
710afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 10*f;
711afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
712afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T2F_V3F:
713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_FALSE;  nflag = GL_FALSE;
714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 2;  ccomps = 0;  vcomps = 3;
715afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 2*f;
716afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 5*f;
717afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
718afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T4F_V4F:
719afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_FALSE;  nflag = GL_FALSE;
720afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 4;  ccomps = 0;  vcomps = 4;
721afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 4*f;
722afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 8*f;
723afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
724afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T2F_C4UB_V3F:
725afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_TRUE;  nflag = GL_FALSE;
726afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 2;  ccomps = 4;  vcomps = 3;
727afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_UNSIGNED_BYTE;
728afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 2*f;
729afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = c+2*f;
730afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = c+5*f;
731afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
732afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T2F_C3F_V3F:
733afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_TRUE;  nflag = GL_FALSE;
734afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 2;  ccomps = 3;  vcomps = 3;
735afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_FLOAT;
736afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 2*f;
737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 5*f;
738afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 8*f;
739afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
740afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T2F_N3F_V3F:
741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_FALSE;  nflag = GL_TRUE;
742afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 2;  ccomps = 0;  vcomps = 3;
743afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         noffset = 2*f;
744afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 5*f;
745afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 8*f;
746afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
747afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T2F_C4F_N3F_V3F:
748afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_TRUE;  nflag = GL_TRUE;
749afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 2;  ccomps = 4;  vcomps = 3;
750afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_FLOAT;
751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 2*f;
752afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         noffset = 6*f;
753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 9*f;
754afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 12*f;
755afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
756afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_T4F_C4F_N3F_V4F:
757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tflag = GL_TRUE;  cflag = GL_TRUE;  nflag = GL_TRUE;
758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         tcomps = 4;  ccomps = 4;  vcomps = 4;
759afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         ctype = GL_FLOAT;
760afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         coffset = 4*f;
761afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         noffset = 8*f;
762afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         voffset = 11*f;
763afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         defstride = 15*f;
764afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         break;
765afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
76608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul         _mesa_error( ctx, GL_INVALID_ENUM, "glInterleavedArrays(format)" );
767afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return;
768afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
769afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (stride==0) {
771afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      stride = defstride;
772afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
773afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
774fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_DisableClientState( GL_EDGE_FLAG_ARRAY );
775fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_DisableClientState( GL_INDEX_ARRAY );
776afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
777afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* Texcoords */
77845224face0d942094cc4426d2c84d441661a4c62Brian Paul   coordUnitSave = ctx->Array.ActiveTexture;
779afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (tflag) {
780afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      GLint i;
781afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      GLint factor = ctx->Array.TexCoordInterleaveFactor;
782afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      for (i = 0; i < factor; i++) {
783fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul         _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
784fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul         _mesa_EnableClientState( GL_TEXTURE_COORD_ARRAY );
785cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell         _mesa_TexCoordPointer( tcomps, GL_FLOAT, stride,
786cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell				(GLubyte *) pointer + i * coffset );
787afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
78892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      for (i = factor; i < (GLint) ctx->Const.MaxTextureCoordUnits; i++) {
789fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul         _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
790fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul         _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY );
791afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
792afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
793afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   else {
794afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      GLint i;
79592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul      for (i = 0; i < (GLint) ctx->Const.MaxTextureCoordUnits; i++) {
796fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul         _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
797fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul         _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY );
798afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      }
799afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
800afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* Restore texture coordinate unit index */
801fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + coordUnitSave) );
802afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
803afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
804afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* Color */
805afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (cflag) {
806fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      _mesa_EnableClientState( GL_COLOR_ARRAY );
807cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      _mesa_ColorPointer( ccomps, ctype, stride,
808cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			  (GLubyte*) pointer + coffset );
809afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
810afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   else {
811fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      _mesa_DisableClientState( GL_COLOR_ARRAY );
812afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
813afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
814afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
815afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* Normals */
816afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (nflag) {
817fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      _mesa_EnableClientState( GL_NORMAL_ARRAY );
818cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      _mesa_NormalPointer( GL_FLOAT, stride,
819cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			   (GLubyte*) pointer + noffset );
820afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
821afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   else {
822fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul      _mesa_DisableClientState( GL_NORMAL_ARRAY );
823afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
824afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
825fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_EnableClientState( GL_VERTEX_ARRAY );
826cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   _mesa_VertexPointer( vcomps, GL_FLOAT, stride,
827cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell			(GLubyte *) pointer + voffset );
828afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
829afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
830afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
831afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
832ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwellvoid
833ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_LockArraysEXT(GLint first, GLsizei count)
834ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{
835ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
836cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
837ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
838ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   if (MESA_VERBOSE & VERBOSE_API)
8394753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glLockArrays %d %d\n", first, count);
840ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
841b51b0a847d7e7daaea69f77ab569086ef81c24a2Brian Paul   if (first == 0 && count > 0 &&
842b51b0a847d7e7daaea69f77ab569086ef81c24a2Brian Paul       count <= (GLint) ctx->Const.MaxArrayLockSize) {
843ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      ctx->Array.LockFirst = first;
844ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      ctx->Array.LockCount = count;
84522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes   }
846ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   else {
847ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      ctx->Array.LockFirst = 0;
848ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      ctx->Array.LockCount = 0;
849ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   }
850ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
851ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   ctx->NewState |= _NEW_ARRAY;
852cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ctx->Array.NewState |= _NEW_ARRAY_ALL;
853ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
854ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   if (ctx->Driver.LockArraysEXT)
855ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      ctx->Driver.LockArraysEXT( ctx, first, count );
856ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell}
857ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
858ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
859ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwellvoid
860ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_UnlockArraysEXT( void )
861ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{
862ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
863cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
864ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
865ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   if (MESA_VERBOSE & VERBOSE_API)
8664753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "glUnlockArrays\n");
867ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
868ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   ctx->Array.LockFirst = 0;
869ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   ctx->Array.LockCount = 0;
870ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   ctx->NewState |= _NEW_ARRAY;
871cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ctx->Array.NewState |= _NEW_ARRAY_ALL;
872ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell
873ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell   if (ctx->Driver.UnlockArraysEXT)
874ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell      ctx->Driver.UnlockArraysEXT( ctx );
875ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell}
8762525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8772525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8782525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8792525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* GL_EXT_multi_draw_arrays */
8802525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* Somebody forgot to spec the first and count parameters as const! <sigh> */
8812525bc7d305f6dcab3beb75535da25a488c969b0Brian Paulvoid
8822525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul_mesa_MultiDrawArraysEXT( GLenum mode, GLint *first,
8832525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul                          GLsizei *count, GLsizei primcount )
8842525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul{
8852525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   GET_CURRENT_CONTEXT(ctx);
8862525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   GLint i;
8872525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8882525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
8892525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8902525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   for (i = 0; i < primcount; i++) {
8912525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul      if (count[i] > 0) {
8922525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul         (ctx->Exec->DrawArrays)(mode, first[i], count[i]);
8932525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul      }
8942525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   }
8952525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul}
8962525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8972525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
8982525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* GL_EXT_multi_draw_arrays */
8992525bc7d305f6dcab3beb75535da25a488c969b0Brian Paulvoid
9002525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul_mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
9012525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul                            const GLvoid **indices, GLsizei primcount )
9022525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul{
9032525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   GET_CURRENT_CONTEXT(ctx);
9042525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   GLint i;
9052525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
9062525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
9072525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul
9082525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   for (i = 0; i < primcount; i++) {
9092525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul      if (count[i] > 0) {
9102525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul         (ctx->Exec->DrawElements)(mode, count[i], type, indices[i]);
9112525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul      }
9122525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul   }
9132525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul}
9146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9156dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9163baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick/* GL_IBM_multimode_draw_arrays */
9173baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanickvoid
9183baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
9193baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick			      const GLsizei * count,
9203baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick			      GLsizei primcount, GLint modestride )
9213baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick{
9223baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   GET_CURRENT_CONTEXT(ctx);
9233baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   GLint i;
9243baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9253baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
9263baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9273baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   for ( i = 0 ; i < primcount ; i++ ) {
9283baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick      if ( count[i] > 0 ) {
9293baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick	 (ctx->Exec->DrawArrays)( *(GLenum *) ((char *) mode + (i * modestride)),
9303baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick				  first[i], count[i] );
9313baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick      }
9323baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   }
9333baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick}
9343baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9353baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9363baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick/* GL_IBM_multimode_draw_arrays */
9373baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanickvoid
9383baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
9393baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick				GLenum type, const GLvoid * const * indices,
9403baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick				GLsizei primcount, GLint modestride )
9413baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick{
9423baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   GET_CURRENT_CONTEXT(ctx);
9433baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   GLint i;
9443baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9453baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
9463baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9473baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   for ( i = 0 ; i < primcount ; i++ ) {
9483baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick      if ( count[i] > 0 ) {
9493baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick	 (ctx->Exec->DrawElements)( *(GLenum *) ((char *) mode + (i * modestride)),
9503baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick				    count[i], type, indices[i] );
9513baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick      }
9523baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick   }
9533baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick}
9543baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9553baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick
9566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
9576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/*****                      Initialization                        *****/
9586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/
9596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellvoid _mesa_init_varray( GLcontext * ctx )
9616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{
9626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   int i;
9636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
9646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   /* Vertex arrays */
9656dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.Size = 4;
9666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.Type = GL_FLOAT;
9676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.Stride = 0;
9686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.StrideB = 0;
9696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.Ptr = NULL;
9706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.Enabled = GL_FALSE;
9716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Vertex.Flags = CA_CLIENT_DATA;
9726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Normal.Type = GL_FLOAT;
9736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Normal.Stride = 0;
9746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Normal.StrideB = 0;
9756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Normal.Ptr = NULL;
9766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Normal.Enabled = GL_FALSE;
9776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Normal.Flags = CA_CLIENT_DATA;
9786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.Size = 4;
9796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.Type = GL_FLOAT;
9806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.Stride = 0;
9816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.StrideB = 0;
9826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.Ptr = NULL;
9836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.Enabled = GL_FALSE;
9846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Color.Flags = CA_CLIENT_DATA;
9856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.Size = 4;
9866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.Type = GL_FLOAT;
9876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.Stride = 0;
9886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.StrideB = 0;
9896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.Ptr = NULL;
9906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.Enabled = GL_FALSE;
9916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.SecondaryColor.Flags = CA_CLIENT_DATA;
9926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.Size = 1;
9936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.Type = GL_FLOAT;
9946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.Stride = 0;
9956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.StrideB = 0;
9966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.Ptr = NULL;
9976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.Enabled = GL_FALSE;
9986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.FogCoord.Flags = CA_CLIENT_DATA;
9996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Index.Type = GL_FLOAT;
10006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Index.Stride = 0;
10016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Index.StrideB = 0;
10026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Index.Ptr = NULL;
10036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Index.Enabled = GL_FALSE;
10046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.Index.Flags = CA_CLIENT_DATA;
10056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
10066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].Size = 4;
10076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].Type = GL_FLOAT;
10086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].Stride = 0;
10096dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].StrideB = 0;
10106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].Ptr = NULL;
10116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].Enabled = GL_FALSE;
10126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell      ctx->Array.TexCoord[i].Flags = CA_CLIENT_DATA;
10136dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   }
10146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.TexCoordInterleaveFactor = 1;
10156dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.EdgeFlag.Stride = 0;
10166dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.EdgeFlag.StrideB = 0;
10176dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.EdgeFlag.Ptr = NULL;
10186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.EdgeFlag.Enabled = GL_FALSE;
10196dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.EdgeFlag.Flags = CA_CLIENT_DATA;
10206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell   ctx->Array.ActiveTexture = 0;   /* GL_ARB_multitexture */
10216dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell}
1022