aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/mesa/vbo/vbo_exec.h
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2011-12-29 00:17:36 +0100
committerMarc Haesen <marc@hc-consult.be>2011-12-29 00:17:36 +0100
commitd515b895dc5151d102f33b577cafbf63473bbafa (patch)
tree98986aec1f43152c3c5f4f8f8a19d29f88b42d83 /mesalib/src/mesa/vbo/vbo_exec.h
parentecb8be4d2a289c5308f3f23929116d2fe6aafa4b (diff)
parent9715b7fab0757c86e1bb151f3dce0b324bcff692 (diff)
downloadvcxsrv-d515b895dc5151d102f33b577cafbf63473bbafa.tar.gz
vcxsrv-d515b895dc5151d102f33b577cafbf63473bbafa.tar.bz2
vcxsrv-d515b895dc5151d102f33b577cafbf63473bbafa.zip
Merge remote-tracking branch 'origin/released'
Diffstat (limited to 'mesalib/src/mesa/vbo/vbo_exec.h')
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec.h42
1 files changed, 36 insertions, 6 deletions
diff --git a/mesalib/src/mesa/vbo/vbo_exec.h b/mesalib/src/mesa/vbo/vbo_exec.h
index cfed8e86d..f6ede99cd 100644
--- a/mesalib/src/mesa/vbo/vbo_exec.h
+++ b/mesalib/src/mesa/vbo/vbo_exec.h
@@ -78,12 +78,26 @@ struct vbo_exec_copied_vtx {
};
+/** Used to signal when transitioning from one kind of drawing method
+ * to another.
+ */
+enum draw_method
+{
+ DRAW_NONE, /**< Initial value only */
+ DRAW_BEGIN_END,
+ DRAW_DISPLAY_LIST,
+ DRAW_ARRAYS
+};
+
+
struct vbo_exec_context
{
struct gl_context *ctx;
GLvertexformat vtxfmt;
GLvertexformat vtxfmt_noop;
+ enum draw_method last_draw_method;
+
struct {
struct gl_buffer_object *bufferobj;
@@ -122,12 +136,6 @@ struct vbo_exec_context
} eval;
struct {
- /* These just mirror the current arrayobj (todo: make arrayobj
- * look like this and remove the mirror):
- */
- const struct gl_client_array *legacy_array[VERT_ATTRIB_FF_MAX];
- const struct gl_client_array *generic_array[VERT_ATTRIB_GENERIC_MAX];
-
/* Arrays and current values manipulated according to program
* mode, etc. These are the attributes as seen by vertex
* programs:
@@ -164,6 +172,28 @@ void vbo_exec_array_destroy( struct vbo_exec_context *exec );
void vbo_exec_vtx_init( struct vbo_exec_context *exec );
void vbo_exec_vtx_destroy( struct vbo_exec_context *exec );
+
+/**
+ * This is called by glBegin, glDrawArrays and glDrawElements (and
+ * variations of those calls). When we transition from immediate mode
+ * drawing to array drawing we need to invalidate the array state.
+ *
+ * glBegin/End builds vertex arrays. Those arrays may look identical
+ * to glDrawArrays arrays except that the position of the elements may
+ * be different. For example, arrays of (position3v, normal3f) vs. arrays
+ * of (normal3f, position3f). So we need to make sure we notify drivers
+ * that arrays may be changing.
+ */
+static inline void
+vbo_draw_method(struct vbo_exec_context *exec, enum draw_method method)
+{
+ if (exec->last_draw_method != method) {
+ exec->ctx->NewState |= _NEW_ARRAY;
+ exec->last_draw_method = method;
+ }
+}
+
+
#if FEATURE_beginend
void vbo_exec_vtx_flush( struct vbo_exec_context *exec, GLboolean unmap );