diff options
author | Brian Paul <[email protected]> | 2012-02-07 13:08:53 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2012-02-09 08:18:50 -0700 |
commit | 781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25 (patch) | |
tree | aaea2a928d53df2ccc60332216b4b2cb65ac368e /src/mesa/vbo/vbo_save_api.c | |
parent | 8b4f7b0672d663273310fffa9490ad996f5b914a (diff) |
vbo: unmap vertex store before executing lists
We don't want our VBOs mapped when we're drawing. This change checks
if the vertex store VBO is mapped before we execute a list, unmaps it,
then remaps it after drawing. This situation pops up when building a
nested display list in GL_COMPILE_AND_EXECUTE mode.
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/vbo/vbo_save_api.c')
-rw-r--r-- | src/mesa/vbo/vbo_save_api.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c index 9521367475e..13604333e95 100644 --- a/src/mesa/vbo/vbo_save_api.c +++ b/src/mesa/vbo/vbo_save_api.c @@ -237,9 +237,9 @@ free_vertex_store(struct gl_context *ctx, } -static GLfloat * -map_vertex_store(struct gl_context *ctx, - struct vbo_save_vertex_store *vertex_store) +GLfloat * +vbo_save_map_vertex_store(struct gl_context *ctx, + struct vbo_save_vertex_store *vertex_store) { assert(vertex_store->bufferobj); assert(!vertex_store->buffer); @@ -259,9 +259,9 @@ map_vertex_store(struct gl_context *ctx, } -static void -unmap_vertex_store(struct gl_context *ctx, - struct vbo_save_vertex_store *vertex_store) +void +vbo_save_unmap_vertex_store(struct gl_context *ctx, + struct vbo_save_vertex_store *vertex_store) { if (vertex_store->bufferobj->Size > 0) { ctx->Driver.UnmapBuffer(ctx, vertex_store->bufferobj); @@ -407,7 +407,7 @@ _save_compile_vertex_list(struct gl_context *ctx) /* Unmap old store: */ - unmap_vertex_store(ctx, save->vertex_store); + vbo_save_unmap_vertex_store(ctx, save->vertex_store); /* Release old reference: */ @@ -418,7 +418,7 @@ _save_compile_vertex_list(struct gl_context *ctx) /* Allocate and map new store: */ save->vertex_store = alloc_vertex_store(ctx); - save->buffer_ptr = map_vertex_store(ctx, save->vertex_store); + save->buffer_ptr = vbo_save_map_vertex_store(ctx, save->vertex_store); save->out_of_memory = save->buffer_ptr == NULL; } @@ -1398,7 +1398,7 @@ vbo_save_NewList(struct gl_context *ctx, GLuint list, GLenum mode) if (!save->vertex_store) save->vertex_store = alloc_vertex_store(ctx); - save->buffer_ptr = map_vertex_store(ctx, save->vertex_store); + save->buffer_ptr = vbo_save_map_vertex_store(ctx, save->vertex_store); _save_reset_vertex(ctx); _save_reset_counters(ctx); @@ -1435,7 +1435,7 @@ vbo_save_EndList(struct gl_context *ctx) _mesa_install_save_vtxfmt(ctx, &ctx->ListState.ListVtxfmt); } - unmap_vertex_store(ctx, save->vertex_store); + vbo_save_unmap_vertex_store(ctx, save->vertex_store); assert(save->vertex_size == 0); } |