mesa: get another class of degenerate dlists working
Primitive begin in one dlist, end in another.
This commit is contained in:
committed by
Brian Paul
parent
75c19eb5a1
commit
cd23c5c599
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user