OPCODE_VERTEX_LIST,
OPCODE_VERTEX_LIST_LOOPBACK,
+ OPCODE_VERTEX_LIST_COPY_CURRENT,
/* The following three are meta instructions */
OPCODE_ERROR, /* raise compiled-in error */
(void) ctx;
const char *label[] = {
- "VBO-VERTEX-LIST", "VBO-VERTEX-LIST-LOOPBACK"
+ "VBO-VERTEX-LIST", "VBO-VERTEX-LIST-LOOPBACK", "VBO-VERTEX-LIST-COPY-CURRENT"
};
fprintf(f, "%s, %u vertices, %d primitives, %d vertsize, "
break;
case OPCODE_VERTEX_LIST:
case OPCODE_VERTEX_LIST_LOOPBACK:
+ case OPCODE_VERTEX_LIST_COPY_CURRENT:
vbo_destroy_vertex_list(ctx, (struct vbo_save_vertex_list *) &n[1]);
break;
case OPCODE_CONTINUE:
void *
-_mesa_dlist_alloc_vertex_list(struct gl_context *ctx)
+_mesa_dlist_alloc_vertex_list(struct gl_context *ctx, bool copy_to_current)
{
- return _mesa_dlist_alloc_aligned(ctx, OPCODE_VERTEX_LIST,
+ return _mesa_dlist_alloc_aligned(ctx,
+ copy_to_current ? OPCODE_VERTEX_LIST_COPY_CURRENT :
+ OPCODE_VERTEX_LIST,
sizeof(struct vbo_save_vertex_list));
}
break;
case OPCODE_VERTEX_LIST:
- vbo_save_playback_vertex_list(ctx, &n[1]);
+ vbo_save_playback_vertex_list(ctx, &n[1], false);
+ break;
+
+ case OPCODE_VERTEX_LIST_COPY_CURRENT:
+ vbo_save_playback_vertex_list(ctx, &n[1], true);
break;
case OPCODE_VERTEX_LIST_LOOPBACK:
const OpCode opcode = n[0].opcode;
switch (opcode) {
case OPCODE_VERTEX_LIST:
+ case OPCODE_VERTEX_LIST_COPY_CURRENT:
n[0].opcode = OPCODE_VERTEX_LIST_LOOPBACK;
break;
case OPCODE_CONTINUE:
break;
case OPCODE_VERTEX_LIST:
case OPCODE_VERTEX_LIST_LOOPBACK:
+ case OPCODE_VERTEX_LIST_COPY_CURRENT:
vbo_print_vertex_list(ctx, (struct vbo_save_vertex_list *) &n[1], opcode, f);
break;
default:
* a drawing command.
*/
void
-vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
+vbo_save_playback_vertex_list(struct gl_context *ctx, void *data, bool copy_to_current)
{
const struct vbo_save_vertex_list *node =
(const struct vbo_save_vertex_list *) data;
}
info->index.gl_bo = gl_bo;
- /* Copy to current?
- */
- playback_copy_to_current(ctx, node);
+ if (copy_to_current)
+ playback_copy_to_current(ctx, node);
}