424 |
|
odUpdate(vn) /* update this view */ |
425 |
|
int vn; |
426 |
|
{ |
427 |
< |
int i, j; |
428 |
< |
register struct ODblock *bp; |
429 |
< |
register int k; |
427 |
> |
register int i, j; |
428 |
|
|
429 |
|
DCHECK(vn<0 | vn>=odNViews, CONSISTENCY, |
430 |
|
"bad view number in odUpdate"); |
437 |
|
return; |
438 |
|
if (tmComputeMapping(0.,0.,0.) != TM_E_OK) |
439 |
|
return; |
440 |
< |
for (k = odS.nsamp; k--; ) /* redraw all */ |
441 |
< |
if (odS.ip[k][0] >= 0) |
442 |
< |
SET4(odS.redraw, k); |
440 |
> |
for (i = odS.nsamp; i--; ) /* redraw all */ |
441 |
> |
if (odS.ip[i][0] >= 0) |
442 |
> |
SET4(odS.redraw, i); |
443 |
|
} |
444 |
|
if (tmMapPixels(odS.rgb,odS.brt,odS.chr,odS.nsamp) != TM_E_OK) |
445 |
|
return; |
446 |
|
needmapping = 0; /* reset flag */ |
447 |
|
} |
448 |
< |
/* draw each block in view */ |
449 |
< |
for (j = odView[vn].vlow; j--; ) |
450 |
< |
for (i = 0; i < odView[vn].hlow; i++) { |
451 |
< |
/* get block */ |
452 |
< |
bp = odView[vn].bmap + j*odView[vn].hlow + i; |
453 |
< |
/* do quick, conservative flag check */ |
454 |
< |
for (k = (bp->first+bp->nsamp+31)>>5; |
457 |
< |
k-- > bp->first>>5; ) |
458 |
< |
if (odS.redraw[k]) |
459 |
< |
break; /* non-zero flag */ |
460 |
< |
if (k < bp->first>>5) |
461 |
< |
continue; /* no flags set */ |
462 |
< |
for (k = bp->nsamp; k--; ) /* sample by sample */ |
463 |
< |
if (CHK4(odS.redraw, bp->first+k)) { |
464 |
< |
odDrawBlockSamp(vn, i, j, bp->first+k); |
465 |
< |
CLR4(odS.redraw, bp->first+k); |
466 |
< |
} |
467 |
< |
} |
448 |
> |
/* draw samples flagged for redraw */ |
449 |
> |
for (j = FL4NELS(odS.nsamp); j--; ) |
450 |
> |
for (i = 0; odS.redraw[j]; i++) /* skips faster */ |
451 |
> |
if (odS.redraw[j] & 1L<<i) { |
452 |
> |
odDrawSamp(vn, (j<<5)+i); |
453 |
> |
odS.redraw[j] &= ~(1L<<i); |
454 |
> |
} |
455 |
|
} |
456 |
|
|
457 |
|
|
590 |
|
} |
591 |
|
|
592 |
|
|
593 |
< |
odDrawBlockSamp(vn, h, v, id) /* draw sample in view block */ |
594 |
< |
int vn, h, v; |
593 |
> |
odDrawSamp(vn, id) /* draw view sample */ |
594 |
> |
int vn; |
595 |
|
register int id; |
596 |
|
{ |
597 |
|
GLshort arm[MAXFAN][3]; |
602 |
|
register int i; |
603 |
|
|
604 |
|
vp = odView + vn; |
605 |
< |
blockindex = v*vp->hlow + h; |
606 |
< |
DCHECK(odS.ip[id][0]*vp->hlow/vp->hhi != h | |
620 |
< |
odS.ip[id][1]*vp->vlow/vp->vhi != v, |
621 |
< |
CONSISTENCY, "bad sample position in odDrawBlockSamp"); |
605 |
> |
blockindex = getblock(vp, odS.ip[id][0], odS.ip[id][1]); |
606 |
> |
DCHECK(blockindex<0, CONSISTENCY, "bad sample handed to odDrawSamp"); |
607 |
|
DCHECK(vp->bmap[blockindex].nused <= 0, |
608 |
< |
CONSISTENCY, "bad in-use count in odDrawBlockSamp"); |
608 |
> |
CONSISTENCY, "bad in-use count in odDrawSamp"); |
609 |
|
/* create triangle fan */ |
610 |
|
size = 1./sqrt((double)vp->bmap[blockindex].nused); |
611 |
|
narms = make_arms(arm, odS.ip[id], vp, size); |