ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/rhd_odraw.c
(Generate patch)

Comparing ray/src/hd/rhd_odraw.c (file contents):
Revision 3.3 by gwlarson, Mon Dec 21 13:17:00 1998 UTC vs.
Revision 3.5 by gwlarson, Tue Dec 22 17:05:54 1998 UTC

# Line 131 | Line 131 | int    n;
131                  DCHECK(count<=0 | nextsamp>=n,
132                                  CONSISTENCY, "counter botch in odInit");
133                  if (!i) count = j;
134 +                odView[i].sfirst = nextsamp;
135                  while (j--) {           /* initialize blocks & free lists */
136                          odView[i].bmap[j].pthresh = FHUGE;
137                          odView[i].bmap[j].first = k = nextsamp;
# Line 142 | Line 143 | int    n;
143                          odS.nextfree(k-1) = ENDFREE;
144                          odView[i].bmap[j].nused = 0;
145                  }
146 +                odView[i].snext = nextsamp;
147          }
148          CLR4ALL(odS.redraw, odS.nsamp);         /* clear redraw flags */
149          for (i = odS.nsamp; i--; ) {            /* clear values */
# Line 424 | Line 426 | GLfloat        *dm;
426   odUpdate(vn)                            /* update this view */
427   int     vn;
428   {
429 <        int     i, j;
428 <        register struct ODblock *bp;
429 <        register int    k;
429 >        register int    i, j;
430  
431          DCHECK(vn<0 | vn>=odNViews, CONSISTENCY,
432                          "bad view number in odUpdate");
# Line 439 | Line 439 | int    vn;
439                                  return;
440                          if (tmComputeMapping(0.,0.,0.) != TM_E_OK)
441                                  return;
442 <                        for (k = odS.nsamp; k--; )      /* redraw all */
443 <                                if (odS.ip[k][0] >= 0)
444 <                                        SET4(odS.redraw, k);
442 >                        for (i = odS.nsamp; i--; )      /* redraw all */
443 >                                if (odS.ip[i][0] >= 0)
444 >                                        SET4(odS.redraw, i);
445                  }
446                  if (tmMapPixels(odS.rgb,odS.brt,odS.chr,odS.nsamp) != TM_E_OK)
447                          return;
448                  needmapping = 0;                /* reset flag */
449          }
450 <                                        /* draw each block in view */
451 <        for (j = odView[vn].vlow; j--; )
452 <                for (i = 0; i < odView[vn].hlow; i++) {
453 <                                        /* get block */
454 <                        bp = odView[vn].bmap + j*odView[vn].hlow + i;
455 <                                        /* do quick, conservative flag check */
456 <                        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 <                                }
450 >                                        /* this code segment was too slow */
451 > #if 0
452 >        for (i = odView[vn].sfirst; i < odView[vn].snext; i++)
453 >                if (CHK4(odS.redraw, i)) {
454 >                        odDrawSamp(vn, i);
455 >                        CLR4(odS.redraw, i);
456                  }
457 + #endif
458 +                                        /* redraw samples at each end */
459 +        for (i = odView[vn].sfirst; i < odView[vn].sfirst+31; i++)
460 +                if (CHK4(odS.redraw, i)) {
461 +                        odDrawSamp(vn, i);
462 +                        CLR4(odS.redraw, i);
463 +                }
464 +        for (i = odView[vn].snext-31; i < odView[vn].snext; i++)
465 +                if (CHK4(odS.redraw, i)) {
466 +                        odDrawSamp(vn, i);
467 +                        CLR4(odS.redraw, i);
468 +                }
469 +                                        /* faster flag checks in middle */
470 +        for (j = odView[vn].snext>>5; j-- > (odView[vn].sfirst+0x1f)>>5; )
471 +                for (i = 0; odS.redraw[j]; i++)         /* skips faster */
472 +                        if (odS.redraw[j] & 1L<<i) {
473 +                                odDrawSamp(vn, (j<<5)+i);
474 +                                odS.redraw[j] &= ~(1L<<i);
475 +                        }
476   }
477  
478  
479 +                                        /* this turned out to be unnecessary */
480   #if 0
481   static
482   clip_end(p, o, vp)                      /* clip line segment to view */
# Line 603 | Line 612 | register int   h, v;
612   }
613  
614  
615 < odDrawBlockSamp(vn, h, v, id)           /* draw sample in view block */
616 < int     vn, h, v;
615 > odDrawSamp(vn, id)                      /* draw view sample */
616 > int     vn;
617   register int    id;
618   {
619          GLshort arm[MAXFAN][3];
# Line 615 | Line 624 | register int   id;
624          register int    i;
625  
626          vp = odView + vn;
627 <        blockindex = v*vp->hlow + h;
628 <        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");
627 >        blockindex = getblock(vp, odS.ip[id][0], odS.ip[id][1]);
628 >        DCHECK(blockindex<0, CONSISTENCY, "bad sample handed to odDrawSamp");
629          DCHECK(vp->bmap[blockindex].nused <= 0,
630 <                        CONSISTENCY, "bad in-use count in odDrawBlockSamp");
630 >                        CONSISTENCY, "bad in-use count in odDrawSamp");
631                                          /* create triangle fan */
632          size = 1./sqrt((double)vp->bmap[blockindex].nused);
633          narms = make_arms(arm, odS.ip[id], vp, size);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines