Changes for 1.1.1: ------------------ * Various small bugfixes and performance improvements: - Removed old CVS cruft from VisionEgg/PyroClient.py VisionEgg/PyroHelpers.py - Fix trivial documentation bugs to have the correct version number. - Workaraound pygame/SDL issue when creating Font objects. (r1491, reported by Jeremy Hill) - bugfix: allow 4D as well as 3D vectors to specify vertices (r1472, r1474) - fix comments: improve description of coordinate system transforms (r1473) - Use standard Python idiom (r1475) - Further removal of 'from blah import *' (r1476, r1501) - Minor performance improvement (r1486) - Remove unintended print statement (r1487 thanks to Jeremy Hill) - properly detect String and Unicode types (r1470, reported by Dav Clark) - update license to mention other code (r1502) Changes for 1.1: ---------------- * Explicitly require Python 2.3 by removing duplicate of Python standard library's logging module and assume the "True" and "False" are defined. There were probably other assumptions depending on 2.3 creeping into the code, as well. * Removed Lib3DS module. * 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.