3 static void FUNC( struct draw_pt_front_end
*frontend
,
8 struct vcache_frontend
*vcache
= (struct vcache_frontend
*)frontend
;
9 struct draw_context
*draw
= vcache
->draw
;
11 boolean flatfirst
= (draw
->rasterizer
->flatshade
&&
12 draw
->rasterizer
->flatshade_first
);
16 if (0) debug_printf("%s %d\n", __FUNCTION__
, count
);
19 switch (vcache
->input_prim
) {
20 case PIPE_PRIM_POINTS
:
21 for (i
= 0; i
< count
; i
++) {
23 get_elt(elts
, i
+ 0) );
28 for (i
= 0; i
+1 < count
; i
+= 2) {
30 DRAW_PIPE_RESET_STIPPLE
,
32 get_elt(elts
, i
+ 1));
36 case PIPE_PRIM_LINE_LOOP
:
38 flags
= DRAW_PIPE_RESET_STIPPLE
;
40 for (i
= 1; i
< count
; i
++, flags
= 0) {
54 case PIPE_PRIM_LINE_STRIP
:
55 flags
= DRAW_PIPE_RESET_STIPPLE
;
56 for (i
= 1; i
< count
; i
++, flags
= 0) {
64 case PIPE_PRIM_TRIANGLES
:
65 for (i
= 0; i
+2 < count
; i
+= 3) {
67 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
70 get_elt(elts
, i
+ 2 ));
74 case PIPE_PRIM_TRIANGLE_STRIP
:
76 for (i
= 0; i
+2 < count
; i
++) {
78 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
80 get_elt(elts
, i
+ 1 + (i
&1)),
81 get_elt(elts
, i
+ 2 - (i
&1)));
85 for (i
= 0; i
+2 < count
; i
++) {
87 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
88 get_elt(elts
, i
+ 0 + (i
&1)),
89 get_elt(elts
, i
+ 1 - (i
&1)),
90 get_elt(elts
, i
+ 2 ));
95 case PIPE_PRIM_TRIANGLE_FAN
:
98 for (i
= 0; i
+2 < count
; i
++) {
100 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
101 get_elt(elts
, i
+ 1),
102 get_elt(elts
, i
+ 2),
107 for (i
= 0; i
+2 < count
; i
++) {
109 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
111 get_elt(elts
, i
+ 1),
112 get_elt(elts
, i
+ 2 ));
119 case PIPE_PRIM_QUADS
:
120 for (i
= 0; i
+3 < count
; i
+= 4) {
122 get_elt(elts
, i
+ 0),
123 get_elt(elts
, i
+ 1),
124 get_elt(elts
, i
+ 2),
125 get_elt(elts
, i
+ 3) );
129 case PIPE_PRIM_QUAD_STRIP
:
130 for (i
= 0; i
+3 < count
; i
+= 2) {
132 get_elt(elts
, i
+ 2),
133 get_elt(elts
, i
+ 0),
134 get_elt(elts
, i
+ 1),
135 get_elt(elts
, i
+ 3) );
139 case PIPE_PRIM_POLYGON
:
141 /* These bitflags look a little odd because we submit the
142 * vertices as (1,2,0) to satisfy flatshade requirements.
144 const ushort edge_first
= DRAW_PIPE_EDGE_FLAG_2
;
145 const ushort edge_middle
= DRAW_PIPE_EDGE_FLAG_0
;
146 const ushort edge_last
= DRAW_PIPE_EDGE_FLAG_1
;
147 ushort edge_next
, edge_finish
;
150 flags
= DRAW_PIPE_RESET_STIPPLE
| edge_middle
| edge_last
;
151 edge_next
= edge_last
;
152 edge_finish
= edge_first
;
155 flags
= DRAW_PIPE_RESET_STIPPLE
| edge_first
| edge_middle
;
156 edge_next
= edge_middle
;
157 edge_finish
= edge_last
;
160 for (i
= 0; i
+2 < count
; i
++, flags
= edge_next
) {
163 flags
|= edge_finish
;
169 get_elt(elts
, i
+ 1),
170 get_elt(elts
, i
+ 2) );
175 get_elt(elts
, i
+ 1),
176 get_elt(elts
, i
+ 2),
188 vcache_flush( vcache
);