1 /* 2 * Mesa 3-D graphics library 3 * Version: 7.6 4 * 5 * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. 6 * (C) Copyright IBM Corporation 2006 7 * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 8 * 9 * Permission is hereby granted, free of charge, to any person obtaining a 10 * copy of this software and associated documentation files (the "Software"), 11 * to deal in the Software without restriction, including without limitation 12 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13 * and/or sell copies of the Software, and to permit persons to whom the 14 * Software is furnished to do so, subject to the following conditions: 15 * 16 * The above copyright notice and this permission notice shall be included 17 * in all copies or substantial portions of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 * BRIAN PAUL OR IBM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 * SOFTWARE. 26 */ 27 28 #ifndef ARRAYOBJ_H 29 #define ARRAYOBJ_H 30 31 #include "glheader.h" 32 #include "mtypes.h" 33 #include "glformats.h" 34 35 struct gl_context; 36 37 /** 38 * \file arrayobj.h 39 * Functions for the GL_APPLE_vertex_array_object extension. 40 * 41 * \author Ian Romanick <idr (at) us.ibm.com> 42 * \author Brian Paul 43 */ 44 45 /* 46 * Internal functions 47 */ 48 49 extern struct gl_array_object * 50 _mesa_new_array_object( struct gl_context *ctx, GLuint name ); 51 52 extern void 53 _mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ); 54 55 extern void 56 _mesa_reference_array_object_(struct gl_context *ctx, 57 struct gl_array_object **ptr, 58 struct gl_array_object *arrayObj); 59 60 static inline void 61 _mesa_reference_array_object(struct gl_context *ctx, 62 struct gl_array_object **ptr, 63 struct gl_array_object *arrayObj) 64 { 65 if (*ptr != arrayObj) 66 _mesa_reference_array_object_(ctx, ptr, arrayObj); 67 } 68 69 70 extern void 71 _mesa_initialize_array_object( struct gl_context *ctx, 72 struct gl_array_object *obj, GLuint name ); 73 74 75 extern void 76 _mesa_update_array_object_max_element(struct gl_context *ctx, 77 struct gl_array_object *arrayObj); 78 79 /** Returns the bitmask of all enabled arrays in fixed function mode. 80 * 81 * In fixed function mode only the traditional fixed function arrays 82 * are available. 83 */ 84 static inline GLbitfield64 85 _mesa_array_object_get_enabled_ff(const struct gl_array_object *arrayObj) 86 { 87 return arrayObj->_Enabled & VERT_BIT_FF_ALL; 88 } 89 90 /** Returns the bitmask of all enabled arrays in nv shader mode. 91 * 92 * In nv shader mode, the nv generic arrays take precedence over 93 * the legacy arrays. 94 */ 95 static inline GLbitfield64 96 _mesa_array_object_get_enabled_nv(const struct gl_array_object *arrayObj) 97 { 98 GLbitfield64 enabled = arrayObj->_Enabled; 99 return enabled & ~(VERT_BIT_FF_NVALIAS & (enabled >> VERT_ATTRIB_GENERIC0)); 100 } 101 102 /** Returns the bitmask of all enabled arrays in arb/glsl shader mode. 103 * 104 * In arb/glsl shader mode all the fixed function and the arb/glsl generic 105 * arrays are available. Only the first generic array takes 106 * precedence over the legacy position array. 107 */ 108 static inline GLbitfield64 109 _mesa_array_object_get_enabled_arb(const struct gl_array_object *arrayObj) 110 { 111 GLbitfield64 enabled = arrayObj->_Enabled; 112 return enabled & ~(VERT_BIT_POS & (enabled >> VERT_ATTRIB_GENERIC0)); 113 } 114 115 116 /* 117 * API functions 118 */ 119 120 121 void GLAPIENTRY _mesa_BindVertexArray( GLuint id ); 122 123 void GLAPIENTRY _mesa_BindVertexArrayAPPLE( GLuint id ); 124 125 void GLAPIENTRY _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids); 126 127 void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays); 128 129 void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer); 130 131 GLboolean GLAPIENTRY _mesa_IsVertexArrayAPPLE( GLuint id ); 132 133 #endif /* ARRAYOBJ_H */ 134