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