1 /* $Id: scanline.c,v 1.8 2004-08-28 23:17:45 schaffner 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.
26 static char rcsid[] = "$Id: scanline.c,v 1.8 2004-08-28 23:17:45 schaffner Exp $";
44 void c_tmap_scanline_flat()
49 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y ) );
51 /* for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
52 *dest++ = tmap_flat_color;
54 memset(dest,tmap_flat_color,fx_xright-fx_xleft+1);
57 void c_tmap_scanline_shaded()
63 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
65 fade = tmap_flat_shade_value<<8;
66 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
68 *dest++ = gr_fade_table[ fade |(tmp)];
72 void c_tmap_scanline_lin_nolight()
84 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
86 if (!Transparency_on) {
87 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
88 *dest++ = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
93 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
94 c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
106 void c_tmap_scanline_lin()
111 fix u,v,l,dudx, dvdx, dldx;
120 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
122 if (!Transparency_on) {
123 ubyte* pixPtrLocalCopy = pixptr;
124 ubyte* fadeTableLocalCopy = gr_fade_table;
125 unsigned long destlong;
127 x = fx_xright-fx_xleft+1;
129 if ((j = (unsigned long) dest & 3) != 0)
138 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
139 *dest++ = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
152 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
153 destlong = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ] << 24;
158 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
159 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ] << 16;
164 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
165 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ] << 8;
170 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
171 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
176 *((unsigned long *) dest) = destlong;
184 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
185 *dest++ = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint) pixPtrLocalCopy[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
193 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
194 c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
195 if ( c!=TRANSPARENCY_COLOR)
196 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
197 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
208 void c_tmap_scanline_lin()
213 fix u,v,l,dudx, dvdx, dldx;
222 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
224 if (!Transparency_on) {
225 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
226 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
227 *dest++ = gr_fade_table[ (l&(0x7f00)) + (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
234 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
235 c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
237 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
238 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
249 // Used for energy centers. See comments for c_tmap_scanline_per().
250 void c_fp_tmap_scanline_per_nolight()
255 double u, v, z, dudx, dvdx, dzdx, rec_z;
259 v = f2db(fx_v) * 64.0;
261 dudx = f2db(fx_du_dx);
262 dvdx = f2db(fx_dv_dx) * 64.0;
263 dzdx = f2db(fx_dz_dx);
267 dest = (ubyte *) (write_buffer + fx_xleft + (bytes_per_row * fx_y));
269 x = fx_xright - fx_xleft + 1;
270 if (!Transparency_on) {
272 if ((j = (size_t) dest & 7) != 0) {
277 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
278 (((int) (u * rec_z)) & 63)];
290 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
291 (((int) (u * rec_z)) & 63)];
297 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
298 (((int) (u * rec_z)) & 63)] << 8;
304 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
305 (((int) (u * rec_z)) & 63)] << 16;
311 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
312 (((int) (u * rec_z)) & 63)] << 24;
318 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
319 (((int) (u * rec_z)) & 63)] << 32;
325 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
326 (((int) (u * rec_z)) & 63)] << 40;
332 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
333 (((int) (u * rec_z)) & 63)] << 48;
339 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
340 (((int) (u * rec_z)) & 63)] << 56;
346 *((u_int64_t *) dest) = destlong;
354 (u_int64_t) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
355 (((int) (u * rec_z)) & 63)];
362 x = fx_xright - fx_xleft + 1;
365 if ((j = (size_t) dest & 7) != 0) {
370 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
371 (((int) (u * rec_z)) & 63)];
386 destlong = *((u_int64_t *) dest);
387 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
388 (((int) (u * rec_z)) & 63)];
390 destlong &= ~(u_int64_t)0xFF;
391 destlong |= (u_int64_t) c;
397 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
398 (((int) (u * rec_z)) & 63)];
400 destlong &= ~((u_int64_t)0xFF << 8);
401 destlong |= (u_int64_t) c << 8;
407 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
408 (((int) (u * rec_z)) & 63)];
410 destlong &= ~((u_int64_t)0xFF << 16);
411 destlong |= (u_int64_t) c << 16;
417 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
418 (((int) (u * rec_z)) & 63)];
420 destlong &= ~((u_int64_t)0xFF << 24);
421 destlong |= (u_int64_t) c << 24;
427 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
428 (((int) (u * rec_z)) & 63)];
430 destlong &= ~((u_int64_t)0xFF << 32);
431 destlong |= (u_int64_t) c << 32;
437 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
438 (((int) (u * rec_z)) & 63)];
440 destlong &= ~((u_int64_t)0xFF << 40);
441 destlong |= (u_int64_t) c << 40;
447 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
448 (((int) (u * rec_z)) & 63)];
450 destlong &= ~((u_int64_t)0xFF << 48);
451 destlong |= (u_int64_t) c << 48;
457 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
458 (((int) (u * rec_z)) & 63)];
460 destlong &= ~((u_int64_t)0xFF << 56);
461 destlong |= (u_int64_t) c << 56;
468 *((u_int64_t *) dest) = destlong;
475 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
476 (((int) (u * rec_z)) & 63)];
488 void c_tmap_scanline_per_nolight()
493 fix u,v,z,dudx, dvdx, dzdx;
502 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
504 if (!Transparency_on) {
505 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
506 *dest++ = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
512 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
513 c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
524 // This texture mapper uses floating point extensively and writes 8 pixels at once, so it likely works
525 // best on 64 bit RISC processors.
526 // WARNING: it is not endian clean. For big endian, reverse the shift counts in the unrolled loops. I
527 // have no means to test that, so I didn't try it. Please tell me if you get this to work on a big
529 // If you're using an Alpha, use the Compaq compiler for this file for quite some fps more.
530 // Unfortunately, it won't compile the whole source, so simply compile everything, change the
531 // compiler to ccc, remove scanline.o and compile again.
532 // Please send comments/suggestions to falk.hueffner@student.uni-tuebingen.de.
533 void c_fp_tmap_scanline_per()
538 double u, v, z, l, dudx, dvdx, dzdx, dldx, rec_z;
542 v = f2db(fx_v) * 64.0;
545 dudx = f2db(fx_du_dx);
546 dvdx = f2db(fx_dv_dx) * 64.0;
547 dzdx = f2db(fx_dz_dx);
548 dldx = f2db(fx_dl_dx);
550 rec_z = 1.0 / z; // gcc 2.95.2 is won't do this optimization itself
552 dest = (ubyte *) (write_buffer + fx_xleft + (bytes_per_row * fx_y));
553 x = fx_xright - fx_xleft + 1;
555 if (!Transparency_on) {
557 if ((j = (size_t) dest & 7) != 0) {
562 gr_fade_table[((int) fabs(l)) * 256 +
563 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
564 (((int) (u * rec_z)) & 63)]];
578 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
579 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
580 (((int) (u * rec_z)) & 63)]];
587 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
588 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
589 (((int) (u * rec_z)) & 63)]] << 8;
596 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
597 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
598 (((int) (u * rec_z)) & 63)]] << 16;
605 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
606 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
607 (((int) (u * rec_z)) & 63)]] << 24;
614 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
615 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
616 (((int) (u * rec_z)) & 63)]] << 32;
623 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
624 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
625 (((int) (u * rec_z)) & 63)]] << 40;
632 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
633 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
634 (((int) (u * rec_z)) & 63)]] << 48;
641 (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 +
642 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) +
643 (((int) (u * rec_z)) & 63)]] << 56;
650 *((u_int64_t *) dest) = destlong;
658 gr_fade_table[((int) fabs(l)) * 256 +
659 (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)]];
668 if ((j = (size_t) dest & 7) != 0) {
672 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
674 *dest = gr_fade_table[((int) fabs(l)) * 256 + c];
688 destlong = *((u_int64_t *) dest);
689 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
691 destlong &= ~(u_int64_t)0xFF;
692 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c];
699 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
701 destlong &= ~((u_int64_t)0xFF << 8);
702 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 8;
709 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
711 destlong &= ~((u_int64_t)0xFF << 16);
712 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 16;
719 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
721 destlong &= ~((u_int64_t)0xFF << 24);
722 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 24;
729 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
731 destlong &= ~((u_int64_t)0xFF << 32);
732 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 32;
739 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
741 destlong &= ~((u_int64_t)0xFF << 40);
742 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 40;
749 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
751 destlong &= ~((u_int64_t)0xFF << 48);
752 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 48;
759 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
761 destlong &= ~((u_int64_t)0xFF << 56);
762 destlong |= (u_int64_t) gr_fade_table[((int) fabs(l)) * 256 + c] << 56;
770 *((u_int64_t *) dest) = destlong;
777 c = (uint) pixptr[(((int) (v * rec_z)) & (64 * 63)) + (((int) (u * rec_z)) & 63)];
779 *dest = gr_fade_table[((int) fabs(l)) * 256 + c];
791 // note the unrolling loop is broken. It is never called, and uses big endian. -- FH
792 void c_tmap_scanline_per()
798 fix dudx, dvdx, dzdx, dldx;
809 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
811 if (!Transparency_on) {
812 ubyte* pixPtrLocalCopy = pixptr;
813 ubyte* fadeTableLocalCopy = gr_fade_table;
814 unsigned long destlong;
816 x = fx_xright-fx_xleft+1;
818 if ((j = (unsigned long) dest & 3) != 0)
827 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
828 *dest++ = fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
842 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
843 destlong = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ] << 24;
849 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
850 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ] << 16;
856 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
857 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ] << 8;
863 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
864 destlong |= (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
870 *((unsigned long *) dest) = destlong;
878 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
879 *dest++ = (unsigned long) fadeTableLocalCopy[ (l&(0x7f00)) + (uint)pixPtrLocalCopy[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
888 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
889 c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
890 if ( c!=TRANSPARENCY_COLOR)
891 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
892 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
904 void c_tmap_scanline_per()
909 fix u,v,z,l,dudx, dvdx, dzdx, dldx;
920 dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
922 if (!Transparency_on) {
923 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
924 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
925 *dest++ = gr_fade_table[ (l&(0x7f00)) + (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
933 for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
934 c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
936 //edited 05/18/99 Matt Mueller - changed from 0xff00 to 0x7f00 to fix glitches
937 *dest = gr_fade_table[ (l&(0x7f00)) + c ];
950 void (*cur_tmap_scanline_per)(void);
951 void (*cur_tmap_scanline_per_nolight)(void);
952 void (*cur_tmap_scanline_lin)(void);
953 void (*cur_tmap_scanline_lin_nolight)(void);
954 void (*cur_tmap_scanline_flat)(void);
955 void (*cur_tmap_scanline_shaded)(void);
957 //runtime selection of optimized tmappers. 12/07/99 Matthew Mueller
958 //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.
959 void select_tmap(char *type)
963 #if !defined(NO_ASM) && !defined(OGL)
964 #if defined(__pentiumpro__)
966 #elif defined(__pentium__)
976 #if !defined(NO_ASM) && !defined(OGL)
977 if (stricmp(type, "i386")==0)
979 cur_tmap_scanline_per=asm_tmap_scanline_per;
980 cur_tmap_scanline_per_nolight=asm_tmap_scanline_per;
981 cur_tmap_scanline_lin=asm_tmap_scanline_lin_lighted;
982 cur_tmap_scanline_lin_nolight=asm_tmap_scanline_lin;
983 cur_tmap_scanline_flat=asm_tmap_scanline_flat;
984 cur_tmap_scanline_shaded=asm_tmap_scanline_shaded;
986 else if (stricmp(type,"pent")==0){
987 cur_tmap_scanline_per=asm_pent_tmap_scanline_per;
988 cur_tmap_scanline_per_nolight=asm_pent_tmap_scanline_per;
989 cur_tmap_scanline_lin=asm_tmap_scanline_lin_lighted;
990 cur_tmap_scanline_lin_nolight=asm_tmap_scanline_lin;
991 cur_tmap_scanline_flat=asm_tmap_scanline_flat;
992 cur_tmap_scanline_shaded=asm_tmap_scanline_shaded;
994 else if (stricmp(type,"ppro")==0){
995 cur_tmap_scanline_per=asm_ppro_tmap_scanline_per;
996 cur_tmap_scanline_per_nolight=asm_ppro_tmap_scanline_per;
997 cur_tmap_scanline_lin=asm_tmap_scanline_lin_lighted;
998 cur_tmap_scanline_lin_nolight=asm_tmap_scanline_lin;
999 cur_tmap_scanline_flat=asm_tmap_scanline_flat;
1000 cur_tmap_scanline_shaded=asm_tmap_scanline_shaded;
1004 if (stricmp(type,"fp")==0){
1005 cur_tmap_scanline_per=c_fp_tmap_scanline_per;
1006 cur_tmap_scanline_per_nolight=c_fp_tmap_scanline_per_nolight;
1007 cur_tmap_scanline_lin=c_tmap_scanline_lin;
1008 cur_tmap_scanline_lin_nolight=c_tmap_scanline_lin_nolight;
1009 cur_tmap_scanline_flat=c_tmap_scanline_flat;
1010 cur_tmap_scanline_shaded=c_tmap_scanline_shaded;
1013 if (stricmp(type,"c")!=0)
1014 printf("unknown tmap requested, using c tmap\n");
1015 cur_tmap_scanline_per=c_tmap_scanline_per;
1016 cur_tmap_scanline_per_nolight=c_tmap_scanline_per_nolight;
1017 cur_tmap_scanline_lin=c_tmap_scanline_lin;
1018 cur_tmap_scanline_lin_nolight=c_tmap_scanline_lin_nolight;
1019 cur_tmap_scanline_flat=c_tmap_scanline_flat;
1020 cur_tmap_scanline_shaded=c_tmap_scanline_shaded;