home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume19 / sipp2.0 / patch01 / Patch01
Encoding:
Text File  |  1991-04-27  |  21.6 KB  |  686 lines

  1. diff -c -r sipp-2.0/Makefile sipp-2.0.1/Makefile
  2. *** sipp-2.0/Makefile    Thu Dec 20 15:54:47 1990
  3. --- sipp-2.0.1/Makefile    Tue Jan 15 07:12:04 1991
  4. ***************
  5. *** 40,45 ****
  6. --- 40,48 ----
  7.   LEX = lex
  8.   
  9.   
  10. + SHELL = /bin/sh
  11. + RM = rm -f
  12.   # LIBDIR is where libsipp.a will be placed when you make install.
  13.   # INCLUDEDIR is where the include files will be placed when you make install.
  14.   # MANDIR is where the manuals will be placed when you make install.
  15. diff -c -r sipp-2.0/README sipp-2.0.1/README
  16. *** sipp-2.0/README    Thu Dec 20 15:00:18 1990
  17. --- sipp-2.0.1/README    Mon Apr 22 19:18:33 1991
  18. ***************
  19. *** 1,5 ****
  20.   *******************************************************************
  21. !              sipp 2.0  --  3d rendering package
  22.   
  23.                by         Jonas Yngvesson   jonas-y@isy.liu.se
  24.                           Inge Wallin       ingwa@isy.liu.se
  25. --- 1,5 ----
  26.   *******************************************************************
  27. !              sipp 2.0.1  --  3d rendering package
  28.   
  29.                by         Jonas Yngvesson   jonas-y@isy.liu.se
  30.                           Inge Wallin       ingwa@isy.liu.se
  31. ***************
  32. *** 8,21 ****
  33.                Sweden
  34.   *******************************************************************
  35.   
  36. ! This is the beta-test release of version 2.0 of SIPP, the SImple
  37. ! Polygon Processor. SIPP is a library for creating 3-dimensional
  38. ! scenes and rendering them using a scan-line z-buffer algorithm. A
  39. ! scene is built up of objects which can be transformed with rotation,
  40. ! translation and scaling. The objects form hierarchies where each
  41. ! object can have arbitrarily many subobjects and subsurfaces. A
  42. ! surface is a number of connected polygons which are rendered with
  43. ! Phong interpolation of the surface normals.
  44.   
  45.   The library has an internal database for the objects that is to be
  46.   rendered. Objects can be installed in, and removed from, this
  47. --- 8,21 ----
  48.                Sweden
  49.   *******************************************************************
  50.   
  51. ! This is SIPP, the SImple Polygon Processor, version 2.0.1. SIPP is a
  52. ! library for creating 3-dimensional scenes and rendering them using a
  53. ! scan-line z-buffer algorithm. A scene is built up of objects which
  54. ! can be transformed with rotation, translation and scaling. The
  55. ! objects form hierarchies where each object can have arbitrarily many
  56. ! subobjects and subsurfaces. A surface is a number of connected
  57. ! polygons which are rendered with Phong interpolation of the surface
  58. ! normals.
  59.   
  60.   The library has an internal database for the objects that is to be
  61.   rendered. Objects can be installed in, and removed from, this
  62. ***************
  63. *** 31,42 ****
  64.   exist.
  65.   
  66.   The program has some bugs & limitations. See the BUGS entry in the
  67. ! manuals for more information.
  68.   
  69.   To install the library, edit the Makefile and type 'make install'. If
  70. ! Your system does not have the drand48() random number generator, change
  71. ! the macro RANDOM() in sipp.h to use the random number generator available
  72. ! on your system.
  73.   
  74.   If you only want to make the library but not install it, just type
  75.   'make library'.
  76. --- 31,43 ----
  77.   exist.
  78.   
  79.   The program has some bugs & limitations. See the BUGS entry in the
  80. ! manuals for more information. All bugs in version 2.0 which were
  81. ! reported to us have been fixed though.
  82.   
  83.   To install the library, edit the Makefile and type 'make install'. If
  84. ! Your system does not have the drand48() random number generator,
  85. ! change the macro RANDOM() in sipp.h to use the random number
  86. ! generator available on your system.
  87.   
  88.   If you only want to make the library but not install it, just type
  89.   'make library'.
  90. ***************
  91. *** 54,59 ****
  92.   then compile a library of object functions and let other people share
  93.   the benefits.
  94.   
  95. ! Linkoping 19 December 1990
  96.   
  97.                   enjoy! /Jonas & Inge
  98. --- 55,60 ----
  99.   then compile a library of object functions and let other people share
  100.   the benefits.
  101.   
  102. ! Linkoping 22 April 1991
  103.   
  104.                   enjoy! /Jonas & Inge
  105. Common subdirectories: sipp-2.0/demo and sipp-2.0.1/demo
  106. Common subdirectories: sipp-2.0/doc and sipp-2.0.1/doc
  107. Common subdirectories: sipp-2.0/libsipp and sipp-2.0.1/libsipp
  108. diff -c -r sipp-2.0/demo/Makefile sipp-2.0.1/demo/Makefile
  109. *** sipp-2.0/demo/Makefile    Thu Dec 20 15:47:17 1990
  110. --- sipp-2.0.1/demo/Makefile    Tue Jan 15 04:38:35 1991
  111. ***************
  112. *** 6,11 ****
  113. --- 6,13 ----
  114.   CC = cc
  115.   CFLAGS = -O -I../libsipp
  116.   
  117. + SHELL = /bin/sh
  118. + RM = rm -f
  119.   
  120.   SRCS = torustest.c cylindertest.c ellipsoid.c blocktest.c chain.c \
  121.       teapot.c structure.c planettest.c isy90.c
  122. diff -c -r sipp-2.0/demo/blocktest.c sipp-2.0.1/demo/blocktest.c
  123. *** sipp-2.0/demo/blocktest.c    Wed Dec 12 14:20:48 1990
  124. --- sipp-2.0.1/demo/blocktest.c    Tue Jan 15 04:36:15 1991
  125. ***************
  126. *** 43,47 ****
  127.       fp = fopen("block.ppm", "w");
  128.       render_image(side, side, fp);
  129.       printf("Done.\n");
  130. - }
  131.   
  132. --- 43,48 ----
  133.       fp = fopen("block.ppm", "w");
  134.       render_image(side, side, fp);
  135.       printf("Done.\n");
  136.   
  137. +     exit(0);
  138. + }
  139. diff -c -r sipp-2.0/demo/chain.c sipp-2.0.1/demo/chain.c
  140. *** sipp-2.0/demo/chain.c    Wed Dec 12 14:20:47 1990
  141. --- sipp-2.0.1/demo/chain.c    Tue Jan 15 04:36:33 1991
  142. ***************
  143. *** 77,80 ****
  144. --- 77,82 ----
  145.       fp = fopen("chain.ppm", "w");
  146.       render_image(side, side, fp);
  147.       printf("Done.\n");
  148. +     exit(0);
  149.   }
  150. diff -c -r sipp-2.0/demo/cylindertest.c sipp-2.0.1/demo/cylindertest.c
  151. *** sipp-2.0/demo/cylindertest.c    Wed Dec 12 14:20:51 1990
  152. --- sipp-2.0.1/demo/cylindertest.c    Tue Jan 15 04:36:40 1991
  153. ***************
  154. *** 46,49 ****
  155. --- 46,51 ----
  156.       fp = fopen("cylinder.ppm", "w");
  157.       render_image(side, side, fp);
  158.       printf("Done.\n");
  159. +     exit(0);
  160.   }
  161. diff -c -r sipp-2.0/demo/ellipsoid.c sipp-2.0.1/demo/ellipsoid.c
  162. *** sipp-2.0/demo/ellipsoid.c    Wed Dec 12 14:20:49 1990
  163. --- sipp-2.0.1/demo/ellipsoid.c    Tue Jan 15 04:36:57 1991
  164. ***************
  165. *** 47,50 ****
  166. --- 47,52 ----
  167.       fp = fopen("ellipsoid.ppm", "w");
  168.       render_image(side, side, fp);
  169.       printf("Done.\n");
  170. +     exit(0);
  171.   }
  172. diff -c -r sipp-2.0/demo/isy90.c sipp-2.0.1/demo/isy90.c
  173. *** sipp-2.0/demo/isy90.c    Wed Dec 19 11:43:12 1990
  174. --- sipp-2.0.1/demo/isy90.c    Tue Jan 15 04:37:07 1991
  175. ***************
  176. *** 116,119 ****
  177. --- 116,121 ----
  178.       view_focal(0.2);
  179.       image = fopen("isy90.ppm", "w");
  180.       render_image(siz, siz, image);
  181. +     exit(0);
  182.   }
  183. diff -c -r sipp-2.0/demo/planettest.c sipp-2.0.1/demo/planettest.c
  184. *** sipp-2.0/demo/planettest.c    Wed Dec 12 14:19:49 1990
  185. --- sipp-2.0.1/demo/planettest.c    Tue Jan 15 04:37:19 1991
  186. ***************
  187. *** 41,45 ****
  188.   
  189.       outfile = fopen("planet.ppm", "w");
  190.       render_image(size, size, outfile);
  191. - }
  192.   
  193. --- 41,46 ----
  194.   
  195.       outfile = fopen("planet.ppm", "w");
  196.       render_image(size, size, outfile);
  197.   
  198. +     exit(0);
  199. + }
  200. diff -c -r sipp-2.0/demo/structure.c sipp-2.0.1/demo/structure.c
  201. *** sipp-2.0/demo/structure.c    Wed Dec 12 14:20:44 1990
  202. --- sipp-2.0.1/demo/structure.c    Tue Jan 15 04:37:28 1991
  203. ***************
  204. *** 103,107 ****
  205.       fp = fopen("structure.ppm", "w");
  206.       render_image(size, size, fp);
  207.       printf("Done.\n");
  208. - }
  209.   
  210. --- 103,108 ----
  211.       fp = fopen("structure.ppm", "w");
  212.       render_image(size, size, fp);
  213.       printf("Done.\n");
  214.   
  215. +     exit(0);
  216. + }
  217. diff -c -r sipp-2.0/demo/teapot.c sipp-2.0.1/demo/teapot.c
  218. *** sipp-2.0/demo/teapot.c    Tue Dec 18 17:02:54 1990
  219. --- sipp-2.0.1/demo/teapot.c    Tue Jan 15 04:37:36 1991
  220. ***************
  221. *** 67,70 ****
  222. --- 67,72 ----
  223.       view_focal(0.25);
  224.       image = fopen("teapot.ppm", "w");
  225.       render_image(siz, siz, image);
  226. +     exit(0);
  227.   }
  228. diff -c -r sipp-2.0/demo/torustest.c sipp-2.0.1/demo/torustest.c
  229. *** sipp-2.0/demo/torustest.c    Wed Dec 12 14:20:54 1990
  230. --- sipp-2.0.1/demo/torustest.c    Tue Jan 15 04:37:48 1991
  231. ***************
  232. *** 48,51 ****
  233. --- 48,53 ----
  234.       fp = fopen("torus.ppm", "w");
  235.       render_image(side, side, fp);
  236.       printf("Done.\n");
  237. +     exit(0);
  238.   }
  239. diff -c -r sipp-2.0/libsipp/Makefile sipp-2.0.1/libsipp/Makefile
  240. *** sipp-2.0/libsipp/Makefile    Thu Dec 20 15:52:10 1990
  241. --- sipp-2.0.1/libsipp/Makefile    Tue Jan 15 04:40:56 1991
  242. ***************
  243. *** 6,11 ****
  244. --- 6,13 ----
  245.   CC = cc
  246.   CFLAGS = -pipe -I. -DHAVE_NO_ALLOCA
  247.   
  248. + SHELL = /bin/sh
  249. + RM = rm -f
  250.   
  251.   IHDRS = sipptypes.h geometric.h noise.h bezier.h
  252.   EHDRS = sipp.h shaders.h primitives.h
  253. diff -c -r sipp-2.0/libsipp/TODO sipp-2.0.1/libsipp/TODO
  254. *** sipp-2.0/libsipp/TODO    Wed Dec 12 14:33:53 1990
  255. --- sipp-2.0.1/libsipp/TODO    Fri Apr 12 22:44:04 1991
  256. ***************
  257. *** 1,17 ****
  258. - Minor:
  259.   Make antialiasing optional with some kind of flag.
  260.   
  261. ! [Have the program whistle while it works with a verbose flag.]
  262.   
  263.   Make it possible to render into a pixmap in core.
  264.   
  265. ! Major:
  266.   
  267.   [Arbitrary number of "texture coordinates" (numbers to be
  268.   interpolated over polygon surfaces).]
  269.   
  270. ! [More sofisticated antialiasing (A-buffer??)]
  271.   
  272. ! [Line image (without hidden lines) for preview.]
  273. --- 1,24 ----
  274.   Make antialiasing optional with some kind of flag.
  275.   
  276. ! More sofisticated antialiasing.
  277.   
  278.   Make it possible to render into a pixmap in core.
  279.   
  280. ! [New and better shading model (CG&A Nov 90)]
  281.   
  282. + [Shaped lightsources, e.g. point, spotlight]
  283. + [Colored lightsources]
  284. + [Several rendering modes, e.g. wire frame, hidden line, flat shading, 
  285. +  Gouraud shading]
  286.   [Arbitrary number of "texture coordinates" (numbers to be
  287.   interpolated over polygon surfaces).]
  288.   
  289. ! [Have the program whistle while it works with a verbose flag.]
  290.   
  291. ! [Shadows, see eg article in siggraph 87 about depth maps]
  292. ! [Curved surface rendering (not siPp any longer)]
  293. diff -c -r sipp-2.0/libsipp/bumpy.c sipp-2.0.1/libsipp/bumpy.c
  294. *** sipp-2.0/libsipp/bumpy.c    Fri Apr 12 22:36:14 1991
  295. --- sipp-2.0.1/libsipp/bumpy.c    Wed Apr  3 20:05:27 1991
  296. ***************
  297. *** 1,5 ****
  298.   /*
  299. !  * erode shader - simulates an eroded surface using noise
  300.    */
  301.   
  302.   #include <math.h>
  303. --- 1,5 ----
  304.   /*
  305. !  * bumpy shader - simulates an bumpy surfaces using noise and Dnoise
  306.    */
  307.   
  308.   #include <math.h>
  309. ***************
  310. *** 36,44 ****
  311.       tmp.z = w * bd->scale;
  312.   
  313.       if ((bd->bumpflag && bd->holeflag)
  314. !           || ((no = noise(tmp)) < 0.0 && bd->bumpflag)
  315.             || (no > 0.0 && bd->holeflag)) {
  316. !         tmp = Dnoise(tmp);
  317.           len = sqrt(nx * nx + ny * ny + nz * nz);
  318.           nx = nx / len + tmp.x;
  319.           ny = ny / len + tmp.y;
  320. --- 36,44 ----
  321.       tmp.z = w * bd->scale;
  322.   
  323.       if ((bd->bumpflag && bd->holeflag)
  324. !           || ((no = noise(&tmp)) < 0.0 && bd->bumpflag)
  325.             || (no > 0.0 && bd->holeflag)) {
  326. !         tmp = Dnoise(&tmp);
  327.           len = sqrt(nx * nx + ny * ny + nz * nz);
  328.           nx = nx / len + tmp.x;
  329.           ny = ny / len + tmp.y;
  330. diff -c -r sipp-2.0/libsipp/geometric.c sipp-2.0.1/libsipp/geometric.c
  331. *** sipp-2.0/libsipp/geometric.c    Thu Dec 20 15:10:49 1990
  332. --- sipp-2.0.1/libsipp/geometric.c    Mon Apr 22 18:51:11 1991
  333. ***************
  334. *** 58,64 ****
  335.   /*
  336.    * Set MAT to the transformation matrix that represents the 
  337.    * concatenation between the previous transformation in MAT
  338. !  * and a translation along the Vector VEC.
  339.    *
  340.    * [a  b  c  0]   [ 1  0  0  0]     [ a     b     c    0]
  341.    * [d  e  f  0]   [ 0  1  0  0]     [ d     e     f    0]
  342. --- 58,64 ----
  343.   /*
  344.    * Set MAT to the transformation matrix that represents the 
  345.    * concatenation between the previous transformation in MAT
  346. !  * and a translation along the vector described by DX, DY and DZ.
  347.    *
  348.    * [a  b  c  0]   [ 1  0  0  0]     [ a     b     c    0]
  349.    * [d  e  f  0]   [ 0  1  0  0]     [ d     e     f    0]
  350. ***************
  351. *** 202,209 ****
  352.       mat_rotate_z(mat, -ang2);
  353.       mat_rotate_y(mat, -ang3);
  354.       mat_rotate_z(mat, ang);
  355. -     mat_rotate_z(mat, ang2);
  356.       mat_rotate_y(mat, ang3);
  357.       mat_translate(mat, point->x, point->y, point->z);
  358.   }
  359.   
  360. --- 202,209 ----
  361.       mat_rotate_z(mat, -ang2);
  362.       mat_rotate_y(mat, -ang3);
  363.       mat_rotate_z(mat, ang);
  364.       mat_rotate_y(mat, ang3);
  365. +     mat_rotate_z(mat, ang2);
  366.       mat_translate(mat, point->x, point->y, point->z);
  367.   }
  368.   
  369. ***************
  370. *** 212,218 ****
  371.   /*
  372.    * Set MAT to the transformation matrix that represents the 
  373.    * concatenation between the previous transformation in MAT
  374. !  * and a scaling with the scaling factors in the Vector scale.
  375.    *
  376.    * [a  b  c  0]   [Sx  0  0  0]     [a*Sx  b*Sy  c*Sz  0]
  377.    * [d  e  f  0]   [ 0 Sy  0  0]     [d*Sx  e*Sy  f*Sz  0]
  378. --- 212,218 ----
  379.   /*
  380.    * Set MAT to the transformation matrix that represents the 
  381.    * concatenation between the previous transformation in MAT
  382. !  * and a scaling with the scaling factors XSCALE, YSCALE and ZSCALE
  383.    *
  384.    * [a  b  c  0]   [Sx  0  0  0]     [a*Sx  b*Sy  c*Sz  0]
  385.    * [d  e  f  0]   [ 0 Sy  0  0]     [d*Sx  e*Sy  f*Sz  0]
  386. ***************
  387. *** 242,248 ****
  388.    * Set MAT to the transformation matrix that represents the
  389.    * concatenation between the previous transformation in MAT
  390.    * and a mirroring in the plane defined by the point POINT
  391. !  * and the normal vector NORMAL.
  392.    */
  393.   
  394.   void
  395. --- 242,248 ----
  396.    * Set MAT to the transformation matrix that represents the
  397.    * concatenation between the previous transformation in MAT
  398.    * and a mirroring in the plane defined by the point POINT
  399. !  * and the normal vector NORM.
  400.    */
  401.   
  402.   void
  403. Only in sipp-2.0.1/libsipp: patchlevel.h
  404. diff -c -r sipp-2.0/libsipp/sipp.c sipp-2.0.1/libsipp/sipp.c
  405. *** sipp-2.0/libsipp/sipp.c    Thu Dec 20 15:20:25 1990
  406. --- sipp-2.0.1/libsipp/sipp.c    Mon Apr 22 19:17:24 1991
  407. ***************
  408. *** 3,10 ****
  409.    *
  410.    *  A general 3d graphic package
  411.    *
  412. !  *  Copyright Jonas Yngvesson  (jonas-y@isy.liu.se) 1988/89/90
  413. !  *            Inge Wallin      (ingwa@isy.liu.se)         1990
  414.    *
  415.    * This program is free software; you can redistribute it and/or modify
  416.    * it under the terms of the GNU General Public License as published by
  417. --- 3,10 ----
  418.    *
  419.    *  A general 3d graphic package
  420.    *
  421. !  *  Copyright Jonas Yngvesson  (jonas-y@isy.liu.se) 1988/89/90/91
  422. !  *            Inge Wallin      (ingwa@isy.liu.se)         1990/91
  423.    *
  424.    * This program is free software; you can redistribute it and/or modify
  425.    * it under the terms of the GNU General Public License as published by
  426. ***************
  427. *** 19,24 ****
  428. --- 19,30 ----
  429.    *
  430.    * Revision history:
  431.    *
  432. +  * 910412  Ver. 2.0.1. Some minor bugfixes. Division by zero in
  433. +  *         create_edges() if an edge was horizontal in both x and y.
  434. +  *         Free-list became corrupted since the y_bucket was freed
  435. +  *         twice. Wrong parameters to (D)noise() in bumpy.c. Two lines
  436. +  *         interchanged in mat_rotate(). A few other minor changes.
  437. +  *
  438.    * 901219  At last! 2.0 is out of the bag. And right in time for X-mas :-)
  439.    *         *Major* rewrite. A new level in the object hierarchy introduced.
  440.    *         An object is now a collection of surfaces and other objects
  441. ***************
  442. *** 83,89 ****
  443.   #include <geometric.h>
  444.   
  445.   
  446. ! #define VERSION "2.0"
  447.   
  448.   #define ZCLIPF 100.0        /* Magic number used when defining hither & yon */
  449.   
  450. --- 89,95 ----
  451.   #include <geometric.h>
  452.   
  453.   
  454. ! #define VERSION "2.0.1"
  455.   
  456.   #define ZCLIPF 100.0        /* Magic number used when defining hither & yon */
  457.   
  458. ***************
  459. *** 92,110 ****
  460.   /*
  461.    * Global variables.
  462.    */
  463. ! static Vertex      *vertex_tree;     /* Vertex tree for current object. */
  464. ! static Vertex_ref  *vertex_stack;    /* Vertex stack for current polygon. */
  465. ! static Vertex_ref  *vstack_bottom;   /* Last entry in vertex stack. */
  466. ! static Polygon     *poly_stack;      /* Polygon stack for current object. */
  467. ! static Inst_object *object_db;       /* Object database. */
  468. ! static Lightsource *lightsrc_stack;  /* Lightsource list. */
  469. ! static Bucket      *y_bucket;        /* Y-bucket for edge lists. */
  470. ! static double       dist_limit;      /* Minimal distance between two      */
  471. !                                      /* vertices without them being       */
  472. !                                      /* considered to be the same vertex. */
  473. ! static int          first_vertex;    /* Used when determining if we are   */
  474. !                                      /* installing the first vertex in an */
  475. !                                      /* object. *Not* a boolean!          */
  476.   
  477.   /*
  478.    * Stack of transformation matrices used
  479. --- 98,116 ----
  480.   /*
  481.    * Global variables.
  482.    */
  483. ! static Vertex       *vertex_tree;     /* Vertex tree for current object. */
  484. ! static Vertex_ref   *vertex_stack;    /* Vertex stack for current polygon. */
  485. ! static Vertex_ref   *vstack_bottom;   /* Last entry in vertex stack. */
  486. ! static Polygon      *poly_stack;      /* Polygon stack for current object. */
  487. ! static Inst_object  *object_db;       /* Object database. */
  488. ! static Lightsource  *lightsrc_stack;  /* Lightsource list. */
  489. ! static Edge        **y_bucket;        /* Y-bucket for edge lists. */
  490. ! static double        dist_limit;      /* Minimal distance between two      */
  491. !                                       /* vertices without them being       */
  492. !                                       /* considered to be the same vertex. */
  493. ! static int           first_vertex;    /* Used when determining if we are   */
  494. !                                       /* installing the first vertex in an */
  495. !                                       /* object. *Not* a boolean!          */
  496.   
  497.   /*
  498.    * Stack of transformation matrices used
  499. ***************
  500. *** 1297,1303 ****
  501.                       edge->wstep = wstep;
  502.                   }
  503.               } else {
  504. !                 zstep = (z2 - z1) / fabs(x2 - x1);
  505.                   edge = (Edge *)smalloc(sizeof(Edge));
  506.                   edge->y = y2;
  507.                   edge->y_stop = y1;
  508. --- 1303,1313 ----
  509.                       edge->wstep = wstep;
  510.                   }
  511.               } else {
  512. !                 if (x2 != x1) {
  513. !                     zstep = (z2 - z1) / fabs(x2 - x1);
  514. !                 } else {
  515. !                     zstep = z2 - z1;
  516. !                 }
  517.                   edge = (Edge *)smalloc(sizeof(Edge));
  518.                   edge->y = y2;
  519.                   edge->y_stop = y1;
  520. ***************
  521. *** 1315,1328 ****
  522.               }
  523.               edge->polygon = polygon;
  524.               edge->surface = surface;
  525. !             edge->next = NULL;
  526. !             if (y_bucket[edge->y].last == NULL) {
  527. !                 y_bucket[edge->y].first = edge;
  528. !                 y_bucket[edge->y].last = edge;
  529. !             } else {
  530. !                 y_bucket[edge->y].last->next = edge;
  531. !                 y_bucket[edge->y].last = edge;
  532. !             }
  533.           }
  534.       } while (view_ref != last);
  535.   }
  536. --- 1325,1332 ----
  537.               }
  538.               edge->polygon = polygon;
  539.               edge->surface = surface;
  540. !             edge->next = y_bucket[edge->y];
  541. !             y_bucket[edge->y] = edge;
  542.           }
  543.       } while (view_ref != last);
  544.   }
  545. ***************
  546. *** 1605,1613 ****
  547.       stmp = scanline1;
  548.    
  549.       while (y >= 0) {
  550. !         active_list = merge_edge_lists(active_list, y_bucket[y].first);
  551.           next_edge = y - 1;
  552. !         while (next_edge >=0 && y_bucket[next_edge].first == NULL)
  553.               next_edge--;
  554.           while (y > next_edge) {
  555.               init_buffers(xres, z_buffer, stmp);
  556. --- 1609,1617 ----
  557.       stmp = scanline1;
  558.    
  559.       while (y >= 0) {
  560. !         active_list = merge_edge_lists(active_list, y_bucket[y]);
  561.           next_edge = y - 1;
  562. !         while (next_edge >=0 && y_bucket[next_edge] == NULL)
  563.               next_edge--;
  564.           while (y > next_edge) {
  565.               init_buffers(xres, z_buffer, stmp);
  566. ***************
  567. *** 1796,1820 ****
  568.   }
  569.   
  570.   
  571. - /*
  572. -  * Free the memory used by an edge list.
  573. -  */
  574. - static void
  575. - delete_edges(edge_list)
  576. -     Edge *edge_list;
  577. - {
  578. -     Edge *edgeref1, *edgeref2;
  579.   
  580. -     edgeref1 = edge_list;
  581. -     while (edgeref1 != NULL) {
  582. -         edgeref2 = edgeref1->next;
  583. -         free(edgeref1);
  584. -         edgeref1 = edgeref2;
  585. -     }
  586. - }
  587.   /*
  588.    * Push the current transformation matrix on the matrix stack.
  589.    */
  590. --- 1800,1806 ----
  591. ***************
  592. *** 1904,1910 ****
  593.   
  594.                   if (!polyref->backface) {
  595.                       transf_vertices(polyref->vertices, surfref, loc_view_mat, 
  596. !                                     &curr_mat, (double)xres, (double)yres);
  597.                   }
  598.   
  599.               }
  600. --- 1890,1897 ----
  601.   
  602.                   if (!polyref->backface) {
  603.                       transf_vertices(polyref->vertices, surfref, loc_view_mat, 
  604. !                                     &curr_mat, (double)(xres >> 1),
  605. !                                     (double)(yres >> 1));
  606.                   }
  607.   
  608.               }
  609. ***************
  610. *** 1951,1970 ****
  611.       double      matrix[4][4];
  612.       int         i;
  613.   
  614. !     y_bucket = (Bucket *)calloc(yres << 1, sizeof(Bucket));
  615.   
  616.       get_view_transf(matrix);
  617.       MatCopy(&curr_mat, &ident_matrix);
  618.       
  619. !     traverse_object_db(object_db, matrix, xres, yres);
  620.   
  621.       vecnorm(&camera.vec);
  622.       scan_and_render(xres << 1, yres << 1, image_file);
  623.       view_vec_eval();
  624. -     for (i = 0; i < (yres << 1); i++)
  625. -         delete_edges(y_bucket[i].first);
  626. -     free(y_bucket);
  627.   }
  628.   
  629.   
  630. --- 1938,1953 ----
  631.       double      matrix[4][4];
  632.       int         i;
  633.   
  634. !     y_bucket = (Edge **)calloc(yres << 1, sizeof(Edge *));
  635.   
  636.       get_view_transf(matrix);
  637.       MatCopy(&curr_mat, &ident_matrix);
  638.       
  639. !     traverse_object_db(object_db, matrix, xres << 1, yres << 1);
  640.   
  641.       vecnorm(&camera.vec);
  642.       scan_and_render(xres << 1, yres << 1, image_file);
  643.       view_vec_eval();
  644.   }
  645.   
  646.   
  647. diff -c -r sipp-2.0/libsipp/sipptypes.h sipp-2.0.1/libsipp/sipptypes.h
  648. *** sipp-2.0/libsipp/sipptypes.h    Sat Nov 17 01:43:53 1990
  649. --- sipp-2.0.1/libsipp/sipptypes.h    Thu Mar 21 20:55:12 1991
  650. ***************
  651. *** 41,54 ****
  652.   
  653.   
  654.   /*
  655. -  * Y-bucket to keep the edge lists
  656. -  */
  657. - typedef struct {
  658. -     Edge *first, *last;   /* Firs and last entry in the list */
  659. - } Bucket;
  660. - /*
  661.    * Objects installed in the database for rendering are kept
  662.    * in a binary tree, internal to sipp. This database will
  663.    * automatically contain all top level objects, but the user
  664. --- 41,46 ----
  665. -- 
  666.