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) {
123 get_elt(elts
, i
+ 0),
124 get_elt(elts
, i
+ 1),
125 get_elt(elts
, i
+ 2),
126 get_elt(elts
, i
+ 3) );
130 get_elt(elts
, i
+ 0),
131 get_elt(elts
, i
+ 1),
132 get_elt(elts
, i
+ 2),
133 get_elt(elts
, i
+ 3) );
138 case PIPE_PRIM_QUAD_STRIP
:
139 for (i
= 0; i
+3 < count
; i
+= 2) {
142 get_elt(elts
, i
+ 0),
143 get_elt(elts
, i
+ 1),
144 get_elt(elts
, i
+ 3),
145 get_elt(elts
, i
+ 2) );
149 get_elt(elts
, i
+ 2),
150 get_elt(elts
, i
+ 0),
151 get_elt(elts
, i
+ 1),
152 get_elt(elts
, i
+ 3) );
157 case PIPE_PRIM_POLYGON
:
159 /* These bitflags look a little odd because we submit the
160 * vertices as (1,2,0) to satisfy flatshade requirements.
162 const ushort edge_first
= DRAW_PIPE_EDGE_FLAG_2
;
163 const ushort edge_middle
= DRAW_PIPE_EDGE_FLAG_0
;
164 const ushort edge_last
= DRAW_PIPE_EDGE_FLAG_1
;
165 ushort edge_next
, edge_finish
;
168 flags
= DRAW_PIPE_RESET_STIPPLE
| edge_middle
| edge_last
;
169 edge_next
= edge_last
;
170 edge_finish
= edge_first
;
173 flags
= DRAW_PIPE_RESET_STIPPLE
| edge_first
| edge_middle
;
174 edge_next
= edge_middle
;
175 edge_finish
= edge_last
;
178 for (i
= 0; i
+2 < count
; i
++, flags
= edge_next
) {
181 flags
|= edge_finish
;
187 get_elt(elts
, i
+ 1),
188 get_elt(elts
, i
+ 2) );
193 get_elt(elts
, i
+ 1),
194 get_elt(elts
, i
+ 2),
206 vcache_flush( vcache
);