1 /*
2  * main.c
3  *
4  * Copyright (C) 1989, 1991, Craig E. Kolb
5  * All rights reserved.
6  *
7  * This software may be freely copied, modified, and redistributed
8  * provided that this copyright notice is preserved on all copies.
9  *
10  * You may not distribute this software, in whole or in part, as part of
11  * any commercial product without the express consent of the authors.
12  *
13  * There is no warranty or other guarantee of fitness of this software
14  * for any purpose.  It is provided solely "as is".
15  *
16  * $Id: main.c,v 4.0 91/07/17 17:36:46 kolb Exp Locker: kolb $
17  *
18  * $Log:	main.c,v $
19  * Revision 4.0  91/07/17  17:36:46  kolb
20  * Initial version.
21  *
22  *
23  */
24 
25 char rcsid[] = "$Id: main.c,v 4.0 91/07/17 17:36:46 kolb Exp Locker: kolb $";
26 
27 #include "rayshade.h"
28 #include "options.h"
29 #include "stats.h"
30 #include "viewing.h"
31 #include "picture.h"
32 
33 void RSInitialize(), RSStartFrame();
34 
35 int
main(argc,argv)36 main(argc, argv)
37 int argc;
38 char **argv;
39 {
40 	Float utime, stime;
41 
42 	/*
43  	 * Initialize variables, etc.
44 	 */
45 	RSInitialize(argc, argv);
46 	RSStartFrame(Options.startframe);
47 	/*
48  	 * Print more information than we'll ever need to know...
49 	 */
50 	if (Options.verbose) {
51 		extern Geom *World;
52 		/* World object info. */
53 		AggregatePrintInfo(World, Stats.fstats);
54 		/* Print info about rendering options and the like. */
55 		RSOptionsList();
56 	}
57 	/*
58 	 * Print preprocessing time.
59 	 */
60 	RSGetCpuTime(&utime, &stime);
61 	fprintf(Stats.fstats,"Preprocessing time:\t");
62 	fprintf(Stats.fstats,"%2.2fu  %2.2fs\n", utime, stime);
63 	fprintf(Stats.fstats,"Starting trace.\n");
64 	(void)fflush(Stats.fstats);
65 	/*
66 	 * Render the image.
67 	 */
68 	Render(argc, argv);
69 	StatsPrint();
70 	return 0;
71 }
72 
73 static void
RSStartFrame(frame)74 RSStartFrame(frame)
75 int frame;
76 {
77 	/*
78 	 * Set the frame start time
79 	 */
80 	Options.framenum = frame;
81 	Options.framestart = Options.starttime +
82 			Options.framenum*Options.framelength;
83 	SamplingSetTime(Options.framestart, Options.shutterspeed,
84 			Options.framenum);
85 	/*
86 	 * Set up viewing parameters.
87 	 */
88 	RSViewing();
89 	/*
90 	 * Initialize world
91 	 */
92 	WorldSetup();
93 }
94 
95 /*
96  * Initialize non-time-varying goodies.
97  */
98 static void
RSInitialize(argc,argv)99 RSInitialize(argc, argv)
100 int argc;
101 char **argv;
102 {
103 	/*
104  	 * Initialize variables, etc.
105 	 */
106 	RSSetup();
107 	/*
108 	 * Parse options from command line.
109 	 */
110 	RSOptionsSet(argc, argv);
111 	/*
112 	 * Process input file.
113 	 */
114 	if (Options.verbose) {
115 		VersionPrint();
116 		fprintf(Stats.fstats,"Reading input file...\n");
117 		(void)fflush(Stats.fstats);
118 	}
119 	RSReadInputFile();
120 	/*
121 	 * Set variables that weren't set on command line
122 	 * or in input file.
123 	 */
124 	RSCleanup();
125 	/*
126 	 * Set sampling options.
127 	 */
128 	SamplingSetOptions(Options.samples, Options.gaussian,
129 			   Options.filterwidth);
130 }
131