Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>tags/mesa-9.2-rc1
@@ -200,6 +200,17 @@ _mesa_inside_begin_end(const struct gl_context *ctx) | |||
} | |||
/** | |||
* Are we currently between glBegin and glEnd in a display list? | |||
*/ | |||
static inline GLboolean | |||
_mesa_inside_dlist_begin_end(const struct gl_context *ctx) | |||
{ | |||
return ctx->Driver.CurrentSavePrimitive != PRIM_OUTSIDE_BEGIN_END; | |||
} | |||
/** | |||
* \name Macros for flushing buffered rendering commands before state changes, | |||
* checking if inside glBegin/glEnd, etc. |
@@ -3777,7 +3777,7 @@ save_ShadeModel(GLenum mode) | |||
/* Only save the value if we know the statechange will take effect: | |||
*/ | |||
if (ctx->Driver.CurrentSavePrimitive == PRIM_OUTSIDE_BEGIN_END) | |||
if (!_mesa_inside_dlist_begin_end(ctx)) | |||
ctx->ListState.Current.ShadeModel = mode; | |||
n = alloc_instruction(ctx, OPCODE_SHADE_MODEL, 1); | |||
@@ -5657,7 +5657,7 @@ save_Begin(GLenum mode) | |||
*/ | |||
ctx->Driver.CurrentSavePrimitive = PRIM_INSIDE_UNKNOWN_PRIM; | |||
} | |||
else if (ctx->Driver.CurrentSavePrimitive == PRIM_OUTSIDE_BEGIN_END) { | |||
else if (!_mesa_inside_dlist_begin_end(ctx)) { | |||
ctx->Driver.CurrentSavePrimitive = mode; | |||
} | |||
else { |
@@ -1558,8 +1558,7 @@ vbo_save_EndList(struct gl_context *ctx) | |||
/* EndList called inside a (saved) Begin/End pair? | |||
*/ | |||
if (ctx->Driver.CurrentSavePrimitive != PRIM_OUTSIDE_BEGIN_END) { | |||
if (_mesa_inside_dlist_begin_end(ctx)) { | |||
if (save->prim_count > 0) { | |||
GLint i = save->prim_count - 1; | |||
ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END; |