--- ray/src/hd/rhdobj.c 1998/12/23 17:41:14 3.8 +++ ray/src/hd/rhdobj.c 2003/02/22 02:07:24 3.11 @@ -1,9 +1,6 @@ -/* Copyright (c) 1998 Silicon Graphics, Inc. */ - #ifndef lint -static char SCCSid[] = "$SunId$ SGI"; +static const char RCSid[] = "$Id: rhdobj.c,v 3.11 2003/02/22 02:07:24 greg Exp $"; #endif - /* * Routines for loading and displaying Radiance objects in rholo with GLX. */ @@ -55,6 +52,7 @@ typedef struct dobject { FVECT center; /* orig. object center */ FLOAT radius; /* orig. object radius */ int listid; /* GL display list identifier */ + int nlists; /* number of lists allocated */ int rtp[3]; /* associated rtrace process */ DLIGHTS *ol; /* object lights */ FULLXF xfb; /* coordinate transform */ @@ -119,12 +117,12 @@ register DOBJECT *op; } dobjects = ohead.next; if (!foundlink) { - glDeleteLists(op->listid, 1); + glDeleteLists(op->listid, op->nlists); close_process(op->rtp); } while (op->xfac) freestr(op->xfav[--op->xfac]); - free((char *)op); + free((void *)op); return(1); } @@ -299,7 +297,7 @@ ssph_compute() /* compute source set from sphere sam /* avg. reflected brightness */ d = AVGREFL / (double)ncells; scalecolor(csum, d); - if (tmCvColors(&dlightsets->larb, TM_NOCHROM, csum, 1) != TM_E_OK) + if (tmCvColors(&dlightsets->larb, TM_NOCHROM, &csum, 1) != TM_E_OK) error(CONSISTENCY, "tone mapping problem in ssph_compute"); /* greedy light source clustering */ while (dlightsets->nl < MAXLIGHTS) { @@ -406,7 +404,7 @@ int force; quit(0); if (!ssph_compute()) { /* compute light sources from sphere */ dlightsets = dl->next; - free((char *)dl); + free((void *)dl); return(0); } op->ol = dl; @@ -416,14 +414,13 @@ memerr: } -static int +static cmderror(cn, err) /* report command error */ int cn; char *err; { sprintf(errmsg, "%s: %s", rhdcmd[cn], err); error(COMMAND, errmsg); - return(cn); } @@ -433,7 +430,6 @@ char *cmd; register char *args; { int somechange = 0; - VIEW sameview; int cn, na, doxfm; register int nn; char *alist[MAXAC+1], *nm; @@ -461,8 +457,10 @@ register char *args; dobj_load(alist[0], alist[0]); else if (na == 2) dobj_load(alist[0], alist[1]); - else - return(cmderror(cn, "need octree [name]")); + else { + cmderror(cn, "need octree [name]"); + return(0); + } break; case DO_UNLOAD: /* clear an object */ if (na > 1) goto toomany; @@ -478,8 +476,10 @@ register char *args; } else { nm = curname; nn = 0; } - if (cn == DO_MOVE && nn >= na) - return(cmderror(cn, "missing transform")); + if (cn == DO_MOVE && nn >= na) { + cmderror(cn, "missing transform"); + return(0); + } somechange += dobj_xform(nm, cn==DO_MOVE, na-nn, alist+nn); break; case DO_UNMOVE: /* undo last transform */ @@ -497,7 +497,8 @@ register char *args; break; switch (nn) { case 0: - return(cmderror(cn, "need new object name")); + cmderror(cn, "need new object name"); + return(0); case 1: nm = curname; break; @@ -525,11 +526,7 @@ register char *args; default: error(CONSISTENCY, "bad command id in dobj_command"); } - if (somechange) { - copystruct(&sameview, &odev.v); /* make 'em think new view */ - dev_view(&sameview); /* redraw */ - } - return(cn); + return(somechange); toomany: return(cmderror(cn, "too many arguments")); } @@ -578,7 +575,7 @@ char *oct, *nam; /* load octree into display list */ dolights = 0; domats = 1; - op->listid = rgl_octlist(fpath, op->center, &op->radius); + op->listid = rgl_octlist(fpath, op->center, &op->radius, &op->nlists); /* start rtrace */ rtargv[RTARGC-1] = fpath; rtargv[RTARGC] = NULL; @@ -615,7 +612,7 @@ dobj_cleanup() /* free all resources */ savedxf(curobj = NULL); while ((lp = dlightsets) != NULL) { dlightsets = lp->next; - free((char *)lp); + free((void *)lp); } return(1); } @@ -863,7 +860,7 @@ FVECT rorg, rdir; VCOPY(darr, rorg); VCOPY(darr+3, rdir); } /* trace it */ - if (process(op->rtp, darr, darr, sizeof(double), + if (process(op->rtp, (char *)darr, (char *)darr, sizeof(double), 6*sizeof(double)) != sizeof(double)) error(SYSTEM, "rtrace communication error"); /* return distance */