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