aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/vbo/vbo_context.h
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2012-04-23 18:11:38 +0200
committerMarek Olšák <[email protected]>2012-05-08 15:57:51 +0200
commita7ac9c9c7dc7401ca6143d1e7476df5e3c2758b7 (patch)
treebae7f2e88f0223705f2c2ec4b77394762597c69a /src/mesa/vbo/vbo_context.h
parentd6aa7cd7f82a3695243e1ecb1c73cdb796b12523 (diff)
vbo: move vbo_draw_method into vbo_context.h
I'll need vbo_context in that function soon. Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa/vbo/vbo_context.h')
-rw-r--r--src/mesa/vbo/vbo_context.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mesa/vbo/vbo_context.h b/src/mesa/vbo/vbo_context.h
index b9a8affa520..a6397ba2f8f 100644
--- a/src/mesa/vbo/vbo_context.h
+++ b/src/mesa/vbo/vbo_context.h
@@ -58,6 +58,18 @@
#include "vbo_save.h"
+/** 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_context {
struct gl_client_array currval[VBO_ATTRIB_MAX];
@@ -74,6 +86,8 @@ struct vbo_context {
* is responsible for initiating any fallback actions required:
*/
vbo_draw_func draw_prims;
+
+ enum draw_method last_draw_method;
};
@@ -101,4 +115,25 @@ get_program_mode( struct gl_context *ctx )
}
+/**
+ * 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_context *vbo, enum draw_method method)
+{
+ if (vbo->last_draw_method != method) {
+ struct gl_context *ctx = vbo->exec.ctx;
+ ctx->Driver.UpdateState(ctx, _NEW_ARRAY);
+ vbo->last_draw_method = method;
+ }
+}
+
#endif