diff -c libshade/Makefile.SH libshade/Makefile.SH *** libshade/Makefile.SH Sun Feb 9 22:03:46 1992 --- libshade/Makefile.SH Wed Feb 16 15:52:11 1994 *************** *** 57,66 **** LIB = libshade.a SUPPORT_C = builtin.c symtab.c misc.c lightdef.c objdef.c options.c \ ! stats.c surfdef.c SUPPORT_H = ../config.h datatypes.h funcdefs.h \ ! ../patchlevel.h rayshade.h PARSE_C = yacc.c lex.c --- 57,66 ---- LIB = libshade.a SUPPORT_C = builtin.c symtab.c misc.c lightdef.c objdef.c options.c \ ! stats.c surfdef.c zbuf.c SUPPORT_H = ../config.h datatypes.h funcdefs.h \ ! ../patchlevel.h rayshade.h zbuf.h PARSE_C = yacc.c lex.c diff -c libshade/misc.c libshade/misc.c *** libshade/misc.c Sun Feb 9 22:03:59 1992 --- libshade/misc.c Wed Feb 16 15:42:42 1994 *************** *** 36,42 **** --- 36,46 ---- #endif #include "options.h" #include "stats.h" + #include "libcommon/common.h" + #include "viewing.h" + #include "zbuf.h" + Float RSabstmp; /* Temporary value used by fabs macro. Ugly. */ static void RSmessage(); *************** *** 88,93 **** --- 92,99 ---- * Initialize symbol table. */ SymtabInit(); + if (Options.zbufprint) + zbuffer.rayfile = strsave (yyfilename); (void)yyparse(); } diff -c libshade/options.c libshade/options.c *** libshade/options.c Sun Feb 9 22:04:09 1992 --- libshade/options.c Wed Feb 16 15:43:00 1994 *************** *** 239,244 **** --- 239,264 ---- Options.crop_set = TRUE; argv += 4; argc -= 4; break; + case 'z': + Options.zbufprint = TRUE; + if (argv[1][0] == '-') { + /* User probably blew it, and + * it's difficult to remove a file + * that begins with '-'... + */ + usage(); + exit(2); + } + if (argv[0][2]) + Options.zbufname = strsave (argv[0]+2); + else if (argv[1]) { + Options.zbufname = strsave(argv[1]); + argv++; argc--; + } else { + usage(); + exit(2); + } + break; default: RLerror(RL_PANIC,"Bad argument: %s\n",argv[0]); } *************** *** 334,337 **** --- 354,358 ---- fprintf(stderr,"\t-v \t\t(Verbose output.)\n"); fprintf(stderr,"\t-W x x y y \t(Render subwindow.)\n"); fprintf(stderr,"\t-X l r b t \t(Crop window.)\n"); + fprintf(stderr,"\t-z filename\t(Write Z buffer to filename.)\n"); } diff -c libshade/options.h libshade/options.h *** libshade/options.h Sun Feb 9 22:03:53 1992 --- libshade/options.h Wed Feb 16 15:46:56 1994 *************** *** 69,75 **** endframe, /* ending frame number */ totalframes, /* total # of frames */ totalframes_set, /* set on command line? */ ! cpp; /* run CPP? */ #ifdef URT int alpha; /* Write alpha channel? */ int exp_output; /* Write exponential RLE file? */ --- 69,76 ---- endframe, /* ending frame number */ totalframes, /* total # of frames */ totalframes_set, /* set on command line? */ ! cpp, /* run CPP? */ ! zbufprint; /* print Zbuf stats? */ #ifdef URT int alpha; /* Write alpha channel? */ int exp_output; /* Write exponential RLE file? */ *************** *** 88,94 **** *statsname, /* Name of stats file. */ *imgname, /* Name of output image file */ *inputname, /* Name of input file, NULL == stdin */ ! *cppargs; /* arguments to pass to cpp */ int window[2][2]; /* Subwindow corners */ Float crop[2][2]; /* Crop window, lo/hi normalized */ #ifdef LINDA --- 89,96 ---- *statsname, /* Name of stats file. */ *imgname, /* Name of output image file */ *inputname, /* Name of input file, NULL == stdin */ ! *cppargs, /* arguments to pass to cpp */ ! *zbufname; /* Name of Z buffer file (if any) */ int window[2][2]; /* Subwindow corners */ Float crop[2][2]; /* Crop window, lo/hi normalized */ #ifdef LINDA diff -c libshade/picture.c libshade/picture.c *** libshade/picture.c Sun Feb 9 22:04:06 1992 --- libshade/picture.c Tue Feb 22 23:49:52 1994 *************** *** 33,38 **** --- 33,39 ---- #include "viewing.h" #include "options.h" #include "stats.h" + #include "zbuf.h" #ifdef URT unsigned char **outptr; /* Output buffer */ *************** *** 131,136 **** --- 132,143 ---- * lots of headers at the end of the file). */ (void)fflush(rle_dflt_hdr.rle_file); + } + + if (Options.zbufprint) { + zbuffer.outfile = Options.imgname ? + strsave (Options.imgname) : NULL; + zbuffer.argv = argv; } if (rle_row_alloc(&rle_dflt_hdr, &outptr) < 0) diff -c libshade/setup.c libshade/setup.c *** libshade/setup.c Sun Feb 9 22:04:02 1992 --- libshade/setup.c Wed Feb 16 15:44:12 1994 *************** *** 114,119 **** --- 114,122 ---- Options.workers = WORKERS; #endif + Options.zbufprint = FALSE; + Options.zbufname = NULL; + Options.totalframes = 1; Options.startframe = 0; Options.starttime = 0.; *************** *** 192,197 **** --- 195,202 ---- LightSetup(); + if (Options.zbufprint) + ZbufSetup(); } void diff -c libshade/stats.c libshade/stats.c *** libshade/stats.c Sun Feb 9 22:04:00 1992 --- libshade/stats.c Wed Feb 16 15:44:54 1994 *************** *** 86,91 **** --- 86,93 ---- fprintf(Stats.fstats,"Seconds / intersecting ray:\t%4.4f\n", (Stats.Utime + Stats.Stime)/(Float)Stats.HitRays); PrintMemoryStats(Stats.fstats); + if (Options.zbufprint) + ZbufPrint(); } static void diff -c libshade/viewing.c libshade/viewing.c *** libshade/viewing.c Sun Feb 9 22:04:10 1992 --- libshade/viewing.c Thu Feb 24 21:39:06 1994 *************** *** 30,35 **** --- 30,36 ---- #include "defaults.h" #include "picture.h" #include "stats.h" + #include "zbuf.h" RSCamera Camera; RSScreen Screen; *************** *** 89,94 **** --- 90,98 ---- Screen.firstray.z -= 0.5*Screen.yres*Screen.scrny.z + 0.5*Screen.xres*Screen.scrnx.z; + /* Firstray now points to the lower left corner of the image plane, + if fixed at the eye position */ + if (Camera.focaldist == UNSET) Camera.focaldist = Camera.lookdist; } *************** *** 281,293 **** dist = FAR_AWAY; hitlist.nodes = 0; (void)TraceRay(ray, &hitlist, EPSILON, &dist); ShadeRay(&hitlist, ray, dist, &Screen.background, &ctmp, &fullintens); color->r = ctmp.r; color->g = ctmp.g; color->b = ctmp.b; ! if (hitlist.nodes != 0) { ! color->alpha = 1.; ! } else { ! color->alpha = 0.; } } --- 285,305 ---- dist = FAR_AWAY; hitlist.nodes = 0; (void)TraceRay(ray, &hitlist, EPSILON, &dist); + ShadeRay(&hitlist, ray, dist, &Screen.background, &ctmp, &fullintens); color->r = ctmp.r; color->g = ctmp.g; color->b = ctmp.b; ! if (hitlist.nodes != 0) ! { ! Float d = hitlist.data[hitlist.nodes-1].dist; ! ! d *= dotp(&Camera.dir, &hitlist.data[hitlist.nodes-1].ray.dir); ! ZbufAdd (x, y, d); /* Save depth in Z buffer */ ! color->alpha = 1.; ! } ! else ! { ! color->alpha = 0.; } }