summaryrefslogtreecommitdiff
path: root/src/sw_aclip.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sw_aclip.c')
-rw-r--r--src/sw_aclip.c238
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();
}
}