| 5 |
|
* Quadtree driver support routines. |
| 6 |
|
*/ |
| 7 |
|
|
| 8 |
+ |
#include <string.h> |
| 9 |
+ |
|
| 10 |
|
#include "standard.h" |
| 11 |
|
#include "rhd_qtree.h" |
| 12 |
|
/* quantity of leaves to free at a time */ |
| 30 |
|
|
| 31 |
|
int rayqleft = 0; /* rays left to queue before flush */ |
| 32 |
|
|
| 33 |
< |
static int4 falleaves; /* our list of fallen leaves */ |
| 33 |
> |
static int32 falleaves; /* our list of fallen leaves */ |
| 34 |
|
|
| 35 |
|
#define composted(li) (qtL.bl <= qtL.tl ? \ |
| 36 |
|
((li) < qtL.bl || (li) >= qtL.tl) : \ |
| 55 |
|
} |
| 56 |
|
bi = nexttwig / TBUNDLESIZ; |
| 57 |
|
if (twigbundle[bi] == NULL) { /* new block */ |
| 58 |
< |
twigbundle = (RTREE **)realloc((char *)twigbundle, |
| 58 |
> |
twigbundle = (RTREE **)realloc((void *)twigbundle, |
| 59 |
|
(bi+2)*sizeof(RTREE *)); |
| 60 |
|
if (twigbundle == NULL) |
| 61 |
|
goto memerr; |
| 83 |
|
nexttwig = 0; |
| 84 |
|
if (!really) { /* just clear allocated blocks */ |
| 85 |
|
while (i--) |
| 86 |
< |
bzero((char *)twigbundle[i], TBUNDLESIZ*sizeof(RTREE)); |
| 86 |
> |
memset((char *)twigbundle[i], '\0', TBUNDLESIZ*sizeof(RTREE)); |
| 87 |
|
return; |
| 88 |
|
} |
| 89 |
|
/* else "really" means free up memory */ |
| 94 |
|
} |
| 95 |
|
|
| 96 |
|
|
| 97 |
< |
#define LEAFSIZ (3*sizeof(float)+sizeof(int4)+\ |
| 97 |
> |
#define LEAFSIZ (3*sizeof(float)+sizeof(int32)+\ |
| 98 |
|
sizeof(TMbright)+6*sizeof(BYTE)) |
| 99 |
|
|
| 100 |
|
int |
| 121 |
|
return(0); |
| 122 |
|
/* assign larger alignment types earlier */ |
| 123 |
|
qtL.wp = (float (*)[3])qtL.base; |
| 124 |
< |
qtL.wd = (int4 *)(qtL.wp + n); |
| 124 |
> |
qtL.wd = (int32 *)(qtL.wp + n); |
| 125 |
|
qtL.brt = (TMbright *)(qtL.wd + n); |
| 126 |
|
qtL.chr = (BYTE (*)[3])(qtL.brt + n); |
| 127 |
|
qtL.rgb = (BYTE (*)[3])(qtL.chr + n); |
| 168 |
|
qtCompost(pct) /* free up some leaves */ |
| 169 |
|
int pct; |
| 170 |
|
{ |
| 171 |
< |
register int4 *fl; |
| 171 |
> |
register int32 *fl; |
| 172 |
|
int nused, nclear, nmapped; |
| 173 |
|
/* figure out how many leaves to clear */ |
| 174 |
|
nclear = qtL.nl * pct / 100; |
| 319 |
|
tp->k[q].li = lo; |
| 320 |
|
} |
| 321 |
|
dropit: |
| 322 |
< |
if (drop) |
| 322 |
> |
if (drop) { |
| 323 |
|
if (li+1 == (qtL.tl ? qtL.tl : qtL.nl)) |
| 324 |
|
qtL.tl = li; /* special case */ |
| 325 |
|
else { |
| 327 |
|
qtL.wd[li] = falleaves; |
| 328 |
|
falleaves = li; |
| 329 |
|
} |
| 330 |
+ |
} |
| 331 |
|
return(li == lo); |
| 332 |
|
} |
| 333 |
|
|