1 /* $Id: scanline.c,v 1.6 2003-02-18 20:15:48 btb Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Routines to draw the texture mapped scanlines.
20 * Revision 1.2 1995/02/20 18:23:39 john
21 * Added new module for C versions of inner loops.
23 * Revision 1.1 1995/02/20 17:42:27 john
34 static char rcsid[] = "$Id: scanline.c,v 1.6 2003-02-18 20:15:48 btb Exp $";
52 void c_tmap_scanline_flat()
57 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y ) );
59 /* for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
60 *dest++ = tmap_flat_color;
62 memset(dest,tmap_flat_color,fx_xright-fx_xleft+1);
65 void c_tmap_scanline_shaded()
71 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
73 fade = tmap_flat_shade_value<<8;
74 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
76 *dest++ = gr_fade_table[ fade |(tmp)];
80 void c_tmap_scanline_lin_nolight()
92 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
94 if (!Transparency_on) {
95 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
96 *dest++ = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
101 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
102 c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
114 void c_tmap_scanline_lin()
119 fix u,v,l,dudx, dvdx, dldx;
128 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
130 if (!Transparency_on) {
131 ubyte* pixPtrLocalCopy = pixptr;
132 ubyte* fadeTableLocalCopy = gr_fade_table;
133 unsigned long destlong;
135 x = fx_xright-fx_xleft+1;
137 if ((j = (unsigned long) dest & 3) != 0)
146 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
147 *dest++ = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
160 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
161 destlong = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ] << 24;
166 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
167 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ] << 16;
172 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
173 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ] << 8;
178 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
179 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
184 *((unsigned long *) dest) = destlong;
192 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
193 *dest++ = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
201 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
202 c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
203 if ( c!=TRANSPARENCY_COLOR)
204 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
205 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
216 void c_tmap_scanline_lin()
221 fix u,v,l,dudx, dvdx, dldx;
230 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
232 if (!Transparency_on) {
233 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
234 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
235 *dest++ = gr_fade_table[ (l&(0x7f00)) + (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
242 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
243 c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
245 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
246 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
257 // Used for energy centers. See comments for c_tmap_scanline_per().
258 void c_fp_tmap_scanline_per_nolight()
263 double u, v, z, dudx, dvdx, dzdx, rec_z;
267 v = f2db(fx_v) * 64.0;
269 dudx = f2db(fx_du_dx);
270 dvdx = f2db(fx_dv_dx) * 64.0;
271 dzdx = f2db(fx_dz_dx);
275 dest = (ubyte *) (write_buffer + fx_xleft + (bytes_per_row * fx_y));
277 x = fx_xright - fx_xleft + 1;
278 if (!Transparency_on) {
280 if ((j = (size_t) dest & 7) != 0) {
285 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
286 (((int) (u * rec_z)) & 63)];
298 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
299 (((int) (u * rec_z)) & 63)];
305 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
306 (((int) (u * rec_z)) & 63)] << 8;
312 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
313 (((int) (u * rec_z)) & 63)] << 16;
319 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
320 (((int) (u * rec_z)) & 63)] << 24;
326 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
327 (((int) (u * rec_z)) & 63)] << 32;
333 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
334 (((int) (u * rec_z)) & 63)] << 40;
340 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
341 (((int) (u * rec_z)) & 63)] << 48;
347 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
348 (((int) (u * rec_z)) & 63)] << 56;
354 *((u_int64_t *) dest) = destlong;
362 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
363 (((int) (u * rec_z)) & 63)];
370 x = fx_xright - fx_xleft + 1;
373 if ((j = (size_t) dest & 7) != 0) {
378 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
379 (((int) (u * rec_z)) & 63)];
394 destlong = *((u_int64_t *) dest);
395 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
396 (((int) (u * rec_z)) & 63)];
398 destlong &= ~(u_int64_t)0xFF;
399 destlong |= (u_int64_t) c;
405 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
406 (((int) (u * rec_z)) & 63)];
408 destlong &= ~((u_int64_t)0xFF << 8);
409 destlong |= (u_int64_t) c << 8;
415 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
416 (((int) (u * rec_z)) & 63)];
418 destlong &= ~((u_int64_t)0xFF << 16);
419 destlong |= (u_int64_t) c << 16;
425 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
426 (((int) (u * rec_z)) & 63)];
428 destlong &= ~((u_int64_t)0xFF << 24);
429 destlong |= (u_int64_t) c << 24;
435 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
436 (((int) (u * rec_z)) & 63)];
438 destlong &= ~((u_int64_t)0xFF << 32);
439 destlong |= (u_int64_t) c << 32;
445 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
446 (((int) (u * rec_z)) & 63)];
448 destlong &= ~((u_int64_t)0xFF << 40);
449 destlong |= (u_int64_t) c << 40;
455 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
456 (((int) (u * rec_z)) & 63)];
458 destlong &= ~((u_int64_t)0xFF << 48);
459 destlong |= (u_int64_t) c << 48;
465 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
466 (((int) (u * rec_z)) & 63)];
468 destlong &= ~((u_int64_t)0xFF << 56);
469 destlong |= (u_int64_t) c << 56;
476 *((u_int64_t *) dest) = destlong;
483 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
484 (((int) (u * rec_z)) & 63)];
496 void c_tmap_scanline_per_nolight()
501 fix u,v,z,dudx, dvdx, dzdx;
510 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
512 if (!Transparency_on) {
513 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
514 *dest++ = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
520 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
521 c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
532 // This texture mapper uses floating point extensively and writes 8 pixels at once, so it likely works
533 // best on 64 bit RISC processors.
534 // WARNING: it is not endian clean. For big endian, reverse the shift counts in the unrolled loops. I
535 // have no means to test that, so I didn't try it. Please tell me if you get this to work on a big
537 // If you're using an Alpha, use the Compaq compiler for this file for quite some fps more.
538 // Unfortunately, it won't compile the whole source, so simply compile everything, change the
539 // compiler to ccc, remove scanline.o and compile again.
540 // Please send comments/suggestions to falk.hueffner@student.uni-tuebingen.de.
541 void c_fp_tmap_scanline_per()
546 double u, v, z, l, dudx, dvdx, dzdx, dldx, rec_z;
550 v = f2db(fx_v) * 64.0;
553 dudx = f2db(fx_du_dx);
554 dvdx = f2db(fx_dv_dx) * 64.0;
555 dzdx = f2db(fx_dz_dx);
556 dldx = f2db(fx_dl_dx);
558 rec_z = 1.0 / z; // gcc 2.95.2 is won't do this optimization itself
560 dest = (ubyte *) (write_buffer + fx_xleft + (bytes_per_row * fx_y));
561 x = fx_xright - fx_xleft + 1;
563 if (!Transparency_on) {
565 if ((j = (size_t) dest & 7) != 0) {
570 gr_fade_table[((int) fabs(l)) * 256 +
571 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
572 (((int) (u * rec_z)) & 63)]];
586 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
587 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
588 (((int) (u * rec_z)) & 63)]];
595 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
596 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
597 (((int) (u * rec_z)) & 63)]] << 8;
604 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
605 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
606 (((int) (u * rec_z)) & 63)]] << 16;
613 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
614 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
615 (((int) (u * rec_z)) & 63)]] << 24;
622 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
623 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
624 (((int) (u * rec_z)) & 63)]] << 32;
631 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
632 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
633 (((int) (u * rec_z)) & 63)]] << 40;
640 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
641 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
642 (((int) (u * rec_z)) & 63)]] << 48;
649 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
650 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
651 (((int) (u * rec_z)) & 63)]] << 56;
658 *((u_int64_t *) dest) = destlong;
666 gr_fade_table[((int) fabs(l)) * 256 +
667 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)]];
676 if ((j = (size_t) dest & 7) != 0) {
680 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
682 *dest = gr_fade_table[((int) fabs(l)) * 256 + c];
696 destlong = *((u_int64_t *) dest);
697 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
699 destlong &= ~(u_int64_t)0xFF;
700 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c];
707 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
709 destlong &= ~((u_int64_t)0xFF << 8);
710 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 8;
717 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
719 destlong &= ~((u_int64_t)0xFF << 16);
720 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 16;
727 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
729 destlong &= ~((u_int64_t)0xFF << 24);
730 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 24;
737 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
739 destlong &= ~((u_int64_t)0xFF << 32);
740 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 32;
747 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
749 destlong &= ~((u_int64_t)0xFF << 40);
750 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 40;
757 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
759 destlong &= ~((u_int64_t)0xFF << 48);
760 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 48;
767 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
769 destlong &= ~((u_int64_t)0xFF << 56);
770 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 56;
778 *((u_int64_t *) dest) = destlong;
785 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
787 *dest = gr_fade_table[((int) fabs(l)) * 256 + c];
799 // note the unrolling loop is broken. It is never called, and uses big endian. -- FH
800 void c_tmap_scanline_per()
806 fix dudx, dvdx, dzdx, dldx;
817 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
819 if (!Transparency_on) {
820 ubyte* pixPtrLocalCopy = pixptr;
821 ubyte* fadeTableLocalCopy = gr_fade_table;
822 unsigned long destlong;
824 x = fx_xright-fx_xleft+1;
826 if ((j = (unsigned long) dest & 3) != 0)
835 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
836 *dest++ = fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
850 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
851 destlong = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ] << 24;
857 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
858 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ] << 16;
864 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
865 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ] << 8;
871 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
872 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
878 *((unsigned long *) dest) = destlong;
886 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
887 *dest++ = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
896 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
897 c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
898 if ( c!=TRANSPARENCY_COLOR)
899 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
900 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
912 void c_tmap_scanline_per()
917 fix u,v,z,l,dudx, dvdx, dzdx, dldx;
928 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
930 if (!Transparency_on) {
931 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
932 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
933 *dest++ = gr_fade_table[ (l&(0x7f00)) + (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
941 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
942 c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
944 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
945 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
958 void (*cur_tmap_scanline_per)(void);
959 void (*cur_tmap_scanline_per_nolight)(void);
960 void (*cur_tmap_scanline_lin)(void);
961 void (*cur_tmap_scanline_lin_nolight)(void);
962 void (*cur_tmap_scanline_flat)(void);
963 void (*cur_tmap_scanline_shaded)(void);
965 //runtime selection of optimized tmappers. 12/07/99 Matthew Mueller
966 //the reason I did it this way rather than having a *tmap_funcs that then points to a c_tmap or fp_tmap struct thats already filled in, is to avoid a second pointer dereference.
967 void select_tmap(char *type){
970 #if defined(__pentiumpro__)
972 #elif defined(__pentium__)
983 if (stricmp(type,"i386")==0){
984 cur_tmap_scanline_per=asm_tmap_scanline_per;
985 cur_tmap_scanline_per_nolight=asm_tmap_scanline_per;
986 cur_tmap_scanline_lin=asm_tmap_scanline_lin_lighted;
987 cur_tmap_scanline_lin_nolight=asm_tmap_scanline_lin;
988 cur_tmap_scanline_flat=asm_tmap_scanline_flat;
989 cur_tmap_scanline_shaded=asm_tmap_scanline_shaded;
991 else if (stricmp(type,"pent")==0){
992 cur_tmap_scanline_per=asm_pent_tmap_scanline_per;
993 cur_tmap_scanline_per_nolight=asm_pent_tmap_scanline_per;
994 cur_tmap_scanline_lin=asm_tmap_scanline_lin_lighted;
995 cur_tmap_scanline_lin_nolight=asm_tmap_scanline_lin;
996 cur_tmap_scanline_flat=asm_tmap_scanline_flat;
997 cur_tmap_scanline_shaded=asm_tmap_scanline_shaded;
999 else if (stricmp(type,"ppro")==0){
1000 cur_tmap_scanline_per=asm_ppro_tmap_scanline_per;
1001 cur_tmap_scanline_per_nolight=asm_ppro_tmap_scanline_per;
1002 cur_tmap_scanline_lin=asm_tmap_scanline_lin_lighted;
1003 cur_tmap_scanline_lin_nolight=asm_tmap_scanline_lin;
1004 cur_tmap_scanline_flat=asm_tmap_scanline_flat;
1005 cur_tmap_scanline_shaded=asm_tmap_scanline_shaded;
1009 if (stricmp(type,"fp")==0){
1010 cur_tmap_scanline_per=c_fp_tmap_scanline_per;
1011 cur_tmap_scanline_per_nolight=c_fp_tmap_scanline_per_nolight;
1012 cur_tmap_scanline_lin=c_tmap_scanline_lin;
1013 cur_tmap_scanline_lin_nolight=c_tmap_scanline_lin_nolight;
1014 cur_tmap_scanline_flat=c_tmap_scanline_flat;
1015 cur_tmap_scanline_shaded=c_tmap_scanline_shaded;
1018 if (stricmp(type,"c")!=0)
1019 printf("unknown tmap requested, using c tmap\n");
1020 cur_tmap_scanline_per=c_tmap_scanline_per;
1021 cur_tmap_scanline_per_nolight=c_tmap_scanline_per_nolight;
1022 cur_tmap_scanline_lin=c_tmap_scanline_lin;
1023 cur_tmap_scanline_lin_nolight=c_tmap_scanline_lin_nolight;
1024 cur_tmap_scanline_flat=c_tmap_scanline_flat;
1025 cur_tmap_scanline_shaded=c_tmap_scanline_shaded;