*
*/
-#ifndef __VBO_EXEC_H__
-#define __VBO_EXEC_H__
+#ifndef VBO_EXEC_H
+#define VBO_EXEC_H
-#include "main/mtypes.h"
+#include "main/dd.h"
+#include "main/imports.h"
#include "vbo.h"
#include "vbo_attrib.h"
/**
- * Size of the VBO to use for glBegin/glVertex/glEnd-style rendering.
+ * Size (in bytes) of the VBO to use for glBegin/glVertex/glEnd-style rendering.
*/
-#define VBO_VERT_BUFFER_SIZE (1024*64) /* bytes */
-
-
-/** Current vertex program mode */
-enum vp_mode {
- VP_NONE, /**< fixed function */
- VP_ARB /**< ARB vertex program or GLSL vertex shader */
-};
+#define VBO_VERT_BUFFER_SIZE (1024 * 64)
struct vbo_exec_eval1_map {
struct vbo_exec_copied_vtx {
- GLfloat buffer[VBO_ATTRIB_MAX * 4 * VBO_MAX_COPIED_VERTS];
+ fi_type buffer[VBO_ATTRIB_MAX * 4 * VBO_MAX_COPIED_VERTS];
GLuint nr;
};
struct vbo_exec_context
{
- struct gl_context *ctx;
+ struct gl_context *ctx;
GLvertexformat vtxfmt;
GLvertexformat vtxfmt_noop;
- GLboolean validating; /**< if we're in the middle of state validation */
struct {
struct gl_buffer_object *bufferobj;
struct _mesa_prim prim[VBO_MAX_PRIM];
GLuint prim_count;
- GLfloat *buffer_map;
- GLfloat *buffer_ptr; /* cursor, points into buffer */
+ fi_type *buffer_map;
+ fi_type *buffer_ptr; /* cursor, points into buffer */
GLuint buffer_used; /* in bytes */
- GLfloat vertex[VBO_ATTRIB_MAX*4]; /* current vertex */
+ fi_type vertex[VBO_ATTRIB_MAX*4]; /* current vertex */
- GLuint vert_count;
- GLuint max_vert;
+ GLuint vert_count; /**< Number of vertices currently in buffer */
+ GLuint max_vert; /**< Max number of vertices allowed in buffer */
struct vbo_exec_copied_vtx copied;
- GLubyte attrsz[VBO_ATTRIB_MAX];
- GLenum attrtype[VBO_ATTRIB_MAX];
- GLubyte active_sz[VBO_ATTRIB_MAX];
+ GLbitfield64 enabled; /**< mask of enabled vbo arrays. */
+ GLubyte attrsz[VBO_ATTRIB_MAX]; /**< nr. of attrib components (1..4) */
+ GLenum16 attrtype[VBO_ATTRIB_MAX]; /**< GL_FLOAT, GL_DOUBLE, GL_INT, etc */
+ GLubyte active_sz[VBO_ATTRIB_MAX]; /**< attrib size (nr. 32-bit words) */
- GLfloat *attrptr[VBO_ATTRIB_MAX];
- struct gl_client_array arrays[VERT_ATTRIB_MAX];
-
- /* According to program mode, the values above plus current
- * values are squashed down to the 32 attributes passed to the
- * vertex program below:
- */
- const struct gl_client_array *inputs[VERT_ATTRIB_MAX];
+ /** pointers into the current 'vertex' array, declared above */
+ fi_type *attrptr[VBO_ATTRIB_MAX];
} vtx;
-
struct {
GLboolean recalculate_maps;
struct vbo_exec_eval1_map map1[VERT_ATTRIB_MAX];
struct vbo_exec_eval2_map map2[VERT_ATTRIB_MAX];
} eval;
- struct {
- /* Arrays and current values manipulated according to program
- * mode, etc. These are the attributes as seen by vertex
- * programs:
- */
- const struct gl_client_array *inputs[VERT_ATTRIB_MAX];
- GLboolean recalculate_inputs;
- } array;
-
- /* Which flags to set in vbo_exec_BeginVertices() */
+ /* Which flags to set in vbo_exec_begin_vertices() */
GLbitfield begin_vertices_flags;
#ifdef DEBUG
-/* External API:
- */
-void vbo_exec_init( struct gl_context *ctx );
-void vbo_exec_destroy( struct gl_context *ctx );
-void vbo_exec_invalidate_state( struct gl_context *ctx, GLuint new_state );
-
-void vbo_exec_BeginVertices( struct gl_context *ctx );
-void vbo_exec_FlushVertices( struct gl_context *ctx, GLuint flags );
-
-
-/* Internal functions:
- */
+void
+vbo_exec_init(struct gl_context *ctx);
-void vbo_exec_vtx_init( struct vbo_exec_context *exec );
-void vbo_exec_vtx_destroy( struct vbo_exec_context *exec );
+void
+vbo_exec_destroy(struct gl_context *ctx);
+void
+vbo_exec_vtx_init(struct vbo_exec_context *exec);
-void vbo_exec_vtx_flush( struct vbo_exec_context *exec, GLboolean unmap );
-void vbo_exec_vtx_map( struct vbo_exec_context *exec );
+void
+vbo_exec_vtx_destroy(struct vbo_exec_context *exec);
+void
+vbo_exec_vtx_flush(struct vbo_exec_context *exec, GLboolean unmap);
-void vbo_exec_vtx_wrap( struct vbo_exec_context *exec );
+void
+vbo_exec_vtx_map(struct vbo_exec_context *exec);
-void vbo_exec_eval_update( struct vbo_exec_context *exec );
+void
+vbo_exec_eval_update(struct vbo_exec_context *exec);
-void vbo_exec_do_EvalCoord2f( struct vbo_exec_context *exec,
- GLfloat u, GLfloat v );
+void
+vbo_exec_do_EvalCoord2f(struct vbo_exec_context *exec, GLfloat u, GLfloat v);
-void vbo_exec_do_EvalCoord1f( struct vbo_exec_context *exec,
- GLfloat u);
+void
+vbo_exec_do_EvalCoord1f(struct vbo_exec_context *exec, GLfloat u);
#endif