$Id: Changes,v 1.148 2013/04/21 19:16:38 johns Exp $

Changelog for Tachyon(tm) Ray Tracer 
------------------------------------
04/21/2013  o Added the Doxygen build files to the source tree

            o Massive update to the list of different target platforms.
              I have removed all of the old build targets that aren't 
              particularly relevant to an average person from the main list,
              but they are still in the makefiles for those that want to 
              dig into Make-arch and see what is there.

            o Implemented a new barrier synchronization mechanism for 
              synchronizing the pool of worker threads on each node 
              prior to sending/receiving the image buffer via MPI.
              This increases the performance of hybrid MPI/threads 
              builds quite substantially on average.  Rather than using
              the higher-cost threadpool barriers on each row/scanline, 
              this implementation uses either lock-free atomic integer 
              operations or a minimalistic mutex-based approach.
              Tests on the NCSA Blue Waters Cray XE6/XK7 give a 
              performance gain of roughly 3.6x when using the 
              mutex- or fetch-and-add/add-and-fetch atomic counter 
              barriers rather than the condition variable sleeping barriers.

            o Added support for atomic integer ops for improved performance
              when mixing threads and distributed memory message passing.

            o Fixed a couple of bugs in the volume loader code.
              Added check for successful read, and added a missing 
              call to fclose().

            o Added bluewaters-mpi-thr target enabling both MPI and threads.

            o Replaced hard-coded threading defines in the makefile with 
              inclusion of flags from Make-config similar to what is 
              already done for MPI and other features.  This makes it 
              much easier to enable/disable various implementation
              options, tunings, and machine-dependent, compiler-specific,
              platform-specific optimizations, and experimental code.

04/20/2013  o Eliminated a small bit of unnecessarily inlined/duplicated 
              code for caching the AO RNG handle in the two main 
              image generation loops.

            o Added commentary about the costs of the barrier synchronization
              in the context of mixed threads+MPI builds, and the opportunity
              to replace it with simpler mechanisms such as a scheme based on
              fetch-add atomic ops.

04/19/2013  o Integrated bug fixes for the old OpenMP code path
              and added build targets linux-icc-64-openmp and linux-64-openmp.

            o Fixed a bug with OpenGL+MPI where all of the non-zero nodes
              were setting their image output buffers to rgb96f, but 
              node 0 was setting rgb24f.  All nodes now set their output
              buffers to rgb24f if OpenGL is enabled.  Added a simple
              linux-mpi-ogl build target for easy testing.

04/17/2013  o Misc cleanup of the Makefiles, added more comments
              regarding the need for -DUSE_MPI_IN_PLACE when compiling
              with MPI 2.x libraries.

04/09/2013  o Changed the double-precision epsilon values to prevent 
              occurence of the "digital zits" problem when rendering 
              VMD scenes of extremely large structures such as the HIV capsid.
              Reducing the epsilon value by 50 cures this problem for 
              extremely large VMD scenes.  In the longer term, Tachyon 
              should be changed to use epsilon differently to avoid
              this sort of sensitivity.

12/09/2012  o Use the pthread affinity APIs when compiling for Intel MIC

12/07/2012  o Added support native Tachyon builds on
              Intel Xeon Phi (MIC) compute accelerators

12/06/2012  o Updated CARMA Tegra3 targets to use forced override of
              the number of CPU cores to prevent offlined CPUs from
              causing Tachyon to spawn too few host threads.

11/15/2012  o Added new linux-carma-thr and linux-carma-softfp-thr
              build targets supporting the NVIDIA / SECO Tegra3 
              development boards.

09/29/2012  o Added workaround to address the problem of varying CPU counts
              reported by sysconf() on the Android platform.  Android varies
              the number of active CPU cores according to system activity, 
              thermal load, and battery state.  Several existing Android 
              versions incorrectly report the number of active processors
              rather than the number of physical processors when queried 
              with _SC_NPROCESSORS_CONF, so until this is fixed, we work
              around that problem by reading and interpreting the contents
              of the file /sys/devices/system/cpu/present.

09/28/2012  o Added special Java JNI wrapper functions and supporting 
              infrastructure that is required in order to call Tachyon 
              from Java, wrapped in an Android application.

            o Don't call exit() on the Android platform, return instead.

            o Added new Makefile macros to control the naming of the Tachyon
              Java JNI wrapper function, and the app/class that it 
              gets embedded into.

            o Significantly streamlined Android JNI builds by adding new macros               to control NDK binary/include/lib/sysroot paths.

09/24/2012  o Updated the Tachyon threads code for MacOS X to avoid using 
              the old Carbon Multiprocessing APIs, which are now deprecated
              on versions of MacOS X 10.7 and later.

08/27/2012  o Fixed a potential thread handle leak on Windows platforms.

03/14/2012  o Added check for USE_MPI_IN_PLACE macro when compiling 
              Tachyon for platforms based on MPI 2.x, such as the 
              NCSA/Cray Blue Waters system.

04/11/2012  o Fix behavior of non-blocking glwin_handle_events() calls 
              on windows.
              Updated OpenGL window handling code to process various 
              mouse events and to prevent dropping any events.

02/17/2011  o Revised Tachyon APIs to greatly improve const correctness.

02/15/2011  o Changed the behavior of OpenGL fog such that fog color 
              doesn't override the background color or background sky sphere.
              OpenGL only applies fog to drawn fragments and not
              to raster ops or glClear() so this makes it easier to 
              emulate the behavior that OpenGL applications like VMD expect.

            o Added orthographic sky plane background gradient mode, renamed
              the background gradient API deprecating the old one, and added
              copius comments to the Tachyon header file.

02/11/2011  o Updated in-memory texture image definition API, replacing 
              rt_define_image() with rt_define_teximage_rgb24().

02/06/2011  o Updated various header files to improve doxygen output.

            o Further progress in automating conversion of the threading
              code to the WorkForce APIs used in external programs.

02/05/2011  o Misc improvements, added new command line -raydepth 
              parameter to override maximum ray recursion depth setting
              in the scene file.

02/01/2011  o Added "3fv" versions of most object creation APIs
              which is more convenient and familiar to OpenGL programmers.

01/31/2011  o Eliminated dependencies on libGLU

01/28/2011  o Greatly expanded range of keyboard input allowed 
              by OpenGL window handling routines on X11 and Win32.

01/24/2011  o Improved Win32 window resizing behavior

01/19/2011  o Added support for interactive fly-throughs using the 
              SpaceNavigator and other devices that send events 
              via windowing system messages.

01/16/2011  o Marked with new version number 0.99

            o Updated camera code to allow changes to rendered 
              image resolution independent of other camera parameters.

            o Added keyboard hotkeys to change the window size and 
              resolution of the ray traced images on-the-fly.

            o Added code to gracefully handle window resizing and dynamic
              scaling/centering of the ray tracer output image.

            o Fixed Win32 OpenGL drawing code to double-buffer by default

01/15/2011  o Added window event handling code for SpaceNavigator/Spaceball
              and compatible devices.

            o Eliminated code and build settings related to the Mercury/MSTI 
              i860 and PowerPC builds supporting RTVI framebuffers, circa 1998.

01/12/2011  o Added support for quad-buffered stereoscopic display 
              modes to the OpenGL window management code.
              Updated the OpenGL display code to handle keypresses and a 
              wide range of other event types.  Rewrote the Win32 display
              code to eliminate global window state variables through 
              the use of user-defined window property data.
              Added support for both blocking and non-blocking window system
              event queries.

            o Fixed scene parser logic for extension-based file type
              determination

            o Update const-correctness of various image I/O modules

            o Updated various source files to eliminate Microsoft 
              compiler warnings 

02/10/2010  o Added support for limits on the maximum number of
              transparent surfaces shown, a related flag to enable 
              or disable shadow filtering for transparent objects,
              and a new transparency mode flag to enable modulation of
              surface transparency based on the angle of incidence of the
              incoming ray and the surface normal, emulating the equation
              used by Raster3D.

01/18/2010  o Fixed a problem with hybrid MPI+threads builds where
              thread IDs other than zero were incorrectly being allowed to
              make calls to the parallel message passing code.

11/05/2009  o Fixed a bug in the handling of transmission and reflection
              rays in the presence of user-defined clipping planes.  The
              secondary rays were not being properly clipped due to a ray
              flag not being propagated correctly.

07/15/2009  o Greatly improved efficiency of PPM and Targa image output 
              codes.  Image output was making large BlueGene runs I/O bound.
              The Targa format is costly on BlueGene due to the need to 
              swizzle RGB color channels to BGR order, apparently byte loads
              and stores perform poorly on this architecture.

05/27/2009  o Updated vertex array primitives to allow the use of
              volumetric texturing in place of vertex colored smooth
              triangles, when the color block is not defined.  This is
              used by VMD for rendering of electrostatic potential maps.

05/17/2009  o Added new "shader_mode" scene file block where the 
              rendering quality setting, and ambient occlusion
              settings can be specified, along with special 
              fog and transparency rendering modes used by VMD.

05/17/2009  o Increased efficacy of the combination of AA and AO samples,
              such that any combination of AA and AO sample counts will
              result in a grand total of AAsamples*AOsamples unique AO 
              sample rays for each pixel.

05/16/2009  o Updated X11 OpenGL window event handling to address a problem
              on some platforms running KDE.

            o Added additional color range clamping checks on output
              so that larger-than-unity outline texture values can be used
              without corrupting image data.

05/15/2009  o Added "outline" texturing feature for use with VMD

04/22/2009  o Added a VMD-specific fog rendering mode to allow renderings
              to precisely match what is seen in OpenGL, which uses a 
              simple planar fog implementation. 
              Added higher level thread pool/iterator constructs intended
              to eventually replace hand-coded thread calls in the rendering
              loops.  Various small tweaks to place GCC 4.4.x.  Updated the
              Make-arch configurations for GCC to only use -O3 since the 
              higher optimization levels are now ignored anyway.

03/24/2009  o Added Win32 condition variable implementations and enabled
              multithreaded builds by default on Windows.

06/01/2008  o Added output image cropping for use by SPEC MPI benchmark 
              suite when rendering very large test images.

03/09/2007  o Correct the handling of cases where degenerate triangles
              are eliminated from the scene by checking for NULL objects
              before applying normal fixup mode changes.

02/12/2007  o Implemented a new output stage for high dynamic range 
              image formats.  Added support for uncompressed 
              48-bit color PPM and 48-bit color Photoshop PSD files.
              Renamed rt_rawimage() to rt_rawimage_rgb24() and 
              added rt_rawimage_rgb96f() for floating point color images.
              Added new -clamp, -normalize, and -gamma options for post
              processing floating point image data before output is written.


02/11/2007  o decrease the double precision epsilon values by a factor
              of twenty to improve rendering of VMD images and other
              scenes that use a coordinate system with small absolute
              coordinate values.  This should still leave plenty of 
              range for scenes with large coordinate values.


02/09/2007  o Added basic shadow attenuation for transparent surfaces.


02/05/2007  o Added new inline image/volume texture definition feature
              to the scene description language for use by VMD.


02/04/2007  o Added a new "-normalfixup" command line argument to 
              indicate whether and how Tachyon should attempt to correct 
              surface normals that are inverted relative to the triangle 
              winding order.


01/29/2007  o Added a vertex array primitive to the scene description 
              language, supporting an arbitrary number of subsequent
              trimesh and tristrip blocks which reference the array.


01/24/2007  o Added a new class of texture mapping routines specifically for 
              the special case of the background texture.  Implemented a 
              default solid background texturing routine, and a prototypical
              sky sphere implementation.


01/23/2007  o Added a "-res" command line argument to override the
              default image resolution.


01/21/2007  o Added support for Ambient Occlusion lighting.
              Added comments about the safe use of the limited 
              length cycle-free random number sequence for antialiasing,
              random ray direction generation, etc.  Updated README
              with current date and contact info.  Cranked version 
              number and copyright dates of the package.


03/18/2005  o Updated the Make-arch target list shown by default, 
              and improved the flags used for 32-bit Linux targets.


05/30/2004  o Added first implementation of clipping groups consisting
              of a set of clipping planes.

            o Changed version number to 0.97.0 (for use by VMD builds)


05/28/2004  o Miscellaneous code cleanup, makefile improvements, and 
              minor performance tweaks here and there.


03/04/2004  o Significant updates to texture allocation management code


03/01/2004  o Fixed an incorrect string allocation in the command-line
              argument parsing code


02/02/2004  o Released version 0.96

            o added a per-vertex colored triangle primitive intended
              primarily for use with VMD-generated MSMS and NewRibbons
              representations.

            o subclassed textures to reduce memory consumption with large
              per-vertex colored triangle surfaces exported from VMD.

            o changed color types to use floats instead of flt to 
              conserve memory.


08/03/2003  o significant documentation updates, including recently 
              added features. 

07/29/2003  o added several new compilation targets for Linux running on 
              the 64-bit AMD Opteron platform.

            o Spaceball flight mode is disabled when running Tachyon on 
              a distributed memory machine, since there isn't code to 
              send camera parameter updates between the nodes presently.


06/06/2003  o Released version 0.95

            o added new transparency mode APIs and shader code to enable
              a new transparency mode that more closely matches the results
              of real-time renderers that use stipple/screen-door transparency
              such as VMD.  Added -trans_orig and -trans_vmd command line 
              options.

05/29/2003  o added internal tracking of texture objects so they are
              freed when the scene is deleted, absolving the user from
              having to do this in their own code.

            o main program will now render more than one scene at a time,
              and will generate a numerical sequence of output images. 

05/13/2003  o fixed swapped texture mapping constants

03/07/2003  o Released version 0.94

02/16/2003  o Added first implementation of fog

01/27/2003  o New fisheye camera projection code

01/21/2003  o New code for setting the camera view frustum

07/27/2002  o Released version 0.93.6
 
            o Made the shader used for specular highlights globally
              selectable by the user.

            o Made the Blinn shader and the fast approximation version
              faster by eliminating some redundant calculations and
              by moving normalization calculations around.

            o Re-worked the MGF and AC3D scene file loaders

            o Improved the Itanium2 compiler flags on HP-UX.

            o Added depth of field


07/08/2002  o Added antialiasing code for orthographic scenes
 
            o Added directional lighting (non-local) primitives and 
              made the shading system more flexible

            o Large amounts of const correctness improvements.


07/03/2002  o Added code for rendering orthographic scenes

            o Added reader/writer locking code

05/10/2002  o Added Make-arch flags to compile on IA-64 versions of HP-UX 

03/27/2002  o tachyon.h header updates for C++ and prevent multiple
              inclusion.

03/26/2002  o Const correctness fixes

03/21/2002  o Added Alphaserver SC configuration

12/12/2001  o Released Tachyon version 0.93.4 

            o Misc cleanup, updated readme info, prepared for release.
              
12/03/2001  o Updated for compilation on VMS, with updates
              contributed by Peter Ljungberg

11/29/2001  o Ported to Linux on Compaq iPaq PDA

10/29/2001  o Ported to Linux on Sony Playstation 2

08/19/2001  o Added spaceball code to main ray tracer control loops, for
              doing fly throughs etc.  The old OpenGL previewer code can
              now be rewritten more simply, eliminating all of the 
              old special case code for the spaceball etc.

            o Added Solaris and Scyld Beowulf targets for MPI and
              OpenGL runtime display.  (larger scale parallelism, 
              particularly useful for doing spaceball controlled 
              fly-throughs)

08/18/2001  o Reorganized main loop code to make adding spaceball 
              fly-through code cleaner.

07/27/2001  o Added a Pentium 4 target for gcc.

            o Cranked rev to 0.93.4

07/26/2001  o Released Tachyon version 0.93.3 

            o Updated distribution for Siggraph 2001 demos.

            o Improved usage message printing on MPI builds, fixed
              some minor initialization issues in printing related
              startup code.

            o Fixed a bug that could crash Tachyon when it was trying to
              do a clean shutdown in MPI, there was a case that could
              crash if message buffers had not yet been allocated at
              the time of shutdown.  New code checks buffers more carefully.

07/25/2001  o Added support for Sun's ClusterTools 4.0 MPI implementation.


04/06/2001  o New compile flags AMD Athlon chips yield 15% performance
              improvement.  These flags are known to work with the 
              "gcc 2.96" that comes with Redhat 7.x.  Older versions of
              gcc don't have them yet.

04/05/2001  o Added a configuration for Linux Alpha using the Quadrics
              implementation of MPI.

            o Reorganized the Linux section of Make-arch by platform 

            o New multithreaded build for MacOS-X with Carbon Multiprocessing
              detection code.

            o Added missing documentation for spotlights, distance-based 
              lighting attenuation, and made several corrections to the
              existing text.

            o Improved performance of builds on Linux for Athlon CPUs
              by 15% through the use of better GCC flags.

04/04/2001  o Updated MacOS-X build flags for new version of the system
              released on March 24, 2001.

04/03/2001  o implemented new -aasamples command line flag to more easily
              control antialiasing settings without editing files.

03/12/2001  o Released Tachyon "0.93.2"

03/11/2001  o Improved handling of parser errors and debugging information
              printed.  Added line numbers, character offset, expected token,
              and actual string.  Added checks for self-recursive scene
              include files.  Improved default handling of unspecified
              animation filenames per format.

            o Added HTMl docs to doc makefile, and to distribution.

03/05/2001  o Redesigned parser data structures and rewrote all of the
              parser's internal interfaces to use them.  This is the first
              step toward more useful error messages, elimination of static
              and global data, and making the parser itself multithreaded
              some time down the road.

            o Rewrote the texture table code using new parser interfaces, 
              eliminated hard-coded size limits on texture names, number of
              textures, etc.

03/04/2001  o Added comments about case sensitivity of file names
              and texture names to docs.  Also added info about the
              behavior of lights with a radius of 0.0

            o Changed glwin code to allow specification of the window
              title so that Tachyon and its OpenGL previewer are more
              easily differentiated from each other in all cases.

03/03/2001  o Fixed some parser error handling code to print better 
              messages when scene files or include files fail to open.

03/01/2001  o Made some more changes to the Phong specular highlighting
              code, trying out some other potential implementations etc.

02/28/2001  o Added a more traditional Phong specular highlight
              shader function.  Also clarified the code and renamed
              the original function to make it clear which one is using
              Blinn's halfway vector and which one is using the calculated
              reflection vector. 

            o Added new Windows-specific timer code to make use of
              millisecond resolution timers.

            o Updated the Windows project files for recent changes to
              the code.

02/26/2001  o Added PNG reading and writing support to Tachyon.
              Currently only does 24-bit RGB files, but may add
              support for 48-bit RGB PNG files in a later revision.

            o Changed the tachyon main program and getargs so that 
              users can select what format and what filename/frame 
              format specifier they want to use for their animations,
              so that users can do things as below on the command line.
                 tachyon ....  -format PNG -o /tmp/frame.%04d.png ....

02/25/2001  o Added some rudimentary orthographic camera code,
              although it is not exposed to user callable APIs yet,
              a basic implementation is now there.  After some more
              camera models are tried out, I should be able to 
              clean up the camera APIs significantly. 

02/23/2001  o Released Tachyon "0.93.1"

02/22/2001  o Fixed AIX multithreaded builds so that they
              force PTHREAD_SCOPE_SYSTEM scheduling, so we get
              to use all of the CPUs.  The AIX 4.3.x default
              scheduling scope is unfortunately set for 
              PTHREAD_SCOPE_PROCESS, so we override it now.

02/19/2001  o Camera definitions can now be placed anywhere in 
              a scene file, the last definition overrides all
              previous definitions in the scene.

            o Changed the OpenGL "glwin" code to acquire a 
              Z-buffer on Unix systems, so that the
              OpenGL-based Tachyon "simulator" code can share
              this code instead of having to use GLUT, which 
              eliminates GLUT as a build requirement, and avoids
              the limitations it imposes on program structure.

            o Fixed various incorrect/out-of-date information
              in the Tachyon docs.  Updated for recent changes
              to scene language etc.

            o the wood grain procedural texture scale correctly now.

            o updated test scenes to match changes to wood grain 
              texture code.

02/18/2001  o Added new Make-opengl file which contains  
              make macros to define OpenGL include/link info
              for all of the major platforms that are supported. 

            o Updated copyright dates again.

02/14/2001  o Released Tachyon version "0.93"

            o Added better EOF handling into parser, and 
              implemented "include" files.

01/19/2001  o Renamed thread data structures to avoid a small
              namespace collision with system headers on IRIX
              in certain circumstances.

01/04/2001  o Updated documentation files.

            o Added a "#" comment keyword so that people can
              have comments in scene files.

12/19/2000  o Added build targets for IA-64 machines running 
              Linux, using both GCC and the SGI Pro64 compilers.

            o Added new targets for the Portland Group compilers.

            o Added ability to disable the allocation and use of 
              mailbox grid-acceleration data structures at compile
              time with new configurable option in Make-config.

            o Fixed Make-arch so it pays attention to the FLT macro,
              it was a bug that it was not already doing so.

            o Added scene handle as required parameter for 
              the rt_texture() function.

            o fixed the -nosave flag so that it disables image
              saving for single frame renderings as well as 
              animations.

11/22/2000  o Released Tachyon version "0.92"

            o Changed makefiles to be more IRIX/Tru64 friendly.

            o made rt_timer_xxx() and rt_rand() publically usable.

            o added Frames per second display to camfile processing

            o Rewrote timer code to be more useful.

            o Added MacOS-X build configuration

            o Added Linux threaded OpenGL build configuration

            o updated MSVC project configuration

11/21/2000  o Received a bug report from Osama Youssef, the 
              grid_intersection() code was causing tachyon to 
              step through grid cells starting from the grid
              boundary rather than from the ray origin in the 
              case where rays originate inside the grid rather
              than outside.  Fixed this problem by changing 
              grid_bounds_intersect() to return a tnear of 0.0
              minimum, rather than negative t values from the
              boundary of the grid.  Rendering times for the
              balls test scene are around 70% faster now due to
              the large decrease in overhead.

11/17/2000  o Added an build config for UltraSPARC-III 
              machines.  The -xarch=v8plusb flag gives a good
              10% performance boost.

10/02/2000  o Got rid of unused local variables..

            o Added a compile target for Alpha Linux using
              Compaq's C compiler.

09/26/2000  o Added support for Linux on the Alpha platform, 
              and changed the statically linked Tru64 build flags
              so that the produced binaries can run on Alpha Linux
              as well, since Compaq C is much better than GCC still,
              my tests showed a factor of two speed difference.

09/14/2000  o Released Tachyon version "0.91"

09/13/2000  o Improved camera code and sped up primary ray 
              generation.  Minor improvements to make it easier
              to add new camera models soon.

            o Updated usage message to only list file formats
              that are parsable by the compiled code.

09/11/2000  o Several more optimizations to reduce per-pixel
              overhead for better real-time speed.  Removed 
              clamping code for negative color values.

            o Improved camera ray generation and did some cleanup.

            o Merged various shared items in tachyon.h and types.h
              into rtcommon.h

09/04/2000  o Released Tachyon version "0.90" 

            o Nice per-pixel speed increase by overlapping
              pixel clamping arithmetic and writes, and by 
              changing ray direction normalization to multiply
              by reciprocal rather than divide, helps speed up by
              10% on Sparc, no effect on Alpha.

08/16/2000  o Added a solaris-pthreads-gcc build that works
              on Solaris 7 X86, used by VMD.

            o Splite distribution targets into their own
              Make-distrib file, included by Makefile.

08/15/2000  o Added OpenGL-display multithreaded build targets for 
              Solaris, IRIX, and Tru64 Unix.

            o Added 24-bit Windows BMP image writing code and new
              flags to make it one of the available output options.  

            o renamed Tachyon include file to tachyon.h from 
              api.h, update all sources/makefiles correspondingly.

08/14/2000  o Renamed api.h to tachyon.h, and did lots of 
              cleanup, updated distribution makefile and 
              added lots of missing runtime usage message help.

            o Added build targets for the OpenGL-capable run-time 
              display version on IRIX, Solaris, and Tru64.

07/31/2000  o Added single-threaded BeOS build target to the 
              "Unix" makefiles.  Since BeOS's development 
              environment is so tachyon-friendly, there was no 
              need to do anything new or crazy here.

07/25/2000  o Added 64-bit build targets, and new code for
              eliminating the run-time clearing of the mailbox
              arrays when running on a 64-bit platform, since the
              mailbox counters will never overflow with 64-bit
              integers.  Will be a performance win someday :)

            o Added Linux PPC build target.

07/13/2000  o Finally updated copyright dates etc.

07/07/2000  o Updated Alpha build targets to enable speculation.

05/18/2000  o Ray tracer binary is now called "tachyon" and not
              just "ray".
 
            o rearranged lots of compile targets to be more update
              with the way newer revs of the OSs are setup or
              are named now. (i.e. renamed osf1 targets to tru64)

            o added a pthreads build for AIX 4.x, but it doesn't
              appear to schedule threads in system scope yet.

            o updated the makefiles and documentation in the
              tree to reflect the name "Tachyon" which has stuck
              pretty well for the last year or two.

            o Changed hpux-thr build to work for POSIX threads on
              HP-UX 11.0.

            o migrated from RCS to CVS for real finally, have
              been too lazy to get this done for a while.

11/08/1999  o changed the definition of the "medium" quality
              shader to make VMD users more happy.

09/22/1999  o eliminated unused variables, misc cleanup.
 
            o added user selectable output image format code
              instead of hard-coding to Targa format output.

            o improve image writers, better correctness etc.
 
            o added image I/O routines for SGI RGB, PPM, JPEG 

11/29/1998  o Made an important change to the grid code, the grid
              code caches the value of the ray serial number, and
              the pointer to the mailbox array, this helps the 
              compiler avoid generating stupid code on some 
              platforms, and helps avoid one level of indirection.

            o Changed intersection structures within the ray struct,
              they are no longer arrays in the general case, since
              CSG is different anyway, it will use the new code
              for adding intersections specially rather than making
              the average case performance suffer.

            o Intersection functions for each object now use a 
              function pointer for "add_intersection" instead of
              calling a specific function.  This makes things much
              more flexible and helps performance slightly due to
              the use of special case code for regular rays and 
              shadow rays, instead of using one function for both.

            o Improved the constants in type.h when building for
              single precision rather than double precision.  Should
              allow a single precision ray tracer to give good 
              results through the use of customized EPSILON constants
              etc, while allowing double precision builds to remain
              maximum quality.  Single precision builds run anywhere
              from 5-20% faster than double precision builds,
              and they use about half as much ram for the same number
              of objects.

11/25/1998  o The code now outruns Rayshade for all of the SPD 
              scenes, even on a single processor, even with the 
              overhead of the multiprocessor capable builds, and
              even with no shadow cache.  

            o Further improvements to the grid traversal code 
              which yield a 50% speed improvement for scenes that
              end up having a single-level low-res grid, usually
              with 20-100 objects..  Big decrease in the setup
              overhead per ray..

            o removed unused static functions from several places,
              and got rid of unused parameters on some shader code.

11/23/1998  o Several critical improvements to grid.c which 
              yield a 30% speed increase on several of the SPD
              test scenes. (at least on a Sun Ultra 2...)

            o Added RTVI display code for MSTI's SC'98
              show.

            o Added new i860 MCOS platform support.

09/09/1998  o Added OpenGL support for Windows 9x/NT..
 
            o Added support for MPI on NT, using MSVC and
              MPI Software Technologies' MPI/Pro for NT.  
              Configurations for both TCP and VIA interconnects.

            o Added support for the Cygnus Cygwin32 compilers
              for windows in the standard Unix makefiles.

08/30/1998  o Fresh build on NT with all new MSVC project files

            o Various small performance enhancements

08/06/1998  o New Platform Support Added:
              DEC Alphas running Digital Unix (aka OSF1)

            o new APIs for camera control.

            o new APIs for querying scene resolution.

            o new APIs for user interface callbacks.

            o significant changes to API functions, many now
              require the scene handle as their first parameter.

            o improved parallel work decomposition code for
              multithreaded runs on only 1 "node".  Eliminates
              cache thrashing on CC-NUMA machines like the 
              SGI Origin2000 machines, probably helps others too.
              Also generally improves memory coherence properties
              of the entire ray tracing process as a side effect.

            o completely eliminated limits on the number of
              lights in a scene.  New code is fully dynamic,
              no fixed size tables.  Memory is the only limit.

            o eliminated old unused code constructs.

            o Redesign and completely new implementation of 
              all of the top levels of the core rendering loops.
              The new code caches a lot of setup in order to 
              vastly reduce overhead when rendering animations.

            o Complete redesign of the multithreaded parts of
              the rendering code.  Entirely new approach, which
              runs much better when doing animations, and when
              doing mixed-mode threads and message passing. 
              Worker threads are now long-lived.  They live
              for the duration of a given scene.  Future revs
              may increase thread lifespan even longer.  Threads
              are created in a pool, and the pool is awakened for
              work when a frame is rendered.  After work is complete
              the threads sleep until they are needed again.  This
              reduces thread creation and destruction.

            o Changes to surface normal code in all objects 
              more is done in the shader code, less in the objects.
              Much more of the math is inlined now too.

07/23/1998  o New Platform Support Added:  
              Cray Vector Supercomputers using POSIX Threads
              Cray T3E Supercomputers using MPI
              CSPI Multicomputers using MPI/Pro (PowerPC)
              Linux with POSIX Threads and/or MPI (x86)
              Mercury Multicomputers using MPI/Pro (PowerPC)
              Mercury Multicomputers using MPI/Pro (i860)
              SGI IRIX 6.4 with POSIX Threads 

            o Several Rendering fixes

            o Complete rewrite of the distributed memory 
              communications routines.  New code uses much
              higher performance MPI constructs than before.

            o New code no longer needs concurrent I/O in order to
              perform well on distributed memory machines.

            o Tremendous amounts of internal restructuring for
              improved scalability on both shared memory and
              distributed memory machines.  

            o New code provides much higher performance for
              rendering fly-through type animations. 

            o Added MIP Mapping capabilities to texturing code.

            o Added Spotlights.

            o Added controls for lighting falloff equations.

            o Automatic shader/quality determination based on
              scene contents.

            o Multiple shader support for user specified
              rendering quality levels.

            o Fixed memory leaks.

            o Greatly improved antialiasing code

            o Added many new command line parameters for 
              additional control over the rendering process.

03/17/1998  Fixes to distribution directories, renderering bug 
            fixes here and there.  

01/07/1998  New code uses a hierarchical grid based efficiency 
            scheme to accelerate ray tracing.  Runs as much as
            25 times faster for some of the SPD scenes, runs 
            *incredibly* fast for huge scenes containing upwards
            of 1.5 million objects.  (can render a 1.5 million
            object SPD teapot scene in 86 seconds on a 4 processor
            Sun ES3000)  New code has several improved APIs for
            texturing, and global scene settings.  Future revisions
            will include extensive changes to the external APIs
            which will make future implementation of new features
            much cleaner and better organized.
            New image reader API for loading texture map images.
            New image readers for JPEG, Targa, and PPM replace
            old PPM-only code.  Easily extensible to support new
            image formats.

11/02/1997  A complete overhaul of many aspects of the ray tracing
            system has been done.  Many improvements have been made
            to its reliability.  The ray tracing API has changed
            to enhance extensibility and improve organization.
            Overall execution speed has been improved by 
            approximately ten percent over previous versions, 
            especially for simple scenes.  Internal library
            reorganizations have reduced the code size, and 
            improved orthogonality within the implementation.
            Enhancements have been made to the image map 
            code to allow reading targa files as well as ppm files.
            A new image loading and saving API will allow 
            support of new image formats such as JPEG for 
            texture maps.  Extensive command line overrides
            are now available on the ray tracer application.
            Display enabled builds of the ray tracer should be
            the default from now on, since run-time display
            can be enabled and disabled on demand.

10/20/1997  Now reads NFF files (ala SPD) directly.  Initial
            implementation of AC3D model file reader.  Rewrote
            the regular parser in entirety.  All of the old 
            statistics which used to be kept in the parsers have
            been removed.  In the next few distributions, the
            geometry parsing systems will be reworked so that
            a much greater variety of models may be loaded from
            foreign 3D file formats.  This version is the first
            major step in that direction.  3D Studio files are
            next on the list for implementation.  Quite a bit
            of code housekeeping has been done recently as well,
            removing all warnings I'm aware of.  I'll be adding
            support for a number of new image file formats for both
            reading and writing, as well as the ability to load
            files over the network from WWW servers.  The OpenGL
            scene previewer will also be getting a makeover in the
            near future.

10/02/1997  New solaris-gcc-thr-x11 target, with some further
            cleaning applied to the source code.  Also added
            support for 24 bit TrueColor X visuals in the X11
            code.  The TrueColor support code still needs a 
            few tweaks, but does work on Suns and SGIs.  The
            X11 code will probably reverse the Red and Blue
            channels on x86 machines, but I'll be adding code
            for plane masks etc soon, which will also allow
            it to work for 16 bit TrueColor displays..

10/01/1997  New solaris-gcc-thr-x11 target for building the
            multithreaded version correctly with gcc on suns..
            This problem was reported by Lars Rzymianowicz, and
            should be cured now.
            This release also includes various syntactic and 
            semantic cleanup using lint-like compiler flags. 

09/25/1997  This version includes quite a number of changes
            to the OpenGL scene previewer.  The previewer
            now has greatly improved shading, uses display
            list for much faster rendering, and includes
            support for the "SpaceOrb 360" spaceball controller 
            for use with real-time fly-throughs of scenes.
            Recorded fly-throughs can now be rendered by
            the ray tracer for creating animations.  The
            new distribution also includes a lot of new
            experimental codes for creating OMF files, PPM 
            files and supports several new extensions in the
            ray tracing library.

03/06/1997  98% of the basic functionality found in the raytracer
            now exists in the OpenGL previewer.  Cylinders, 
            spheres, triangles, smoothed triangles, infinite
            planes, and rings are all supported.  Volume 
            rendering is not supported, and neither is texture
            mapping at this time.(after all, its only a previewer!)
            The previewer can be linked with a program much like 
            regular raytracing library can.  At the present time,
            the previewer code does not have a way to be  
            invoked multiple times, and can't run without a
            display of some kind.  As I have time I'll be 
            trying to merge the features of the ray tracer and
            previewer so they are relatively seamless.  Eventually
            I plan to implement a polygon rendering library that
            will not depend on having a display.  So in the future
            there will be a "quality level" between 0 and 100%,
            with 0 being non-shaded polygons, 100% being fully
            antialiased raytracing etc.. 
            Now to write some animation code :-)

03/03/1997  More functionality added to the OpenGL scene 
            previewer.  It now writes out PPM files 
            (in addition to rendering them) in the same way
            that the raytracer writes TGA files.
            The new version can be built using either
            the AUX lib, or the GLUT library (both are
            helper libraries for interacting with the
            windowing system, and input devices)
            Display performance on this version is probably
            10 times faster than the previous version.

03/02/1997  Major functionality has been added to the OpenGL
            previewer.  It will render 70% of the objects
            supported in the raytracer.  It has a slightly
            simplified lighting model.  The OpenGL camera 
            should now behave just like the ray tracer's does.
            One minor fix was made in the fractal landscape 
            generator code, to orient the normals correctly for
            use with systems that only want to render the 
            front facing polygons/triangles (OpenGL).
            (This version requires the AUX OpenGL toolkit)

02/23/1997  Fixed some prototypes/compilation warnings,
            cleaned up the unix makefiles, trying out some
            new compiler optimizations for UltraSPARC machines
            with the Sun 4.x tools.  Updated all of the 
            example models so output goes to /tmp rather
            than /cfs/johns/... (my old work area on a parallel
            computer :-)
            Added a simple model file parameter to command
            line parsing.  Hopefully this will *not* 
            cause problems with MPI builds, since MPI likes
            to take the first shot at parsing command line
            parameters.  Getting ready to add more code
            into the OpenGL scene previewer, hopefully the
            camera model will be completely fixed shortly :-)
            The OpenGL code should now work with Mesa as well
            as vendor supplied OpenGL libraries.

02/05/1997  Added threads and multiprocessor support for 
            Microsoft Windows platforms.  Added a 'renderapp'
            to the msvc directory.  Renderapp is a first hack
            at doing a windows GUI front end for the raytracer.
            The GUI compiles for Windows, Mac, and PowerMac,
            but at this time its incomplete and has poor
            event handling.  The Windows threads seem to run
            great on multiprocessor Pentiums.  I'm assuming
            that all of this code will also work for the 
            DEC Alpha's running NT, and the PowerPC version
            of NT.  Only minor minor changes would be needed,
            mainly the byte swapping order for the big
            endian machines (copy from Pmac and 68k configs).

11/17/1996  Cleaned up all extra/unneeded variables, added
            lots of typecasts, and added a new 'makefile.msvc'
            for compiling with Microsoft Visual C/C++.
            Also has Macintosh targets in the makefile.msvc 
            for people with the cross compilers.

11/10/1996  Removed 90% of globals, removed 90% of hard coded
            limits on numbers of threads etc, now does thread
            spawning totally dynamically.  Runs 10% faster 
            with new intersection structures, should run much
            much faster on SMP machines, got rid of some cases
            of 'false data sharing' which would cause MP cache
            thrashing unnecessarily.  All intersection info
            is now created and destroyed within each thread,
            and eliminates false sharing due to memory addresses
            being too close together.

04/11/1996  Updated parvol code, matches extvol at the moment.
            Decided to write a distribution tar after fixing
            a long standing bug in cylinder normal code.
            Added polycylinder code to the api..

04/09/1996  New extvol rendering code does much better
            voxel shading.  Next version will have the 
            parvol rendering code in place, and will allow
            the use of the gridmap code and new RPC's

04/01/1996  Reworked API function names, first rev of the
            new volume rendering code (extvol).   
            First rev of the irregular grid mapping code.
            Updated the source for Solaris 2.5 and UltraSparcs.

01/27/1996  Updated the thread code to autodetect the number
            of available CPUs.  It will spawn as many threads
            as there are available CPUs.  Tested on Sun
            SparcCenter 2000 at WU.  

01/21/1996  Major performance improvement on triangle related
            objects.. Runs about 2 times as fast as it did.
            Minor cleanup and some performance improvements
            when rendering simple scenes.

01/08/1996  New util (tgatoyuv) for converting tga's
            to YUV files for MPEG compressed animations.
            Extensive performance tuning of existing code.

01/01/1996  Bugfixes and cleanup

07/13/1995  Fully multithreaded version (Sun && Paragon)
            Vastly improved support for shared memory 
            machines.  Still needs threads for other platforms
            but the foundation is complete.  Improved load
            balancing for threads is in place.  
            Haven't extensively tested on other platforms,
            mainly Sun, iPSC/860, and Paragon.

07/05/1995  MPI+Multithreaded version Intel Paragon XP/S only.

1994-1995   Many many versions, all experimental quality only...
            Change logs for these versions only exist in the revision
            control system.

