From: ian Date: Sat, 23 Oct 2004 11:05:06 +0000 (+0000) Subject: faster X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=2eee6fdee8916ae37de9bff0cdd33d664a065111;p=trains.git faster --- diff --git a/layout/subseg2display.c b/layout/subseg2display.c index 31a8ba8..fa4e020 100644 --- a/layout/subseg2display.c +++ b/layout/subseg2display.c @@ -194,15 +194,13 @@ static unsigned reverse_bits_in_byte(unsigned a) { } static void angle_to_colour(double result[3], - double angle /* in units of 2pi radians< <1.0 */, - int reverse) { + int angle_i /* [0..63> */) { int s; - double f, u, d, U, D; + double angle, f, u, d, U, D; - angle *= 6.0; + angle= angle_i / 64.0 * 6.0; s= floor(angle); f= angle - s; - if (reverse) { s += 3; s %= 6; } u= f * 0.5; U= u + 0.5; @@ -221,6 +219,15 @@ static void angle_to_colour(double result[3], } } +static double anglemap[64][3]; + +static void angle_to_colour_init(void) { + int i; + + for (i=0; i<64; i++) + angle_to_colour(anglemap[i],i); +} + static void process(void) { int i; unsigned char rgbob[3]; @@ -233,10 +240,11 @@ static void process(void) { for (i=0; i<3; i++) rgbob[i]= background.rgb[i] * 255.0; + angle_to_colour_init(); + for (row=0; row> 2) & 0x3f) / 64.0; + angle= ((red >> 2) & 0x3f); segnum= blue | ((green & 0xc0) << 2); movfeatpos= green & 0x3f; @@ -273,14 +281,14 @@ static void process(void) { r= &idinfo[ix]; - angle_to_colour(rgbdirn, angle, r->alpha < 0); + rgbdirn= anglemap[ angle ^ (r->alpha < 0 ? 32 : 0) ]; alpha= fabs(r->alpha); - for (i=0; i<3; i++) - rgbod[i]= alpha * rgbdirn[i] + (1.0 - alpha) * r->rgb[i]; - - for (i=0; i<3; i++) - rgbo[i]= rgbod[i] * 255.0; + for (i=0; i<3; i++) { + double v; + v= alpha * rgbdirn[i] + (1.0 - alpha) * r->rgb[i]; + rgbo[i]= v * 255.0; + } if (fwrite(rgbo,1,3,stdout)!=3) { perror("writing"); exit(12); } }