draw: fix point/line/tri flushing bug in vbuf code

Need to reset the point/line/tri functions to point to the "first"
versions whenever we flush vertices.  Fixes unfilled polygon rendering
errors seen in demos/samples/logo.c.  See comments for more info.

NOTE: This is a candidate for the 7.10 branch.
This commit is contained in:
Brian Paul 2011-04-22 13:37:10 -06:00
parent 72239d16cd
commit 931432fea6

View file

@ -341,6 +341,16 @@ vbuf_flush_vertices( struct vbuf_stage *vbuf )
vbuf->max_vertices = vbuf->nr_vertices = 0;
vbuf->vertex_ptr = vbuf->vertices = NULL;
}
/* Reset point/line/tri function pointers.
* If (for example) we transition from points to tris and back to points
* again, we need to call the vbuf_first_point() function again to flush
* the triangles before drawing more points. This can happen when drawing
* with front polygon mode = filled and back polygon mode = line or point.
*/
vbuf->stage.point = vbuf_first_point;
vbuf->stage.line = vbuf_first_line;
vbuf->stage.tri = vbuf_first_tri;
}
@ -378,10 +388,6 @@ vbuf_flush( struct draw_stage *stage, unsigned flags )
struct vbuf_stage *vbuf = vbuf_stage( stage );
vbuf_flush_vertices( vbuf );
stage->point = vbuf_first_point;
stage->line = vbuf_first_line;
stage->tri = vbuf_first_tri;
}