summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2011-04-22 13:37:10 -0600
committerBrian Paul <[email protected]>2011-04-22 13:39:50 -0600
commit931432fea69c29b4029ff23613468c8ad2c0181e (patch)
tree828af9dc819aa4668ea106af78bbb55005eace25 /src
parent72239d16cd08113e994ea3508f91193c682b0930 (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_vbuf.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pipe_vbuf.c b/src/gallium/auxiliary/draw/draw_pipe_vbuf.c
index 58c5858734a..61ae4665539 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_vbuf.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_vbuf.c
@@ -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;
}