浏览代码

mesa: get another class of degenerate dlists working

Primitive begin in one dlist, end in another.
tags/mesa_20090313
Keith Whitwell 17 年前
父节点
当前提交
cd23c5c599
共有 2 个文件被更改,包括 29 次插入2 次删除
  1. 5
    2
      src/mesa/main/dlist.c
  2. 24
    0
      src/mesa/vbo/vbo_save_api.c

+ 5
- 2
src/mesa/main/dlist.c 查看文件

@@ -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
- 0
src/mesa/vbo/vbo_save_api.c 查看文件

@@ -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);

正在加载...
取消
保存