diff options
author | Eric Anholt <[email protected]> | 2013-01-16 15:20:45 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2013-01-21 21:26:47 -0800 |
commit | c572251417ef20d1d560b849931321a42b1be578 (patch) | |
tree | eda6535447a1b48532e286c8dc1a74dba935858d /src/mesa/vbo | |
parent | 0aaf0445bac453db474cedf27f1d9f45e4acde4d (diff) |
mesa: Install a minimal dispatch table during glBegin()/glEnd().
This is a step toward getting rid of ASSERT_OUTSIDE_BEGIN_END() in Mesa.
v2: Finish create_beginend_table() comment, move loopback API init into it,
and add a const flag. (suggestions by Brian)
Reviewed-by: Brian Paul <[email protected]> (v1)
Reviewed-by: Ian Romanick <[email protected]> (v1)
Diffstat (limited to 'src/mesa/vbo')
-rw-r--r-- | src/mesa/vbo/vbo_exec_api.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 84bcdd63bf3..f9874396658 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -833,6 +833,17 @@ static void GLAPIENTRY vbo_exec_Begin( GLenum mode ) exec->vtx.prim[i].base_instance = 0; ctx->Driver.CurrentExecPrimitive = mode; + + ctx->Exec = ctx->BeginEnd; + /* We may have been called from a display list, in which case we should + * leave dlist.c's dispatch table in place. + */ + if (ctx->CurrentDispatch == ctx->OutsideBeginEnd) { + ctx->CurrentDispatch = ctx->BeginEnd; + _glapi_set_dispatch(ctx->CurrentDispatch); + } else { + assert(ctx->CurrentDispatch == ctx->Save); + } } @@ -849,6 +860,12 @@ static void GLAPIENTRY vbo_exec_End( void ) return; } + ctx->Exec = ctx->OutsideBeginEnd; + if (ctx->CurrentDispatch == ctx->BeginEnd) { + ctx->CurrentDispatch = ctx->OutsideBeginEnd; + _glapi_set_dispatch(ctx->CurrentDispatch); + } + if (exec->vtx.prim_count > 0) { /* close off current primitive */ int idx = exec->vtx.vert_count; |