varray.c revision ebe4e3237c65d85bd25e66c2cf7125c2cf536a1d
1ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul/* $Id: varray.c,v 1.42 2002/04/04 23:59:14 brianp Exp $ */ 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 5bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul * Version: 4.1 65e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 7bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"), 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions: 155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software. 185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef PC_HEADER 28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "all.h" 29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#else 30fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h" 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "context.h" 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enable.h" 33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enums.h" 34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "dlist.h" 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "light.h" 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "macros.h" 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "mmath.h" 38ea39f042c378c234b573ceead4c5194020d949c4Brian Paul#include "state.h" 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "texstate.h" 405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h" 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "varray.h" 4223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell#include "math/m_translate.h" 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 45485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell 46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 47fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 48fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 50fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 51cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 532edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 2 || size > 4) { 5408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" ); 55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 56afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 572edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 5808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(stride)" ); 59afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 60afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 615e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen fprintf(stderr, "glVertexPointer( sz %d type %s stride %d )\n", size, 6408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_lookup_enum_by_nr( type ), 65afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride); 66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 672edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* always need to check that <type> is legal */ 682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Vertex.StrideB = size * sizeof(GLshort); 71afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Vertex.StrideB = size * sizeof(GLint); 74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Vertex.StrideB = size * sizeof(GLfloat); 77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 78afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 792edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Vertex.StrideB = size * sizeof(GLdouble); 80afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 81afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 8208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexPointer(type)" ); 83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 852edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 862edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 872edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Vertex.StrideB = stride; 882edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Vertex.Size = size; 90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Vertex.Type = type; 91afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Vertex.Stride = stride; 92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Vertex.Ptr = (void *) ptr; 93a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 94cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_VERTEX; 9523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 9623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.VertexPointer) 9723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.VertexPointer( ctx, size, type, stride, ptr ); 98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 103fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 104fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr ) 105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 106fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 107cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1085e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1092edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 11008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" ); 111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 1155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen fprintf(stderr, "glNormalPointer( type %s stride %d )\n", 11608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_lookup_enum_by_nr( type ), 117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride); 118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1192edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_BYTE: 1212edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Normal.StrideB = 3 * sizeof(GLbyte); 122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 1242edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Normal.StrideB = 3 * sizeof(GLshort); 125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 1272edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Normal.StrideB = 3 * sizeof(GLint); 128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 1302edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Normal.StrideB = 3 * sizeof(GLfloat); 131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 1332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Normal.StrideB = 3 * sizeof(GLdouble); 134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 13608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glNormalPointer(type)" ); 137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1392edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 1402edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Normal.StrideB = stride; 1412edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 142bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul ctx->Array.Normal.Size = 3; 143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Normal.Type = type; 144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Normal.Stride = stride; 145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Normal.Ptr = (void *) ptr; 146a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 147ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_NORMAL; 14823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 14923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.NormalPointer) 15023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.NormalPointer( ctx, type, stride, ptr ); 151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 155fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 156fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) 157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 158fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 159cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 160fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 1612edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 3 || size > 4) { 16208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(size)" ); 163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (stride<0) { 16608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(stride)" ); 167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 1715e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen fprintf(stderr, "glColorPointer( sz %d type %s stride %d )\n", size, 17208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_lookup_enum_by_nr( type ), 173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride); 174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1752edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_BYTE: 1772edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLbyte); 178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_BYTE: 1802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLubyte); 181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 1832edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLshort); 184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_SHORT: 1862edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLushort); 187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 1892edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLint); 190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_INT: 1922edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLuint); 193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 1952edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLfloat); 196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 1982edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = size * sizeof(GLdouble); 199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 20108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glColorPointer(type)" ); 202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 2042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 2052edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 2062edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Color.StrideB = stride; 2072edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Color.Size = size; 209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Color.Type = type; 210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Color.Stride = stride; 211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Color.Ptr = (void *) ptr; 212a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 213ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_COLOR0; 21423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 21523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.ColorPointer) 21623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.ColorPointer( ctx, size, type, stride, ptr ); 217afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 221fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 222fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell_mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr) 223fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{ 224fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GET_CURRENT_CONTEXT(ctx); 225cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 2265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 2272edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 22808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glFogCoordPointer(stride)" ); 229fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 230fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 231fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 2322edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 233fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_FLOAT: 234fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.FogCoord.StrideB = sizeof(GLfloat); 235fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 236fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_DOUBLE: 237fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.FogCoord.StrideB = sizeof(GLdouble); 238fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 239fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell default: 24008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glFogCoordPointer(type)" ); 241fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 242fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 2432edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 2442edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 2452edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.FogCoord.StrideB = stride; 2462edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 247bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul ctx->Array.FogCoord.Size = 1; 248fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.FogCoord.Type = type; 249fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.FogCoord.Stride = stride; 250fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.FogCoord.Ptr = (void *) ptr; 251a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 252ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_FOGCOORD; 25323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 25423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.FogCoordPointer) 25523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.FogCoordPointer( ctx, type, stride, ptr ); 256fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell} 257fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 258fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 259fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwellvoid 260fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr) 261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 262fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 263cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 2645e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 2652edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 26608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" ); 267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 2702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_BYTE: 272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.StrideB = sizeof(GLubyte); 273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.StrideB = sizeof(GLshort); 276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.StrideB = sizeof(GLint); 279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.StrideB = sizeof(GLfloat); 282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.StrideB = sizeof(GLdouble); 285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 28708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glIndexPointer(type)" ); 288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 2902edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 2912edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 2922edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.Index.StrideB = stride; 2932edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 294bd1a9dacf6a45e6aa6954eeb490d55ebcc80ace8Brian Paul ctx->Array.Index.Size = 1; 295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.Type = type; 296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.Stride = stride; 297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.Index.Ptr = (void *) ptr; 298a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 299ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_INDEX; 30023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 30123caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.IndexPointer) 30223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.IndexPointer( ctx, type, stride, ptr ); 303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 306fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwellvoid 3075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen_mesa_SecondaryColorPointerEXT(GLint size, GLenum type, 308fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GLsizei stride, const GLvoid *ptr) 309fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{ 310fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GET_CURRENT_CONTEXT(ctx); 311cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 312fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 313fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell if (size != 3 && size != 4) { 3142edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(size)" ); 315fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 316fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 3172edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 3182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(stride)" ); 319fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 320fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 321fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 322fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 3232edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul fprintf(stderr, 3242edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul "glSecondaryColorPointer( sz %d type %s stride %d )\n", size, 32508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_lookup_enum_by_nr( type ), 326fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell stride); 327fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 3282edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 329fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_BYTE: 3302edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLbyte); 331fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 332fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_BYTE: 3332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLubyte); 334fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 335fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_SHORT: 3362edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLshort); 337fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 338fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_SHORT: 3392edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLushort); 340fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 341fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_INT: 3422edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLint); 343fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 344fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_INT: 3452edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLuint); 346fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 347fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_FLOAT: 3482edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLfloat); 349fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 350fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_DOUBLE: 3512edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = size * sizeof(GLdouble); 352fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 353fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell default: 35408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glSecondaryColorPointer(type)" ); 355fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 356fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 3572edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 3582edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 3592edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.SecondaryColor.StrideB = stride; 3602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 361fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.SecondaryColor.Size = 3; /* hardwire */ 362fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.SecondaryColor.Type = type; 363fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.SecondaryColor.Stride = stride; 364fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell ctx->Array.SecondaryColor.Ptr = (void *) ptr; 365a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 366ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_COLOR1; 36723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 36823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.SecondaryColorPointer) 36923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.SecondaryColorPointer( ctx, size, type, stride, ptr ); 370fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell} 371fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 372fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 374fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 3752edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, 3762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul const GLvoid *ptr) 377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 378fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 379cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell GLuint texUnit = ctx->Array.ActiveTexture; 380cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3822edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 1 || size > 4) { 38308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(size)" ); 384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 3862edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 38708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(stride)" ); 388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 3925e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen fprintf(stderr, "glTexCoordPointer( unit %u sz %d type %s stride %d )\n", 393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg texUnit, 3945e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen size, 39508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_lookup_enum_by_nr( type ), 396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride); 397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3982edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* always need to check that <type> is legal */ 3992edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 4012edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLshort); 402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 4042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLint); 405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 4072edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLfloat); 408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 4102edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.TexCoord[texUnit].StrideB = size * sizeof(GLdouble); 411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 41308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glTexCoordPointer(type)" ); 414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 4162edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4172edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 4182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.TexCoord[texUnit].StrideB = stride; 4192edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.TexCoord[texUnit].Size = size; 421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.TexCoord[texUnit].Type = type; 422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.TexCoord[texUnit].Stride = stride; 423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.TexCoord[texUnit].Ptr = (void *) ptr; 424a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 425ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_TEXCOORD(texUnit); 42623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 42723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.TexCoordPointer) 42823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.TexCoordPointer( ctx, size, type, stride, ptr ); 429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 432fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 4332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr) 434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 435fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg const GLboolean *ptr = (GLboolean *)vptr; 437cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (stride<0) { 44008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" ); 441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.EdgeFlag.Stride = stride; 444afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.EdgeFlag.StrideB = stride ? stride : sizeof(GLboolean); 445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctx->Array.EdgeFlag.Ptr = (GLboolean *) ptr; 446a96308c37db0bc0086a017d318bc3504aa5f0b1aKeith Whitwell ctx->NewState |= _NEW_ARRAY; 447ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_EDGEFLAG; 44823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 44923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.EdgeFlagPointer) 45023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.EdgeFlagPointer( ctx, stride, ptr ); 451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 4542edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paulvoid _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type, 4552edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul GLsizei stride, const GLvoid *pointer) 4562edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul{ 4572edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul GET_CURRENT_CONTEXT(ctx); 4582edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 4592edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (index >= VP_NUM_PROG_REGS) { 4612edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(index)"); 4622edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 4632edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 4642edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4652edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 1 || size > 4) { 4662edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size)"); 4672edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 4682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 4692edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 4712edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(stride)"); 4722edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 4732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 4742edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4752edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (type == GL_UNSIGNED_BYTE && size != 4) { 4762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size!=4)"); 4772edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 4782edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 4792edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* check for valid 'type' and compute StrideB right away */ 4812edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 4822edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_UNSIGNED_BYTE: 483ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLubyte); 4842edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 4852edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_SHORT: 486ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLshort); 4872edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 4882edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_FLOAT: 489ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLfloat); 4902edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 4912edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_DOUBLE: 492ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.VertexAttrib[index].StrideB = size * sizeof(GLdouble); 4932edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 4942edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul default: 4952edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerNV(type)" ); 4962edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 4972edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 4982edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 4992edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride) 5002edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.VertexAttrib[index].StrideB = stride; 501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 5022edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.VertexAttrib[index].Stride = stride; 5032edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.VertexAttrib[index].Size = size; 5042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Array.VertexAttrib[index].Type = type; 5052edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5062edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* XXX need new flags here??? */ 5072edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->NewState |= _NEW_ARRAY; 508ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul /* XXX probably need new flags!!!! */ 509ebe4e3237c65d85bd25e66c2cf7125c2cf536a1dBrian Paul ctx->Array.NewState |= _NEW_ARRAY_VERT_ATTRIB0; 5102edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5112edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* XXX 5122edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (ctx->Driver.VertexAttribdPointer) 5132edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr ); 5142edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul */ 5152edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul} 516afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 5171f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5181f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid 5191f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride, 5201f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul GLsizei count, const GLvoid *ptr) 5211f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 5221f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 5231f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_VertexPointer(size, type, stride, ptr); 5241f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 5251f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5261f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5271f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid 5281f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, 5291f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 5301f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 5311f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 5321f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_NormalPointer(type, stride, ptr); 5331f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 5341f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5351f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5361f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid 5371f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, 5381f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 5391f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 5401f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 5411f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_ColorPointer(size, type, stride, ptr); 5421f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 5431f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5441f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5451f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid 5461f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, 5471f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 5481f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 5491f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 5501f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_IndexPointer(type, stride, ptr); 5511f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 5521f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5531f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5541f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid 5551f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, 5561f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul GLsizei count, const GLvoid *ptr) 5571f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 5581f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 5591f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_TexCoordPointer(size, type, stride, ptr); 5601f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 5611f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5621f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5631f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paulvoid 5641f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr) 5651f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 5661f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 5671f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_EdgeFlagPointer(stride, ptr); 5681f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 5691f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5701f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5711f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 5721f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 573fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paulvoid 574fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer) 575afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 576fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 577afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean tflag, cflag, nflag; /* enable/disable flags */ 578afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint tcomps, ccomps, vcomps; /* components per texcoord, color, vertex */ 579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 580f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell GLenum ctype = 0; /* color type */ 581f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell GLint coffset = 0, noffset = 0, voffset;/* color, normal, vertex offsets */ 582afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint defstride; /* default stride */ 583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint c, f; 584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint coordUnitSave; 5855e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 586cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 587cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 588afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg f = sizeof(GLfloat); 589afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg c = f * ((4*sizeof(GLubyte) + (f-1)) / f); 590afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 591afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (stride<0) { 59208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glInterleavedArrays(stride)" ); 593afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 594afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 595afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 596afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (format) { 597afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_V2F: 598afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_FALSE; 599afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 2; 600afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 0; 601afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 2*f; 602afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 603afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_V3F: 604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_FALSE; 605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 3; 606afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 0; 607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 3*f; 608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4UB_V2F: 610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 611afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 2; 612afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 613afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 614afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c; 615afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c + 2*f; 616afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 617afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4UB_V3F: 618afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 619afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 3; 620afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 621afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c; 623afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c + 3*f; 624afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C3F_V3F: 626afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 627afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 3; vcomps = 3; 628afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 629afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 630afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 3*f; 631afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 6*f; 632afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_N3F_V3F: 634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_TRUE; 635afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 3; 636afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 0; 637afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 3*f; 638afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 6*f; 639afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 640afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4F_N3F_V3F: 641afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_TRUE; 642afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 3; 643afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 644afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 4*f; 646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 7*f; 647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 10*f; 648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 649afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_V3F: 650afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_FALSE; 651afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 0; vcomps = 3; 652afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 2*f; 653afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 5*f; 654afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 655afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T4F_V4F: 656afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_FALSE; 657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 4; ccomps = 0; vcomps = 4; 658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 4*f; 659afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 660afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 661afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C4UB_V3F: 662afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_FALSE; 663afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 4; vcomps = 3; 664afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 665afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 666afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c+2*f; 667afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c+5*f; 668afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C3F_V3F: 670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_FALSE; 671afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 3; vcomps = 3; 672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 5*f; 675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 676afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 677afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_N3F_V3F: 678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_TRUE; 679afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 0; vcomps = 3; 680afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 2*f; 681afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 5*f; 682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 684afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C4F_N3F_V3F: 685afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_TRUE; 686afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 4; vcomps = 3; 687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 688afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 689afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 6*f; 690afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 9*f; 691afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 12*f; 692afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 693afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T4F_C4F_N3F_V4F: 694afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_TRUE; 695afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 4; ccomps = 4; vcomps = 4; 696afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 697afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 4*f; 698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 8*f; 699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 11*f; 700afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 15*f; 701afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 702afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 70308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glInterleavedArrays(format)" ); 704afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 705afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 706afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 707afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (stride==0) { 708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride = defstride; 709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 710afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 711fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_EDGE_FLAG_ARRAY ); 712fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_INDEX_ARRAY ); 713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Texcoords */ 71545224face0d942094cc4426d2c84d441661a4c62Brian Paul coordUnitSave = ctx->Array.ActiveTexture; 716afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (tflag) { 717afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint i; 718afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint factor = ctx->Array.TexCoordInterleaveFactor; 719afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i = 0; i < factor; i++) { 720fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) ); 721fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_TEXTURE_COORD_ARRAY ); 722cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_TexCoordPointer( tcomps, GL_FLOAT, stride, 723cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell (GLubyte *) pointer + i * coffset ); 724afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 725b51b0a847d7e7daaea69f77ab569086ef81c24a2Brian Paul for (i = factor; i < (GLint) ctx->Const.MaxTextureUnits; i++) { 726fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) ); 727fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY ); 728afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 729afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 730afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 731afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint i; 732b51b0a847d7e7daaea69f77ab569086ef81c24a2Brian Paul for (i = 0; i < (GLint) ctx->Const.MaxTextureUnits; i++) { 733fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) ); 734fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY ); 735afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 736afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Restore texture coordinate unit index */ 738fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + coordUnitSave) ); 739afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 740afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Color */ 742afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (cflag) { 743fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_COLOR_ARRAY ); 744cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_ColorPointer( ccomps, ctype, stride, 745cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell (GLubyte*) pointer + coffset ); 746afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 747afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 748fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_COLOR_ARRAY ); 749afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 750afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 752afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Normals */ 753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (nflag) { 754fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_NORMAL_ARRAY ); 755cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_NormalPointer( GL_FLOAT, stride, 756cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell (GLubyte*) pointer + noffset ); 757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 759fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_NORMAL_ARRAY ); 760afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 761afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 762fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_VERTEX_ARRAY ); 763cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_VertexPointer( vcomps, GL_FLOAT, stride, 764cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell (GLubyte *) pointer + voffset ); 765afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 766afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 767afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 768afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 769ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwellvoid 770ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_LockArraysEXT(GLint first, GLsizei count) 771ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{ 772ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell GET_CURRENT_CONTEXT(ctx); 773cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 774ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 775ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (MESA_VERBOSE & VERBOSE_API) 776ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell fprintf(stderr, "glLockArrays %d %d\n", first, count); 777ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 778b51b0a847d7e7daaea69f77ab569086ef81c24a2Brian Paul if (first == 0 && count > 0 && 779b51b0a847d7e7daaea69f77ab569086ef81c24a2Brian Paul count <= (GLint) ctx->Const.MaxArrayLockSize) { 780ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockFirst = first; 781ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockCount = count; 78222144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes } 783ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell else { 784ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockFirst = 0; 785ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockCount = 0; 786ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell } 787ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 788ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->NewState |= _NEW_ARRAY; 789cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_ALL; 790ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 791ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (ctx->Driver.LockArraysEXT) 792ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Driver.LockArraysEXT( ctx, first, count ); 793ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell} 794ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 795ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 796ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwellvoid 797ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_UnlockArraysEXT( void ) 798ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{ 799ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell GET_CURRENT_CONTEXT(ctx); 800cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 801ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 802ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (MESA_VERBOSE & VERBOSE_API) 803ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell fprintf(stderr, "glUnlockArrays\n"); 804ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 805ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockFirst = 0; 806ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockCount = 0; 807ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->NewState |= _NEW_ARRAY; 808cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_ALL; 809ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 810ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (ctx->Driver.UnlockArraysEXT) 811ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Driver.UnlockArraysEXT( ctx ); 812ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell} 813