varray.h revision 14bb957b996dcc5392b8fa589bd3ffa5c55cb6b4
1/* 2 * Mesa 3-D graphics library 3 * Version: 7.6 4 * 5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6 * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a 9 * copy of this software and associated documentation files (the "Software"), 10 * to deal in the Software without restriction, including without limitation 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12 * and/or sell copies of the Software, and to permit persons to whom the 13 * Software is furnished to do so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included 16 * in all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 26 27#ifndef VARRAY_H 28#define VARRAY_H 29 30 31#include "glheader.h" 32#include "mfeatures.h" 33 34struct gl_client_array; 35struct gl_context; 36 37 38/** 39 * Compute the index of the last array element that can be safely accessed in 40 * a vertex array. We can really only do this when the array lives in a VBO. 41 * The array->_MaxElement field will be updated. 42 * Later in glDrawArrays/Elements/etc we can do some bounds checking. 43 */ 44static inline void 45_mesa_update_array_max_element(struct gl_client_array *array) 46{ 47 assert(array->Enabled); 48 49 if (array->BufferObj->Name) { 50 GLsizeiptrARB offset = (GLsizeiptrARB) array->Ptr; 51 GLsizeiptrARB bufSize = (GLsizeiptrARB) array->BufferObj->Size; 52 53 if (offset < bufSize) { 54 array->_MaxElement = (bufSize - offset + array->StrideB 55 - array->_ElementSize) / array->StrideB; 56 } 57 else { 58 array->_MaxElement = 0; 59 } 60 } 61 else { 62 /* user-space array, no idea how big it is */ 63 array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */ 64 } 65} 66 67 68#if _HAVE_FULL_GL 69 70extern void GLAPIENTRY 71_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, 72 const GLvoid *ptr); 73 74extern void GLAPIENTRY 75_mesa_UnlockArraysEXT( void ); 76 77extern void GLAPIENTRY 78_mesa_LockArraysEXT(GLint first, GLsizei count); 79 80 81extern void GLAPIENTRY 82_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr); 83 84 85extern void GLAPIENTRY 86_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr); 87 88 89extern void GLAPIENTRY 90_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr); 91 92 93extern void GLAPIENTRY 94_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, 95 const GLvoid *ptr); 96 97 98extern void GLAPIENTRY 99_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr); 100 101 102extern void GLAPIENTRY 103_mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride, 104 GLsizei count, const GLvoid *ptr); 105 106 107extern void GLAPIENTRY 108_mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, 109 const GLvoid *ptr); 110 111 112extern void GLAPIENTRY 113_mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, 114 const GLvoid *ptr); 115 116 117extern void GLAPIENTRY 118_mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, 119 const GLvoid *ptr); 120 121 122extern void GLAPIENTRY 123_mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, 124 GLsizei count, const GLvoid *ptr); 125 126 127extern void GLAPIENTRY 128_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr); 129 130 131extern void GLAPIENTRY 132_mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr); 133 134 135extern void GLAPIENTRY 136_mesa_SecondaryColorPointerEXT(GLint size, GLenum type, 137 GLsizei stride, const GLvoid *ptr); 138 139 140extern void GLAPIENTRY 141_mesa_PointSizePointer(GLenum type, GLsizei stride, const GLvoid *ptr); 142 143 144extern void GLAPIENTRY 145_mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type, 146 GLsizei stride, const GLvoid *pointer); 147 148 149extern void GLAPIENTRY 150_mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type, 151 GLboolean normalized, GLsizei stride, 152 const GLvoid *pointer); 153 154void GLAPIENTRY 155_mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type, 156 GLsizei stride, const GLvoid *ptr); 157 158 159extern void GLAPIENTRY 160_mesa_EnableVertexAttribArrayARB(GLuint index); 161 162 163extern void GLAPIENTRY 164_mesa_DisableVertexAttribArrayARB(GLuint index); 165 166 167extern void GLAPIENTRY 168_mesa_GetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params); 169 170 171extern void GLAPIENTRY 172_mesa_GetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params); 173 174 175extern void GLAPIENTRY 176_mesa_GetVertexAttribivARB(GLuint index, GLenum pname, GLint *params); 177 178 179extern void GLAPIENTRY 180_mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params); 181 182 183extern void GLAPIENTRY 184_mesa_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params); 185 186 187extern void GLAPIENTRY 188_mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer); 189 190 191extern void GLAPIENTRY 192_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer); 193 194 195extern void GLAPIENTRY 196_mesa_MultiDrawArraysEXT( GLenum mode, const GLint *first, 197 const GLsizei *count, GLsizei primcount ); 198 199extern void GLAPIENTRY 200_mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type, 201 const GLvoid **indices, GLsizei primcount ); 202 203extern void GLAPIENTRY 204_mesa_MultiDrawElementsBaseVertex( GLenum mode, 205 const GLsizei *count, GLenum type, 206 const GLvoid **indices, GLsizei primcount, 207 const GLint *basevertex); 208 209extern void GLAPIENTRY 210_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first, 211 const GLsizei * count, 212 GLsizei primcount, GLint modestride ); 213 214 215extern void GLAPIENTRY 216_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count, 217 GLenum type, const GLvoid * const * indices, 218 GLsizei primcount, GLint modestride ); 219 220extern void GLAPIENTRY 221_mesa_LockArraysEXT(GLint first, GLsizei count); 222 223extern void GLAPIENTRY 224_mesa_UnlockArraysEXT( void ); 225 226 227extern void GLAPIENTRY 228_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count); 229 230extern void GLAPIENTRY 231_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, 232 const GLvoid *indices); 233 234extern void GLAPIENTRY 235_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, 236 GLenum type, const GLvoid *indices); 237 238extern void GLAPIENTRY 239_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, 240 const GLvoid *indices, GLint basevertex); 241 242extern void GLAPIENTRY 243_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, 244 GLsizei count, GLenum type, 245 const GLvoid *indices, 246 GLint basevertex); 247 248#if FEATURE_EXT_transform_feedback 249 250extern void GLAPIENTRY 251_mesa_DrawTransformFeedback(GLenum mode, GLuint name); 252 253#endif 254 255extern void GLAPIENTRY 256_mesa_PrimitiveRestartIndex(GLuint index); 257 258 259extern void GLAPIENTRY 260_mesa_VertexAttribDivisor(GLuint index, GLuint divisor); 261 262 263extern void 264_mesa_copy_client_array(struct gl_context *ctx, 265 struct gl_client_array *dst, 266 struct gl_client_array *src); 267 268 269extern void 270_mesa_print_arrays(struct gl_context *ctx); 271 272extern void 273_mesa_init_varray( struct gl_context * ctx ); 274 275extern void 276_mesa_free_varray_data(struct gl_context *ctx); 277 278#else 279 280/** No-op */ 281#define _mesa_init_varray( c ) ((void)0) 282#define _mesa_free_varray_data( c ) ((void)0) 283 284#endif 285 286#endif 287