Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * mesa 3-D graphics library
  3.  * Version:  6.5
  4.  *
  5.  * Copyright (C) 1999-2006  Brian Paul   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.  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
  21.  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  22.  * CONNECTION WITH THE SOFTWARE OR THE USE OR 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 "main/mtypes.h"
  36.  
  37. struct _mesa_prim {
  38.    GLuint mode:8;
  39.    GLuint indexed:1;
  40.    GLuint begin:1;
  41.    GLuint end:1;
  42.    GLuint weak:1;
  43.    GLuint pad:20;
  44.  
  45.    GLuint start;
  46.    GLuint count;
  47.    GLint basevertex;
  48.    GLsizei num_instances;
  49. };
  50.  
  51. /* Would like to call this a "vbo_index_buffer", but this would be
  52.  * confusing as the indices are not neccessarily yet in a non-null
  53.  * buffer object.
  54.  */
  55. struct _mesa_index_buffer {
  56.    GLuint count;
  57.    GLenum type;
  58.    struct gl_buffer_object *obj;
  59.    const void *ptr;
  60. };
  61.  
  62.  
  63.  
  64. GLboolean _vbo_CreateContext( struct gl_context *ctx );
  65. void _vbo_DestroyContext( struct gl_context *ctx );
  66. void _vbo_InvalidateState( struct gl_context *ctx, GLuint new_state );
  67.  
  68.  
  69. typedef void (*vbo_draw_func)( struct gl_context *ctx,
  70.                                const struct gl_client_array **arrays,
  71.                                const struct _mesa_prim *prims,
  72.                                GLuint nr_prims,
  73.                                const struct _mesa_index_buffer *ib,
  74.                                GLboolean index_bounds_valid,
  75.                                GLuint min_index,
  76.                                GLuint max_index );
  77.  
  78.  
  79.  
  80.  
  81. /* Utility function to cope with various constraints on tnl modules or
  82.  * hardware.  This can be used to split an incoming set of arrays and
  83.  * primitives against the following constraints:
  84.  *    - Maximum number of indices in index buffer.
  85.  *    - Maximum number of vertices referenced by index buffer.
  86.  *    - Maximum hardware vertex buffer size.
  87.  */
  88. struct split_limits {
  89.    GLuint max_verts;
  90.    GLuint max_indices;
  91.    GLuint max_vb_size;          /* bytes */
  92. };
  93.  
  94.  
  95. void vbo_split_prims( struct gl_context *ctx,
  96.                       const struct gl_client_array *arrays[],
  97.                       const struct _mesa_prim *prim,
  98.                       GLuint nr_prims,
  99.                       const struct _mesa_index_buffer *ib,
  100.                       GLuint min_index,
  101.                       GLuint max_index,
  102.                       vbo_draw_func draw,
  103.                       const struct split_limits *limits );
  104.  
  105.  
  106. /* Helpers for dealing translating away non-zero min_index.
  107.  */
  108. GLboolean vbo_all_varyings_in_vbos( const struct gl_client_array *arrays[] );
  109. GLboolean vbo_any_varyings_in_vbos( const struct gl_client_array *arrays[] );
  110.  
  111. void vbo_rebase_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. void
  120. vbo_get_minmax_index(struct gl_context *ctx, const struct _mesa_prim *prim,
  121.                      const struct _mesa_index_buffer *ib,
  122.                      GLuint *min_index, GLuint *max_index);
  123.  
  124. void vbo_use_buffer_objects(struct gl_context *ctx);
  125.  
  126.  
  127. void vbo_set_draw_func(struct gl_context *ctx, vbo_draw_func func);
  128.  
  129.  
  130. void GLAPIENTRY
  131. _es_Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a);
  132.  
  133. void GLAPIENTRY
  134. _es_Normal3f(GLfloat x, GLfloat y, GLfloat z);
  135.  
  136. void GLAPIENTRY
  137. _es_MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
  138.  
  139. void GLAPIENTRY
  140. _es_Materialfv(GLenum face, GLenum pname, const GLfloat *params);
  141.  
  142. void GLAPIENTRY
  143. _es_Materialf(GLenum face, GLenum pname, GLfloat param);
  144.  
  145. void GLAPIENTRY
  146. _es_VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
  147.  
  148. void GLAPIENTRY
  149. _es_VertexAttrib1f(GLuint indx, GLfloat x);
  150.  
  151. void GLAPIENTRY
  152. _es_VertexAttrib1fv(GLuint indx, const GLfloat* values);
  153.  
  154. void GLAPIENTRY
  155. _es_VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
  156.  
  157. void GLAPIENTRY
  158. _es_VertexAttrib2fv(GLuint indx, const GLfloat* values);
  159.  
  160. void GLAPIENTRY
  161. _es_VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
  162.  
  163. void GLAPIENTRY
  164. _es_VertexAttrib3fv(GLuint indx, const GLfloat* values);
  165.  
  166. void GLAPIENTRY
  167. _es_VertexAttrib4fv(GLuint indx, const GLfloat* values);
  168.  
  169. #endif
  170.