varray.c revision 54a5ffbfa1f935c46642a9835f08983cc1fdfeed
1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 339d7524f7b176d4375e230ac60963d197be539f2Brian Paul * Version: 7.6 45e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 537c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 639d7524f7b176d4375e230ac60963d197be539f2Brian Paul * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 75e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"), 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions: 145e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software. 175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 27fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h" 28148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#include "imports.h" 2926895aa797060a38b42dfad21301f4b34b7de0d2Brian Paul#include "bufferobj.h" 30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "context.h" 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enable.h" 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enums.h" 335e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h" 34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "varray.h" 35ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick#include "arrayobj.h" 36c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brian#include "glapi/dispatch.h" 37485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell 38c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 39c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul/** 4054a5ffbfa1f935c46642a9835f08983cc1fdfeedBrian Paul * Set the fields of a vertex array. 41f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * 42f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param array the array to update 43f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param dirtyBit which bit to set in ctx->Array.NewState for this array 44f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param elementSize size of each array element, in bytes 45f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param size components per element (1, 2, 3 or 4) 46f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param type datatype of each component (GL_FLOAT, GL_INT, etc) 4754a5ffbfa1f935c46642a9835f08983cc1fdfeedBrian Paul * \param format either GL_RGBA or GL_BGRA 48f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param stride stride between elements, in elements 49f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param normalized are integer types converted to floats in [-1, 1]? 50f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param ptr the address (or offset inside VBO) of the array data 51c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul */ 52c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paulstatic void 53c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paulupdate_array(GLcontext *ctx, struct gl_client_array *array, 54f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul GLbitfield dirtyBit, GLsizei elementSize, 5576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLint size, GLenum type, GLenum format, 56c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei stride, GLboolean normalized, const GLvoid *ptr) 57c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul{ 5876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul ASSERT(format == GL_RGBA || format == GL_BGRA); 59c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Size = size; 60c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Type = type; 6176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul array->Format = format; 62c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Stride = stride; 63c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->StrideB = stride ? stride : elementSize; 64c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Normalized = normalized; 65c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Ptr = (const GLubyte *) ptr; 660077c879b57f663c038becdde37b2f6671f59150Brian Paul array->_ElementSize = elementSize; 670077c879b57f663c038becdde37b2f6671f59150Brian Paul 6837c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul _mesa_reference_buffer_object(ctx, &array->BufferObj, 6937c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul ctx->Array.ArrayBufferObj); 7037c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul 71c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul ctx->NewState |= _NEW_ARRAY; 72f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul ctx->Array.NewState |= dirtyBit; 73c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul} 74c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 75c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 76c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 77fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) 78afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 79c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 80fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 81cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 825e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 832edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 2 || size > 4) { 8408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" ); 85afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 86afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 872edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 8808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(stride)" ); 89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 915e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 934753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glVertexPointer( sz %d type %s stride %d )\n", size, 944753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_lookup_enum_by_nr( type ), stride); 95afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 962edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* always need to check that <type> is legal */ 972edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 99c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 102c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 105c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 108c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 110394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 111394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 112394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = size * sizeof(GLfixed); 113394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 114394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 115d17485fef9b084a6812c626d9734816429f29199Brian Paul#if FEATURE_vertex_array_byte 116d17485fef9b084a6812c626d9734816429f29199Brian Paul case GL_BYTE: 117d17485fef9b084a6812c626d9734816429f29199Brian Paul elementSize = size * sizeof(GLbyte); 118d17485fef9b084a6812c626d9734816429f29199Brian Paul break; 119d17485fef9b084a6812c626d9734816429f29199Brian Paul#endif 120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 12108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexPointer(type)" ); 122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1242edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 125ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->Vertex, _NEW_ARRAY_VERTEX, 12676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, size, type, GL_RGBA, stride, GL_FALSE, ptr); 12723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 12823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.VertexPointer) 12923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.VertexPointer( ctx, size, type, stride, ptr ); 130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 133c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 134fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr ) 135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 136c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 137fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 138cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1395e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1402edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 14108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" ); 142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 1464753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glNormalPointer( type %s stride %d )\n", 1474753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_lookup_enum_by_nr( type ), stride); 148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1492edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_BYTE: 151c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLbyte); 152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 154c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLshort); 155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 157c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLint); 158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 160c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLfloat); 161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 163c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLdouble); 164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 165394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 166394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 167394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = 3 * sizeof(GLfixed); 168394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 169394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 17108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glNormalPointer(type)" ); 172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1742edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 175ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->Normal, _NEW_ARRAY_NORMAL, 17676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, 3, type, GL_RGBA, stride, GL_TRUE, ptr); 17723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 17823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.NormalPointer) 17923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.NormalPointer( ctx, type, stride, ptr ); 180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 183c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 184fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) 185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 186c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 18776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLenum format; 188fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 189cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 190fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 1912edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 3 || size > 4) { 19276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 19376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(size)"); 19476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 19576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 197c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul if (stride < 0) { 19808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(stride)" ); 199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 2034753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glColorPointer( sz %d type %s stride %d )\n", size, 2044753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_lookup_enum_by_nr( type ), stride); 205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 20676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (size == GL_BGRA) { 20776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (type != GL_UNSIGNED_BYTE) { 20876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(GL_BGRA/GLubyte)"); 20976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 21076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 21176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_BGRA; 21276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul size = 4; 21376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 21476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul else { 21576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_RGBA; 21676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 21776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul 2182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_BYTE: 220c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLbyte); 221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_BYTE: 223c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 226c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_SHORT: 229c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLushort); 230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 232c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_INT: 235c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLuint); 236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 238c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 241c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 243394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 244394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 245394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = size * sizeof(GLfixed); 246394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 247394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 24908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glColorPointer(type)" ); 250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 2522edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 253ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->Color, _NEW_ARRAY_COLOR0, 25476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, size, type, format, stride, GL_TRUE, ptr); 25523caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 25623caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.ColorPointer) 25723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.ColorPointer( ctx, size, type, stride, ptr ); 258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 261c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 262fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell_mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr) 263fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{ 264c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLint elementSize; 265fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GET_CURRENT_CONTEXT(ctx); 266cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 2675e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 2682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 26908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glFogCoordPointer(stride)" ); 270fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 271fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 272fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 2732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 274fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_FLOAT: 275c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLfloat); 276fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 277fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_DOUBLE: 278c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLdouble); 279fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 280fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell default: 28108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glFogCoordPointer(type)" ); 282fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 283fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 2842edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 285ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->FogCoord, _NEW_ARRAY_FOGCOORD, 28676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, 1, type, GL_RGBA, stride, GL_FALSE, ptr); 28723caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 28823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.FogCoordPointer) 28923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.FogCoordPointer( ctx, type, stride, ptr ); 290fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell} 291fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 292fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 293c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 294fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr) 295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 296c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 297fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 298cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 2995e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3002edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 30108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" ); 302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3052edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_BYTE: 307c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLubyte); 308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 310c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLshort); 311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 313c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLint); 314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 316c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLfloat); 317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 319c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLdouble); 320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 32208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glIndexPointer(type)" ); 323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 3252edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 326ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->Index, _NEW_ARRAY_INDEX, 32776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, 1, type, GL_RGBA, stride, GL_FALSE, ptr); 32823caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 32923caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.IndexPointer) 33023caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.IndexPointer( ctx, type, stride, ptr ); 331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 334c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 3355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen_mesa_SecondaryColorPointerEXT(GLint size, GLenum type, 336fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GLsizei stride, const GLvoid *ptr) 337fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{ 338c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 33976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLenum format; 340fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GET_CURRENT_CONTEXT(ctx); 341cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 342fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 343fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell if (size != 3 && size != 4) { 34476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 34576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(size)"); 34676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 34776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 348fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 3492edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 3502edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(stride)" ); 351fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 352fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 353fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 354fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 3554753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glSecondaryColorPointer( sz %d type %s stride %d )\n", 356d09a1d8b29ae5841ae39b5c24c3f4693dd750559Brian Paul size, _mesa_lookup_enum_by_nr( type ), stride); 357fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 35876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (size == GL_BGRA) { 35976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (type != GL_UNSIGNED_BYTE) { 36076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(GL_BGRA/GLubyte)"); 36176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 36276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 36376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_BGRA; 36476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul size = 4; 36576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 36676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul else { 36776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_RGBA; 36876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 36976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul 3702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 371fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_BYTE: 372c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLbyte); 373fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 374fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_BYTE: 375c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 376fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 377fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_SHORT: 378c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 379fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 380fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_SHORT: 381c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLushort); 382fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 383fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_INT: 384c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 385fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 386fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_INT: 387c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLuint); 388fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 389fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_FLOAT: 390c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 391fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 392fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_DOUBLE: 393c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 394fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 395fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell default: 39608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glSecondaryColorPointer(type)" ); 397fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 398fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 3992edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 400ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->SecondaryColor, _NEW_ARRAY_COLOR1, 40176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, size, type, format, stride, GL_TRUE, ptr); 40223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 40323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.SecondaryColorPointer) 40423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.SecondaryColorPointer( ctx, size, type, stride, ptr ); 405fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell} 406fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 407fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 408c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 4092edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, 4102edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul const GLvoid *ptr) 411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 412c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLint elementSize; 413fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 414c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul const GLuint unit = ctx->Array.ActiveTexture; 415cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 4172edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 1 || size > 4) { 41808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(size)" ); 419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 4212edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 42208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(stride)" ); 423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 4274753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glTexCoordPointer(unit %u sz %d type %s stride %d)\n", 428c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul unit, size, _mesa_lookup_enum_by_nr( type ), stride); 429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 4302edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* always need to check that <type> is legal */ 4312edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 432afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 433c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 436c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 439c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 442c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 444394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 445394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 446394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = size * sizeof(GLfixed); 447394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 448394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 449d17485fef9b084a6812c626d9734816429f29199Brian Paul#if FEATURE_vertex_array_byte 450d17485fef9b084a6812c626d9734816429f29199Brian Paul case GL_BYTE: 451d17485fef9b084a6812c626d9734816429f29199Brian Paul elementSize = size * sizeof(GLbyte); 452d17485fef9b084a6812c626d9734816429f29199Brian Paul break; 453d17485fef9b084a6812c626d9734816429f29199Brian Paul#endif 454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 45508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glTexCoordPointer(type)" ); 456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 4582edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 459f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul update_array(ctx, &ctx->Array.ArrayObj->TexCoord[unit], 460f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul _NEW_ARRAY_TEXCOORD(unit), 46176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, size, type, GL_RGBA, stride, GL_FALSE, ptr); 46223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 46323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.TexCoordPointer) 46423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.TexCoordPointer( ctx, size, type, stride, ptr ); 465afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 468c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 469c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr) 470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 471fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 472cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 474c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul if (stride < 0) { 47508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" ); 476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 478c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 479ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick update_array(ctx, &ctx->Array.ArrayObj->EdgeFlag, _NEW_ARRAY_EDGEFLAG, 48076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul sizeof(GLboolean), 1, GL_UNSIGNED_BYTE, GL_RGBA, 48176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul stride, GL_FALSE, ptr); 48223caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell 48323caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell if (ctx->Driver.EdgeFlagPointer) 48423caf20169ac38436ee9c13914f1d6aa7cf6bb5eKeith Whitwell ctx->Driver.EdgeFlagPointer( ctx, stride, ptr ); 485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 4881cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paulvoid GLAPIENTRY 4891cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul_mesa_PointSizePointer(GLenum type, GLsizei stride, const GLvoid *ptr) 4901cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul{ 4911cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul GLsizei elementSize; 4921cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul GET_CURRENT_CONTEXT(ctx); 4931cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 4941cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 4951cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul if (stride < 0) { 4961cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glPointSizePointer(stride)" ); 4971cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul return; 4981cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul } 4991cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5001cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul switch (type) { 5011cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul case GL_FLOAT: 5021cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul elementSize = sizeof(GLfloat); 5031cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul break; 5041cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#if FEATURE_fixedpt 5051cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul case GL_FIXED: 5061cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul elementSize = sizeof(GLfixed); 5071cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul break; 5081cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#endif 5091cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul default: 5101cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glPointSizePointer(type)" ); 5111cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul return; 5121cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul } 5131cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5141cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul update_array(ctx, &ctx->Array.ArrayObj->PointSize, _NEW_ARRAY_POINT_SIZE, 51576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, 1, type, GL_RGBA, stride, GL_FALSE, ptr); 5161cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul} 5171cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5181cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 519148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#if FEATURE_NV_vertex_program 520a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul/** 521a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Set a vertex attribute array. 522a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Note that these arrays DO alias the conventional GL vertex arrays 523a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * (position, normal, color, fog, texcoord, etc). 524a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * The generic attribute slots at #16 and above are not touched. 525a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul */ 526c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 52792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul_mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type, 52892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GLsizei stride, const GLvoid *ptr) 5292edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul{ 53029fbf72dbf158d766d3cac3b2db16d9fcbef0d0bMarkus Amsler GLboolean normalized = GL_FALSE; 531c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 5322edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul GET_CURRENT_CONTEXT(ctx); 5332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 5342edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 535bb38cadb1c5f2dc13096a091bdaf61dc3e3cfa4dMichal Krol if (index >= MAX_VERTEX_PROGRAM_ATTRIBS) { 5362edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(index)"); 5372edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5382edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5392edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5402edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 1 || size > 4) { 5412edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size)"); 5422edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5432edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5442edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5452edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 5462edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(stride)"); 5472edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5482edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5492edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5502edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (type == GL_UNSIGNED_BYTE && size != 4) { 5512edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size!=4)"); 5522edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5532edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5542edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5552edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* check for valid 'type' and compute StrideB right away */ 5562edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 5572edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_UNSIGNED_BYTE: 55829fbf72dbf158d766d3cac3b2db16d9fcbef0d0bMarkus Amsler normalized = GL_TRUE; 559c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 5602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 5612edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_SHORT: 562c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 5632edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 5642edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_FLOAT: 565c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 5662edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 5672edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_DOUBLE: 568c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 5692edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 5702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul default: 5712edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerNV(type)" ); 5722edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5742edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 575f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], 576f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul _NEW_ARRAY_ATTRIB(index), 57776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, size, type, GL_RGBA, stride, normalized, ptr); 5782edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 579b7752724d930aa8b93617829d814b20509f85069Brian Paul if (ctx->Driver.VertexAttribPointer) 5802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr ); 5812edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul} 582148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#endif 583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 5841f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 585148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#if FEATURE_ARB_vertex_program 586a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul/** 587a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Set a generic vertex attribute array. 588a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Note that these arrays DO NOT alias the conventional GL vertex arrays 589a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * (position, normal, color, fog, texcoord, etc). 590a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul */ 591c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 59292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul_mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type, 59392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GLboolean normalized, 59492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GLsizei stride, const GLvoid *ptr) 59592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul{ 596c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 59776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLenum format; 59892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GET_CURRENT_CONTEXT(ctx); 59992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 60092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 60105051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul if (index >= ctx->Const.VertexProgram.MaxAttribs) { 60292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(index)"); 60392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul return; 60492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 60592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 60692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul if (size < 1 || size > 4) { 60776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 60876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(size)"); 60976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 61076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 61192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 61292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 61392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul if (stride < 0) { 61492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(stride)"); 61592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul return; 61692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 61792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 61876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (size == GL_BGRA) { 61976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (type != GL_UNSIGNED_BYTE) { 62076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, 62176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul "glVertexAttribPointerARB(GL_BGRA/type)"); 62276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 62376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 62476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_BGRA; 62576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul size = 4; 62676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul normalized = GL_TRUE; 62776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 62876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul else { 62976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_RGBA; 63076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 63176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul 63292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul /* check for valid 'type' and compute StrideB right away */ 633196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul /* NOTE: more types are supported here than in the NV extension */ 63492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul switch (type) { 635196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_BYTE: 636c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLbyte); 637196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 63892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_UNSIGNED_BYTE: 639c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 64092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 64192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_SHORT: 642c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 64392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 644196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_UNSIGNED_SHORT: 645c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLushort); 646196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 647196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_INT: 648c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 649196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 650196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_UNSIGNED_INT: 651c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLuint); 652196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 65392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_FLOAT: 654c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 65592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 65692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_DOUBLE: 657c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 65892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 65948cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul#if FEATURE_fixedpt 66048cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul case GL_FIXED: 66148cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul elementSize = size * sizeof(GLfixed); 66248cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul break; 66348cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul#endif 66492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul default: 66592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerARB(type)" ); 66692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul return; 66792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 66892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 669f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], 670f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul _NEW_ARRAY_ATTRIB(index), 67176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul elementSize, size, type, GL_RGBA, stride, normalized, ptr); 67292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 67392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul if (ctx->Driver.VertexAttribPointer) 674f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul ctx->Driver.VertexAttribPointer(ctx, index, size, type, stride, ptr); 67592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul} 676148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#endif 67792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 67892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 679c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 6801f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride, 6811f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul GLsizei count, const GLvoid *ptr) 6821f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 6831f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 6841f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_VertexPointer(size, type, stride, ptr); 6851f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 6861f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 6871f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 688c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 6891f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, 6901f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 6911f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 6921f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 6931f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_NormalPointer(type, stride, ptr); 6941f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 6951f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 6961f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 697c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 6981f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, 6991f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 7001f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 7011f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 7021f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_ColorPointer(size, type, stride, ptr); 7031f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 7041f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 7051f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 706c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 7071f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, 7081f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 7091f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 7101f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 7111f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_IndexPointer(type, stride, ptr); 7121f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 7131f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 7141f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 715c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 7161f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, 7171f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul GLsizei count, const GLvoid *ptr) 7181f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 7191f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 7201f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_TexCoordPointer(size, type, stride, ptr); 7211f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 7221f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 7231f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 724c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 7251f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr) 7261f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 7271f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 7281f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_EdgeFlagPointer(stride, ptr); 7291f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 7301f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 7311f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 732c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 733fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer) 734afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 735fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 736afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean tflag, cflag, nflag; /* enable/disable flags */ 737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint tcomps, ccomps, vcomps; /* components per texcoord, color, vertex */ 738f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell GLenum ctype = 0; /* color type */ 739f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell GLint coffset = 0, noffset = 0, voffset;/* color, normal, vertex offsets */ 7404a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul const GLint toffset = 0; /* always zero */ 741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint defstride; /* default stride */ 742afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint c, f; 7435e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 744cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 745cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 746afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg f = sizeof(GLfloat); 747c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul c = f * ((4 * sizeof(GLubyte) + (f - 1)) / f); 748afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 749c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul if (stride < 0) { 75008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glInterleavedArrays(stride)" ); 751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 752afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 754afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (format) { 755afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_V2F: 756afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_FALSE; 757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 2; 758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 0; 759afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 2*f; 760afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 761afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_V3F: 762afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_FALSE; 763afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 3; 764afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 0; 765afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 3*f; 766afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 767afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4UB_V2F: 768afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 769afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 2; 770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 771afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 772afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c; 773afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c + 2*f; 774afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 775afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4UB_V3F: 776afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 777afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 3; 778afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 779afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 780afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c; 781afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c + 3*f; 782afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 783afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C3F_V3F: 784afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 785afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 3; vcomps = 3; 786afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 787afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 788afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 3*f; 789afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 6*f; 790afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 791afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_N3F_V3F: 792afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_TRUE; 793afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 3; 794afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 0; 795afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 3*f; 796afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 6*f; 797afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 798afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4F_N3F_V3F: 799afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_TRUE; 800afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 3; 801afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 802afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 803afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 4*f; 804afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 7*f; 805afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 10*f; 806afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 807afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_V3F: 808afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_FALSE; 809afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 0; vcomps = 3; 810afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 2*f; 811afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 5*f; 812afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 813afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T4F_V4F: 814afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_FALSE; 815afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 4; ccomps = 0; vcomps = 4; 816afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 4*f; 817afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 818afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 819afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C4UB_V3F: 820afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_FALSE; 821afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 4; vcomps = 3; 822afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 823afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 824afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c+2*f; 825afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c+5*f; 826afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 827afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C3F_V3F: 828afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_FALSE; 829afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 3; vcomps = 3; 830afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 831afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 832afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 5*f; 833afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 834afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 835afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_N3F_V3F: 836afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_TRUE; 837afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 0; vcomps = 3; 838afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 2*f; 839afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 5*f; 840afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 841afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 842afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C4F_N3F_V3F: 843afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_TRUE; 844afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 4; vcomps = 3; 845afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 846afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 847afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 6*f; 848afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 9*f; 849afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 12*f; 850afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 851afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T4F_C4F_N3F_V4F: 852afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_TRUE; 853afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 4; ccomps = 4; vcomps = 4; 854afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 855afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 4*f; 856afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 8*f; 857afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 11*f; 858afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 15*f; 859afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 860afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 86108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glInterleavedArrays(format)" ); 862afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 863afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 864afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 865afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (stride==0) { 866afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride = defstride; 867afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 868afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 869fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_EDGE_FLAG_ARRAY ); 870fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_INDEX_ARRAY ); 871095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul /* XXX also disable secondary color and generic arrays? */ 872afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 873afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Texcoords */ 874afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (tflag) { 8754a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul _mesa_EnableClientState( GL_TEXTURE_COORD_ARRAY ); 8764a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul _mesa_TexCoordPointer( tcomps, GL_FLOAT, stride, 877ab928e57b9637abd253c5114d0c90d7e3cb3f7fdBrian Paul (GLubyte *) pointer + toffset ); 878afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 879afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 880ab928e57b9637abd253c5114d0c90d7e3cb3f7fdBrian Paul _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY ); 881afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 882afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 883afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Color */ 884afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (cflag) { 885fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_COLOR_ARRAY ); 886cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_ColorPointer( ccomps, ctype, stride, 8874a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul (GLubyte *) pointer + coffset ); 888afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 889afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 890fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_COLOR_ARRAY ); 891afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 892afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 893afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 894afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Normals */ 895afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (nflag) { 896fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_NORMAL_ARRAY ); 8974a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul _mesa_NormalPointer( GL_FLOAT, stride, (GLubyte *) pointer + noffset ); 898afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 899afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 900fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_NORMAL_ARRAY ); 901afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 902afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 9034a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul /* Vertices */ 904fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_VERTEX_ARRAY ); 905cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_VertexPointer( vcomps, GL_FLOAT, stride, 906cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell (GLubyte *) pointer + voffset ); 907afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 908afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 909afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 910c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 911ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_LockArraysEXT(GLint first, GLsizei count) 912ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{ 913ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell GET_CURRENT_CONTEXT(ctx); 914cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 915ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 916ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (MESA_VERBOSE & VERBOSE_API) 9174753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glLockArrays %d %d\n", first, count); 918ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 9195857e988be9317810cf713478195b4ed849eea4aEric Anholt if (first < 0) { 9205857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_VALUE, "glLockArraysEXT(first)" ); 9215857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 92222144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes } 9235857e988be9317810cf713478195b4ed849eea4aEric Anholt if (count <= 0) { 9245857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_VALUE, "glLockArraysEXT(count)" ); 9255857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 9265857e988be9317810cf713478195b4ed849eea4aEric Anholt } 9275857e988be9317810cf713478195b4ed849eea4aEric Anholt if (ctx->Array.LockCount != 0) { 9285857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_OPERATION, "glLockArraysEXT(reentry)" ); 9295857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 930ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell } 931ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 9325857e988be9317810cf713478195b4ed849eea4aEric Anholt ctx->Array.LockFirst = first; 9335857e988be9317810cf713478195b4ed849eea4aEric Anholt ctx->Array.LockCount = count; 9345857e988be9317810cf713478195b4ed849eea4aEric Anholt 935ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->NewState |= _NEW_ARRAY; 936cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_ALL; 937ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 938ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (ctx->Driver.LockArraysEXT) 939ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Driver.LockArraysEXT( ctx, first, count ); 940ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell} 941ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 942ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 943c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 944ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_UnlockArraysEXT( void ) 945ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{ 946ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell GET_CURRENT_CONTEXT(ctx); 947cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 948ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 949ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (MESA_VERBOSE & VERBOSE_API) 9504753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glUnlockArrays\n"); 951ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 9525857e988be9317810cf713478195b4ed849eea4aEric Anholt if (ctx->Array.LockCount == 0) { 9535857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_OPERATION, "glUnlockArraysEXT(reexit)" ); 9545857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 9555857e988be9317810cf713478195b4ed849eea4aEric Anholt } 9565857e988be9317810cf713478195b4ed849eea4aEric Anholt 957ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockFirst = 0; 958ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockCount = 0; 959ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->NewState |= _NEW_ARRAY; 960cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_ALL; 961ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 962ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (ctx->Driver.UnlockArraysEXT) 963ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Driver.UnlockArraysEXT( ctx ); 964ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell} 9652525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9662525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9672525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* GL_EXT_multi_draw_arrays */ 9682525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* Somebody forgot to spec the first and count parameters as const! <sigh> */ 969c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 9702525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul_mesa_MultiDrawArraysEXT( GLenum mode, GLint *first, 9712525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GLsizei *count, GLsizei primcount ) 9722525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul{ 9732525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GET_CURRENT_CONTEXT(ctx); 9742525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GLint i; 9752525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9762525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 9772525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9782525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul for (i = 0; i < primcount; i++) { 9792525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul if (count[i] > 0) { 9809bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawArrays(ctx->Exec, (mode, first[i], count[i])); 9812525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul } 9822525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul } 9832525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul} 9842525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9852525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9862525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* GL_EXT_multi_draw_arrays */ 987c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 9882525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul_mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type, 9892525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul const GLvoid **indices, GLsizei primcount ) 9902525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul{ 9912525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GET_CURRENT_CONTEXT(ctx); 9922525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GLint i; 9932525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9942525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 9952525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 9962525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul for (i = 0; i < primcount; i++) { 9972525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul if (count[i] > 0) { 9989bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawElements(ctx->Exec, (mode, count[i], type, indices[i])); 9992525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul } 10002525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul } 10012525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul} 10026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 10036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 10043baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick/* GL_IBM_multimode_draw_arrays */ 1005c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10063baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first, 10073baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick const GLsizei * count, 10083baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLsizei primcount, GLint modestride ) 10093baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick{ 10103baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GET_CURRENT_CONTEXT(ctx); 10113baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLint i; 10123baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 10133baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 10143baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 10153baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick for ( i = 0 ; i < primcount ; i++ ) { 10163baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick if ( count[i] > 0 ) { 101703e29a5f77c13b7b888bd8443cb2752850e47d6aBrian Paul GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride)); 10189bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawArrays(ctx->Exec, ( m, first[i], count[i] )); 10193baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 10203baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 10213baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick} 10223baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 10233baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 10243baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick/* GL_IBM_multimode_draw_arrays */ 1025c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10263baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count, 10273baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLenum type, const GLvoid * const * indices, 10283baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLsizei primcount, GLint modestride ) 10293baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick{ 10303baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GET_CURRENT_CONTEXT(ctx); 10313baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLint i; 10323baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 10333baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 10343baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 1035d2afb39d1997e9f2e3c64fc9fa49393e2839d8a1Brian Paul /* XXX not sure about ARB_vertex_buffer_object handling here */ 1036d2afb39d1997e9f2e3c64fc9fa49393e2839d8a1Brian Paul 10373baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick for ( i = 0 ; i < primcount ; i++ ) { 10383baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick if ( count[i] > 0 ) { 103903e29a5f77c13b7b888bd8443cb2752850e47d6aBrian Paul GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride)); 10409bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawElements(ctx->Exec, ( m, count[i], type, indices[i] )); 10413baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 10423baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 10433baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick} 10443baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 10453baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 1046095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul/** 104739d7524f7b176d4375e230ac60963d197be539f2Brian Paul * Print vertex array's fields. 104839d7524f7b176d4375e230ac60963d197be539f2Brian Paul */ 104939d7524f7b176d4375e230ac60963d197be539f2Brian Paulstatic void 105039d7524f7b176d4375e230ac60963d197be539f2Brian Paulprint_array(const char *name, GLint index, const struct gl_client_array *array) 105139d7524f7b176d4375e230ac60963d197be539f2Brian Paul{ 105239d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (index >= 0) 105339d7524f7b176d4375e230ac60963d197be539f2Brian Paul _mesa_printf(" %s[%d]: ", name, index); 105439d7524f7b176d4375e230ac60963d197be539f2Brian Paul else 105539d7524f7b176d4375e230ac60963d197be539f2Brian Paul _mesa_printf(" %s: ", name); 105639d7524f7b176d4375e230ac60963d197be539f2Brian Paul _mesa_printf("Ptr=%p, Type=0x%x, Size=%d, ElemSize=%u, Stride=%d, Buffer=%u(Size %u), MaxElem=%u\n", 105739d7524f7b176d4375e230ac60963d197be539f2Brian Paul array->Ptr, array->Type, array->Size, 105839d7524f7b176d4375e230ac60963d197be539f2Brian Paul array->_ElementSize, array->StrideB, 105939d7524f7b176d4375e230ac60963d197be539f2Brian Paul array->BufferObj->Name, array->BufferObj->Size, 106039d7524f7b176d4375e230ac60963d197be539f2Brian Paul array->_MaxElement); 106139d7524f7b176d4375e230ac60963d197be539f2Brian Paul} 106239d7524f7b176d4375e230ac60963d197be539f2Brian Paul 106339d7524f7b176d4375e230ac60963d197be539f2Brian Paul 106439d7524f7b176d4375e230ac60963d197be539f2Brian Paul/** 106539d7524f7b176d4375e230ac60963d197be539f2Brian Paul * Print current vertex object/array info. For debug. 106639d7524f7b176d4375e230ac60963d197be539f2Brian Paul */ 106739d7524f7b176d4375e230ac60963d197be539f2Brian Paulvoid 106839d7524f7b176d4375e230ac60963d197be539f2Brian Paul_mesa_print_arrays(GLcontext *ctx) 106939d7524f7b176d4375e230ac60963d197be539f2Brian Paul{ 10706a2211f00077f49af42e6f087e3120abfb1be5aeBrian Paul struct gl_array_object *arrayObj = ctx->Array.ArrayObj; 107139d7524f7b176d4375e230ac60963d197be539f2Brian Paul GLuint i; 107239d7524f7b176d4375e230ac60963d197be539f2Brian Paul 10738fe3134622eed34159ff6f72a33558a659e8d299Brian Paul _mesa_update_array_object_max_element(ctx, arrayObj); 10748fe3134622eed34159ff6f72a33558a659e8d299Brian Paul 107539d7524f7b176d4375e230ac60963d197be539f2Brian Paul _mesa_printf("Array Object %u\n", arrayObj->Name); 107639d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->Vertex.Enabled) 107739d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Vertex", -1, &arrayObj->Vertex); 107839d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->Normal.Enabled) 107939d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Normal", -1, &arrayObj->Normal); 108039d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->Color.Enabled) 108139d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Color", -1, &arrayObj->Color); 108239d7524f7b176d4375e230ac60963d197be539f2Brian Paul for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) 108339d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->TexCoord[i].Enabled) 108439d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("TexCoord", i, &arrayObj->TexCoord[i]); 108539d7524f7b176d4375e230ac60963d197be539f2Brian Paul for (i = 0; i < VERT_ATTRIB_MAX; i++) 108639d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->VertexAttrib[i].Enabled) 108739d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Attrib", i, &arrayObj->VertexAttrib[i]); 108839d7524f7b176d4375e230ac60963d197be539f2Brian Paul _mesa_printf(" _MaxElement = %u\n", arrayObj->_MaxElement); 108939d7524f7b176d4375e230ac60963d197be539f2Brian Paul} 109039d7524f7b176d4375e230ac60963d197be539f2Brian Paul 109139d7524f7b176d4375e230ac60963d197be539f2Brian Paul 109239d7524f7b176d4375e230ac60963d197be539f2Brian Paul/** 1093095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul * Initialize vertex array state for given context. 1094095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul */ 1095c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid 1096095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul_mesa_init_varray(GLcontext *ctx) 10976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{ 1098ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick ctx->Array.DefaultArrayObj = _mesa_new_array_object(ctx, 0); 10991030bf0ded2a88a5e27f7a4d393c11cfde3d3c5aBrian Paul _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, 11001030bf0ded2a88a5e27f7a4d393c11cfde3d3c5aBrian Paul ctx->Array.DefaultArrayObj); 1101095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul ctx->Array.ActiveTexture = 0; /* GL_ARB_multitexture */ 11026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell} 1103