varray.c revision d1184d26bb14304a6a61d7729c90a7c7f3627086
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" 3312cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul#include "hash.h" 34d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul#include "macros.h" 355e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h" 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "varray.h" 37ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick#include "arrayobj.h" 382cf44390d1e819f23e1d7ceb3199276c9148c647Chia-I Wu#include "main/dispatch.h" 39485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell 40c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 41c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul/** 4254a5ffbfa1f935c46642a9835f08983cc1fdfeedBrian Paul * Set the fields of a vertex array. 43e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul * Also do an error check for GL_ARB_vertex_array_object: check that 44e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul * all arrays reside in VBOs when using a vertex array object. 45f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * 46f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param array the array to update 47f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param dirtyBit which bit to set in ctx->Array.NewState for this array 48f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param elementSize size of each array element, in bytes 49f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param size components per element (1, 2, 3 or 4) 50f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param type datatype of each component (GL_FLOAT, GL_INT, etc) 5154a5ffbfa1f935c46642a9835f08983cc1fdfeedBrian Paul * \param format either GL_RGBA or GL_BGRA 52f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param stride stride between elements, in elements 53f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param normalized are integer types converted to floats in [-1, 1]? 54d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul * \param integer integer-valued values (will not be normalized to [-1,1]) 55f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul * \param ptr the address (or offset inside VBO) of the array data 56c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul */ 57f549f4c4b6012178df3706b26539ca672399260fBrian Paulstatic void 58f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergupdate_array(struct gl_context *ctx, struct gl_client_array *array, 59f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul GLbitfield dirtyBit, GLsizei elementSize, 6076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLint size, GLenum type, GLenum format, 61d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul GLsizei stride, GLboolean normalized, GLboolean integer, 62d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul const GLvoid *ptr) 63c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul{ 6476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul ASSERT(format == GL_RGBA || format == GL_BGRA); 65e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul 66e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul if (ctx->Array.ArrayObj->VBOonly && 67e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul ctx->Array.ArrayBufferObj->Name == 0) { 68e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul /* GL_ARB_vertex_array_object requires that all arrays reside in VBOs. 69e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul * Generate GL_INVALID_OPERATION if that's not true. 70e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul */ 71e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, 72e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul "glVertex/Normal/EtcPointer(non-VBO array)"); 73f549f4c4b6012178df3706b26539ca672399260fBrian Paul return; 74e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul } 75e2b72495550980198dcc0580af8de1fe9dfd8c67Brian Paul 76c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Size = size; 77c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Type = type; 7876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul array->Format = format; 79c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Stride = stride; 80c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->StrideB = stride ? stride : elementSize; 81c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Normalized = normalized; 82c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul array->Ptr = (const GLubyte *) ptr; 830077c879b57f663c038becdde37b2f6671f59150Brian Paul array->_ElementSize = elementSize; 840077c879b57f663c038becdde37b2f6671f59150Brian Paul 8537c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul _mesa_reference_buffer_object(ctx, &array->BufferObj, 8637c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul ctx->Array.ArrayBufferObj); 8737c74af01ce52b603f565a6c8a9094500d5cb87aBrian Paul 88c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul ctx->NewState |= _NEW_ARRAY; 89f9d88c820414c208ab9dbb1b40901c7d520e19e5Brian Paul ctx->Array.NewState |= dirtyBit; 90c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul} 91c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 92c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 93c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 94fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) 95afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 96c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 97fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 98cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 995e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1002edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 2 || size > 4) { 10108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" ); 102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 10508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glVertexPointer(stride)" ); 106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1085e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 1104753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glVertexPointer( sz %d type %s stride %d )\n", size, 1114753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_lookup_enum_by_nr( type ), stride); 112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1132edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* always need to check that <type> is legal */ 1142edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 116c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 119c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 122c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 125c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 127cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 128cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = size * sizeof(GLhalfARB); 129cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 130394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 131394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 132394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = size * sizeof(GLfixed); 133394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 134394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 135d17485fef9b084a6812c626d9734816429f29199Brian Paul#if FEATURE_vertex_array_byte 136d17485fef9b084a6812c626d9734816429f29199Brian Paul case GL_BYTE: 137d17485fef9b084a6812c626d9734816429f29199Brian Paul elementSize = size * sizeof(GLbyte); 138d17485fef9b084a6812c626d9734816429f29199Brian Paul break; 139d17485fef9b084a6812c626d9734816429f29199Brian Paul#endif 140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 1412b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexPointer(type=%s)", 1422b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_lookup_enum_by_nr(type)); 143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1452edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 146f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->Vertex, _NEW_ARRAY_VERTEX, 147d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, GL_RGBA, stride, GL_FALSE, 148d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul GL_FALSE, ptr); 149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 152c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 153fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr ) 154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 155c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 156fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 157cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1592edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 16008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" ); 161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 1654753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glNormalPointer( type %s stride %d )\n", 1664753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_lookup_enum_by_nr( type ), stride); 167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_BYTE: 170c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLbyte); 171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 173c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLshort); 174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 176c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLint); 177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 179c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLfloat); 180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 182c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = 3 * sizeof(GLdouble); 183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 184cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 185cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = 3 * sizeof(GLhalfARB); 186cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 187394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 188394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 189394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = 3 * sizeof(GLfixed); 190394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 191394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 1932b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glNormalPointer(type=%s)", 1942b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_lookup_enum_by_nr(type)); 195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1972edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 198f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->Normal, _NEW_ARRAY_NORMAL, 199d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, 3, type, GL_RGBA, stride, GL_TRUE, GL_FALSE, ptr); 200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 203c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 204fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) 205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 206c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 20776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLenum format; 208fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 209cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 210fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 2112edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 3 || size > 4) { 21276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 21376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(size)"); 21476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 21576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 217c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul if (stride < 0) { 21808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glColorPointer(stride)" ); 219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 2234753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glColorPointer( sz %d type %s stride %d )\n", size, 2244753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_lookup_enum_by_nr( type ), stride); 225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 22676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (size == GL_BGRA) { 22776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (type != GL_UNSIGNED_BYTE) { 22876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(GL_BGRA/GLubyte)"); 22976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 23076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 23176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_BGRA; 23276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul size = 4; 23376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 23476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul else { 23576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_RGBA; 23676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 23776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul 2382edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_BYTE: 240c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLbyte); 241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_BYTE: 243c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 246c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_SHORT: 249c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLushort); 250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 252c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_INT: 255c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLuint); 256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 258c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 261c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 263cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 264cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = size * sizeof(GLhalfARB); 265cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 266394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 267394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 268394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = size * sizeof(GLfixed); 269394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 270394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 2722b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glColorPointer(type=%s)", 2732b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_lookup_enum_by_nr(type)); 274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 2762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 277f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->Color, _NEW_ARRAY_COLOR0, 278d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, format, stride, GL_TRUE, GL_FALSE, 279d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 283c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 284fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell_mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr) 285fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{ 286c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLint elementSize; 287fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GET_CURRENT_CONTEXT(ctx); 288cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 2895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 2902edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 29108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glFogCoordPointer(stride)" ); 292fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 293fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 294fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 2952edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 296fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_FLOAT: 297c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLfloat); 298fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 299fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_DOUBLE: 300c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLdouble); 301fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 302cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 303cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = sizeof(GLhalfARB); 304cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 305fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell default: 30608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glFogCoordPointer(type)" ); 307fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 308fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 3092edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 310f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->FogCoord, _NEW_ARRAY_FOGCOORD, 311d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, 1, type, GL_RGBA, stride, GL_FALSE, GL_FALSE, 312d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 313fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell} 314fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 315fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 316c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 317fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr) 318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 319c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 320fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 321cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 3225e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 3232edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 32408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" ); 325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3282edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_UNSIGNED_BYTE: 330c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLubyte); 331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 333c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLshort); 334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 336c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLint); 337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 339c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLfloat); 340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 342c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = sizeof(GLdouble); 343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 34508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glIndexPointer(type)" ); 346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 3482edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 349f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->Index, _NEW_ARRAY_INDEX, 350d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, 1, type, GL_RGBA, stride, GL_FALSE, GL_FALSE, 351d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 355c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 3565e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen_mesa_SecondaryColorPointerEXT(GLint size, GLenum type, 357fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GLsizei stride, const GLvoid *ptr) 358fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell{ 359c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 36076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLenum format; 361fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell GET_CURRENT_CONTEXT(ctx); 362cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 363fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 364fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell if (size != 3 && size != 4) { 36576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 36676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(size)"); 36776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 36876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 369fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 3702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 3712edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glSecondaryColorPointer(stride)" ); 372fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 373fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 374fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 375fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 3764753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glSecondaryColorPointer( sz %d type %s stride %d )\n", 377d09a1d8b29ae5841ae39b5c24c3f4693dd750559Brian Paul size, _mesa_lookup_enum_by_nr( type ), stride); 378fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 37976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (size == GL_BGRA) { 38076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (type != GL_UNSIGNED_BYTE) { 38176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glColorPointer(GL_BGRA/GLubyte)"); 38276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 38376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 38476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_BGRA; 38576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul size = 4; 38676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 38776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul else { 38876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_RGBA; 38976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 39076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul 3912edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 392fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_BYTE: 393c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLbyte); 394fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 395fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_BYTE: 396c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 397fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 398fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_SHORT: 399c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 400fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 401fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_SHORT: 402c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLushort); 403fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 404fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_INT: 405c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 406fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 407fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_UNSIGNED_INT: 408c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLuint); 409fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 410fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_FLOAT: 411c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 412fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 413fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell case GL_DOUBLE: 414c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 415fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell break; 416cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 417cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = size * sizeof(GLhalfARB); 418cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 419fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell default: 4202b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glSecondaryColorPointer(type=%s)", 4212b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_lookup_enum_by_nr(type)); 422fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell return; 423fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell } 4242edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 425f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->SecondaryColor, _NEW_ARRAY_COLOR1, 426d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, format, stride, GL_TRUE, GL_FALSE, 427d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 428fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell} 429fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 430fe5d67d95f3a5fc84c5421d409a6464642aaf2cbKeith Whitwell 431c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 4322edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, 4332edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul const GLvoid *ptr) 434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 435c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLint elementSize; 436fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 437c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul const GLuint unit = ctx->Array.ActiveTexture; 438cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 4402edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 1 || size > 4) { 44108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(size)" ); 442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 4442edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 44508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(stride)" ); 446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API)) 4504753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glTexCoordPointer(unit %u sz %d type %s stride %d)\n", 451c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul unit, size, _mesa_lookup_enum_by_nr( type ), stride); 452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 4532edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* always need to check that <type> is legal */ 4542edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_SHORT: 456c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_INT: 459c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_FLOAT: 462c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_DOUBLE: 465c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 467cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 468cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = size * sizeof(GLhalfARB); 469cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 470394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#if FEATURE_fixedpt 471394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul case GL_FIXED: 472394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul elementSize = size * sizeof(GLfixed); 473394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul break; 474394c1d1c53074f82d2664f655f948f8966f46b9dBrian Paul#endif 475d17485fef9b084a6812c626d9734816429f29199Brian Paul#if FEATURE_vertex_array_byte 476d17485fef9b084a6812c626d9734816429f29199Brian Paul case GL_BYTE: 477d17485fef9b084a6812c626d9734816429f29199Brian Paul elementSize = size * sizeof(GLbyte); 478d17485fef9b084a6812c626d9734816429f29199Brian Paul break; 479d17485fef9b084a6812c626d9734816429f29199Brian Paul#endif 480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 4812b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glTexCoordPointer(type=%s)", 4822b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_lookup_enum_by_nr(type)); 483afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 4852edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 48689c8ff3382763c654ef680c522c287764d943d6cBrian Paul ASSERT(unit < Elements(ctx->Array.ArrayObj->TexCoord)); 48789c8ff3382763c654ef680c522c287764d943d6cBrian Paul 488f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->TexCoord[unit], 489f549f4c4b6012178df3706b26539ca672399260fBrian Paul _NEW_ARRAY_TEXCOORD(unit), 490d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, GL_RGBA, stride, GL_FALSE, GL_FALSE, 491d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 493afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 494afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 495c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 496c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr) 497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 498d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul /* see table 2.4 edits in GL_EXT_gpu_shader4 spec: */ 499d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul const GLboolean integer = GL_TRUE; 500fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 501cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 503c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul if (stride < 0) { 50408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" ); 505afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 506afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 507c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul 508f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->EdgeFlag, _NEW_ARRAY_EDGEFLAG, 509f549f4c4b6012178df3706b26539ca672399260fBrian Paul sizeof(GLboolean), 1, GL_UNSIGNED_BYTE, GL_RGBA, 510d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul stride, GL_FALSE, integer, ptr); 511afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 512afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 513afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 5141cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paulvoid GLAPIENTRY 5151cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul_mesa_PointSizePointer(GLenum type, GLsizei stride, const GLvoid *ptr) 5161cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul{ 5171cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul GLsizei elementSize; 5181cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul GET_CURRENT_CONTEXT(ctx); 5191cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 5201cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5211cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul if (stride < 0) { 5221cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glPointSizePointer(stride)" ); 5231cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul return; 5241cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul } 5251cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5261cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul switch (type) { 5271cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul case GL_FLOAT: 5281cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul elementSize = sizeof(GLfloat); 5291cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul break; 5301cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#if FEATURE_fixedpt 5311cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul case GL_FIXED: 5321cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul elementSize = sizeof(GLfixed); 5331cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul break; 5341cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#endif 5351cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul default: 5361cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glPointSizePointer(type)" ); 5371cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul return; 5381cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul } 5391cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5401cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul update_array(ctx, &ctx->Array.ArrayObj->PointSize, _NEW_ARRAY_POINT_SIZE, 541d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, 1, type, GL_RGBA, stride, GL_FALSE, GL_FALSE, 542d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 5431cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul} 5441cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 5451cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul 546148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#if FEATURE_NV_vertex_program 547a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul/** 548a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Set a vertex attribute array. 549a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Note that these arrays DO alias the conventional GL vertex arrays 550a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * (position, normal, color, fog, texcoord, etc). 551a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * The generic attribute slots at #16 and above are not touched. 552a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul */ 553c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 55492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul_mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type, 55592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GLsizei stride, const GLvoid *ptr) 5562edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul{ 55729fbf72dbf158d766d3cac3b2db16d9fcbef0d0bMarkus Amsler GLboolean normalized = GL_FALSE; 558c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 5594adb190a162c5ed0684a8616331344caadba4010Maciej Cencora GLenum format; 5602edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul GET_CURRENT_CONTEXT(ctx); 5612edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 5622edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 563d2a74d76c96957cf0294dcf40d29526621ada95eBrian Paul if (index >= MAX_NV_VERTEX_PROGRAM_INPUTS) { 5642edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(index)"); 5652edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5662edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5672edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5682edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (size < 1 || size > 4) { 5692edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size)"); 5702edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5712edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5722edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5732edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (stride < 0) { 5742edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(stride)"); 5752edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5762edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5772edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5782edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul if (type == GL_UNSIGNED_BYTE && size != 4) { 5792edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(size!=4)"); 5802edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 5812edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 5822edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 5834adb190a162c5ed0684a8616331344caadba4010Maciej Cencora if (size == GL_BGRA) { 5844adb190a162c5ed0684a8616331344caadba4010Maciej Cencora if (type != GL_UNSIGNED_BYTE) { 5854adb190a162c5ed0684a8616331344caadba4010Maciej Cencora _mesa_error(ctx, GL_INVALID_VALUE, 5864adb190a162c5ed0684a8616331344caadba4010Maciej Cencora "glVertexAttribPointerNV(GL_BGRA/type)"); 5874adb190a162c5ed0684a8616331344caadba4010Maciej Cencora return; 5884adb190a162c5ed0684a8616331344caadba4010Maciej Cencora } 5894adb190a162c5ed0684a8616331344caadba4010Maciej Cencora 5904adb190a162c5ed0684a8616331344caadba4010Maciej Cencora format = GL_BGRA; 5914adb190a162c5ed0684a8616331344caadba4010Maciej Cencora size = 4; 5924adb190a162c5ed0684a8616331344caadba4010Maciej Cencora normalized = GL_TRUE; 5934adb190a162c5ed0684a8616331344caadba4010Maciej Cencora } 5944adb190a162c5ed0684a8616331344caadba4010Maciej Cencora else { 5954adb190a162c5ed0684a8616331344caadba4010Maciej Cencora format = GL_RGBA; 5964adb190a162c5ed0684a8616331344caadba4010Maciej Cencora } 5974adb190a162c5ed0684a8616331344caadba4010Maciej Cencora 5982edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul /* check for valid 'type' and compute StrideB right away */ 5992edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul switch (type) { 6002edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_UNSIGNED_BYTE: 60129fbf72dbf158d766d3cac3b2db16d9fcbef0d0bMarkus Amsler normalized = GL_TRUE; 602c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 6032edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 6042edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_SHORT: 605c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 6062edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 6072edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_FLOAT: 608c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 6092edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 6102edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul case GL_DOUBLE: 611c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 6122edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul break; 6132edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul default: 6142b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerNV(type=%s)", 6152b82bc93e2a0bfdd48147dfa5525dee732a50ea4Brian Paul _mesa_lookup_enum_by_nr(type)); 6162edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul return; 6172edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul } 6182edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul 619f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], 620f549f4c4b6012178df3706b26539ca672399260fBrian Paul _NEW_ARRAY_ATTRIB(index), 621d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, format, stride, normalized, GL_FALSE, 622d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 6232edd1807f85a5118dcd0c20156a2d68f5c23d145Brian Paul} 624148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#endif 625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 6261f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 627148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#if FEATURE_ARB_vertex_program 628a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul/** 629a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Set a generic vertex attribute array. 630a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * Note that these arrays DO NOT alias the conventional GL vertex arrays 631a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul * (position, normal, color, fog, texcoord, etc). 632a554d7c4d87902833382cb67bd8a282d5c500c6dBrian Paul */ 633c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 63492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul_mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type, 63592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GLboolean normalized, 63692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GLsizei stride, const GLvoid *ptr) 63792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul{ 638c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul GLsizei elementSize; 63976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul GLenum format; 64092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul GET_CURRENT_CONTEXT(ctx); 64192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 64292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 64305051037101dfa053798cf5ad91d1975fd1aa6a7Brian Paul if (index >= ctx->Const.VertexProgram.MaxAttribs) { 64492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(index)"); 64592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul return; 64692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 64792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 64892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul if (size < 1 || size > 4) { 64976d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 65076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(size)"); 65176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 65276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 65392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 65492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 65592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul if (stride < 0) { 65692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(stride)"); 65792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul return; 65892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 65992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 66076d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (size == GL_BGRA) { 66176d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul if (type != GL_UNSIGNED_BYTE) { 66276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, 66376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul "glVertexAttribPointerARB(GL_BGRA/type)"); 66476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul return; 66576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 6664adb190a162c5ed0684a8616331344caadba4010Maciej Cencora if (normalized != GL_TRUE) { 6674adb190a162c5ed0684a8616331344caadba4010Maciej Cencora _mesa_error(ctx, GL_INVALID_VALUE, 6684adb190a162c5ed0684a8616331344caadba4010Maciej Cencora "glVertexAttribPointerARB(GL_BGRA/normalized)"); 6694adb190a162c5ed0684a8616331344caadba4010Maciej Cencora return; 6704adb190a162c5ed0684a8616331344caadba4010Maciej Cencora } 6714adb190a162c5ed0684a8616331344caadba4010Maciej Cencora 67276d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_BGRA; 67376d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul size = 4; 67476d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 67576d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul else { 67676d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul format = GL_RGBA; 67776d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul } 67876d27a6a1e94e973e5a0a4a22b80158dfecf9151Brian Paul 67992f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul /* check for valid 'type' and compute StrideB right away */ 680196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul /* NOTE: more types are supported here than in the NV extension */ 68192f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul switch (type) { 682196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_BYTE: 683c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLbyte); 684196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 68592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_UNSIGNED_BYTE: 686c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLubyte); 68792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 68892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_SHORT: 689c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLshort); 69092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 691196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_UNSIGNED_SHORT: 692c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLushort); 693196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 694196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_INT: 695c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLint); 696196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 697196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul case GL_UNSIGNED_INT: 698c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLuint); 699196a90b5111b5170b9517d83e24d454363a09dd5Brian Paul break; 70092f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_FLOAT: 701c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLfloat); 70292f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 70392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul case GL_DOUBLE: 704c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul elementSize = size * sizeof(GLdouble); 70592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul break; 706cfe884e2030466df673881da8e830c300dda40dbDave Airlie case GL_HALF_FLOAT: 707cfe884e2030466df673881da8e830c300dda40dbDave Airlie elementSize = size * sizeof(GLhalfARB); 708cfe884e2030466df673881da8e830c300dda40dbDave Airlie break; 70948cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul#if FEATURE_fixedpt 71048cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul case GL_FIXED: 71148cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul elementSize = size * sizeof(GLfixed); 71248cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul break; 71348cba703fa6fdbe2ad34770d54aeafdd01493f27Brian Paul#endif 71492f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul default: 71592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribPointerARB(type)" ); 71692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul return; 71792f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul } 71892f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 719f549f4c4b6012178df3706b26539ca672399260fBrian Paul update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], 720f549f4c4b6012178df3706b26539ca672399260fBrian Paul _NEW_ARRAY_ATTRIB(index), 721d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, format, stride, normalized, GL_FALSE, 722d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ptr); 72392f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul} 724148a2847a105ce9d9189ad3081091de60f803a33Brian Paul#endif 72592f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 72692f9785c727ea10ff5f8dc9770f0e8f388fcea70Brian Paul 727e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul/** 728d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul * GL_EXT_gpu_shader4 / GL 3.0. 729e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul * Set an integer-valued vertex attribute array. 730e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul * Note that these arrays DO NOT alias the conventional GL vertex arrays 731e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul * (position, normal, color, fog, texcoord, etc). 732e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul */ 733e00d07cff676422d6c58c93bbbe737d672efa761Brian Paulvoid GLAPIENTRY 734e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul_mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type, 735e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul GLsizei stride, const GLvoid *ptr) 736e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul{ 737d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul const GLboolean normalized = GL_FALSE; 738d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul const GLboolean integer = GL_TRUE; 739d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul const GLenum format = GL_RGBA; 740d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul GLsizei elementSize; 741d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul GET_CURRENT_CONTEXT(ctx); 742d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 743d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul 744d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul if (index >= ctx->Const.VertexProgram.MaxAttribs) { 745d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(index)"); 746d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul return; 747d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul } 748d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul 749d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul if (size < 1 || size > 4) { 750d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul if (!ctx->Extensions.EXT_vertex_array_bgra || size != GL_BGRA) { 751d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(size)"); 752d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul return; 753d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul } 754d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul } 755d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul 756d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul if (stride < 0) { 757d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(stride)"); 758d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul return; 759d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul } 760d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul 761d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul /* check for valid 'type' and compute StrideB right away */ 762d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul /* NOTE: more types are supported here than in the NV extension */ 763d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul switch (type) { 764d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_BYTE: 765d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize = size * sizeof(GLbyte); 766d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul break; 767d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_UNSIGNED_BYTE: 768d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize = size * sizeof(GLubyte); 769d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul break; 770d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_SHORT: 771d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize = size * sizeof(GLshort); 772d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul break; 773d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_UNSIGNED_SHORT: 774d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize = size * sizeof(GLushort); 775d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul break; 776d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_INT: 777d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize = size * sizeof(GLint); 778d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul break; 779d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_UNSIGNED_INT: 780d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize = size * sizeof(GLuint); 781d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul break; 782d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul default: 783d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttribIPointer(type)" ); 784d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul return; 785d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul } 786d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul 787d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], 788d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul _NEW_ARRAY_ATTRIB(index), 789d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul elementSize, size, type, format, stride, 790d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul normalized, integer, ptr); 791e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul} 792e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul 793e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul 794e00d07cff676422d6c58c93bbbe737d672efa761Brian Paul 795c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 796d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_EnableVertexAttribArrayARB(GLuint index) 797d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 798d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 799d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 800d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 801d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index >= ctx->Const.VertexProgram.MaxAttribs) { 802d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_VALUE, 803d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glEnableVertexAttribArrayARB(index)"); 804d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return; 805d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 806d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 807d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT(index < Elements(ctx->Array.ArrayObj->VertexAttrib)); 808d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 809d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_VERTICES(ctx, _NEW_ARRAY); 810d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ctx->Array.ArrayObj->VertexAttrib[index].Enabled = GL_TRUE; 811d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ctx->Array.ArrayObj->_Enabled |= _NEW_ARRAY_ATTRIB(index); 812d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index); 813d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 814d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 815d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 816d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 817d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_DisableVertexAttribArrayARB(GLuint index) 818d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 819d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 820d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 821d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 822d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index >= ctx->Const.VertexProgram.MaxAttribs) { 823d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_VALUE, 824d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glEnableVertexAttribArrayARB(index)"); 825d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return; 826d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 827d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 828d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT(index < Elements(ctx->Array.ArrayObj->VertexAttrib)); 829d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 830d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_VERTICES(ctx, _NEW_ARRAY); 831d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ctx->Array.ArrayObj->VertexAttrib[index].Enabled = GL_FALSE; 832d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ctx->Array.ArrayObj->_Enabled &= ~_NEW_ARRAY_ATTRIB(index); 833d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index); 834d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 835d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 836d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 837d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul/** 838d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul * Return info for a vertex attribute array (no alias with legacy 839d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul * vertex attributes (pos, normal, color, etc)). This function does 840d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul * not handle the 4-element GL_CURRENT_VERTEX_ATTRIB_ARB query. 841d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul */ 842d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulstatic GLuint 843f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergget_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname, 844d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const char *caller) 845d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 846d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const struct gl_client_array *array; 847d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 848d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index >= MAX_VERTEX_GENERIC_ATTRIBS) { 849d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)", caller, index); 850d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return 0; 851d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 852d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 853d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT(index < Elements(ctx->Array.ArrayObj->VertexAttrib)); 854d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 855d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul array = &ctx->Array.ArrayObj->VertexAttrib[index]; 856d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 857d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul switch (pname) { 858d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul case GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB: 859d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return array->Enabled; 860d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul case GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB: 861d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return array->Size; 862d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul case GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB: 863d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return array->Stride; 864d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul case GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB: 865d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return array->Type; 866d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB: 867d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return array->Normalized; 868d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB: 869d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return array->BufferObj->Name; 870d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul case GL_VERTEX_ATTRIB_ARRAY_INTEGER: 871d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul if (ctx->Extensions.EXT_gpu_shader4) { 872d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul return array->Integer; 873d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul } 874d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul /* fall-through */ 875d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul default: 876d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=0x%x)", caller, pname); 877d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return 0; 878d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 879d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 880d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 881d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 882d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 883d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_GetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params) 884d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 885d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 886d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 887d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 888d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { 889d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index == 0) { 890d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_OPERATION, 891d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribfv(index==0)"); 892d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 893d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 894d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const GLfloat *v = ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]; 895d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_CURRENT(ctx, 0); 896d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul COPY_4V(params, v); 897d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 898d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 899d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 900d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLfloat) get_vertex_array_attrib(ctx, index, pname, 901d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribfv"); 902d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 903d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 904d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 905d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 906d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 907d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_GetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params) 908d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 909d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 910d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 911d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 912d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { 913d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index == 0) { 914d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_OPERATION, 915d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribdv(index==0)"); 916d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 917d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 918d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const GLfloat *v = ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]; 919d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_CURRENT(ctx, 0); 920d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLdouble) v[0]; 921d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[1] = (GLdouble) v[1]; 922d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[2] = (GLdouble) v[2]; 923d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[3] = (GLdouble) v[3]; 924d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 925d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 926d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 927d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLdouble) get_vertex_array_attrib(ctx, index, pname, 928d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribdv"); 929d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 930d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 931d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 932d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 933d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 934d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_GetVertexAttribivARB(GLuint index, GLenum pname, GLint *params) 935d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 936d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 937d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 938d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 939d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { 940d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index == 0) { 941d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_OPERATION, 942d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribiv(index==0)"); 943d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 944d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 945d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const GLfloat *v = ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]; 946d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_CURRENT(ctx, 0); 947d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul /* XXX should floats in[0,1] be scaled to full int range? */ 948d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLint) v[0]; 949d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[1] = (GLint) v[1]; 950d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[2] = (GLint) v[2]; 951d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[3] = (GLint) v[3]; 952d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 953d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 954d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 955d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLint) get_vertex_array_attrib(ctx, index, pname, 956d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribiv"); 957d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 958d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 959d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 960d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 961d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul/** GL 3.0 */ 962d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 963d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params) 964d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 965d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 966d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 967d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 968d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { 969d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index == 0) { 970d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_OPERATION, 971d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribIiv(index==0)"); 972d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 973d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 974d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const GLfloat *v = ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]; 975d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_CURRENT(ctx, 0); 976d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul /* XXX we don't have true integer-valued vertex attribs yet */ 977d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLint) v[0]; 978d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[1] = (GLint) v[1]; 979d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[2] = (GLint) v[2]; 980d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[3] = (GLint) v[3]; 981d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 982d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 983d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 984d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLint) get_vertex_array_attrib(ctx, index, pname, 985d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribIiv"); 986d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 987d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 988d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 989d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 990d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul/** GL 3.0 */ 991d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 992d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params) 993d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 994d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 995d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 996d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 997d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { 998d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index == 0) { 999d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_OPERATION, 1000d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribIuiv(index==0)"); 1001d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 1002d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 1003d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul const GLfloat *v = ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]; 1004d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul FLUSH_CURRENT(ctx, 0); 1005d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul /* XXX we don't have true integer-valued vertex attribs yet */ 1006d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = (GLuint) v[0]; 1007d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[1] = (GLuint) v[1]; 1008d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[2] = (GLuint) v[2]; 1009d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[3] = (GLuint) v[3]; 1010d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 1011d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 1012d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul else { 1013d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul params[0] = get_vertex_array_attrib(ctx, index, pname, 1014d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul "glGetVertexAttribIuiv"); 1015d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 1016d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 1017d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1018d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1019d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 1020d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul_mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer) 1021d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul{ 1022d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul GET_CURRENT_CONTEXT(ctx); 1023d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 1024d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1025d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (index >= ctx->Const.VertexProgram.MaxAttribs) { 1026d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glGetVertexAttribPointerARB(index)"); 1027d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return; 1028d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 1029d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1030d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB) { 1031d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribPointerARB(pname)"); 1032d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul return; 1033d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul } 1034d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1035d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul ASSERT(index < Elements(ctx->Array.ArrayObj->VertexAttrib)); 1036d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1037d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul *pointer = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[index].Ptr; 1038d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul} 1039d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1040d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paul 1041d3f598a506d911e7cbbe561a798d284a154da3cdBrian Paulvoid GLAPIENTRY 10421f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride, 10431f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul GLsizei count, const GLvoid *ptr) 10441f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 10451f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 10461f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_VertexPointer(size, type, stride, ptr); 10471f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 10481f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 10491f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 1050c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10511f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, 10521f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 10531f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 10541f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 10551f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_NormalPointer(type, stride, ptr); 10561f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 10571f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 10581f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 1059c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10601f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, 10611f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 10621f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 10631f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 10641f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_ColorPointer(size, type, stride, ptr); 10651f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 10661f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 10671f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 1068c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10691f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, 10701f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul const GLvoid *ptr) 10711f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 10721f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 10731f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_IndexPointer(type, stride, ptr); 10741f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 10751f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 10761f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 1077c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10781f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, 10791f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul GLsizei count, const GLvoid *ptr) 10801f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 10811f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 10821f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_TexCoordPointer(size, type, stride, ptr); 10831f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 10841f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 10851f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 1086c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10871f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr) 10881f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul{ 10891f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul (void) count; 10901f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul _mesa_EdgeFlagPointer(stride, ptr); 10911f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul} 10921f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 10931f0e213bf88500e9c2f7ca92e57392efae5e4459Brian Paul 1094c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 1095fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer) 1096afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1097fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul GET_CURRENT_CONTEXT(ctx); 1098afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean tflag, cflag, nflag; /* enable/disable flags */ 1099afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint tcomps, ccomps, vcomps; /* components per texcoord, color, vertex */ 1100f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell GLenum ctype = 0; /* color type */ 1101f4b02d1a2675d4a0699b8995a422fbd413c32301Keith Whitwell GLint coffset = 0, noffset = 0, voffset;/* color, normal, vertex offsets */ 11024a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul const GLint toffset = 0; /* always zero */ 1103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint defstride; /* default stride */ 1104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint c, f; 11055e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1106cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1107cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 1108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg f = sizeof(GLfloat); 1109c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul c = f * ((4 * sizeof(GLubyte) + (f - 1)) / f); 1110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1111c5b1e81de48de5d8830bf5d92ff767ad1985e46eBrian Paul if (stride < 0) { 111208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_VALUE, "glInterleavedArrays(stride)" ); 1113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 1114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (format) { 1117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_V2F: 1118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_FALSE; 1119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 2; 1120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 0; 1121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 2*f; 1122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_V3F: 1124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_FALSE; 1125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 3; 1126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 0; 1127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 3*f; 1128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4UB_V2F: 1130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 1131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 2; 1132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 1133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 1134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c; 1135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c + 2*f; 1136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4UB_V3F: 1138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 1139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 3; 1140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 1141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 1142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c; 1143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c + 3*f; 1144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C3F_V3F: 1146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_FALSE; 1147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 3; vcomps = 3; 1148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 1149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 1150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 3*f; 1151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 6*f; 1152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_N3F_V3F: 1154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_FALSE; nflag = GL_TRUE; 1155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 0; vcomps = 3; 1156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 0; 1157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 3*f; 1158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 6*f; 1159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_C4F_N3F_V3F: 1161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_FALSE; cflag = GL_TRUE; nflag = GL_TRUE; 1162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 0; ccomps = 4; vcomps = 3; 1163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 1164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 0; 1165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 4*f; 1166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 7*f; 1167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 10*f; 1168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_V3F: 1170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_FALSE; 1171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 0; vcomps = 3; 1172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 2*f; 1173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 5*f; 1174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T4F_V4F: 1176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_FALSE; 1177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 4; ccomps = 0; vcomps = 4; 1178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 4*f; 1179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 1180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C4UB_V3F: 1182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_FALSE; 1183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 4; vcomps = 3; 1184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_UNSIGNED_BYTE; 1185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 1186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = c+2*f; 1187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = c+5*f; 1188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C3F_V3F: 1190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_FALSE; 1191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 3; vcomps = 3; 1192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 1193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 1194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 5*f; 1195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 1196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_N3F_V3F: 1198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_FALSE; nflag = GL_TRUE; 1199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 0; vcomps = 3; 1200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 2*f; 1201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 5*f; 1202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 8*f; 1203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T2F_C4F_N3F_V3F: 1205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_TRUE; 1206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 2; ccomps = 4; vcomps = 3; 1207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 1208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 2*f; 1209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 6*f; 1210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 9*f; 1211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 12*f; 1212afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GL_T4F_C4F_N3F_V4F: 1214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tflag = GL_TRUE; cflag = GL_TRUE; nflag = GL_TRUE; 1215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg tcomps = 4; ccomps = 4; vcomps = 4; 1216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ctype = GL_FLOAT; 1217afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg coffset = 4*f; 1218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg noffset = 8*f; 1219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg voffset = 11*f; 1220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg defstride = 15*f; 1221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 122308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glInterleavedArrays(format)" ); 1224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return; 1225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (stride==0) { 1228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stride = defstride; 1229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1231fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_EDGE_FLAG_ARRAY ); 1232fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_INDEX_ARRAY ); 1233095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul /* XXX also disable secondary color and generic arrays? */ 1234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Texcoords */ 1236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (tflag) { 12374a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul _mesa_EnableClientState( GL_TEXTURE_COORD_ARRAY ); 12384a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul _mesa_TexCoordPointer( tcomps, GL_FLOAT, stride, 1239ab928e57b9637abd253c5114d0c90d7e3cb3f7fdBrian Paul (GLubyte *) pointer + toffset ); 1240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1242ab928e57b9637abd253c5114d0c90d7e3cb3f7fdBrian Paul _mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY ); 1243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Color */ 1246afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (cflag) { 1247fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_COLOR_ARRAY ); 1248cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_ColorPointer( ccomps, ctype, stride, 12494a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul (GLubyte *) pointer + coffset ); 1250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1252fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_COLOR_ARRAY ); 1253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Normals */ 1257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (nflag) { 1258fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_NORMAL_ARRAY ); 12594a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul _mesa_NormalPointer( GL_FLOAT, stride, (GLubyte *) pointer + noffset ); 1260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1262fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_DisableClientState( GL_NORMAL_ARRAY ); 1263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 12654a3110fb213f419a47822eb44c5f2fcd74bb3b0dBrian Paul /* Vertices */ 1266fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul _mesa_EnableClientState( GL_VERTEX_ARRAY ); 1267cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell _mesa_VertexPointer( vcomps, GL_FLOAT, stride, 1268cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell (GLubyte *) pointer + voffset ); 1269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1272c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 1273ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_LockArraysEXT(GLint first, GLsizei count) 1274ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{ 1275ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell GET_CURRENT_CONTEXT(ctx); 1276cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1277ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 1278ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (MESA_VERBOSE & VERBOSE_API) 12794753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glLockArrays %d %d\n", first, count); 1280ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 12815857e988be9317810cf713478195b4ed849eea4aEric Anholt if (first < 0) { 12825857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_VALUE, "glLockArraysEXT(first)" ); 12835857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 128422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes } 12855857e988be9317810cf713478195b4ed849eea4aEric Anholt if (count <= 0) { 12865857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_VALUE, "glLockArraysEXT(count)" ); 12875857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 12885857e988be9317810cf713478195b4ed849eea4aEric Anholt } 12895857e988be9317810cf713478195b4ed849eea4aEric Anholt if (ctx->Array.LockCount != 0) { 12905857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_OPERATION, "glLockArraysEXT(reentry)" ); 12915857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 1292ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell } 1293ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 12945857e988be9317810cf713478195b4ed849eea4aEric Anholt ctx->Array.LockFirst = first; 12955857e988be9317810cf713478195b4ed849eea4aEric Anholt ctx->Array.LockCount = count; 12965857e988be9317810cf713478195b4ed849eea4aEric Anholt 1297ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->NewState |= _NEW_ARRAY; 1298cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_ALL; 1299ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell} 1300ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 1301ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 1302c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 1303ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell_mesa_UnlockArraysEXT( void ) 1304ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell{ 1305ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell GET_CURRENT_CONTEXT(ctx); 1306cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1307ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 1308ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell if (MESA_VERBOSE & VERBOSE_API) 13094753d60dd070bb08d0116076bcc08025c86ce857Brian Paul _mesa_debug(ctx, "glUnlockArrays\n"); 1310ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell 13115857e988be9317810cf713478195b4ed849eea4aEric Anholt if (ctx->Array.LockCount == 0) { 13125857e988be9317810cf713478195b4ed849eea4aEric Anholt _mesa_error( ctx, GL_INVALID_OPERATION, "glUnlockArraysEXT(reexit)" ); 13135857e988be9317810cf713478195b4ed849eea4aEric Anholt return; 13145857e988be9317810cf713478195b4ed849eea4aEric Anholt } 13155857e988be9317810cf713478195b4ed849eea4aEric Anholt 1316ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockFirst = 0; 1317ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->Array.LockCount = 0; 1318ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell ctx->NewState |= _NEW_ARRAY; 1319cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Array.NewState |= _NEW_ARRAY_ALL; 1320ad2ac216fa0cbebc36530bf9e5256e902710b892Keith Whitwell} 13212525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 13222525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 13232525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* GL_EXT_multi_draw_arrays */ 13242525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul/* Somebody forgot to spec the first and count parameters as const! <sigh> */ 1325c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 13267993832c12bba578010005b344dcd3817be84a42Brian Paul_mesa_MultiDrawArraysEXT( GLenum mode, const GLint *first, 13277993832c12bba578010005b344dcd3817be84a42Brian Paul const GLsizei *count, GLsizei primcount ) 13282525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul{ 13292525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GET_CURRENT_CONTEXT(ctx); 13302525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul GLint i; 13312525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 13322525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 13332525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 13342525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul for (i = 0; i < primcount; i++) { 13352525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul if (count[i] > 0) { 13369bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawArrays(ctx->Exec, (mode, first[i], count[i])); 13372525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul } 13382525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul } 13392525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul} 13402525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 13412525bc7d305f6dcab3beb75535da25a488c969b0Brian Paul 13423baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick/* GL_IBM_multimode_draw_arrays */ 1343c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 13443baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first, 13453baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick const GLsizei * count, 13463baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLsizei primcount, GLint modestride ) 13473baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick{ 13483baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GET_CURRENT_CONTEXT(ctx); 13493baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLint i; 13503baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 13513baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 13523baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 13533baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick for ( i = 0 ; i < primcount ; i++ ) { 13543baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick if ( count[i] > 0 ) { 135503e29a5f77c13b7b888bd8443cb2752850e47d6aBrian Paul GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride)); 13569bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawArrays(ctx->Exec, ( m, first[i], count[i] )); 13573baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 13583baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 13593baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick} 13603baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 13613baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 13623baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick/* GL_IBM_multimode_draw_arrays */ 1363c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 13643baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count, 13653baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLenum type, const GLvoid * const * indices, 13663baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLsizei primcount, GLint modestride ) 13673baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick{ 13683baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GET_CURRENT_CONTEXT(ctx); 13693baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick GLint i; 13703baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 13713baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 13723baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 1373d2afb39d1997e9f2e3c64fc9fa49393e2839d8a1Brian Paul /* XXX not sure about ARB_vertex_buffer_object handling here */ 1374d2afb39d1997e9f2e3c64fc9fa49393e2839d8a1Brian Paul 13753baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick for ( i = 0 ; i < primcount ; i++ ) { 13763baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick if ( count[i] > 0 ) { 137703e29a5f77c13b7b888bd8443cb2752850e47d6aBrian Paul GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride)); 13789bdfee3a470a535ebe31074651fbacf680bcea6aIan Romanick CALL_DrawElements(ctx->Exec, ( m, count[i], type, indices[i] )); 13793baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 13803baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick } 13813baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick} 13823baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 13833baefe663bb15b4fd60921155de38c12ec2758c4Ian Romanick 1384095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul/** 13857f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul * GL_NV_primitive_restart and GL 3.1 1386a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul */ 1387a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paulvoid GLAPIENTRY 1388a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul_mesa_PrimitiveRestartIndex(GLuint index) 1389a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul{ 1390a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul GET_CURRENT_CONTEXT(ctx); 1391a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 13927f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul if (!ctx->Extensions.NV_primitive_restart && 13937f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul ctx->VersionMajor * 10 + ctx->VersionMinor < 31) { 13947f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glPrimitiveRestartIndexNV()"); 1395a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul return; 1396a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul } 1397a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 1398a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 1399a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 1400a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 1401a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 1402a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul ctx->Array.RestartIndex = index; 1403a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul} 1404a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 1405a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul 1406a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul/** 1407b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul * Copy one client vertex array to another. 1408b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul */ 1409b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paulvoid 1410f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_copy_client_array(struct gl_context *ctx, 1411b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul struct gl_client_array *dst, 1412b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul struct gl_client_array *src) 1413b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul{ 1414b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Size = src->Size; 1415b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Type = src->Type; 1416b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Format = src->Format; 1417b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Stride = src->Stride; 1418b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->StrideB = src->StrideB; 1419b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Ptr = src->Ptr; 1420b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Enabled = src->Enabled; 1421b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->Normalized = src->Normalized; 1422d1184d26bb14304a6a61d7729c90a7c7f3627086Brian Paul dst->Integer = src->Integer; 1423b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->_ElementSize = src->_ElementSize; 1424b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul _mesa_reference_buffer_object(ctx, &dst->BufferObj, src->BufferObj); 1425b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul dst->_MaxElement = src->_MaxElement; 1426b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul} 1427b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul 1428b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul 1429b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul 1430b28854088bb6a6fa1a12f47056d9aee2fbdefc70Brian Paul/** 143139d7524f7b176d4375e230ac60963d197be539f2Brian Paul * Print vertex array's fields. 143239d7524f7b176d4375e230ac60963d197be539f2Brian Paul */ 143339d7524f7b176d4375e230ac60963d197be539f2Brian Paulstatic void 143439d7524f7b176d4375e230ac60963d197be539f2Brian Paulprint_array(const char *name, GLint index, const struct gl_client_array *array) 143539d7524f7b176d4375e230ac60963d197be539f2Brian Paul{ 143639d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (index >= 0) 1437298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" %s[%d]: ", name, index); 143839d7524f7b176d4375e230ac60963d197be539f2Brian Paul else 1439298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" %s: ", name); 14404beea12f170cdbce75bd07549b475f59fc3cd7f9Brian Paul printf("Ptr=%p, Type=0x%x, Size=%d, ElemSize=%u, Stride=%d, Buffer=%u(Size %lu), MaxElem=%u\n", 1441298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg array->Ptr, array->Type, array->Size, 1442298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg array->_ElementSize, array->StrideB, 14434beea12f170cdbce75bd07549b475f59fc3cd7f9Brian Paul array->BufferObj->Name, (unsigned long) array->BufferObj->Size, 1444298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg array->_MaxElement); 144539d7524f7b176d4375e230ac60963d197be539f2Brian Paul} 144639d7524f7b176d4375e230ac60963d197be539f2Brian Paul 144739d7524f7b176d4375e230ac60963d197be539f2Brian Paul 144839d7524f7b176d4375e230ac60963d197be539f2Brian Paul/** 144939d7524f7b176d4375e230ac60963d197be539f2Brian Paul * Print current vertex object/array info. For debug. 145039d7524f7b176d4375e230ac60963d197be539f2Brian Paul */ 145139d7524f7b176d4375e230ac60963d197be539f2Brian Paulvoid 1452f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_print_arrays(struct gl_context *ctx) 145339d7524f7b176d4375e230ac60963d197be539f2Brian Paul{ 14546a2211f00077f49af42e6f087e3120abfb1be5aeBrian Paul struct gl_array_object *arrayObj = ctx->Array.ArrayObj; 145539d7524f7b176d4375e230ac60963d197be539f2Brian Paul GLuint i; 145639d7524f7b176d4375e230ac60963d197be539f2Brian Paul 14578fe3134622eed34159ff6f72a33558a659e8d299Brian Paul _mesa_update_array_object_max_element(ctx, arrayObj); 14588fe3134622eed34159ff6f72a33558a659e8d299Brian Paul 1459298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf("Array Object %u\n", arrayObj->Name); 146039d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->Vertex.Enabled) 146139d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Vertex", -1, &arrayObj->Vertex); 146239d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->Normal.Enabled) 146339d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Normal", -1, &arrayObj->Normal); 146439d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->Color.Enabled) 146539d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Color", -1, &arrayObj->Color); 1466d30163ad4201dcd5a594694ab87be9e59db47eddBrian Paul for (i = 0; i < Elements(arrayObj->TexCoord); i++) 146739d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->TexCoord[i].Enabled) 146839d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("TexCoord", i, &arrayObj->TexCoord[i]); 1469d30163ad4201dcd5a594694ab87be9e59db47eddBrian Paul for (i = 0; i < Elements(arrayObj->VertexAttrib); i++) 147039d7524f7b176d4375e230ac60963d197be539f2Brian Paul if (arrayObj->VertexAttrib[i].Enabled) 147139d7524f7b176d4375e230ac60963d197be539f2Brian Paul print_array("Attrib", i, &arrayObj->VertexAttrib[i]); 1472298be2b028263b2c343a707662c6fbfa18293cb2Kristian Høgsberg printf(" _MaxElement = %u\n", arrayObj->_MaxElement); 147339d7524f7b176d4375e230ac60963d197be539f2Brian Paul} 147439d7524f7b176d4375e230ac60963d197be539f2Brian Paul 147539d7524f7b176d4375e230ac60963d197be539f2Brian Paul 147639d7524f7b176d4375e230ac60963d197be539f2Brian Paul/** 1477095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul * Initialize vertex array state for given context. 1478095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul */ 1479c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid 1480f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_init_varray(struct gl_context *ctx) 14816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{ 1482ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick ctx->Array.DefaultArrayObj = _mesa_new_array_object(ctx, 0); 14831030bf0ded2a88a5e27f7a4d393c11cfde3d3c5aBrian Paul _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, 14841030bf0ded2a88a5e27f7a4d393c11cfde3d3c5aBrian Paul ctx->Array.DefaultArrayObj); 1485095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul ctx->Array.ActiveTexture = 0; /* GL_ARB_multitexture */ 148612cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul 148712cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul ctx->Array.Objects = _mesa_NewHashTable(); 148812cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul} 148912cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul 149012cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul 149112cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul/** 149212cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul * Callback for deleting an array object. Called by _mesa_HashDeleteAll(). 149312cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul */ 149412cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paulstatic void 149512cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Pauldelete_arrayobj_cb(GLuint id, void *data, void *userData) 149612cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul{ 149712cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul struct gl_array_object *arrayObj = (struct gl_array_object *) data; 1498f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg struct gl_context *ctx = (struct gl_context *) userData; 149912cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul _mesa_delete_array_object(ctx, arrayObj); 150012cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul} 150112cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul 150212cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul 150312cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul/** 150412cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul * Free vertex array state for given context. 150512cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul */ 150612cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paulvoid 1507f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_free_varray_data(struct gl_context *ctx) 150812cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul{ 150912cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul _mesa_HashDeleteAll(ctx->Array.Objects, delete_arrayobj_cb, ctx); 151012cf98f5fc5eaa4743134387ce3f8e584aa20bc4Brian Paul _mesa_DeleteHashTable(ctx->Array.Objects); 15116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell} 1512