mesa/st: cope with non-ibo index data in st_draw_feedback.c

Previously only non-indexed or indicies-in-a-vbo cases were handled in
this code.  This change adds the missing regular indices-in-memory
case.
This commit is contained in:
Keith Whitwell 2009-05-07 11:46:08 +01:00
parent 4a333c64fa
commit 01280cff53

View file

@ -196,13 +196,10 @@ st_feedback_draw_vbo(GLcontext *ctx,
draw_set_vertex_elements(draw, vp->num_inputs, velements);
if (ib) {
unsigned indexSize;
struct gl_buffer_object *bufobj = ib->obj;
struct st_buffer_object *stobj = st_buffer_object(bufobj);
unsigned indexSize;
void *map;
index_buffer_handle = stobj->buffer;
switch (ib->type) {
case GL_UNSIGNED_INT:
indexSize = 4;
@ -215,9 +212,19 @@ st_feedback_draw_vbo(GLcontext *ctx,
return;
}
map = pipe_buffer_map(pipe->screen, index_buffer_handle,
PIPE_BUFFER_USAGE_CPU_READ);
draw_set_mapped_element_buffer(draw, indexSize, map);
if (bufobj && bufobj->Name) {
struct st_buffer_object *stobj = st_buffer_object(bufobj);
index_buffer_handle = stobj->buffer;
map = pipe_buffer_map(pipe->screen, index_buffer_handle,
PIPE_BUFFER_USAGE_CPU_READ);
draw_set_mapped_element_buffer(draw, indexSize, map);
}
else {
draw_set_mapped_element_buffer(draw, indexSize, (void *) ib->ptr);
}
}
else {
/* no index/element buffer */
@ -252,7 +259,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
draw_set_mapped_vertex_buffer(draw, i, NULL);
}
}
if (ib) {
if (index_buffer_handle) {
pipe_buffer_unmap(pipe->screen, index_buffer_handle);
draw_set_mapped_element_buffer(draw, 0, NULL);
}