home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga ACS 1998 #6
/
amigaacscoverdisc1998-061998.iso
/
games
/
descent
/
source
/
texmap
/
quad.c
< prev
next >
Wrap
Text File
|
1998-06-08
|
2KB
|
86 lines
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
void c_tmap_scanline_per()
{
ubyte *dest;
uint c;
int x;
fix u,v,z,l,dudx, dvdx, dzdx, dldx;
u = fx_u;
v = fx_v*64;
z = fx_z;
dudx = fx_du_dx;
dvdx = fx_dv_dx*64;
dzdx = fx_dz_dx;
l = fx_l>>8;
dldx = fx_dl_dx>>8;
dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
{
fix u0 = fx_u;
fix u2 = fx_u + fx_du_dx*(fx_xright-fx_xleft+1);
fix v0 = fx_v;
fix v2 = fx_v + fx_dv_dx*(fx_xright-fx_xleft+1);
fix w0 = fx_z;
fix w2 = fx_z + fx_dz_dx*(fx_xright-fx_xleft+1);
fix u1 = fixdiv((u0+u2),(w0+w2));
fix v1 = fixdiv((v0+v2),(w0+w2));
fix a0, a1, a2, b0, b1, b2, dudx1, dvdx1;
int dx = fx_xright-fx_xleft+1;
u0 = fixdiv( u0, w0 );
v0 = fixdiv( v0, w0 );
u2 = fixdiv( u2, w2 );
v2 = fixdiv( v2, w2 );
a0 = u0; b0 = v0;
a1 = (-3*u0+4*u1-u2)/dx; b1 = (-3*v0+4*v1-v2)/dx;
a2 = (2*(u0-2*u1+u2))/(dx*dx); b2 = (2*(v0-2*v1+v2))/(dx*dx);
dudx = a1 + a2;
dvdx = b1 + b2;
dudx1 = 2*a2;
dvdx1 = 2*b2;
u = u0;
v = v0;
if (!Transparency_on) {
for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
*dest++ = gr_fade_table[ (l&(0xff00)) + (uint)pixptr[ (f2i(v)&63)*64 + (f2i(u)&63) ] ];
l += dldx;
u += dudx;
v += dvdx;
dudx += dudx1;
dvdx += dvdx1;
//z += dzdx;
}
} else {
for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
c = (uint)pixptr[ (f2i(v)&63)*64 + (f2i(u)&63) ];
if ( c!=255)
*dest = gr_fade_table[ (l&(0xff00)) + c ];
dest++;
l += dldx;
u += dudx;
v += dvdx;
dudx += dudx1;
dvdx += dvdx1;
//z += dzdx;
}
}
}
}