--- ray/src/hd/rhd_qtree.c 1998/01/01 13:00:15 3.17 +++ ray/src/hd/rhd_qtree.c 2003/06/30 14:59:11 3.23 @@ -1,13 +1,12 @@ -/* Copyright (c) 1997 Silicon Graphics, Inc. */ - #ifndef lint -static char SCCSid[] = "$SunId$ SGI"; +static const char RCSid[] = "$Id: rhd_qtree.c,v 3.23 2003/06/30 14:59:11 schorsch Exp $"; #endif - /* * Quadtree driver support routines. */ +#include + #include "standard.h" #include "rhd_qtree.h" /* quantity of leaves to free at a time */ @@ -31,7 +30,7 @@ struct rleaves qtL; /* our pile of leaves */ int rayqleft = 0; /* rays left to queue before flush */ -static int4 falleaves; /* our list of fallen leaves */ +static int32 falleaves; /* our list of fallen leaves */ #define composted(li) (qtL.bl <= qtL.tl ? \ ((li) < qtL.bl || (li) >= qtL.tl) : \ @@ -56,7 +55,7 @@ newtwig() /* allocate a twig */ } bi = nexttwig / TBUNDLESIZ; if (twigbundle[bi] == NULL) { /* new block */ - twigbundle = (RTREE **)realloc((char *)twigbundle, + twigbundle = (RTREE **)realloc((void *)twigbundle, (bi+2)*sizeof(RTREE *)); if (twigbundle == NULL) goto memerr; @@ -84,18 +83,18 @@ int really; nexttwig = 0; if (!really) { /* just clear allocated blocks */ while (i--) - bzero((char *)twigbundle[i], TBUNDLESIZ*sizeof(RTREE)); + memset((char *)twigbundle[i], '\0', TBUNDLESIZ*sizeof(RTREE)); return; } /* else "really" means free up memory */ for (i = 0; twigbundle[i] != NULL; i++) - free((char *)twigbundle[i]); - free((char *)twigbundle); + free((void *)twigbundle[i]); + free((void *)twigbundle); twigbundle = NULL; } -#define LEAFSIZ (3*sizeof(float)+sizeof(int4)+\ +#define LEAFSIZ (3*sizeof(float)+sizeof(int32)+\ sizeof(TMbright)+6*sizeof(BYTE)) int @@ -122,7 +121,7 @@ register int n; return(0); /* assign larger alignment types earlier */ qtL.wp = (float (*)[3])qtL.base; - qtL.wd = (int4 *)(qtL.wp + n); + qtL.wd = (int32 *)(qtL.wp + n); qtL.brt = (TMbright *)(qtL.wd + n); qtL.chr = (BYTE (*)[3])(qtL.brt + n); qtL.rgb = (BYTE (*)[3])(qtL.chr + n); @@ -169,7 +168,7 @@ int qtCompost(pct) /* free up some leaves */ int pct; { - register int4 *fl; + register int32 *fl; int nused, nclear, nmapped; /* figure out how many leaves to clear */ nclear = qtL.nl * pct / 100; @@ -332,9 +331,9 @@ dropit: } -dev_value(c, p, v) /* add a pixel value to our quadtree */ +dev_value(c, d, p) /* add a pixel value to our quadtree */ COLR c; -FVECT p, v; +FVECT d, p; { register int li; int mapit; @@ -353,12 +352,16 @@ FVECT p, v; qtCompost(LFREEPCT); mapit = 0; /* we'll map it later */ } - VCOPY(qtL.wp[li], p); - qtL.wd[li] = encodedir(v); - tmCvColrs(&qtL.brt[li], qtL.chr[li], c, 1); + if (p == NULL) + VSUM(qtL.wp[li], odev.v.vp, d, FHUGE); + else + VCOPY(qtL.wp[li], p); + qtL.wd[li] = encodedir(d); + tmCvColrs(&qtL.brt[li], qtL.chr[li], (COLR *)c, 1); if (putleaf(li, 1)) { if (mapit) - tmMapPixels(qtL.rgb+li, qtL.brt+li, qtL.chr+li, 1); + tmMapPixels((BYTE *)(qtL.rgb+li), qtL.brt+li, + (BYTE *)(qtL.chr+li), 1); if (--rayqleft == 0) dev_flush(); /* flush output */ } @@ -409,12 +412,12 @@ int redo; if (tmComputeMapping(0., 0., 0.) != TM_E_OK) return(0); } - if (tmMapPixels(qtL.rgb+aorg, qtL.brt+aorg, - qtL.chr+aorg, alen) != TM_E_OK) + if (tmMapPixels((BYTE *)(qtL.rgb+aorg), qtL.brt+aorg, + (BYTE *)(qtL.chr+aorg), alen) != TM_E_OK) return(0); if (blen > 0) - tmMapPixels(qtL.rgb+borg, qtL.brt+borg, - qtL.chr+borg, blen); + tmMapPixels((BYTE *)(qtL.rgb+borg), qtL.brt+borg, + (BYTE *)(qtL.chr+borg), blen); qtL.tml = qtL.tl; return(1); }