ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/rhpict.c
(Generate patch)

Comparing ray/src/hd/rhpict.c (file contents):
Revision 3.2 by gwlarson, Fri Mar 5 17:02:41 1999 UTC vs.
Revision 3.7 by gwlarson, Tue Mar 9 15:10:26 1999 UTC

# Line 14 | Line 14 | static char SCCSid[] = "$SunId$ SGI";
14  
15   char    *progname;              /* our program name */
16   char    *hdkfile;               /* holodeck file name */
17 + char    gargc;                  /* global argc */
18 + char    **gargv;                /* global argv */
19  
20   VIEW    myview = STDVIEW;       /* current output view */
21   int     xres = 512, yres = 512; /* max. horizontal and vertical resolution */
22   char    *outspec = NULL;        /* output file specification */
23 + double  randfrac = -1.;         /* random resampling fraction */
24   double  pixaspect = 1.;         /* pixel aspect ratio */
25   int     seqstart = 0;           /* sequence start frame */
26   double  expval = 1.;            /* exposure value */
# Line 36 | Line 39 | char   *argv[];
39   {
40          int     i, rval;
41  
42 +        gargc = argc; gargv = argv;
43          progname = argv[0];                     /* get arguments */
44          for (i = 1; i < argc && argv[i][0] == '-'; i++) {
45                  rval = getviewopt(&myview, argc-i, argv+i);
# Line 50 | Line 54 | char   *argv[];
54                  case 'p':                       /* pixel aspect/exposure */
55                          if (badarg(argc-i-1,argv+i+1,"f"))
56                                  goto userr;
57 <                        if (argv[i][1] == 'a')
57 >                        if (argv[i][2] == 'a')
58                                  pixaspect = atof(argv[++i]);
59 <                        else if (argv[i][1] == 'e') {
59 >                        else if (argv[i][2] == 'e') {
60                                  expval = atof(argv[++i]);
61                                  if (argv[i][0] == '-' | argv[i][0] == '+')
62                                          expval = pow(2., expval);
# Line 74 | Line 78 | char   *argv[];
78                                  goto userr;
79                          outspec = argv[++i];
80                          break;
81 +                case 'r':                       /* random sampling */
82 +                        if (badarg(argc-i-1,argv+i+1,"f"))
83 +                                goto userr;
84 +                        randfrac = atof(argv[++i]);
85 +                        break;
86 +                case 's':                       /* smooth sampling */
87 +                        randfrac = -1.;
88 +                        break;
89                  case 'S':                       /* sequence start */
90                          if (badarg(argc-i-1,argv+i+1,"i"))
91                                  goto userr;
92                          seqstart = atoi(argv[++i]);
93                          break;
94                  case 'v':                       /* view file */
95 <                        if (argv[i][1]!='f' || badarg(argc-i-1,argv+i+1,"s"))
95 >                        if (argv[i][2]!='f' || badarg(argc-i-1,argv+i+1,"s"))
96                                  goto userr;
97                          rval = viewfile(argv[++i], &myview, NULL);
98                          if (rval < 0) {
# Line 98 | Line 110 | char   *argv[];
110                  }
111          }
112                                                  /* open holodeck file */
113 <        if (i >= argc)
113 >        if (i != argc-1)
114                  goto userr;
115 <        hdkfile = argv[i++];
115 >        hdkfile = argv[i];
116          initialize();
117                                                  /* render picture(s) */
118          if (seqstart <= 0)
# Line 111 | Line 123 | char   *argv[];
123          quit(0);                                /* all done! */
124   userr:
125          fprintf(stderr,
126 < "Usage: %s [-w][-pa pa][-pe ex][-x hr][-y vr][-S stfn][-o outp][view] input.hdk\n",
126 > "Usage: %s [-w][-r rf][-pa pa][-pe ex][-x hr][-y vr][-S stfn][-o outp][view] input.hdk\n",
127                          progname);
128          quit(1);
129   }
# Line 145 | Line 157 | int    fn;
157                  sprintf(errmsg, "error writing frame %d", fn);
158                  error(SYSTEM, errmsg);
159          }
160 + #ifdef DEBUG
161          if (blist.nb > 0 & rval > 0) {
162 <                sprintf(errmsg, "%.1f%% unrendered pixels in frame %d",
163 <                                100.*rval/(hres*vres), fn);
162 >                sprintf(errmsg, "%d unrendered pixels in frame %d (%.1f%%)",
163 >                                rval, fn, 100.*rval/(hres*vres));
164                  error(WARNING, errmsg);
165          }
166 + #endif
167   }
168  
169  
# Line 169 | Line 183 | int    nb;
183                  bil[i].b = bl[i].bi;
184          }
185          hdloadbeams(bil, nb, pixBeam);
186 <        pixFlush();
186 >        pixFinish(randfrac);
187          free((char *)bil);
188   }
189  
# Line 194 | Line 208 | int    fn;
208                                  /* write header */
209          newheader("RADIANCE", stdout);
210          printf("SOFTWARE= %s\n", VersionID);
211 <        printf("%s %s\n", progname, hdkfile);
211 >        printargs(gargc, gargv, stdout);
212          if (fn)
213                  printf("FRAME=%d\n", fn);
214          fputs(VIEWSTR, stdout);
# Line 218 | Line 232 | int    fn;
232   int
233   endpicture()                    /* finish and write out pixels */
234   {
235 <        int     nunrend = 0;
236 <        int     v;
235 >        int     lastr = -1, nunrend = 0;
236 >        int4    lastp, lastrp;
237 >        register int4   p;
238          register double d;
224        register int    p;
239                                  /* compute final pixel values */
240          for (p = hres*vres; p--; ) {
241                  if (myweight[p] <= FTINY) {
242 +                        if (lastr >= 0)
243 +                                if (p/hres == lastp/hres)
244 +                                        copycolor(mypixel[p], mypixel[lastp]);
245 +                                else
246 +                                        copycolor(mypixel[p], mypixel[lastrp]);
247                          nunrend++;
248                          continue;
249                  }
250                  d = expval/myweight[p];
251                  scalecolor(mypixel[p], d);
252 +                if ((lastp=p)/hres != lastr)
253 +                        lastr = (lastrp=p)/hres;
254          }
255                                  /* write each scanline */
256 <        for (v = vres; v--; )
257 <                if (fwritescan(mypixel+v*hres, hres, stdout) < 0)
256 >        for (p = vres; p--; )
257 >                if (fwritescan(mypixel+p*hres, hres, stdout) < 0)
258                          return(-1);
259          if (fflush(stdout) == EOF)
260                  return(-1);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines