91 |
|
return; |
92 |
|
for (n = (st->log2GR < 0) << st->ndim; n--; ) |
93 |
|
SDfreeTre(st->u.t[n]); |
94 |
< |
free((void *)st); |
94 |
> |
free(st); |
95 |
|
} |
96 |
|
|
97 |
|
/* Free a variable-resolution BSDF */ |
125 |
|
static float * |
126 |
|
grid_branch_start(SDNode *st, int n) |
127 |
|
{ |
128 |
< |
unsigned skipsiz = 1 << st->log2GR; |
128 |
> |
unsigned skipsiz = 1 << (st->log2GR - 1); |
129 |
|
float *vptr = st->u.v; |
130 |
|
int i; |
131 |
|
|
132 |
< |
for (i = 0; i < st->ndim; skipsiz <<= st->log2GR) |
133 |
< |
if (1<<i++ & n) |
134 |
< |
vptr += skipsiz >> 1; |
132 |
> |
for (i = st->ndim; i--; skipsiz <<= st->log2GR) |
133 |
> |
if (1<<i & n) |
134 |
> |
vptr += skipsiz; |
135 |
|
return vptr; |
136 |
|
} |
137 |
|
|
214 |
|
for (i = st->ndim; i--; ) { |
215 |
|
if (bmin[i] >= 1.) |
216 |
|
return .0; |
217 |
< |
if (bmax[i] <= .0) |
217 |
> |
if (bmax[i] <= 0) |
218 |
|
return .0; |
219 |
|
if (bmin[i] >= bmax[i]) |
220 |
|
return .0; |
234 |
|
} |
235 |
|
if (sbmin[i] < .0) sbmin[i] = .0; |
236 |
|
if (sbmax[i] > 1.) sbmax[i] = 1.; |
237 |
+ |
if (sbmin[i] >= sbmax[i]) { |
238 |
+ |
w = .0; |
239 |
+ |
break; |
240 |
+ |
} |
241 |
|
w *= sbmax[i] - sbmin[i]; |
242 |
|
} |
243 |
|
if (w > 1e-10) { |
273 |
|
/* in branches? */ |
274 |
|
if (st->log2GR < 0) { |
275 |
|
unsigned skipmask = 0; |
272 |
– |
|
276 |
|
csiz *= .5; |
277 |
|
for (i = st->ndim; i--; ) |
278 |
|
if (1<<i & cmask) |
279 |
|
if (pos[i] < cmin[i] + csiz) |
280 |
< |
for (n = 1 << st->ndim; n--; ) |
280 |
> |
for (n = 1 << st->ndim; n--; ) { |
281 |
|
if (n & 1<<i) |
282 |
|
skipmask |= 1<<n; |
283 |
+ |
} |
284 |
|
else |
285 |
< |
for (n = 1 << st->ndim; n--; ) |
285 |
> |
for (n = 1 << st->ndim; n--; ) { |
286 |
|
if (!(n & 1<<i)) |
287 |
|
skipmask |= 1<<n; |
288 |
+ |
} |
289 |
|
for (n = 1 << st->ndim; n--; ) { |
290 |
|
if (1<<n & skipmask) |
291 |
|
continue; |