vbo: add vbo_always_unmap_buffers()

Drivers can call this function as needed.  It tells the VBO module to
always unmap the current glBegin/glEnd VBO when we flush.  Otherwise
it's possible to be in a flushed state but still have the VBO mapped.
This commit is contained in:
Brian Paul
2011-03-01 17:16:53 -07:00
parent a2924b488b
commit 8731f0363f
3 changed files with 22 additions and 1 deletions
+1
View File
@@ -127,6 +127,7 @@ vbo_get_minmax_index(struct gl_context *ctx, const struct _mesa_prim *prim,
void vbo_use_buffer_objects(struct gl_context *ctx);
void vbo_always_unmap_buffers(struct gl_context *ctx);
void vbo_set_draw_func(struct gl_context *ctx, vbo_draw_func func);
+3
View File
@@ -143,6 +143,9 @@ struct vbo_exec_context
const struct gl_client_array *inputs[VERT_ATTRIB_MAX];
} array;
/* Which flags to set in vbo_exec_BeginVertices() */
GLbitfield begin_vertices_flags;
#ifdef DEBUG
GLint flush_call_depth;
#endif
+18 -1
View File
@@ -839,6 +839,19 @@ void vbo_use_buffer_objects(struct gl_context *ctx)
}
/**
* If this function is called, all VBO buffers will be unmapped when
* we flush.
* Otherwise, if a simple command like glColor3f() is called and we flush,
* the current VBO may be left mapped.
*/
void
vbo_always_unmap_buffers(struct gl_context *ctx)
{
struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
exec->begin_vertices_flags |= FLUSH_STORED_VERTICES;
}
void vbo_exec_vtx_init( struct vbo_exec_context *exec )
{
@@ -894,6 +907,8 @@ void vbo_exec_vtx_init( struct vbo_exec_context *exec )
}
exec->vtx.vertex_size = 0;
exec->begin_vertices_flags = FLUSH_UPDATE_CURRENT;
}
@@ -942,7 +957,9 @@ void vbo_exec_BeginVertices( struct gl_context *ctx )
vbo_exec_vtx_map( exec );
assert((ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) == 0);
ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;
assert(exec->begin_vertices_flags);
ctx->Driver.NeedFlush |= exec->begin_vertices_flags;
}