8 static unsigned int *tunnel_map;
11 int init_tunnel(int x, int y)
19 printf("precalculating tunnel map...\n");
21 if(!(tunnel_map = malloc(xsz * ysz * sizeof *tunnel_map))) {
22 fprintf(stderr, "failed to allocate tunnel map\n");
27 for(i=0; i<ysz; i++) {
28 float y = 2.0 * (float)i / (float)ysz - 0.5;
29 for(j=0; j<xsz; j++) {
30 float x = 2.0 * (float)j / (float)xsz - 0.5;
31 float tu = atan2(y, x) / M_PI * 0.5 + 0.5;
32 float tv = sqrt(x*x + y*y);
34 int tx = (int)(tu * 65535.0) & 0xffff;
35 int ty = (int)(tv * 65535.0) & 0xffff;
37 *tmap++ = (tx << 16) | ty;
44 void destroy_tunnel(void)
49 void draw_tunnel(unsigned short *pixels)
52 unsigned int *tmap = tunnel_map;
54 for(i=0; i<ysz; i++) {
55 for(j=0; j<xsz; j++) {
56 unsigned int tx = (*tmap >> 16) & 0xffff;
57 unsigned int ty = *tmap & 0xffff;
63 *pixels++ = ((((r >> 3) & 0x1f) << 11) |
64 (((g >> 2) & 0x3f) << 5));/* |