Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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. struct gl_client_array;
  39. struct gl_context;
  40. struct gl_transform_feedback_object;
  41.  
  42. struct _mesa_prim {
  43.    GLuint mode:8;    /**< GL_POINTS, GL_LINES, GL_QUAD_STRIP, etc */
  44.    GLuint indexed:1;
  45.    GLuint begin:1;
  46.    GLuint end:1;
  47.    GLuint weak:1;
  48.    GLuint no_current_update:1;
  49.    GLuint pad:19;
  50.  
  51.    GLuint start;
  52.    GLuint count;
  53.    GLint basevertex;
  54.    GLuint num_instances;
  55.    GLuint base_instance;
  56. };
  57.  
  58. /* Would like to call this a "vbo_index_buffer", but this would be
  59.  * confusing as the indices are not neccessarily yet in a non-null
  60.  * buffer object.
  61.  */
  62. struct _mesa_index_buffer {
  63.    GLuint count;
  64.    GLenum type;
  65.    struct gl_buffer_object *obj;
  66.    const void *ptr;
  67. };
  68.  
  69.  
  70.  
  71. GLboolean _vbo_CreateContext( struct gl_context *ctx );
  72. void _vbo_DestroyContext( struct gl_context *ctx );
  73. void _vbo_InvalidateState( struct gl_context *ctx, GLuint new_state );
  74.  
  75.  
  76. void
  77. vbo_initialize_exec_dispatch(const struct gl_context *ctx,
  78.                              struct _glapi_table *exec);
  79.  
  80. void
  81. vbo_initialize_save_dispatch(const struct gl_context *ctx,
  82.                              struct _glapi_table *exec);
  83.  
  84.  
  85. typedef void (*vbo_draw_func)( struct gl_context *ctx,
  86.                                const struct _mesa_prim *prims,
  87.                                GLuint nr_prims,
  88.                                const struct _mesa_index_buffer *ib,
  89.                                GLboolean index_bounds_valid,
  90.                                GLuint min_index,
  91.                                GLuint max_index,
  92.                                struct gl_transform_feedback_object *tfb_vertcount );
  93.  
  94.  
  95.  
  96.  
  97. /* Utility function to cope with various constraints on tnl modules or
  98.  * hardware.  This can be used to split an incoming set of arrays and
  99.  * primitives against the following constraints:
  100.  *    - Maximum number of indices in index buffer.
  101.  *    - Maximum number of vertices referenced by index buffer.
  102.  *    - Maximum hardware vertex buffer size.
  103.  */
  104. struct split_limits {
  105.    GLuint max_verts;
  106.    GLuint max_indices;
  107.    GLuint max_vb_size;          /* bytes */
  108. };
  109.  
  110.  
  111. void vbo_split_prims( struct gl_context *ctx,
  112.                       const struct gl_client_array *arrays[],
  113.                       const struct _mesa_prim *prim,
  114.                       GLuint nr_prims,
  115.                       const struct _mesa_index_buffer *ib,
  116.                       GLuint min_index,
  117.                       GLuint max_index,
  118.                       vbo_draw_func draw,
  119.                       const struct split_limits *limits );
  120.  
  121.  
  122. /* Helpers for dealing translating away non-zero min_index.
  123.  */
  124. GLboolean vbo_all_varyings_in_vbos( const struct gl_client_array *arrays[] );
  125. GLboolean vbo_any_varyings_in_vbos( const struct gl_client_array *arrays[] );
  126.  
  127. void vbo_rebase_prims( struct gl_context *ctx,
  128.                        const struct gl_client_array *arrays[],
  129.                        const struct _mesa_prim *prim,
  130.                        GLuint nr_prims,
  131.                        const struct _mesa_index_buffer *ib,
  132.                        GLuint min_index,
  133.                        GLuint max_index,
  134.                        vbo_draw_func draw );
  135.  
  136. static inline int
  137. vbo_sizeof_ib_type(GLenum type)
  138. {
  139.    switch (type) {
  140.    case GL_UNSIGNED_INT:
  141.       return sizeof(GLuint);
  142.    case GL_UNSIGNED_SHORT:
  143.       return sizeof(GLushort);
  144.    case GL_UNSIGNED_BYTE:
  145.       return sizeof(GLubyte);
  146.    default:
  147.       assert(!"unsupported index data type");
  148.       /* In case assert is turned off */
  149.       return 0;
  150.    }
  151. }
  152.  
  153. void
  154. vbo_get_minmax_indices(struct gl_context *ctx, const struct _mesa_prim *prim,
  155.                        const struct _mesa_index_buffer *ib,
  156.                        GLuint *min_index, GLuint *max_index, GLuint nr_prims);
  157.  
  158. void vbo_use_buffer_objects(struct gl_context *ctx);
  159.  
  160. void vbo_always_unmap_buffers(struct gl_context *ctx);
  161.  
  162. void vbo_set_draw_func(struct gl_context *ctx, vbo_draw_func func);
  163.  
  164. void vbo_check_buffers_are_unmapped(struct gl_context *ctx);
  165.  
  166. void vbo_bind_arrays(struct gl_context *ctx);
  167.  
  168. size_t
  169. vbo_count_tessellated_primitives(GLenum mode, GLuint count,
  170.                                  GLuint num_instances);
  171.  
  172. void
  173. vbo_try_prim_conversion(struct _mesa_prim *p);
  174.  
  175. bool
  176. vbo_can_merge_prims(const struct _mesa_prim *p0, const struct _mesa_prim *p1);
  177.  
  178. void
  179. vbo_merge_prims(struct _mesa_prim *p0, const struct _mesa_prim *p1);
  180.  
  181. void
  182. vbo_sw_primitive_restart(struct gl_context *ctx,
  183.                          const struct _mesa_prim *prim,
  184.                          GLuint nr_prims,
  185.                          const struct _mesa_index_buffer *ib);
  186.  
  187. void GLAPIENTRY
  188. _es_Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a);
  189.  
  190. void GLAPIENTRY
  191. _es_Normal3f(GLfloat x, GLfloat y, GLfloat z);
  192.  
  193. void GLAPIENTRY
  194. _es_MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
  195.  
  196. void GLAPIENTRY
  197. _es_Materialfv(GLenum face, GLenum pname, const GLfloat *params);
  198.  
  199. void GLAPIENTRY
  200. _es_Materialf(GLenum face, GLenum pname, GLfloat param);
  201.  
  202. void GLAPIENTRY
  203. _es_VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
  204.  
  205. void GLAPIENTRY
  206. _es_VertexAttrib1f(GLuint indx, GLfloat x);
  207.  
  208. void GLAPIENTRY
  209. _es_VertexAttrib1fv(GLuint indx, const GLfloat* values);
  210.  
  211. void GLAPIENTRY
  212. _es_VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
  213.  
  214. void GLAPIENTRY
  215. _es_VertexAttrib2fv(GLuint indx, const GLfloat* values);
  216.  
  217. void GLAPIENTRY
  218. _es_VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
  219.  
  220. void GLAPIENTRY
  221. _es_VertexAttrib3fv(GLuint indx, const GLfloat* values);
  222.  
  223. void GLAPIENTRY
  224. _es_VertexAttrib4fv(GLuint indx, const GLfloat* values);
  225.  
  226. #endif
  227.