#include #include #include #include #include #include /* gettimeofday() */ #include #include #include "Scene.h" using namespace std; void usage(const char * progname) { cout << "Usage: " << progname << " [options] " << endl; cout << " Options:" << endl; cout << " -o|--output-file " << endl; cout << " -w|--width " << endl; cout << " -h|--height " << endl; cout << " -m|--multisample " << endl; cout << " -f|--field-of-view " << endl; cout << " -d|--max-depth " << endl; cout << " -v|--verbose" << endl; exit(42); } int main(int argc, char * argv[]) { int opt; int option_index; map scene_options; static const struct option long_options[] = { { "help", no_argument, NULL, 256 }, { "output-file", required_argument, NULL, 'o' }, { "width", required_argument, NULL, 'w' }, { "height", required_argument, NULL, 'h' }, { "multisample", required_argument, NULL, 'm' }, { "field-of-view", required_argument, NULL, 'f' }, { "max-depth", required_argument, NULL, 'd' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } }; while ((opt = getopt_long(argc, argv, "o:w:h:m:f:d:v", long_options, &option_index)) != -1) { switch (opt) { case 256: usage(argv[0]); break; case 'o': scene_options["output-file"] = optarg; break; case 'w': scene_options["width"] = optarg; break; case 'h': scene_options["height"] = optarg; break; case 'm': scene_options["multisample"] = optarg; break; case 'f': scene_options["field-of-view"] = optarg; break; case 'd': scene_options["max-depth"] = optarg; break; case 'v': scene_options["verbose"] = optarg; break; default: usage(argv[0]); } } if (optind >= argc) { usage(argv[0]); } Scene scene(scene_options, argv[optind]); struct timeval before, after; gettimeofday(&before, NULL); /* start timing */ scene.render(); gettimeofday(&after, NULL); /* stop timing */ double time_before = before.tv_sec + before.tv_usec / 1000000.0; double time_after = after.tv_sec + after.tv_usec / 1000000.0; double total_seconds = time_after - time_before; cout << "Elapsed time: " << total_seconds << " seconds"; double seconds = total_seconds; int days = (int) (seconds / (60.0 * 60.0 * 24.0)); seconds -= days * 60.0 * 60.0 * 24.0; int hours = (int) (seconds / (60.0 * 60.0)); seconds -= hours * 60.0 * 60.0; int minutes = (int) (seconds / 60.0); seconds -= minutes * 60.0; if (days || hours || minutes) { cout << " ("; if (days) cout << days << " days, "; if (days || hours) cout << hours << " hours, "; cout << minutes << " minutes, "; cout << seconds << " seconds)"; } cout << endl; return 0; }