ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/pmapopt.c
Revision: 2.10
Committed: Mon Jun 15 22:18:57 2020 UTC (3 years, 10 months ago) by rschregle
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R3, HEAD
Changes since 2.9: +3 -3 lines
Log Message:
Revised error msg for -am option

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: pmapopt.c,v 2.9 2020/01/23 18:24:47 rschregle Exp $";
3 #endif
4
5 /*
6 ==================================================================
7 Photon map interface to RADIANCE render options
8
9 Roland Schregle (roland.schregle@{hslu.ch, gmail.com})
10 (c) Fraunhofer Institute for Solar Energy Systems,
11 (c) Lucerne University of Applied Sciences and Arts,
12 supported by the Swiss National Science Foundation (SNSF, #147053)
13 ==================================================================
14
15 $Id: pmapopt.c,v 2.9 2020/01/23 18:24:47 rschregle Exp $
16 */
17
18
19
20 #include "ray.h"
21 #include "pmapparm.h"
22
23
24
25 int getPmapRenderOpt (int ac, char *av [])
26 /* Parse next render option for photon map; interface to getrenderopt();
27 * return -1 if parsing failed, else number of parameters consumed */
28 {
29 #define check(ol,al) (av[0][ol] || badarg(ac-1,av+1,al))
30
31 static int t = -1; /* pmap parameter index */
32
33 if (ac < 1 || !av [0] || av [0][0] != '-')
34 return -1;
35
36 switch (av [0][1]) {
37 case 'a':
38 switch (av [0][2]) {
39 case 'p': /* photon map */
40 /* Asking for photon map, ergo ambounce != 0 */
41 ambounce += (ambounce == 0);
42
43 if (!check(3, "s")) {
44 /* File -> assume bwidth = 1 or precomputed pmap */
45 if (++t >= NUM_PMAP_TYPES)
46 error(USER, "too many photon maps");
47
48 pmapParams [t].fileName = savqstr(av [1]);
49 pmapParams [t].minGather = pmapParams [t].maxGather =
50 defaultGather;
51 }
52 else return -1;
53
54 if (!check(3, "si")) {
55 /* File + bandwidth */
56 pmapParams [t].minGather = pmapParams [t].maxGather =
57 atoi(av [2]);
58
59 if (!pmapParams [t].minGather)
60 return -1;
61 }
62 else {
63 sprintf(errmsg, "missing photon lookup bandwidth, "
64 "defaulting to %d", defaultGather);
65 error(WARNING, errmsg);
66 return 1;
67 }
68
69 if (!check(3, "sii")) {
70 /* File + min bwidth + max bwidth -> bias compensation */
71 pmapParams [t].maxGather = atoi(av [3]);
72
73 if (pmapParams [t].minGather >= pmapParams [t].maxGather)
74 return -1;
75
76 return 3;
77 }
78 else return 2;
79
80 case 'm': /* Fixed max photon search radius */
81 if (check(3, "f") || (maxDistFix = atof(av [1])) <= 0)
82 error(USER, "invalid max photon search radius");
83
84 return 1;
85
86 #ifdef PMAP_OOC
87 case 'c': /* OOC pmap cache page size ratio */
88 if (check(3, "f") || (pmapCachePageSize = atof(av [1])) <= 0)
89 error(USER, "invalid photon cache page size ratio");
90
91 return 1;
92
93 case 'C': /* OOC pmap cache size (in photons); 0 = no caching */
94 if (check(3, "s"))
95 error(USER, "invalid number of cached photons");
96
97 /* Parsing failure sets to zero and disables caching */
98 pmapCacheSize = parseMultiplier(av [1]);
99
100 return 1;
101 #endif
102 }
103 }
104 #undef check
105
106 /* Unknown option */
107 return -1;
108 }
109
110
111
112 void printPmapDefaults ()
113 /* Print defaults for photon map render options */
114 {
115 printf("-am %.1f\t\t\t\t# max photon search radius\n", maxDistFix);
116 #ifdef PMAP_OOC
117 printf("-ac %.1f\t\t\t\t# photon cache page size ratio\n",
118 pmapCachePageSize);
119 printf("-aC %ld\t\t\t# num cached photons\n", pmapCacheSize);
120 #endif
121 }