diff options
-rw-r--r-- | src/mesa/vbo/vbo_save_api.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c index a42a3c3db7d..aab5f549d72 100644 --- a/src/mesa/vbo/vbo_save_api.c +++ b/src/mesa/vbo/vbo_save_api.c @@ -1108,13 +1108,23 @@ _save_Begin(GLenum mode) static void GLAPIENTRY _save_PrimitiveRestartNV(void) { - GLenum curPrim; GET_CURRENT_CONTEXT(ctx); + struct vbo_save_context *save = &vbo_context(ctx)->save; - curPrim = ctx->Driver.CurrentSavePrimitive; - - _save_End(); - _save_Begin(curPrim); + if (save->prim_count == 0) { + /* We're not inside a glBegin/End pair, so calling glPrimitiverRestartNV + * is an error. + */ + _mesa_compile_error(ctx, GL_INVALID_OPERATION, + "glPrimitiveRestartNV called outside glBegin/End"); + } else { + /* get current primitive mode */ + GLenum curPrim = save->prim[save->prim_count - 1].mode; + + /* restart primitive */ + CALL_End(GET_DISPATCH(), ()); + vbo_save_NotifyBegin(ctx, curPrim); + } } |