diff options
author | marha <marha@users.sourceforge.net> | 2011-12-29 00:17:36 +0100 |
---|---|---|
committer | Marc Haesen <marc@hc-consult.be> | 2011-12-29 00:17:36 +0100 |
commit | d515b895dc5151d102f33b577cafbf63473bbafa (patch) | |
tree | 98986aec1f43152c3c5f4f8f8a19d29f88b42d83 /mesalib/src/mesa/vbo/vbo_exec.h | |
parent | ecb8be4d2a289c5308f3f23929116d2fe6aafa4b (diff) | |
parent | 9715b7fab0757c86e1bb151f3dce0b324bcff692 (diff) | |
download | vcxsrv-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.h | 42 |
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 ); |