}
}
+static void invalidate_saved_current_state( GLcontext *ctx )
+{
+ GLint i;
+
+ for (i = 0; i < VERT_ATTRIB_MAX; i++)
+ ctx->ListState.ActiveAttribSize[i] = 0;
+
+ for (i = 0; i < MAT_ATTRIB_MAX; i++)
+ ctx->ListState.ActiveMaterialSize[i] = 0;
+
+ memset(&ctx->ListState.Current, 0, sizeof ctx->ListState.Current);
+
+ ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
+}
void GLAPIENTRY
_mesa_save_CallList(GLuint list)
n[1].ui = list;
}
- /* After this, we don't know what begin/end state we're in:
+ /* After this, we don't know what state we're in. Invalidate all
+ * cached information previously gathered:
*/
- ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
+ invalidate_saved_current_state( ctx );
if (ctx->ExecuteFlag) {
_mesa_CallList(list);
}
}
- /* After this, we don't know what begin/end state we're in:
+ /* After this, we don't know what state we're in. Invalidate all
+ * cached information previously gathered:
*/
- ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
+ invalidate_saved_current_state( ctx );
if (ctx->ExecuteFlag) {
CALL_CallLists(ctx->Exec, (n, type, lists));
_mesa_NewList(GLuint name, GLenum mode)
{
GET_CURRENT_CONTEXT(ctx);
- GLint i;
FLUSH_CURRENT(ctx, 0); /* must be called before assert */
ASSERT_OUTSIDE_BEGIN_END(ctx);
ctx->CompileFlag = GL_TRUE;
ctx->ExecuteFlag = (mode == GL_COMPILE_AND_EXECUTE);
+ /* Reset acumulated list state:
+ */
+ invalidate_saved_current_state( ctx );
+
/* Allocate new display list */
ctx->ListState.CurrentList = make_list(name, BLOCK_SIZE);
ctx->ListState.CurrentBlock = ctx->ListState.CurrentList->Head;
ctx->ListState.CurrentPos = 0;
- /* Reset acumulated list state:
- */
- for (i = 0; i < VERT_ATTRIB_MAX; i++)
- ctx->ListState.ActiveAttribSize[i] = 0;
-
- for (i = 0; i < MAT_ATTRIB_MAX; i++)
- ctx->ListState.ActiveMaterialSize[i] = 0;
-
- memset(&ctx->ListState.Current, 0, sizeof ctx->ListState.Current);
-
- ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN;
ctx->Driver.NewList(ctx, name, mode);
ctx->CurrentDispatch = ctx->Save;