--- ray/src/util/rtcontrib.c 2005/06/02 18:51:46 1.11 +++ ray/src/util/rtcontrib.c 2005/06/05 19:52:01 1.13 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rtcontrib.c,v 1.11 2005/06/02 18:51:46 greg Exp $"; +static const char RCSid[] = "$Id: rtcontrib.c,v 1.13 2005/06/05 19:52:01 greg Exp $"; #endif /* * Gather rtrace output to compute contributions from particular sources @@ -68,8 +68,8 @@ struct rtproc { /* rtrace command and defaults */ char *rtargv[256] = { "rtrace", "-dj", ".5", "-dr", "3", - "-ab", "1", "-ad", "128", "-lr", "-10", }; -int rtargc = 11; + "-ab", "1", "-ad", "128", }; +int rtargc = 9; /* overriding rtrace options */ char *myrtopts[] = { "-o~~TmWdp", "-h-", "-x", "1", "-y", "0", "-dt", "0", "-as", "0", "-aa", "0", NULL }; @@ -706,9 +706,17 @@ done_contrib(void) MODCONT *mp; /* output modifiers in order */ for (i = 0; i < nmods; i++) { + FILE *fp; mp = (MODCONT *)lu_find(&modconttab,modname[i])->data; - for (j = 0; j < mp->nbins; j++) - putcontrib(mp->cbin[j], + fp = getofile(mp->outspec, mp->modname, 0); + putcontrib(mp->cbin[0], fp); + if (mp->nbins > 3 && /* minor optimization */ + fp == getofile(mp->outspec, mp->modname, 1)) + for (j = 1; j < mp->nbins; j++) + putcontrib(mp->cbin[j], fp); + else + for (j = 1; j < mp->nbins; j++) + putcontrib(mp->cbin[j], getofile(mp->outspec, mp->modname, j)); /* clear for next ray tree */ memset(mp->cbin, 0, sizeof(DCOLOR)*mp->nbins);