mesa: get another class of degenerate dlists working

Primitive begin in one dlist, end in another.
This commit is contained in:
Keith Whitwell
2008-09-15 13:47:25 +01:00
committed by Brian Paul
parent 75c19eb5a1
commit cd23c5c599
2 changed files with 29 additions and 2 deletions
+5 -2
View File
@@ -6737,6 +6737,11 @@ _mesa_EndList(void)
_mesa_error(ctx, GL_INVALID_OPERATION, "glEndList");
return;
}
/* Call before emitting END_OF_LIST, in case the driver wants to
* emit opcodes itself.
*/
ctx->Driver.EndList(ctx);
(void) ALLOC_INSTRUCTION(ctx, OPCODE_END_OF_LIST, 0);
@@ -6750,8 +6755,6 @@ _mesa_EndList(void)
if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST)
mesa_print_display_list(ctx->ListState.CurrentListNum);
ctx->Driver.EndList(ctx);
ctx->ListState.CurrentList = NULL;
ctx->ListState.CurrentListNum = 0;
ctx->ListState.CurrentListPtr = NULL;
+24
View File
@@ -1045,6 +1045,30 @@ void vbo_save_NewList( GLcontext *ctx, GLuint list, GLenum mode )
void vbo_save_EndList( GLcontext *ctx )
{
struct vbo_save_context *save = &vbo_context(ctx)->save;
/* EndList called inside a (saved) Begin/End pair?
*/
if (ctx->Driver.CurrentSavePrimitive != PRIM_OUTSIDE_BEGIN_END) {
GLint i = save->prim_count - 1;
ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END;
save->prim[i].end = 0;
save->prim[i].count = (save->vert_count -
save->prim[i].start);
/* Make sure this vertex list gets replayed by the "loopback"
* mechanism:
*/
save->dangling_attr_ref = 1;
vbo_save_SaveFlushVertices( ctx );
/* Swap out this vertex format while outside begin/end. Any color,
* etc. received between here and the next begin will be compiled
* as opcodes.
*/
_mesa_install_save_vtxfmt( ctx, &ctx->ListState.ListVtxfmt );
}
unmap_vertex_store( ctx, save->vertex_store );
assert(save->vertex_size == 0);