diff options
Diffstat (limited to 'src/sw_aclip.c')
-rw-r--r-- | src/sw_aclip.c | 238 |
1 files changed, 107 insertions, 131 deletions
diff --git a/src/sw_aclip.c b/src/sw_aclip.c index d3c0aae..45dbfa2 100644 --- a/src/sw_aclip.c +++ b/src/sw_aclip.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static finalvert_t fv[2][8]; -void R_AliasProjectAndClipTestFinalVert (finalvert_t *fv); +void R_AliasProjectAndClipTestFinalVert(finalvert_t *fv); /* @@ -33,7 +33,7 @@ R_Alias_clip_z pfv0 is the unclipped vertex, pfv1 is the z-clipped vertex ================ */ -static void R_Alias_clip_z (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) +static void R_Alias_clip_z(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) { float scale; @@ -48,162 +48,148 @@ static void R_Alias_clip_z (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *o out->t = pfv0->t + (pfv1->t - pfv0->t) * scale; out->l = pfv0->l + (pfv1->l - pfv0->l) * scale; - R_AliasProjectAndClipTestFinalVert (out); + R_AliasProjectAndClipTestFinalVert(out); } #if USE_ASM -void R_Alias_clip_top (finalvert_t *pfv0, finalvert_t *pfv1, - finalvert_t *out); -void R_Alias_clip_bottom (finalvert_t *pfv0, finalvert_t *pfv1, - finalvert_t *out); -void R_Alias_clip_left (finalvert_t *pfv0, finalvert_t *pfv1, - finalvert_t *out); -void R_Alias_clip_right (finalvert_t *pfv0, finalvert_t *pfv1, - finalvert_t *out); +void R_Alias_clip_top(finalvert_t *pfv0, finalvert_t *pfv1, + finalvert_t *out); +void R_Alias_clip_bottom(finalvert_t *pfv0, finalvert_t *pfv1, + finalvert_t *out); +void R_Alias_clip_left(finalvert_t *pfv0, finalvert_t *pfv1, + finalvert_t *out); +void R_Alias_clip_right(finalvert_t *pfv0, finalvert_t *pfv1, + finalvert_t *out); #else -static void R_Alias_clip_left (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) +static void R_Alias_clip_left(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) { float scale; - if (pfv0->v >= pfv1->v ) - { + if (pfv0->v >= pfv1->v) { scale = (float)(r_refdef.aliasvrect.x - pfv0->u) / (pfv1->u - pfv0->u); - out->u = pfv0->u + ( pfv1->u - pfv0->u ) * scale + 0.5; - out->v = pfv0->v + ( pfv1->v - pfv0->v ) * scale + 0.5; - out->s = pfv0->s + ( pfv1->s - pfv0->s ) * scale + 0.5; - out->t = pfv0->t + ( pfv1->t - pfv0->t ) * scale + 0.5; - out->l = pfv0->l + ( pfv1->l - pfv0->l ) * scale + 0.5; - out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5; - } - else - { + out->u = pfv0->u + (pfv1->u - pfv0->u) * scale + 0.5; + out->v = pfv0->v + (pfv1->v - pfv0->v) * scale + 0.5; + out->s = pfv0->s + (pfv1->s - pfv0->s) * scale + 0.5; + out->t = pfv0->t + (pfv1->t - pfv0->t) * scale + 0.5; + out->l = pfv0->l + (pfv1->l - pfv0->l) * scale + 0.5; + out->zi = pfv0->zi + (pfv1->zi - pfv0->zi) * scale + 0.5; + } else { scale = (float)(r_refdef.aliasvrect.x - pfv1->u) / (pfv0->u - pfv1->u); - out->u = pfv1->u + ( pfv0->u - pfv1->u ) * scale + 0.5; - out->v = pfv1->v + ( pfv0->v - pfv1->v ) * scale + 0.5; - out->s = pfv1->s + ( pfv0->s - pfv1->s ) * scale + 0.5; - out->t = pfv1->t + ( pfv0->t - pfv1->t ) * scale + 0.5; - out->l = pfv1->l + ( pfv0->l - pfv1->l ) * scale + 0.5; - out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5; + out->u = pfv1->u + (pfv0->u - pfv1->u) * scale + 0.5; + out->v = pfv1->v + (pfv0->v - pfv1->v) * scale + 0.5; + out->s = pfv1->s + (pfv0->s - pfv1->s) * scale + 0.5; + out->t = pfv1->t + (pfv0->t - pfv1->t) * scale + 0.5; + out->l = pfv1->l + (pfv0->l - pfv1->l) * scale + 0.5; + out->zi = pfv1->zi + (pfv0->zi - pfv1->zi) * scale + 0.5; } } -static void R_Alias_clip_right (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) +static void R_Alias_clip_right(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) { float scale; - if ( pfv0->v >= pfv1->v ) - { - scale = (float)(r_refdef.aliasvrectright - pfv0->u ) / - (pfv1->u - pfv0->u ); - out->u = pfv0->u + ( pfv1->u - pfv0->u ) * scale + 0.5; - out->v = pfv0->v + ( pfv1->v - pfv0->v ) * scale + 0.5; - out->s = pfv0->s + ( pfv1->s - pfv0->s ) * scale + 0.5; - out->t = pfv0->t + ( pfv1->t - pfv0->t ) * scale + 0.5; - out->l = pfv0->l + ( pfv1->l - pfv0->l ) * scale + 0.5; - out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5; - } - else - { - scale = (float)(r_refdef.aliasvrectright - pfv1->u ) / - (pfv0->u - pfv1->u ); - out->u = pfv1->u + ( pfv0->u - pfv1->u ) * scale + 0.5; - out->v = pfv1->v + ( pfv0->v - pfv1->v ) * scale + 0.5; - out->s = pfv1->s + ( pfv0->s - pfv1->s ) * scale + 0.5; - out->t = pfv1->t + ( pfv0->t - pfv1->t ) * scale + 0.5; - out->l = pfv1->l + ( pfv0->l - pfv1->l ) * scale + 0.5; - out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5; + if (pfv0->v >= pfv1->v) { + scale = (float)(r_refdef.aliasvrectright - pfv0->u) / + (pfv1->u - pfv0->u); + out->u = pfv0->u + (pfv1->u - pfv0->u) * scale + 0.5; + out->v = pfv0->v + (pfv1->v - pfv0->v) * scale + 0.5; + out->s = pfv0->s + (pfv1->s - pfv0->s) * scale + 0.5; + out->t = pfv0->t + (pfv1->t - pfv0->t) * scale + 0.5; + out->l = pfv0->l + (pfv1->l - pfv0->l) * scale + 0.5; + out->zi = pfv0->zi + (pfv1->zi - pfv0->zi) * scale + 0.5; + } else { + scale = (float)(r_refdef.aliasvrectright - pfv1->u) / + (pfv0->u - pfv1->u); + out->u = pfv1->u + (pfv0->u - pfv1->u) * scale + 0.5; + out->v = pfv1->v + (pfv0->v - pfv1->v) * scale + 0.5; + out->s = pfv1->s + (pfv0->s - pfv1->s) * scale + 0.5; + out->t = pfv1->t + (pfv0->t - pfv1->t) * scale + 0.5; + out->l = pfv1->l + (pfv0->l - pfv1->l) * scale + 0.5; + out->zi = pfv1->zi + (pfv0->zi - pfv1->zi) * scale + 0.5; } } -static void R_Alias_clip_top (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) +static void R_Alias_clip_top(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) { float scale; - if (pfv0->v >= pfv1->v) - { + if (pfv0->v >= pfv1->v) { scale = (float)(r_refdef.aliasvrect.y - pfv0->v) / (pfv1->v - pfv0->v); - out->u = pfv0->u + ( pfv1->u - pfv0->u ) * scale + 0.5; - out->v = pfv0->v + ( pfv1->v - pfv0->v ) * scale + 0.5; - out->s = pfv0->s + ( pfv1->s - pfv0->s ) * scale + 0.5; - out->t = pfv0->t + ( pfv1->t - pfv0->t ) * scale + 0.5; - out->l = pfv0->l + ( pfv1->l - pfv0->l ) * scale + 0.5; - out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5; - } - else - { + out->u = pfv0->u + (pfv1->u - pfv0->u) * scale + 0.5; + out->v = pfv0->v + (pfv1->v - pfv0->v) * scale + 0.5; + out->s = pfv0->s + (pfv1->s - pfv0->s) * scale + 0.5; + out->t = pfv0->t + (pfv1->t - pfv0->t) * scale + 0.5; + out->l = pfv0->l + (pfv1->l - pfv0->l) * scale + 0.5; + out->zi = pfv0->zi + (pfv1->zi - pfv0->zi) * scale + 0.5; + } else { scale = (float)(r_refdef.aliasvrect.y - pfv1->v) / (pfv0->v - pfv1->v); - out->u = pfv1->u + ( pfv0->u - pfv1->u ) * scale + 0.5; - out->v = pfv1->v + ( pfv0->v - pfv1->v ) * scale + 0.5; - out->s = pfv1->s + ( pfv0->s - pfv1->s ) * scale + 0.5; - out->t = pfv1->t + ( pfv0->t - pfv1->t ) * scale + 0.5; - out->l = pfv1->l + ( pfv0->l - pfv1->l ) * scale + 0.5; - out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5; + out->u = pfv1->u + (pfv0->u - pfv1->u) * scale + 0.5; + out->v = pfv1->v + (pfv0->v - pfv1->v) * scale + 0.5; + out->s = pfv1->s + (pfv0->s - pfv1->s) * scale + 0.5; + out->t = pfv1->t + (pfv0->t - pfv1->t) * scale + 0.5; + out->l = pfv1->l + (pfv0->l - pfv1->l) * scale + 0.5; + out->zi = pfv1->zi + (pfv0->zi - pfv1->zi) * scale + 0.5; } } -static void R_Alias_clip_bottom (finalvert_t *pfv0, finalvert_t *pfv1, - finalvert_t *out) +static void R_Alias_clip_bottom(finalvert_t *pfv0, finalvert_t *pfv1, + finalvert_t *out) { float scale; - if (pfv0->v >= pfv1->v) - { + if (pfv0->v >= pfv1->v) { scale = (float)(r_refdef.aliasvrectbottom - pfv0->v) / (pfv1->v - pfv0->v); - out->u = pfv0->u + ( pfv1->u - pfv0->u ) * scale + 0.5; - out->v = pfv0->v + ( pfv1->v - pfv0->v ) * scale + 0.5; - out->s = pfv0->s + ( pfv1->s - pfv0->s ) * scale + 0.5; - out->t = pfv0->t + ( pfv1->t - pfv0->t ) * scale + 0.5; - out->l = pfv0->l + ( pfv1->l - pfv0->l ) * scale + 0.5; - out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5; - } - else - { + out->u = pfv0->u + (pfv1->u - pfv0->u) * scale + 0.5; + out->v = pfv0->v + (pfv1->v - pfv0->v) * scale + 0.5; + out->s = pfv0->s + (pfv1->s - pfv0->s) * scale + 0.5; + out->t = pfv0->t + (pfv1->t - pfv0->t) * scale + 0.5; + out->l = pfv0->l + (pfv1->l - pfv0->l) * scale + 0.5; + out->zi = pfv0->zi + (pfv1->zi - pfv0->zi) * scale + 0.5; + } else { scale = (float)(r_refdef.aliasvrectbottom - pfv1->v) / (pfv0->v - pfv1->v); - out->u = pfv1->u + ( pfv0->u - pfv1->u ) * scale + 0.5; - out->v = pfv1->v + ( pfv0->v - pfv1->v ) * scale + 0.5; - out->s = pfv1->s + ( pfv0->s - pfv1->s ) * scale + 0.5; - out->t = pfv1->t + ( pfv0->t - pfv1->t ) * scale + 0.5; - out->l = pfv1->l + ( pfv0->l - pfv1->l ) * scale + 0.5; - out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5; + out->u = pfv1->u + (pfv0->u - pfv1->u) * scale + 0.5; + out->v = pfv1->v + (pfv0->v - pfv1->v) * scale + 0.5; + out->s = pfv1->s + (pfv0->s - pfv1->s) * scale + 0.5; + out->t = pfv1->t + (pfv0->t - pfv1->t) * scale + 0.5; + out->l = pfv1->l + (pfv0->l - pfv1->l) * scale + 0.5; + out->zi = pfv1->zi + (pfv0->zi - pfv1->zi) * scale + 0.5; } } #endif -static int R_AliasClip (finalvert_t *in, finalvert_t *out, int flag, int count, - void(*clip)(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) ) +static int R_AliasClip(finalvert_t *in, finalvert_t *out, int flag, int count, + void(*clip)(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out)) { - int i,j,k; + int i, j, k; int flags, oldflags; - - j = count-1; + + j = count - 1; k = 0; - for (i=0 ; i<count ; j = i, i++) - { + for (i = 0; i < count; j = i, i++) { oldflags = in[j].flags & flag; flags = in[i].flags & flag; if (flags && oldflags) continue; - if (oldflags ^ flags) - { - clip (&in[j], &in[i], &out[k]); + if (oldflags ^ flags) { + clip(&in[j], &in[i], &out[k]); out[k].flags = 0; if (out[k].u < r_refdef.aliasvrect.x) out[k].flags |= ALIAS_LEFT_CLIP; @@ -212,16 +198,15 @@ static int R_AliasClip (finalvert_t *in, finalvert_t *out, int flag, int count, if (out[k].u > r_refdef.aliasvrectright) out[k].flags |= ALIAS_RIGHT_CLIP; if (out[k].v > r_refdef.aliasvrectbottom) - out[k].flags |= ALIAS_BOTTOM_CLIP; + out[k].flags |= ALIAS_BOTTOM_CLIP; k++; } - if (!flags) - { + if (!flags) { out[k] = in[i]; k++; } } - + return k; } @@ -231,7 +216,7 @@ static int R_AliasClip (finalvert_t *in, finalvert_t *out, int flag, int count, R_AliasClipTriangle ================ */ -void R_AliasClipTriangle (finalvert_t *index0, finalvert_t *index1, finalvert_t *index2) +void R_AliasClipTriangle(finalvert_t *index0, finalvert_t *index1, finalvert_t *index2) { int i, k, pingpong; unsigned clipflags; @@ -244,63 +229,55 @@ void R_AliasClipTriangle (finalvert_t *index0, finalvert_t *index1, finalvert_t // clip clipflags = fv[0][0].flags | fv[0][1].flags | fv[0][2].flags; - if (clipflags & ALIAS_Z_CLIP) - { - k = R_AliasClip (fv[0], fv[1], ALIAS_Z_CLIP, 3, R_Alias_clip_z); + if (clipflags & ALIAS_Z_CLIP) { + k = R_AliasClip(fv[0], fv[1], ALIAS_Z_CLIP, 3, R_Alias_clip_z); if (k == 0) return; pingpong = 1; clipflags = fv[1][0].flags | fv[1][1].flags | fv[1][2].flags; - } - else - { + } else { pingpong = 0; k = 3; } - if (clipflags & ALIAS_LEFT_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_LEFT_CLIP, k, R_Alias_clip_left); + if (clipflags & ALIAS_LEFT_CLIP) { + k = R_AliasClip(fv[pingpong], fv[pingpong ^ 1], + ALIAS_LEFT_CLIP, k, R_Alias_clip_left); if (k == 0) return; pingpong ^= 1; } - if (clipflags & ALIAS_RIGHT_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_RIGHT_CLIP, k, R_Alias_clip_right); + if (clipflags & ALIAS_RIGHT_CLIP) { + k = R_AliasClip(fv[pingpong], fv[pingpong ^ 1], + ALIAS_RIGHT_CLIP, k, R_Alias_clip_right); if (k == 0) return; pingpong ^= 1; } - if (clipflags & ALIAS_BOTTOM_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_BOTTOM_CLIP, k, R_Alias_clip_bottom); + if (clipflags & ALIAS_BOTTOM_CLIP) { + k = R_AliasClip(fv[pingpong], fv[pingpong ^ 1], + ALIAS_BOTTOM_CLIP, k, R_Alias_clip_bottom); if (k == 0) return; pingpong ^= 1; } - if (clipflags & ALIAS_TOP_CLIP) - { - k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1], - ALIAS_TOP_CLIP, k, R_Alias_clip_top); + if (clipflags & ALIAS_TOP_CLIP) { + k = R_AliasClip(fv[pingpong], fv[pingpong ^ 1], + ALIAS_TOP_CLIP, k, R_Alias_clip_top); if (k == 0) return; pingpong ^= 1; } - for (i=0 ; i<k ; i++) - { + for (i = 0; i < k; i++) { if (fv[pingpong][i].u < r_refdef.aliasvrect.x) fv[pingpong][i].u = r_refdef.aliasvrect.x; else if (fv[pingpong][i].u > r_refdef.aliasvrectright) @@ -315,11 +292,10 @@ void R_AliasClipTriangle (finalvert_t *index0, finalvert_t *index1, finalvert_t } // draw triangles - for (i=1 ; i<k-1 ; i++) - { + for (i = 1; i < k - 1; i++) { aliastriangleparms.a = &fv[pingpong][0]; aliastriangleparms.b = &fv[pingpong][i]; - aliastriangleparms.c = &fv[pingpong][i+1]; + aliastriangleparms.c = &fv[pingpong][i + 1]; R_DrawTriangle(); } } |