draw: Take flatshade_first rasterizer bit into account.
This commit is contained in:
parent
dc9757e1a8
commit
e1543fa55c
|
@ -330,6 +330,8 @@ draw_prim( struct draw_context *draw,
|
||||||
unsigned i;
|
unsigned i;
|
||||||
boolean unfilled = (draw->rasterizer->fill_cw != PIPE_POLYGON_MODE_FILL ||
|
boolean unfilled = (draw->rasterizer->fill_cw != PIPE_POLYGON_MODE_FILL ||
|
||||||
draw->rasterizer->fill_ccw != PIPE_POLYGON_MODE_FILL);
|
draw->rasterizer->fill_ccw != PIPE_POLYGON_MODE_FILL);
|
||||||
|
boolean flatfirst =
|
||||||
|
(draw->rasterizer->flatshade & draw->rasterizer->flatshade_first) ? TRUE : FALSE;
|
||||||
|
|
||||||
// debug_printf("%s (%d) %d/%d\n", __FUNCTION__, draw->prim, start, count );
|
// debug_printf("%s (%d) %d/%d\n", __FUNCTION__, draw->prim, start, count );
|
||||||
|
|
||||||
|
@ -342,11 +344,21 @@ draw_prim( struct draw_context *draw,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PIPE_PRIM_LINES:
|
case PIPE_PRIM_LINES:
|
||||||
for (i = 0; i+1 < count; i += 2) {
|
if (flatfirst) {
|
||||||
do_line( draw,
|
for (i = 0; i+1 < count; i += 2) {
|
||||||
TRUE,
|
do_line( draw,
|
||||||
start + i + 0,
|
TRUE,
|
||||||
start + i + 1);
|
start + i + 1,
|
||||||
|
start + i + 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 0; i+1 < count; i += 2) {
|
||||||
|
do_line( draw,
|
||||||
|
TRUE,
|
||||||
|
start + i + 0,
|
||||||
|
start + i + 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -367,60 +379,120 @@ draw_prim( struct draw_context *draw,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PIPE_PRIM_LINE_STRIP:
|
case PIPE_PRIM_LINE_STRIP:
|
||||||
for (i = 1; i < count; i++) {
|
if (flatfirst) {
|
||||||
do_line( draw,
|
for (i = 1; i < count; i++) {
|
||||||
i == 1,
|
do_line( draw,
|
||||||
start + i - 1,
|
i == 1,
|
||||||
start + i );
|
start + i,
|
||||||
|
start + i - 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 1; i < count; i++) {
|
||||||
|
do_line( draw,
|
||||||
|
i == 1,
|
||||||
|
start + i - 1,
|
||||||
|
start + i );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PIPE_PRIM_TRIANGLES:
|
case PIPE_PRIM_TRIANGLES:
|
||||||
if (unfilled) {
|
if (flatfirst) {
|
||||||
for (i = 0; i+2 < count; i += 3) {
|
if (unfilled) {
|
||||||
do_ef_triangle( draw,
|
for (i = 0; i+2 < count; i += 3) {
|
||||||
1,
|
do_ef_triangle( draw,
|
||||||
~0,
|
1,
|
||||||
start + i + 0,
|
~0,
|
||||||
start + i + 1,
|
start + i + 1,
|
||||||
start + i + 2 );
|
start + i + 2,
|
||||||
}
|
start + i + 0 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 0; i+2 < count; i += 3) {
|
||||||
|
do_triangle( draw,
|
||||||
|
start + i + 1,
|
||||||
|
start + i + 2,
|
||||||
|
start + i + 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
for (i = 0; i+2 < count; i += 3) {
|
if (unfilled) {
|
||||||
do_triangle( draw,
|
for (i = 0; i+2 < count; i += 3) {
|
||||||
start + i + 0,
|
do_ef_triangle( draw,
|
||||||
start + i + 1,
|
1,
|
||||||
start + i + 2 );
|
~0,
|
||||||
}
|
start + i + 0,
|
||||||
|
start + i + 1,
|
||||||
|
start + i + 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 0; i+2 < count; i += 3) {
|
||||||
|
do_triangle( draw,
|
||||||
|
start + i + 0,
|
||||||
|
start + i + 1,
|
||||||
|
start + i + 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PIPE_PRIM_TRIANGLE_STRIP:
|
case PIPE_PRIM_TRIANGLE_STRIP:
|
||||||
for (i = 0; i+2 < count; i++) {
|
if (flatfirst) {
|
||||||
if (i & 1) {
|
for (i = 0; i+2 < count; i++) {
|
||||||
do_triangle( draw,
|
if (i & 1) {
|
||||||
start + i + 1,
|
do_triangle( draw,
|
||||||
start + i + 0,
|
start + i + 2,
|
||||||
start + i + 2 );
|
start + i + 1,
|
||||||
}
|
start + i + 0 );
|
||||||
else {
|
}
|
||||||
do_triangle( draw,
|
else {
|
||||||
start + i + 0,
|
do_triangle( draw,
|
||||||
start + i + 1,
|
start + i + 1,
|
||||||
start + i + 2 );
|
start + i + 2,
|
||||||
}
|
start + i + 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 0; i+2 < count; i++) {
|
||||||
|
if (i & 1) {
|
||||||
|
do_triangle( draw,
|
||||||
|
start + i + 1,
|
||||||
|
start + i + 0,
|
||||||
|
start + i + 2 );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
do_triangle( draw,
|
||||||
|
start + i + 0,
|
||||||
|
start + i + 1,
|
||||||
|
start + i + 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PIPE_PRIM_TRIANGLE_FAN:
|
case PIPE_PRIM_TRIANGLE_FAN:
|
||||||
if (count >= 3) {
|
if (count >= 3) {
|
||||||
for (i = 0; i+2 < count; i++) {
|
if (flatfirst) {
|
||||||
do_triangle( draw,
|
for (i = 0; i+2 < count; i++) {
|
||||||
start + 0,
|
do_triangle( draw,
|
||||||
start + i + 1,
|
start + i + 2,
|
||||||
start + i + 2 );
|
start + 0,
|
||||||
}
|
start + i + 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 0; i+2 < count; i++) {
|
||||||
|
do_triangle( draw,
|
||||||
|
start + 0,
|
||||||
|
start + i + 1,
|
||||||
|
start + i + 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue