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

Comparing ray/src/common/color.c (file contents):
Revision 1.6 by greg, Fri Oct 20 16:45:26 1989 UTC vs.
Revision 1.9 by greg, Mon Nov 6 15:10:24 1989 UTC

# Line 367 | Line 367 | register COLR  clr;
367   }
368  
369  
370 < int
371 < colr_norm(clr, nclr)            /* normalize a short color, return shift */
372 < COLR  clr, nclr;
370 > normcolrs(scan, len)            /* normalize a scanline of colrs */
371 > register COLR  *scan;
372 > int  len;
373   {
374          register int  c;
375 <        register int  shift = clr[EXP]-COLXS;
375 >        register int  shift;
376  
377 <        if (shift > 0) {
378 <                if (shift >= 8) {
379 <                        nclr[RED] = nclr[GRN] = nclr[BLU] = 255;
380 <                } else {
381 <                        c = clr[RED] << shift;
382 <                        nclr[RED] = c > 255 ? 255 : c;
383 <                        c = clr[GRN] << shift;
384 <                        nclr[GRN] = c > 255 ? 255 : c;
385 <                        c = clr[BLU] << shift;
386 <                        nclr[BLU] = c > 255 ? 255 : c;
377 >        while (len-- > 0) {
378 >                shift = scan[0][EXP] - COLXS;
379 >                if (shift > 0) {
380 >                        if (shift > 8) {
381 >                                scan[0][RED] =
382 >                                scan[0][GRN] =
383 >                                scan[0][BLU] = 255;
384 >                        } else {
385 >                                shift--;
386 >                                c = (scan[0][RED]<<1 | 1) << shift;
387 >                                scan[0][RED] = c > 255 ? 255 : c;
388 >                                c = (scan[0][GRN]<<1 | 1) << shift;
389 >                                scan[0][GRN] = c > 255 ? 255 : c;
390 >                                c = (scan[0][BLU]<<1 | 1) << shift;
391 >                                scan[0][BLU] = c > 255 ? 255 : c;
392 >                        }
393 >                } else if (shift < 0) {
394 >                        if (shift < -8) {
395 >                                scan[0][RED] =
396 >                                scan[0][GRN] =
397 >                                scan[0][BLU] = 0;
398 >                        } else {
399 >                                shift = -1-shift;
400 >                                scan[0][RED] = ((scan[0][RED]>>shift)+1)>>1;
401 >                                scan[0][GRN] = ((scan[0][GRN]>>shift)+1)>>1;
402 >                                scan[0][BLU] = ((scan[0][BLU]>>shift)+1)>>1;
403 >                        }
404                  }
405 <        } else if (shift < 0) {
406 <                if (shift <= -8) {
390 <                        nclr[RED] = nclr[GRN] = nclr[BLU] = 0;
391 <                } else {
392 <                        nclr[RED] = clr[RED] >> -shift;
393 <                        nclr[GRN] = clr[GRN] >> -shift;
394 <                        nclr[BLU] = clr[BLU] >> -shift;
395 <                }
396 <        } else {
397 <                nclr[RED] = clr[RED];
398 <                nclr[GRN] = clr[GRN];
399 <                nclr[BLU] = clr[BLU];
405 >                scan[0][EXP] = COLXS;
406 >                scan++;
407          }
408 <        nclr[EXP] = COLXS;
409 <        return(shift);
408 > }
409 >
410 >
411 > bigdiff(c1, c2, md)                     /* c1 delta c2 > md? */
412 > register COLOR  c1, c2;
413 > double  md;
414 > {
415 >        register int  i;
416 >
417 >        for (i = 0; i < 3; i++)
418 >                if (colval(c1,i)-colval(c2,i) > md*colval(c2,i) ||
419 >                        colval(c2,i)-colval(c1,i) > md*colval(c1,i))
420 >                        return(1);
421 >        return(0);
422   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines