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 35struct gl_context; 36 37/** 38 * \file arrayobj.h 39 * Functions for the GL_APPLE_vertex_array_object extension. 40 * 41 * \author Ian Romanick <idr@us.ibm.com> 42 * \author Brian Paul 43 */ 44 45/* 46 * Internal functions 47 */ 48 49extern struct gl_array_object * 50_mesa_new_array_object( struct gl_context *ctx, GLuint name ); 51 52extern void 53_mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ); 54 55extern void 56_mesa_reference_array_object_(struct gl_context *ctx, 57 struct gl_array_object **ptr, 58 struct gl_array_object *arrayObj); 59 60static 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 70extern void 71_mesa_initialize_array_object( struct gl_context *ctx, 72 struct gl_array_object *obj, GLuint name ); 73 74 75extern 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 */ 84static 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 */ 95static 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 */ 108static 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 121void GLAPIENTRY _mesa_BindVertexArray( GLuint id ); 122 123void GLAPIENTRY _mesa_BindVertexArrayAPPLE( GLuint id ); 124 125void GLAPIENTRY _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids); 126 127void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays); 128 129void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer); 130 131GLboolean GLAPIENTRY _mesa_IsVertexArrayAPPLE( GLuint id ); 132 133#endif /* ARRAYOBJ_H */ 134