Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
  5.  * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the "Software"),
  9.  * to deal in the Software without restriction, including without limitation
  10.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  11.  * and/or sell copies of the Software, and to permit persons to whom the
  12.  * Software is furnished to do so, subject to the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice shall be included
  15.  * in all copies or substantial portions of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  20.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  21.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  22.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  23.  * OTHER DEALINGS IN THE SOFTWARE.
  24.  */
  25.  
  26.  
  27. #ifndef VARRAY_H
  28. #define VARRAY_H
  29.  
  30.  
  31. #include "glheader.h"
  32. #include "bufferobj.h"
  33.  
  34. struct gl_client_array;
  35. struct gl_context;
  36.  
  37. /**
  38.  * Returns a pointer to the vertex attribute data in a client array,
  39.  * or the offset into the vertex buffer for an array that resides in
  40.  * a vertex buffer.
  41.  */
  42. static inline const GLubyte *
  43. _mesa_vertex_attrib_address(const struct gl_vertex_attrib_array *array,
  44.                             const struct gl_vertex_buffer_binding *binding)
  45. {
  46.    if (_mesa_is_bufferobj(binding->BufferObj))
  47.       return (const GLubyte *) (binding->Offset + array->RelativeOffset);
  48.    else
  49.       return array->Ptr;      
  50. }
  51.  
  52. /**
  53.  * Sets the fields in a gl_client_array to values derived from a
  54.  * gl_vertex_attrib_array and a gl_vertex_buffer_binding.
  55.  */
  56. static inline void
  57. _mesa_update_client_array(struct gl_context *ctx,
  58.                           struct gl_client_array *dst,
  59.                           const struct gl_vertex_attrib_array *src,
  60.                           const struct gl_vertex_buffer_binding *binding)
  61. {
  62.    dst->Size = src->Size;
  63.    dst->Type = src->Type;
  64.    dst->Format = src->Format;
  65.    dst->Stride = src->Stride;
  66.    dst->StrideB = binding->Stride;
  67.    dst->Ptr = _mesa_vertex_attrib_address(src, binding);
  68.    dst->Enabled = src->Enabled;
  69.    dst->Normalized = src->Normalized;
  70.    dst->Integer = src->Integer;
  71.    dst->Doubles = src->Doubles;
  72.    dst->InstanceDivisor = binding->InstanceDivisor;
  73.    dst->_ElementSize = src->_ElementSize;
  74.    _mesa_reference_buffer_object(ctx, &dst->BufferObj, binding->BufferObj);
  75. }
  76.  
  77. static inline bool
  78. _mesa_attr_zero_aliases_vertex(struct gl_context *ctx)
  79. {
  80.    const bool is_forward_compatible_context =
  81.       ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
  82.  
  83.    /* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES
  84.     * 2.0.  Note that we cannot just check for API_OPENGL_COMPAT here because
  85.     * that will erroneously allow this usage in a 3.0 forward-compatible
  86.     * context too.
  87.     */
  88.    return (ctx->API == API_OPENGLES
  89.            || (ctx->API == API_OPENGL_COMPAT
  90.                && !is_forward_compatible_context));
  91. }
  92.  
  93. extern void GLAPIENTRY
  94. _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride,
  95.                     const GLvoid *ptr);
  96.  
  97.  
  98. extern void GLAPIENTRY
  99. _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
  100.  
  101.  
  102. extern void GLAPIENTRY
  103. _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
  104.  
  105.  
  106. extern void GLAPIENTRY
  107. _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
  108.  
  109.  
  110. extern void GLAPIENTRY
  111. _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
  112.                       const GLvoid *ptr);
  113.  
  114.  
  115. extern void GLAPIENTRY
  116. _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr);
  117.  
  118.  
  119. extern void GLAPIENTRY
  120. _mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
  121.                        GLsizei count, const GLvoid *ptr);
  122.  
  123.  
  124. extern void GLAPIENTRY
  125. _mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
  126.                        const GLvoid *ptr);
  127.  
  128.  
  129. extern void GLAPIENTRY
  130. _mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count,
  131.                       const GLvoid *ptr);
  132.  
  133.  
  134. extern void GLAPIENTRY
  135. _mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
  136.                       const GLvoid *ptr);
  137.  
  138.  
  139. extern void GLAPIENTRY
  140. _mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
  141.                          GLsizei count, const GLvoid *ptr);
  142.  
  143.  
  144. extern void GLAPIENTRY
  145. _mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr);
  146.  
  147.  
  148. extern void GLAPIENTRY
  149. _mesa_FogCoordPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
  150.  
  151.  
  152. extern void GLAPIENTRY
  153. _mesa_SecondaryColorPointer(GLint size, GLenum type,
  154.                                GLsizei stride, const GLvoid *ptr);
  155.  
  156.  
  157. extern void GLAPIENTRY
  158. _mesa_PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *ptr);
  159.  
  160.  
  161. extern void GLAPIENTRY
  162. _mesa_VertexAttribPointer(GLuint index, GLint size, GLenum type,
  163.                              GLboolean normalized, GLsizei stride,
  164.                              const GLvoid *pointer);
  165.  
  166. void GLAPIENTRY
  167. _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
  168.                            GLsizei stride, const GLvoid *ptr);
  169.  
  170. extern void GLAPIENTRY
  171. _mesa_VertexAttribLPointer(GLuint index, GLint size, GLenum type,
  172.                            GLsizei stride, const GLvoid *pointer);
  173.  
  174. extern void GLAPIENTRY
  175. _mesa_EnableVertexAttribArray(GLuint index);
  176.  
  177.  
  178. extern void GLAPIENTRY
  179. _mesa_EnableVertexArrayAttrib(GLuint vaobj, GLuint index);
  180.  
  181.  
  182. extern void GLAPIENTRY
  183. _mesa_DisableVertexAttribArray(GLuint index);
  184.  
  185.  
  186. extern void GLAPIENTRY
  187. _mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index);
  188.  
  189.  
  190. extern void GLAPIENTRY
  191. _mesa_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params);
  192.  
  193. extern void GLAPIENTRY
  194. _mesa_GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params);
  195.  
  196. extern void GLAPIENTRY
  197. _mesa_GetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params);
  198.  
  199. extern void GLAPIENTRY
  200. _mesa_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params);
  201.  
  202.  
  203. extern void GLAPIENTRY
  204. _mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
  205.  
  206.  
  207. extern void GLAPIENTRY
  208. _mesa_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
  209.  
  210.  
  211. extern void GLAPIENTRY
  212. _mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer);
  213.  
  214.  
  215. void GLAPIENTRY
  216. _mesa_GetVertexArrayIndexediv(GLuint vaobj, GLuint index,
  217.                               GLenum pname, GLint *param);
  218.  
  219.  
  220. void GLAPIENTRY
  221. _mesa_GetVertexArrayIndexed64iv(GLuint vaobj, GLuint index,
  222.                                 GLenum pname, GLint64 *param);
  223.  
  224.  
  225. extern void GLAPIENTRY
  226. _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer);
  227.  
  228.  
  229. extern void GLAPIENTRY
  230. _mesa_MultiDrawArrays( GLenum mode, const GLint *first,
  231.                           const GLsizei *count, GLsizei primcount );
  232.  
  233. extern void GLAPIENTRY
  234. _mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
  235.                             const GLvoid **indices, GLsizei primcount );
  236.  
  237. extern void GLAPIENTRY
  238. _mesa_MultiDrawElementsBaseVertex( GLenum mode,
  239.                                    const GLsizei *count, GLenum type,
  240.                                    const GLvoid **indices, GLsizei primcount,
  241.                                    const GLint *basevertex);
  242.  
  243. extern void GLAPIENTRY
  244. _mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
  245.                               const GLsizei * count,
  246.                               GLsizei primcount, GLint modestride );
  247.  
  248.  
  249. extern void GLAPIENTRY
  250. _mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
  251.                                 GLenum type, const GLvoid * const * indices,
  252.                                 GLsizei primcount, GLint modestride );
  253.  
  254. extern void GLAPIENTRY
  255. _mesa_LockArraysEXT(GLint first, GLsizei count);
  256.  
  257. extern void GLAPIENTRY
  258. _mesa_UnlockArraysEXT( void );
  259.  
  260.  
  261. extern void GLAPIENTRY
  262. _mesa_DrawArrays(GLenum mode, GLint first, GLsizei count);
  263.  
  264. extern void GLAPIENTRY
  265. _mesa_DrawArraysInstanced(GLenum mode, GLint first, GLsizei count,
  266.                           GLsizei primcount);
  267.  
  268. extern void GLAPIENTRY
  269. _mesa_DrawElements(GLenum mode, GLsizei count, GLenum type,
  270.                    const GLvoid *indices);
  271.  
  272. extern void GLAPIENTRY
  273. _mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count,
  274.                         GLenum type, const GLvoid *indices);
  275.  
  276. extern void GLAPIENTRY
  277. _mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
  278.                              const GLvoid *indices, GLint basevertex);
  279.  
  280. extern void GLAPIENTRY
  281. _mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end,
  282.                                   GLsizei count, GLenum type,
  283.                                   const GLvoid *indices,
  284.                                   GLint basevertex);
  285.  
  286. extern void GLAPIENTRY
  287. _mesa_DrawTransformFeedback(GLenum mode, GLuint name);
  288.  
  289. extern void GLAPIENTRY
  290. _mesa_PrimitiveRestartIndex(GLuint index);
  291.  
  292.  
  293. extern void GLAPIENTRY
  294. _mesa_VertexAttribDivisor(GLuint index, GLuint divisor);
  295.  
  296. extern unsigned
  297. _mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type);
  298.  
  299. extern void GLAPIENTRY
  300. _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset,
  301.                        GLsizei stride);
  302.  
  303. extern void GLAPIENTRY
  304. _mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
  305.                               GLintptr offset, GLsizei stride);
  306.  
  307. extern void GLAPIENTRY
  308. _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
  309.                         const GLintptr *offsets, const GLsizei *strides);
  310.  
  311. extern void GLAPIENTRY
  312. _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count,
  313.                                const GLuint *buffers,
  314.                                const GLintptr *offsets, const GLsizei *strides);
  315.  
  316. extern void GLAPIENTRY
  317. _mesa_VertexAttribFormat(GLuint attribIndex, GLint size, GLenum type,
  318.                          GLboolean normalized, GLuint relativeOffset);
  319.  
  320. extern void GLAPIENTRY
  321. _mesa_VertexArrayAttribFormat(GLuint vaobj, GLuint attribIndex, GLint size,
  322.                               GLenum type, GLboolean normalized,
  323.                               GLuint relativeOffset);
  324.  
  325. extern void GLAPIENTRY
  326. _mesa_VertexAttribIFormat(GLuint attribIndex, GLint size, GLenum type,
  327.                           GLuint relativeOffset);
  328.  
  329. extern void GLAPIENTRY
  330. _mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex,
  331.                                GLint size, GLenum type,
  332.                                GLuint relativeOffset);
  333.  
  334. extern void GLAPIENTRY
  335. _mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type,
  336.                           GLuint relativeOffset);
  337.  
  338. extern void GLAPIENTRY
  339. _mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex,
  340.                                GLint size, GLenum type,
  341.                                GLuint relativeOffset);
  342.  
  343. extern void GLAPIENTRY
  344. _mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex);
  345.  
  346. extern void GLAPIENTRY
  347. _mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex,
  348.                                GLuint bindingIndex);
  349.  
  350. extern void GLAPIENTRY
  351. _mesa_VertexBindingDivisor(GLuint bindingIndex, GLuint divisor);
  352.  
  353. extern void GLAPIENTRY
  354. _mesa_VertexArrayBindingDivisor(GLuint vaobj, GLuint bindingIndex, GLuint divisor);
  355.  
  356. extern void
  357. _mesa_copy_client_array(struct gl_context *ctx,
  358.                         struct gl_client_array *dst,
  359.                         struct gl_client_array *src);
  360.  
  361. extern void
  362. _mesa_copy_vertex_attrib_array(struct gl_context *ctx,
  363.                                struct gl_vertex_attrib_array *dst,
  364.                                const struct gl_vertex_attrib_array *src);
  365.  
  366. extern void
  367. _mesa_copy_vertex_buffer_binding(struct gl_context *ctx,
  368.                                  struct gl_vertex_buffer_binding *dst,
  369.                                  const struct gl_vertex_buffer_binding *src);
  370.  
  371. extern void
  372. _mesa_print_arrays(struct gl_context *ctx);
  373.  
  374. extern void
  375. _mesa_init_varray( struct gl_context * ctx );
  376.  
  377. extern void
  378. _mesa_free_varray_data(struct gl_context *ctx);
  379.  
  380. #endif
  381.