Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22.  * OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25. /**
  26.  * \file vbo_context.h
  27.  * \brief VBO builder module datatypes and definitions.
  28.  * \author Keith Whitwell
  29.  */
  30.  
  31.  
  32. #ifndef _VBO_H
  33. #define _VBO_H
  34.  
  35. #include <stdbool.h>
  36. #include "main/glheader.h"
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. struct gl_client_array;
  43. struct gl_context;
  44. struct gl_transform_feedback_object;
  45.  
  46. struct _mesa_prim {
  47.    GLuint mode:8;    /**< GL_POINTS, GL_LINES, GL_QUAD_STRIP, etc */
  48.    GLuint indexed:1;
  49.    GLuint begin:1;
  50.    GLuint end:1;
  51.    GLuint weak:1;
  52.    GLuint no_current_update:1;
  53.    GLuint is_indirect:1;
  54.    GLuint pad:18;
  55.  
  56.    GLuint start;
  57.    GLuint count;
  58.    GLint basevertex;
  59.    GLuint num_instances;
  60.    GLuint base_instance;
  61.  
  62.    GLsizeiptr indirect_offset;
  63. };
  64.  
  65. /* Would like to call this a "vbo_index_buffer", but this would be
  66.  * confusing as the indices are not neccessarily yet in a non-null
  67.  * buffer object.
  68.  */
  69. struct _mesa_index_buffer {
  70.    GLuint count;
  71.    GLenum type;
  72.    struct gl_buffer_object *obj;
  73.    const void *ptr;
  74. };
  75.  
  76.  
  77.  
  78. GLboolean _vbo_CreateContext( struct gl_context *ctx );
  79. void _vbo_DestroyContext( struct gl_context *ctx );
  80. void _vbo_InvalidateState( struct gl_context *ctx, GLuint new_state );
  81.  
  82.  
  83. void
  84. vbo_initialize_exec_dispatch(const struct gl_context *ctx,
  85.                              struct _glapi_table *exec);
  86.  
  87. void
  88. vbo_initialize_save_dispatch(const struct gl_context *ctx,
  89.                              struct _glapi_table *exec);
  90.  
  91.  
  92. typedef void (*vbo_draw_func)( struct gl_context *ctx,
  93.                                const struct _mesa_prim *prims,
  94.                                GLuint nr_prims,
  95.                                const struct _mesa_index_buffer *ib,
  96.                                GLboolean index_bounds_valid,
  97.                                GLuint min_index,
  98.                                GLuint max_index,
  99.                                struct gl_transform_feedback_object *tfb_vertcount,
  100.                                struct gl_buffer_object *indirect );
  101.  
  102.  
  103.  
  104.  
  105. /* Utility function to cope with various constraints on tnl modules or
  106.  * hardware.  This can be used to split an incoming set of arrays and
  107.  * primitives against the following constraints:
  108.  *    - Maximum number of indices in index buffer.
  109.  *    - Maximum number of vertices referenced by index buffer.
  110.  *    - Maximum hardware vertex buffer size.
  111.  */
  112. struct split_limits {
  113.    GLuint max_verts;
  114.    GLuint max_indices;
  115.    GLuint max_vb_size;          /* bytes */
  116. };
  117.  
  118.  
  119. void vbo_split_prims( struct gl_context *ctx,
  120.                       const struct gl_client_array *arrays[],
  121.                       const struct _mesa_prim *prim,
  122.                       GLuint nr_prims,
  123.                       const struct _mesa_index_buffer *ib,
  124.                       GLuint min_index,
  125.                       GLuint max_index,
  126.                       vbo_draw_func draw,
  127.                       const struct split_limits *limits );
  128.  
  129.  
  130. /* Helpers for dealing translating away non-zero min_index.
  131.  */
  132. GLboolean vbo_all_varyings_in_vbos( const struct gl_client_array *arrays[] );
  133. GLboolean vbo_any_varyings_in_vbos( const struct gl_client_array *arrays[] );
  134.  
  135. void vbo_rebase_prims( struct gl_context *ctx,
  136.                        const struct gl_client_array *arrays[],
  137.                        const struct _mesa_prim *prim,
  138.                        GLuint nr_prims,
  139.                        const struct _mesa_index_buffer *ib,
  140.                        GLuint min_index,
  141.                        GLuint max_index,
  142.                        vbo_draw_func draw );
  143.  
  144. static inline int
  145. vbo_sizeof_ib_type(GLenum type)
  146. {
  147.    switch (type) {
  148.    case GL_UNSIGNED_INT:
  149.       return sizeof(GLuint);
  150.    case GL_UNSIGNED_SHORT:
  151.       return sizeof(GLushort);
  152.    case GL_UNSIGNED_BYTE:
  153.       return sizeof(GLubyte);
  154.    default:
  155.       assert(!"unsupported index data type");
  156.       /* In case assert is turned off */
  157.       return 0;
  158.    }
  159. }
  160.  
  161. void
  162. vbo_get_minmax_indices(struct gl_context *ctx, const struct _mesa_prim *prim,
  163.                        const struct _mesa_index_buffer *ib,
  164.                        GLuint *min_index, GLuint *max_index, GLuint nr_prims);
  165.  
  166. void vbo_use_buffer_objects(struct gl_context *ctx);
  167.  
  168. void vbo_always_unmap_buffers(struct gl_context *ctx);
  169.  
  170. void vbo_set_draw_func(struct gl_context *ctx, vbo_draw_func func);
  171.  
  172. void vbo_check_buffers_are_unmapped(struct gl_context *ctx);
  173.  
  174. void vbo_bind_arrays(struct gl_context *ctx);
  175.  
  176. size_t
  177. vbo_count_tessellated_primitives(GLenum mode, GLuint count,
  178.                                  GLuint num_instances);
  179.  
  180. void
  181. vbo_try_prim_conversion(struct _mesa_prim *p);
  182.  
  183. bool
  184. vbo_can_merge_prims(const struct _mesa_prim *p0, const struct _mesa_prim *p1);
  185.  
  186. void
  187. vbo_merge_prims(struct _mesa_prim *p0, const struct _mesa_prim *p1);
  188.  
  189. void
  190. vbo_sw_primitive_restart(struct gl_context *ctx,
  191.                          const struct _mesa_prim *prim,
  192.                          GLuint nr_prims,
  193.                          const struct _mesa_index_buffer *ib,
  194.                          struct gl_buffer_object *indirect);
  195.  
  196. void GLAPIENTRY
  197. _es_Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a);
  198.  
  199. void GLAPIENTRY
  200. _es_Normal3f(GLfloat x, GLfloat y, GLfloat z);
  201.  
  202. void GLAPIENTRY
  203. _es_MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
  204.  
  205. void GLAPIENTRY
  206. _es_Materialfv(GLenum face, GLenum pname, const GLfloat *params);
  207.  
  208. void GLAPIENTRY
  209. _es_Materialf(GLenum face, GLenum pname, GLfloat param);
  210.  
  211. void GLAPIENTRY
  212. _es_VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
  213.  
  214. void GLAPIENTRY
  215. _es_VertexAttrib1f(GLuint indx, GLfloat x);
  216.  
  217. void GLAPIENTRY
  218. _es_VertexAttrib1fv(GLuint indx, const GLfloat* values);
  219.  
  220. void GLAPIENTRY
  221. _es_VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
  222.  
  223. void GLAPIENTRY
  224. _es_VertexAttrib2fv(GLuint indx, const GLfloat* values);
  225.  
  226. void GLAPIENTRY
  227. _es_VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
  228.  
  229. void GLAPIENTRY
  230. _es_VertexAttrib3fv(GLuint indx, const GLfloat* values);
  231.  
  232. void GLAPIENTRY
  233. _es_VertexAttrib4fv(GLuint indx, const GLfloat* values);
  234.  
  235. #ifdef __cplusplus
  236. } // extern "C"
  237. #endif
  238.  
  239. #endif
  240.