home *** CD-ROM | disk | FTP | other *** search
/ Altsys Virtuoso 2.0K / virtuoso_20k.iso / DemoApps / Graphics / Viewers / raytracers / ohta / Source / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-08  |  1.9 KB  |  114 lines

  1. #include <sys/time.h>
  2. #include <sys/resource.h>
  3. #include <stdio.h>
  4.  
  5. #include "ray.h"
  6.  
  7. main(ac,av)
  8. int ac;
  9. char **av;
  10. {int g;
  11. struct rusage ru;
  12. struct timeval tu,tu2;
  13.     raycount=0;
  14.     shadowcount=0;
  15.     fflag=1;
  16.     dflag=0;
  17.     aflag=0;
  18.     tflag=0;
  19.     sflag=1;
  20.     oflag=1;
  21.     while(av[1]&&*av[1]=='-')
  22.     {    switch(av[1][1])
  23.         {case 's':        /* classical slow algorithm */
  24.             fflag=0;
  25.             break;
  26.         case 'd':        /* debug flag */
  27.             dflag=1;
  28.             break;
  29.         case 'a':        /* do anti-aliasing */
  30.             aflag=1;
  31.             break;
  32.         case 't':        /* produce timing information */
  33.             tflag=1;
  34.             break;
  35.         case 'b':        /* no shading */
  36.             sflag=0;
  37.             break;
  38.         case 'o':        /* don't order candidates */
  39.             oflag=0;
  40.             break;
  41.         case 'r':        /* set image resolution */
  42.             res = atoi(av[2]);
  43.             ac--;
  44.             av++;
  45.             break;
  46.         default:
  47.             usage();
  48.         }
  49.         ac--;
  50.         av++;
  51.     }
  52.     if(ac!=3)
  53.         usage();
  54.     initshape();
  55.     initshade();
  56.     input(av[1]);
  57.     if(fflag)
  58.     {    (void) getrusage(0,&ru);
  59.         tu=ru.ru_utime;
  60.         initdir();
  61.         if(tflag)
  62.             fprintf(stderr,"Directions=%d Objects=%d\n",
  63.                 DIRECTIONS,maxobj);
  64.         (void) getrusage(0,&ru);
  65.         tu2=ru.ru_utime;
  66.         if(tflag)
  67.         {    fprintf(stderr,"Initializeation time ");
  68.             printtime(tu,tu2);
  69.         }
  70.     }
  71.     else
  72.     {    if(tflag)
  73.             fprintf(stderr,"Objects=%d\n",maxobj);
  74.     }
  75.     if((g=creat(av[2],0666))<0)
  76.     {    perror(av[2]);
  77.         exit(3);
  78.     }
  79.     (void) getrusage(0,&ru);
  80.     tu=ru.ru_utime;
  81.     if(aflag)
  82.         ascan(g);
  83.     else
  84.         scan(g);
  85.     (void) getrusage(0,&ru);
  86.     tu2=ru.ru_utime;
  87.     if(tflag)
  88.     {    fprintf(stderr,"   Computation time ");
  89.         printtime(tu,tu2);
  90.         fprintf(stderr,"\n%d rays traced",raycount);
  91.         fprintf(stderr,"   %d shadows tested\n",shadowcount);
  92.     }
  93.     (void) close(g);
  94.     exit(0);
  95. }
  96.  
  97. usage()
  98. {    fprintf(stderr,
  99.         "Usage: ray [-sdatbo] [-r res] scenefile picfile\n");
  100.     exit(1);
  101. }
  102.  
  103. printtime(t0,t1)
  104. struct timeval t0,t1;
  105. {int sec,usec;
  106.     usec=t1.tv_usec-t0.tv_usec;
  107.     sec=t1.tv_sec-t0.tv_sec;
  108.     if(usec<0)
  109.     {    usec+=1000000;
  110.         sec--;
  111.     }
  112.     fprintf(stderr,"%4d.%03d",sec,usec/1000);
  113. }
  114.