ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/rcontrib.h
Revision: 2.20
Committed: Sat Jun 7 05:09:46 2025 UTC (18 hours, 54 minutes ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 2.19: +1 -2 lines
Log Message:
refactor: Put some declarations into "paths.h" and included in "platform.h"

File Contents

# Content
1 /* RCSid $Id: rcontrib.h,v 2.19 2023/11/15 18:02:53 greg Exp $ */
2
3 /*
4 * Header file for rcontrib modules
5 */
6
7 #include "platform.h"
8 #include "rtprocess.h"
9 #include "ray.h"
10 #include "func.h"
11 #include "lookup.h"
12
13 extern int gargc; /* global argc */
14 extern char **gargv; /* global argv */
15 extern char *octname; /* global octree name */
16
17 extern int nproc; /* number of processes requested */
18 extern int nchild; /* number of children (-1 in child) */
19
20 extern int inpfmt; /* input format */
21 extern int outfmt; /* output format */
22
23 extern int header; /* output header? */
24 extern int force_open; /* truncate existing output? */
25 extern int recover; /* recover previous output? */
26 extern int accumulate; /* input rays per output record */
27 extern int contrib; /* computing contributions? */
28
29 extern int xres; /* horizontal (scan) size */
30 extern int yres; /* vertical resolution */
31
32 extern int using_stdout; /* are we using stdout? */
33
34 extern int imm_irrad; /* compute immediate irradiance? */
35 extern int lim_dist; /* limit distance? */
36
37 extern int account; /* current accumulation count */
38 extern RNUMBER raysleft; /* number of rays left to trace */
39 extern long waitflush; /* how long until next flush */
40
41 extern RNUMBER lastray; /* last ray number sent */
42 extern RNUMBER lastdone; /* last ray processed */
43
44 extern int report_intvl; /* reporting interval (seconds) */
45
46 typedef double DCOLORV; /* double-precision color type */
47
48 /*
49 * The MODCONT structure is used to accumulate ray contributions
50 * for a particular modifier, which may be subdivided into bins
51 * if binv evaluates > 0. If outspec contains a %s in it, this will
52 * be replaced with the modifier name. If outspec contains a %d in it,
53 * this will be used to create one output file per bin, otherwise all bins
54 * will be written to the same file, in order. If the global outfmt
55 * is 'c', then a common-exponent pixel will be output for each bin value
56 * and the file will conform to a RADIANCE picture if NCSAMP==3 and
57 * xres and yres are set.
58 */
59 typedef struct {
60 const char *outspec; /* output file specification */
61 const char *modname; /* modifier name */
62 const char *params; /* parameter list */
63 EPNODE *binv; /* bin value expression */
64 int bin0; /* starting bin offset */
65 int nbins; /* number of contribution bins */
66 DCOLORV cbin[1]; /* contribution bins (extends struct) */
67 } MODCONT; /* modifier contribution */
68
69 #define DCOLORSIZ (sizeof(DCOLORV)*NCSAMP)
70 #define mcsize(nb) (sizeof(MODCONT)-sizeof(DCOLORV)+(nb)*DCOLORSIZ)
71 #define mcbin(mp,bi) ((mp)->cbin + (bi)*NCSAMP)
72
73 extern LUTAB modconttab; /* modifier contribution table */
74
75 /*
76 * The STREAMOUT structure holds an open FILE pointer and a count of
77 * the number of RGB triplets per record, or 0 if unknown.
78 */
79 typedef struct {
80 FILE *ofp; /* output file pointer */
81 int outpipe; /* output is to a pipe */
82 int reclen; /* triplets/record */
83 int xr, yr; /* output resolution for picture */
84 } STREAMOUT;
85
86 extern LUTAB ofiletab; /* output stream table */
87
88 #ifndef MAXPROCESS
89 #if defined(_WIN32) || defined(_WIN64)
90 #define MAXPROCESS 1
91 #else
92 #define MAXPROCESS 128
93 #endif
94 #endif
95
96 extern char **modname; /* ordered modifier name list */
97 extern int nmods; /* number of modifiers */
98 extern int modasiz; /* allocated modifier array size */
99
100 extern char RCCONTEXT[]; /* special evaluation context */
101
102 extern void process_rcontrib(void); /* trace ray contributions */
103
104 extern STREAMOUT * getostream(const char *ospec, const char *mname,
105 int bn, int noopen);
106
107 extern void mod_output(MODCONT *mp);
108 extern void end_record(void);
109
110 extern MODCONT *addmodifier(char *modn, char *outf,
111 char *prms, char *binv, int bincnt);
112 extern void addmodfile(char *fname, char *outf,
113 char *prms, char *binv, int bincnt);
114
115 extern void reload_output(void);
116 extern void recover_output(void);
117
118 extern int getvec(FVECT vec);
119
120 extern int in_rchild(void);
121 extern void end_children(int immed);
122
123 extern void put_zero_record(int ndx);
124
125 extern int morays(void); /* reached end of input? */
126
127 extern void parental_loop(void); /* controlling process */
128
129 extern void feeder_loop(void); /* feeder process */
130
131 extern void rcontrib(void); /* main calculation loop */