Changes for 1.1:
----------------

* Workaround PyOpenGL 3.0.0a and 3.0.0b1 bug in glLoadMatrixf().

* Fix SphereMap.AzElGrid() to properly draw iso elevation and azimuth
  lines at specified intervals.

* Change to use numpy at the core instead of Numeric. (Require numpy,
  no longer require Numeric.)

* Require setuptools

* No longer supporting Python 2.2

* Update Textures to accept numpy arrays as data source (by Martin Spacek)

* Update to work with PyOpenGL 3

* Changes so to reflect standard idioms on Python project layouts:
    - src/ directory renamed to VisionEgg/
         (but .c files need to be moved back to src/)
    - use 'package_data' distutils argument
  This enables setuptools to work with the Vision Egg.

* QuickTime movies work in Windows (need to check on OS X).

* FilledCircle stimulus is now anti-aliased. Thanks to Peter Jurica
  and Gijs Plomp.

* Added demo/texture3D_alpha.py

Changes for 1.0:
----------------

* Major enhancements to the ephys server/GUI code to use normal (or
  slightly modified) demo scripts in this environment were done by Imran
  Ali and Lachlan Dowd in the lab of David O'Carroll at the University
  of Adelaide.

* An initial patch for stereo support sent by Yuichi Sakano and Kevin
  J. MacKenzie at York University.

* Parallel port enhancements by Hubertus Becker, University of
  Tübingen.

* Arrow and FilledCircle stimuli by Hubertus Becker, University of
  Tübingen.

* DaqKeyboard and ResponseControl by Hubertus Becker, University of Tübingen.

* Full screen anti-aliasing support (FSAA) by Mark Halko, Boston
  University.

* Various patches by Tony Arkles (University of Saskatchewan),
  including a suggestion to separate camera motions from the
  GL_PROJECTION matrix and put them in the GL_MODELVIEW matrix, where
  they belong.

* Patch for VISIONEGG_SYSTEM_DIR by Nick Knouf, MIT.

* Added win32_vretrace.WaitForRetrace() (but it's not used for much,
  yet)

* Enhancements to EPhys Server/GUI sequencer

* Added 'lat-long rectangle' to available 3D masking windows

* Moved controller.CONSTANTS into FlowControl module namespace

* Numerous bugfixes

Changes for 0.9.9:
------------------

Screen.put_pixels() method for "blitting" of raw pixel data
Support for QuickTime movies (currently Mac OS X only)
Redesign of type check system for accuracy and clarity
TrueType font rendering with SDL_ttf2
Textures with alpha--bugfixes and examples
Positioning of viewports and 2D stimuli can use relative positioning anchors
Now requires Python 2.2 -- new style classes used to restrict attribute acccess
Now requires pygame 1.5
Renamed timing_func() to time_func()
EPhysGUI saves absolute time a trial was started (to recontruct all stimuli)
Allow use of pygame Surfaces as source of texture data
Mipmaps of sphere-mapped sinusoidal grating to prevent spatial aliasing
De-emphasis on Presentation and Controller classes (moved to FlowControl module)
Changed orientations such that 0 degrees is right and 90 degrees is up.
Bugfix in SphereMap module -- gaussian formula produced windows too wide by 2/sqrt(2)
Allow conversion of 3D vertices into 2D screen coordinates
Added wireframe azimuth/elevation grid with text labels
Allow arbitrary orientation of textures and text with angle parameter
FrameTimer class now available for use in your own main loops
Use Python 2.3 logging module (copy included for use with Python 2.2)
No installation of demos or documentation (get source or demo package)
Improved docstrings by using automatic docstring generation
Many small enhancements and bugfixes

New tests:
high-voltage regulation test for displays (Brainard et al., 2002)
incomplete DC restoration test for displays (Brainard et al., 2002)
unit-test suite: among many other things, pixel accuracy of textures

New demos:
mpeg.py plays MPEG movies
quicktime.py plays QuickTime movies (currently Mac OS X only)
convert3d_to_2d.py converts 3D positions to 2D positions
dots_simple_loop.py uses own loop rather than Presentation class
makeMovie2.py makes a movie with get_framebuffer_as_image() function
mouse_gabor_2d.py shows a gabor wavelet under mouse and keyboard control
mouse_gabor_perspective.py is sphereGratingWindowed.py improved and renamed
mouseTarget_user_loop.py uses own loop rather than Presentation class
multi_stim.py shows many stimuli at once

Changes for 0.9.4:
------------------
Major features:
Complete electrophysiology application (see below)
Luminance and color calibration possible
Constant visual angle (perspective-distorted) grating stimulus added
Constant visual angle (perspective-distorted) gaussian and circular windows added
3D texture-mapped sphere stimulus added
Random dot stimulus added
Texture module re-written for ease-of-use, clarity, and support of dynamic texture updating
Color grating stimulus added
Support for plaids added
Masks for gratings and textures implemented using multitexturing - uses high bit depth available there on some hardware
Vision Egg Programmer's Manual created
Many more minor features and bug fixes

New electrophysiology application features:
Complete application with ready-to-run experiments
Application extendible with new experiments by modifying example experiments
Full-screen graphics possible with "server" application, GUI client controls experiments over TCP
Automated sequence control, including sequences-of-sequences
Stimulus onset timing calibration / verification support
3D position / perspective-distortion calibration support
Parameters saved during experiments as Python or Matlab scripts
Complete configurations can be saved and restored from file

All code written for the 0.9.3 release should continue to run on the 0.9.4 release.  (There may be some slight changes in functionality due to bug fixes.)

Changes for 0.9.3:
------------------

MAJOR: Added .3ds file support to load 3D models.

MAJOR: Added Labview code to control gratings in a new "contrib"
package. Thanks Jamie Theobald!

Fixed texture-resizing bug.

Added Rectangle3D stimulus class.

Further refined log printing and other small enhancements.

Changes for 0.9.2:
------------------

MAJOR: GUI enhancements.

Maximum priority (with various options) can be set on Mac OS X and
win32.

Frame swap sync with vertical retrace support added to Mac OS X.

Friendly binary installer for Mac OS X, especially useful since now
Mac OS X code requires compilation.

Added SYNC_SWAP, RECORD_TIMES, HIDE_MOUSE, and FRAMELESS_WINDOW
options.

Textures now use mipmaps by default.

Minor: Improvements to check-config.py

Changes for 0.9.1:
------------------

Windows demos now distributed in standalone directory that does not
require python installation.

TCPServer mode can print current state, prints command summary, has
help, minor bugfixes.

Lots of little GUI adjustments, including automatic pop-up of
exception dialog box.

check-config.py detects old version.

Changes for 0.9.0:
------------------

MAJOR: Overall quality of code and base feature set now approaching
1.0 status.

MAJOR: Parameter control over TCP interface implemented using
TCPController class.

MAJOR: Triggering, both out and in, (re)implemented.  Same for other
data acquisition.

MAJOR: Gratings module, with SinGrating2D and SinGrating3D (with
perspective distortion) added.

MAJOR: Support for SGI IRIX now added.

MAJOR: Support for variable size (including 10 bits per channel) frame
buffers added.

MAJOR: Support for gamma table setting (including greater than 8 bit)
added. (Requires pygame 1.5.)

MAJOR: ``Run forever'' mode added.

MAJOR: Type-checking implemented for parameters under realtime
control. Complete re-design and re-implementation of realtime
controllers.

MINOR: Too many to list!

Changed license to LGPL from GPL.

Changes for 0.8.2:
------------------
MAJOR: Added frame-by-frame control with realtime_frame_contoller.
(Also renamed realtime_controller to realtime_time_controller.)  Make
sure you set your OpenGL driver to swap buffers at vertical retrace
sync if you use this feature!

Added support for on-screen text though VisionEgg.Text module.
Bitmapped text works pretty well, stroke fonts have a few issues still.

Must specify units for stimulus duration, either seconds or frames.

Created new module PlatformDependent, which houses all the platform
dependent C code.  Re-enabled setting of maximum priority (on linux,
at least).

Made lower_left and size attributes of Viewport class part of
parameters, so now they can be changed in realtime.

Added automatic detection of all extensions in tests/opengl_info.py.

Removed data acquisition stuff from distribution until I get time to
get it working again.

Re-incorporated linux (and other unix?) kernel scheduler maximum
priority stuff.

Re-incorporated collection and printing of frame-timing
statistics. Turn on by setting "collect_timing_info" argument of
Presentation.go() to non-zero value.

Contrast control in SpinningDrum now acheived with standard OpenGL
texture environment functions, not OpenGL extension.

Changes for 0.8.1:
------------------

Fixed some Mac OS X glitches.

Removed Overlay class from VisionEgg.Core.  (The Overlay class was the
same as the Stimulus class with the inclusion of its own projection.
Now, if your stimulus has an associated projection, as 2D stimuli
would, you must keep track of that yourself.)

Support for specifying the order in which stimuli are drawn added by
draw_order argument to the add_stimulus method of the Viewport class.
(Necessary to ensure any graphics that must get drawn on top of
everything else can be drawn last.)

Added remove_stimulus method to Viewport class.  Added remove
controller methods to Presentation class.

Improved auto-setting of video modes.

Added GetKeypressDialog and ToplevelDialog classes to GUI module.

Changes for 0.8.0:
------------------

MAJOR: Implemented new Screen, Viewport, Stimulus, Overlay, and
Presentation classes in VisionEgg.Core to more cleanly separate
components and allow multiple viewports on same screen.

MAJOR: Implemented new Parameters class in VisionEgg.Core to allow
more flexible control of any parameters which may change during or
between stimulus presentations.  This paves the way for easy control
using any imaginable means, including a local window, a remote python
script (see below about Pyro), or from a data-acquisition card.

MAJOR: Added remote execution methods, so now you can run the
VisionEgg in fullscreen mode while controlling it from a different
computer.  Check out the the demos in the demo/Pyro directory.
Requires python package "Pyro" (Python Remote Objects).

New configuration system added.  VisionEgg.config holds system-wide
configuration defaults.

Changed VisionEgg.py to Core.py, so now you must do "import
VisionEgg.Core".

Moved demo scripts into 'demo' directory within the main package.  Now
there is only one package to maintain.

Pulled texture stuff into Textures.py.

Pulled data acquisition stuff into Daq.py

Added lots of docstrings.

Created this changelog.
