--- ray/src/rt/rxcmain.cpp 2024/10/30 19:53:37 2.5 +++ ray/src/rt/rxcmain.cpp 2024/11/07 20:56:09 2.8 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rxcmain.cpp,v 2.5 2024/10/30 19:53:37 greg Exp $"; +static const char RCSid[] = "$Id: rxcmain.cpp,v 2.8 2024/11/07 20:56:09 greg Exp $"; #endif /* * rxcmain.c - main for rxcontrib ray contribution tracer @@ -41,14 +41,15 @@ static void printdefaults(void) /* print default values to stdout */ { printf("-c %-5d\t\t\t# accumulated rays per record\n", myRCmanager.accum); - printf("-V%c\t\t\t\t# output %s\n", contrib ? '+' : '-', - contrib ? "contributions" : "coefficients"); + printf(myRCmanager.HasFlag(RCcontrib) ? + "-V+\t\t\t\t# output contributions\n" : + "-V-\t\t\t\t# output coefficients\n"); if (myRCmanager.HasFlag(RTimmIrrad)) printf("-I+\t\t\t\t# immediate irradiance on\n"); printf("-n %-2d\t\t\t\t# number of rendering processes\n", nproc); - if (xres > 0) - printf("-x %-9d\t\t\t# x resolution\n", xres); - printf("-y %-9d\t\t\t# y resolution\n", yres); + if (myRCmanager.xres > 0) + printf("-x %-9d\t\t\t# x resolution\n", myRCmanager.xres); + printf("-y %-9d\t\t\t# y resolution\n", myRCmanager.yres); printf(myRCmanager.HasFlag(RTlimDist) ? "-ld+\t\t\t\t# limit distance on\n" : "-ld-\t\t\t\t# limit distance off\n"); @@ -218,15 +219,17 @@ main(int argc, char *argv[]) nproc = 1; break; case 'V': /* output contributions? */ - check_bool(2,contrib); + rval = myRCmanager.HasFlag(RCcontrib); + check_bool(2,rval); + myRCmanager.SetFlag(RCcontrib, rval); break; case 'x': /* x resolution */ check(2,"i"); - xres = atoi(argv[++i]); + myRCmanager.xres = atoi(argv[++i]); break; case 'y': /* y resolution */ check(2,"i"); - yres = atoi(argv[++i]); + myRCmanager.yres = atoi(argv[++i]); break; case 'w': /* warnings on/off */ rval = (erract[WARNING].pf != NULL); @@ -346,7 +349,7 @@ main(int argc, char *argv[]) // rval = # rows recovered rval = myRCmanager.PrepOutput(); // check if recovered everything - if (recover && rval >= myRCmanager.GetRowMax()) { + if (rval >= myRCmanager.GetRowMax()) { error(WARNING, "nothing left to compute"); quit(0); } // add processes as requested @@ -491,7 +494,7 @@ rxcontrib(const int rstart) } last_report = tstart = time(0); } - while (r < totRows) { // getting to work... + while (r < totRows) { // loop until done time_t tnow; if (!getRayBundle(odarr)) goto readerr; @@ -500,10 +503,14 @@ rxcontrib(const int rstart) r++; if (report_intvl <= 0) continue; - if ((r < totRows) & ((tnow = time(0)) < last_report+report_intvl)) + tnow = time(0); // time to report progress? + if (r == totRows) + myRCmanager.FlushQueue(); + else if (tnow < last_report+report_intvl) continue; sprintf(errmsg, "%.2f%% done after %.3f hours\n", - 100.*r/totRows, (1./3600.)*(tnow - tstart)); + 100.*myRCmanager.GetRowFinished()/totRows, + (1./3600.)*(tnow - tstart)); eputs(errmsg); last_report = tnow; }