mesa/dlist: don't cache state which may not be replayed on CallList

Statechanges which occur before the first End in a display list may
not be replayed when the list is called, in particular if it is called
from within a begin/end pair.

Recognize vulnerable statechanges and do not use them to fill in the
state cache.
This commit is contained in:
Keith Whitwell 2009-06-30 17:10:56 +01:00
parent 09a3a28fc8
commit d6c2347d79
1 changed files with 5 additions and 1 deletions

View File

@ -3203,7 +3203,11 @@ save_ShadeModel(GLenum mode)
return;
SAVE_FLUSH_VERTICES(ctx);
ctx->ListState.Current.ShadeModel = mode;
/* Only save the value if we know the statechange will take effect:
*/
if (ctx->Driver.CurrentSavePrimitive == PRIM_OUTSIDE_BEGIN_END)
ctx->ListState.Current.ShadeModel = mode;
n = ALLOC_INSTRUCTION(ctx, OPCODE_SHADE_MODEL, 1);
if (n) {