Additions:
~- The ""PsychtoolboxKernelDriver"" for OS/X on ""IntelMacs"" with ATI GPU's has been refined (//""help PsychtoolboxKernelDriver""//). Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a ""FireGL-V3700"".
Deletions:
Additions:
~- Improvements and cleanup to many demos by Frans Cornelissen. Frans also enabled the video feed from the Eyelink eye camera during tracker calibration by default, so the subjects eye can be monitored during calibration procedures. The ""PsychHardware/EyelinkToolbox/"" folder contains a file "compatibility" (//help compatibility//) with information on what has changed in this release of the Eyelink toolbox and how to restore the old behaviour if you don't like the eye camera video feed to be displayed.
~- The ""PsychtoolboxKernelDriver"" for OS/X on ""IntelMacs"" with ATI GPU's has been refined. Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a ""FireGL-V3700"".
~- The ""PsychtoolboxKernelDriver"" for OS/X on ""IntelMacs"" with ATI GPU's has been refined. Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a ""FireGL-V3700"".
Deletions:
~- The ""PsychtoolboxKernelDriver"" for OS/X on IntelMacs with ATI GPU's has been refined. Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a FireGL-V3700.
Additions:
~- The ""PsychtoolboxKernelDriver"" for OS/X on IntelMacs with ATI GPU's has been refined. Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a FireGL-V3700.
~- ""CreateProceduralSineGrating()"": Add optional support of drawing procedural sine gratings with a circular aperture of selectable radius.
~- ""PsychImaging"": Add new stereo mode ""'InterleavedColumnStereo'"" for column interleaved stereo displays, e.g., for driving auto stereoscopic displays based on lenticular sheet lenses or parallax barriers. ""ImagingStereoDemo(101)"" demonstrates this.
~- ""BalanceFactors"": Speed optimization by David Fencsik. ""BalanceTrials()"" - New function for balancing a set of factors, contributed by David Fencsik.
~- ""CreateProceduralSineGrating()"": Add optional support of drawing procedural sine gratings with a circular aperture of selectable radius.
~- ""PsychImaging"": Add new stereo mode ""'InterleavedColumnStereo'"" for column interleaved stereo displays, e.g., for driving auto stereoscopic displays based on lenticular sheet lenses or parallax barriers. ""ImagingStereoDemo(101)"" demonstrates this.
~- ""BalanceFactors"": Speed optimization by David Fencsik. ""BalanceTrials()"" - New function for balancing a set of factors, contributed by David Fencsik.
Deletions:
~- CreateProceduralSineGrating(): Add optional support of drawing procedural sine gratings with a circular aperture of selectable radius.
~- PsychImaging: Add new stereo mode 'InterleavedColumnStereo' for column interleaved stereo displays, e.g., for driving auto stereoscopic displays based on lenticular sheet lenses or parallax barriers. ""ImagingStereoDemo(101)"" demonstrates this.
~- BalanceFactors: Speed optimization by David Fencsik. BalanceTrials() - New function for balancing a set of factors, contributed by David Fencsik.
Additions:
=== PTB beta released 4.9.2010 (SVN Revision 1783)===
This summarizes all new beta features from 6.6.2010 up to 4.9.2010. [[http://svn.berlios.de/wsvn/osxptb/beta/?op=log&rev=0&sc=0&isdir=1 The list of improvements is likely incomplete as always. For detailed logs, click this link.]]
This update contains a couple of bug fixes and minor improvements. Most interesting should be the improvements to the Eyelink toolbox by Frans Cornelissen.
== ""Eyelink toolbox"" ==
Improvements and cleanup to many demos by Frans Cornelissen. Frans also enabled the video feed from the Eyelink eye camera during tracker calibration by default, so the subjects eye can be monitored during calibration procedures. The ""PsychHardware/EyelinkToolbox/"" folder contains a file "compatibility" (//help compatibility//) with information on what has changed in this release of the Eyelink toolbox and how to restore the old behaviour if you don't like the eye camera video feed to be displayed.
~- Bugfix when used with Microsoft Windows Vista or Windows-7 on fast multi-core machines (e.g., has only been observed on a 8 core, 2.7 Ghz PC running Windows-7): Under certain circumstances the driver may falsely report your computers clock to be broken ("Time going backwards" warning) and switch to a low resolution backup clock. This is now fixed. The same fix applies to Screen and ""IOPort"", although it was very unlikely to encounter the bug when using those mex files.
~- Updates to help texts for some functions.
~- The PsychtoolboxKernelDriver for OS/X on IntelMacs with ATI GPU's has been refined. Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a FireGL-V3700.
~- Improvements to procedural gabor- and sinegrating rendering. Allow to specify a global contrast scaling factor as proposed by Xiangrui Li.
~- CreateProceduralSineGrating(): Add optional support of drawing procedural sine gratings with a circular aperture of selectable radius.
~- PsychImaging: Add new stereo mode 'InterleavedColumnStereo' for column interleaved stereo displays, e.g., for driving auto stereoscopic displays based on lenticular sheet lenses or parallax barriers. ""ImagingStereoDemo(101)"" demonstrates this.
~- Some improvements to display calibration, gamma correction and color handling routines by David Brainard's lab. Also improvements to the PR-650 photometer support.
~- BalanceFactors: Speed optimization by David Fencsik. BalanceTrials() - New function for balancing a set of factors, contributed by David Fencsik.
This summarizes all new beta features from 6.6.2010 up to 4.9.2010. [[http://svn.berlios.de/wsvn/osxptb/beta/?op=log&rev=0&sc=0&isdir=1 The list of improvements is likely incomplete as always. For detailed logs, click this link.]]
This update contains a couple of bug fixes and minor improvements. Most interesting should be the improvements to the Eyelink toolbox by Frans Cornelissen.
== ""Eyelink toolbox"" ==
Improvements and cleanup to many demos by Frans Cornelissen. Frans also enabled the video feed from the Eyelink eye camera during tracker calibration by default, so the subjects eye can be monitored during calibration procedures. The ""PsychHardware/EyelinkToolbox/"" folder contains a file "compatibility" (//help compatibility//) with information on what has changed in this release of the Eyelink toolbox and how to restore the old behaviour if you don't like the eye camera video feed to be displayed.
~- Bugfix when used with Microsoft Windows Vista or Windows-7 on fast multi-core machines (e.g., has only been observed on a 8 core, 2.7 Ghz PC running Windows-7): Under certain circumstances the driver may falsely report your computers clock to be broken ("Time going backwards" warning) and switch to a low resolution backup clock. This is now fixed. The same fix applies to Screen and ""IOPort"", although it was very unlikely to encounter the bug when using those mex files.
~- Updates to help texts for some functions.
~- The PsychtoolboxKernelDriver for OS/X on IntelMacs with ATI GPU's has been refined. Now provides even more precise visual onset timestamping and removes a constant 0.4 - 0.7 msecs (depending on videomode) bias in the timestamps. Datapixx measurement confirms our timestamps are now spot-on on the two tested ATI GPU's, a Mobility Radeon X1600 and a FireGL-V3700.
~- Improvements to procedural gabor- and sinegrating rendering. Allow to specify a global contrast scaling factor as proposed by Xiangrui Li.
~- CreateProceduralSineGrating(): Add optional support of drawing procedural sine gratings with a circular aperture of selectable radius.
~- PsychImaging: Add new stereo mode 'InterleavedColumnStereo' for column interleaved stereo displays, e.g., for driving auto stereoscopic displays based on lenticular sheet lenses or parallax barriers. ""ImagingStereoDemo(101)"" demonstrates this.
~- Some improvements to display calibration, gamma correction and color handling routines by David Brainard's lab. Also improvements to the PR-650 photometer support.
~- BalanceFactors: Speed optimization by David Fencsik. BalanceTrials() - New function for balancing a set of factors, contributed by David Fencsik.
Deletions:
This summarizes all new beta features from 11.1.2010 up to 6.6.2010. [[http://svn.berlios.de/wsvn/osxptb/beta/?op=log&rev=0&sc=0&isdir=1 The list of improvements is likely incomplete as always. For detailed logs, click this link.]]
Some users of Microsoft Windows may encounter an error during update or download of the toolbox. On failure, the installer will give you instructions on how to download and install updated copies of the Microsoft Visual C runtime libraries to make Psychtoolbox work again. This is a required upgrade, forced by some changes in Microsofts OS.
These updates introduce various bug fixes and enhancements. Especially the //""Screen""// and //""PsychPortAudio""// and //""Datapixx""// drivers as well as the image processing pipeline and many demos and drawing functions have been improved again.
~- Bugfix for audio artifacts due to "wraparound errors" in the Portaudio sample converters. Could cause audio artifacts if sound samples reached the (legal) signal level 1.0 and the soundcard expected audio data converted to 24 bit integer or 32 bit integer format. This mostly affected some ASIO soundcards on Windows.
~- Perform clamping of audio output signals to valid -1.0 to +1.0 range in all modes by default, instead of only in non-low-latency mode as in previous versions of the driver. Allow to change defaults for dithering and clamping in the 'Open' function.
~- On Windows with some ASIO soundcards and on Mac OS with some external soundcards, direct input monitoring is supported. This requires hardware support by the soundcard and allows to feed back sound from the soundcards inputs (microphone etc.) to its outputs with minimal latency. Most soundcards don't support this feature, so you'll need to use ""PsychPortAudio's"" software implementation which has a slightly higher latency.
~- Improved support for sound schedules: Now allows to specify and schedule onset/offset/pauses of sounds wrt. to the system clock, i.e., in the same timebase as ""GetSecs"" and all other timestamps in Psychtoolbox.
~- Support for virtual audio devices and mixing: Allows to open a physical soundcard as a master device, then create multiple "slave devices" which attach to different channels of the master device. Output of multiple slave devices is combined/merged/mixed and send to the master device. This allows to play back multiple independent soundtracks simultaneously and with independent control of content, timing and volume. Also allows to address each channel or set of channels on a card separately. New function //""PsychPortAudio('OpenSlave')""// controls this functionality.
~- Support for capturing and recording the mixed output stream as it gets sent to the real soundcard, e.g., for feedback, testing, debugging and documentation purpose.
~- Support for per device and per channel gain and volume control via the new 'Volume' function.
~- Support for precisely timed amplitude modulation (AM) of each virtual audio output slave device by definition of time series of gain values which can be applied with sample-accurate timing. Cfe. ""BasicAMAndMixScheduleDemo"" for demo of AM modulation, volume control, mixing and scheduling support.
~- Option to resume playback in a 'Start' call where it was last 'Stop'ped, instead of restarting at the beginning.
== Serial port hardware support ==
~- Some performance improvements to ""IOPort"" and some parameters to allow to workaround operating system / serial port driver bugs on some setups.
~- ""CMUBox"" driver for serialport or USB response boxes now supports also the ""fORP"" device when connected via a serial port and to use the ""UBW32/Bitwhacker"" as a response button box.
~- Further improvements to high precision visual stimulus onset timing and timestamping. Also added new tests and workarounds for various broken graphics drivers on Windows and Mac OS.
~- Experimental support for ""OpenML"" based visual stimulus onset scheduling and timestamping for ""GNU/Linux"". This is an opt-in, work in progress. Not yet ready for mainstream use, but will allow to take advantage of Linux special facilities, once they are completed and stable.
~- Support for NV_swap_group and SGIXX_swap_group extensions on Linux and Windows. Some professional grade graphics cards, e.g., some AMD ""FireGL/FirePro"" cards and some ""NVidia QuadroFX"" cards do support these extensions in hardware. These allow to perfectly synchronize bufferswaps and visual stimulus timing across multiple windows, displays, graphics cards or even different nodes on visualization clusters. //Screen// will automatically use these extensions if they are present and a dual-display stereo mode or other dual display / multi window mode is used.
~- Support for creation and writing of Quicktime movie files on Mac OS and Windows. Allows to create and write movie files. Currently only supports one video track per movie and doesn't support soundtrack. Works with any codec supported by Quicktime. ""ImagingStereoDemo"" contains test- and example code to demonstrate usage. Can create a movie which records the animated stereo display.
~- Various bugfixes and help text updates.
~- The imaging pipeline ""PsychImaging"" in conjunction with ""PsychColorCorrection"" now also allows to apply automatic display vignetting correction aka shading correction to automatically compensate for spatially varying differences in luminance or per color gains of display devices, e.g., due to lense vignetting on projectors. ""VignetCalibration"" implements an interactive calibration procedure, ""VignettingCorrectionDemo"" and ""AdditiveBlendingForLinearSuperpositionTutorial"" demonstrate how a calibration is applied for realtime vignetting correction.
~- //""ScreenDrawDots""// is a reimplementation for the //""Screen('DrawDots')""// function to allow smooth dot drawing on broken Mac OS 10.6.3 systems.
~- //""PsychDrawSprites2D""// allow for drawing of large numbers of similar textures, so called Sprites. It behaves exactly like //""Screen('DrawDots')""//, except that it doesn't draw dots, but little copies of a given texture, with selectable size, position, rotation and color. This is demonstrated in ""DotDemo"" by passing an optional flag.
~- A new ""Sadowski-Illusion"" demo.
~- Full support for the ""VPixx technologies DataPixx"" device on all platforms, except Apple ""PowerPC"" and Windows with Matlab versions before V7.4 (R2007a). All special graphics display functions (stereo, multi-display, mirroring, high precision color and luminance display) are supported via ""PsychImaging"", e.g., demonstrated in ""BitsPlusCSFDemo"", ""AdditiveBlendingForLinearSuperpositionTutorial"" and ""ImagingStereoDemo"". Timestamping functionality and other convenience functions, as well as audio capture and voice keys are available via ""PsychDataPixx"" and ""DatapixxAudioKey"", ""PsychPortAudioDatapixxTimingTest"". See ""help DatapixxToolbox"". All low-level features are supported via the ""Datapixx"" mex file driver.
~- ""OpenGL for Matlab and Octave"": Add support for GLU tesselator functions.
~- New ""DotRotDemo"" for rotating dot fields by Keith Schneider.
~- Many new and improved display calibration, gamma correction and color handling routines by David Brainard's lab.
~- Support for later models of the ""RTBox"" response button box in the ""PsychRTBox"" driver.
~- Bugfixes and workarounds for the latest collection of bugs in ""Mac OS/X Snow Leopard 10.6.3 and MS-Windows"".
~- Compatibility fixes to mex files to provide good support for Ubuntu Linux 10.04 LTS "Lucid Lynx".
Additions:
This summarizes all new beta features from 11.1.2010 up to 6.6.2010. [[http://svn.berlios.de/wsvn/osxptb/beta/?op=log&rev=0&sc=0&isdir=1 The list of improvements is likely incomplete as always. For detailed logs, click this link.]]
Deletions:
Additions:
These updates introduce various bug fixes and enhancements. Especially the //""Screen""// and //""PsychPortAudio""// and //""Datapixx""// drivers as well as the image processing pipeline and many demos and drawing functions have been improved again.
Deletions:
Revision [1588]
Edited on 2010-06-06 20:44:37 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
=== PTB beta released 6.6.2010 (SVN Revision 1737)===
This summarizes all new beta features from 11.1.2010 up to 6.6.2010. Most improvements were made around mid of may, some more around beginning of june. [[http://svn.berlios.de/wsvn/osxptb/beta/?op=log&rev=0&sc=0&isdir=1 The list of improvements is likely incomplete as always. For detailed logs, click this link.]]
Some users of Microsoft Windows may encounter an error during update or download of the toolbox. On failure, the installer will give you instructions on how to download and install updated copies of the Microsoft Visual C runtime libraries to make Psychtoolbox work again. This is a required upgrade, forced by some changes in Microsofts OS.
These updates introduce various bug fixes and enhancements. Especially the //""Screen""// and //""PsychPortAudio""// and //""Datapixx""//drivers as well as the image processing pipeline and many demos and drawing functions have been improved again.
~- Bugfix for audio artifacts due to "wraparound errors" in the Portaudio sample converters. Could cause audio artifacts if sound samples reached the (legal) signal level 1.0 and the soundcard expected audio data converted to 24 bit integer or 32 bit integer format. This mostly affected some ASIO soundcards on Windows.
~- Perform clamping of audio output signals to valid -1.0 to +1.0 range in all modes by default, instead of only in non-low-latency mode as in previous versions of the driver. Allow to change defaults for dithering and clamping in the 'Open' function.
~- On Windows with some ASIO soundcards and on Mac OS with some external soundcards, direct input monitoring is supported. This requires hardware support by the soundcard and allows to feed back sound from the soundcards inputs (microphone etc.) to its outputs with minimal latency. Most soundcards don't support this feature, so you'll need to use ""PsychPortAudio's"" software implementation which has a slightly higher latency.
~- Improved support for sound schedules: Now allows to specify and schedule onset/offset/pauses of sounds wrt. to the system clock, i.e., in the same timebase as ""GetSecs"" and all other timestamps in Psychtoolbox.
~- Support for virtual audio devices and mixing: Allows to open a physical soundcard as a master device, then create multiple "slave devices" which attach to different channels of the master device. Output of multiple slave devices is combined/merged/mixed and send to the master device. This allows to play back multiple independent soundtracks simultaneously and with independent control of content, timing and volume. Also allows to address each channel or set of channels on a card separately. New function //""PsychPortAudio('OpenSlave')""// controls this functionality.
~- Support for capturing and recording the mixed output stream as it gets sent to the real soundcard, e.g., for feedback, testing, debugging and documentation purpose.
~- Support for per device and per channel gain and volume control via the new 'Volume' function.
~- Support for precisely timed amplitude modulation (AM) of each virtual audio output slave device by definition of time series of gain values which can be applied with sample-accurate timing. Cfe. ""BasicAMAndMixScheduleDemo"" for demo of AM modulation, volume control, mixing and scheduling support.
~- Option to resume playback in a 'Start' call where it was last 'Stop'ped, instead of restarting at the beginning.
== Serial port hardware support ==
~- Some performance improvements to ""IOPort"" and some parameters to allow to workaround operating system / serial port driver bugs on some setups.
~- ""CMUBox"" driver for serialport or USB response boxes now supports also the ""fORP"" device when connected via a serial port and to use the ""UBW32/Bitwhacker"" as a response button box.
~- Further improvements to high precision visual stimulus onset timing and timestamping. Also added new tests and workarounds for various broken graphics drivers on Windows and Mac OS.
~- Experimental support for ""OpenML"" based visual stimulus onset scheduling and timestamping for ""GNU/Linux"". This is an opt-in, work in progress. Not yet ready for mainstream use, but will allow to take advantage of Linux special facilities, once they are completed and stable.
~- Support for NV_swap_group and SGIXX_swap_group extensions on Linux and Windows. Some professional grade graphics cards, e.g., some AMD ""FireGL/FirePro"" cards and some ""NVidia QuadroFX"" cards do support these extensions in hardware. These allow to perfectly synchronize bufferswaps and visual stimulus timing across multiple windows, displays, graphics cards or even different nodes on visualization clusters. //Screen// will automatically use these extensions if they are present and a dual-display stereo mode or other dual display / multi window mode is used.
~- Support for creation and writing of Quicktime movie files on Mac OS and Windows. Allows to create and write movie files. Currently only supports one video track per movie and doesn't support soundtrack. Works with any codec supported by Quicktime. ""ImagingStereoDemo"" contains test- and example code to demonstrate usage. Can create a movie which records the animated stereo display.
~- Various bugfixes and help text updates.
~- The imaging pipeline ""PsychImaging"" in conjunction with ""PsychColorCorrection"" now also allows to apply automatic display vignetting correction aka shading correction to automatically compensate for spatially varying differences in luminance or per color gains of display devices, e.g., due to lense vignetting on projectors. ""VignetCalibration"" implements an interactive calibration procedure, ""VignettingCorrectionDemo"" and ""AdditiveBlendingForLinearSuperpositionTutorial"" demonstrate how a calibration is applied for realtime vignetting correction.
~- //""ScreenDrawDots""// is a reimplementation for the //""Screen('DrawDots')""// function to allow smooth dot drawing on broken Mac OS 10.6.3 systems.
~- //""PsychDrawSprites2D""// allow for drawing of large numbers of similar textures, so called Sprites. It behaves exactly like //""Screen('DrawDots')""//, except that it doesn't draw dots, but little copies of a given texture, with selectable size, position, rotation and color. This is demonstrated in ""DotDemo"" by passing an optional flag.
~- A new ""Sadowski-Illusion"" demo.
~- Full support for the ""VPixx technologies DataPixx"" device on all platforms, except Apple ""PowerPC"" and Windows with Matlab versions before V7.4 (R2007a). All special graphics display functions (stereo, multi-display, mirroring, high precision color and luminance display) are supported via ""PsychImaging"", e.g., demonstrated in ""BitsPlusCSFDemo"", ""AdditiveBlendingForLinearSuperpositionTutorial"" and ""ImagingStereoDemo"". Timestamping functionality and other convenience functions, as well as audio capture and voice keys are available via ""PsychDataPixx"" and ""DatapixxAudioKey"", ""PsychPortAudioDatapixxTimingTest"". See ""help DatapixxToolbox"". All low-level features are supported via the ""Datapixx"" mex file driver.
~- ""OpenGL for Matlab and Octave"": Add support for GLU tesselator functions.
~- New ""DotRotDemo"" for rotating dot fields by Keith Schneider.
== Misc stuff ==
~- Many new and improved display calibration, gamma correction and color handling routines by David Brainard's lab.
~- Some improvements to general toolbox routines by Diederick Niehorster.
~- Support for later models of the ""RTBox"" response button box in the ""PsychRTBox"" driver.
~- Bugfixes and workarounds for the latest collection of bugs in ""Mac OS/X Snow Leopard 10.6.3 and MS-Windows"".
~- Compatibility fixes to mex files to provide good support for Ubuntu Linux 10.04 LTS "Lucid Lynx".
Enjoy!
This summarizes all new beta features from 11.1.2010 up to 6.6.2010. Most improvements were made around mid of may, some more around beginning of june. [[http://svn.berlios.de/wsvn/osxptb/beta/?op=log&rev=0&sc=0&isdir=1 The list of improvements is likely incomplete as always. For detailed logs, click this link.]]
Some users of Microsoft Windows may encounter an error during update or download of the toolbox. On failure, the installer will give you instructions on how to download and install updated copies of the Microsoft Visual C runtime libraries to make Psychtoolbox work again. This is a required upgrade, forced by some changes in Microsofts OS.
These updates introduce various bug fixes and enhancements. Especially the //""Screen""// and //""PsychPortAudio""// and //""Datapixx""//drivers as well as the image processing pipeline and many demos and drawing functions have been improved again.
~- Bugfix for audio artifacts due to "wraparound errors" in the Portaudio sample converters. Could cause audio artifacts if sound samples reached the (legal) signal level 1.0 and the soundcard expected audio data converted to 24 bit integer or 32 bit integer format. This mostly affected some ASIO soundcards on Windows.
~- Perform clamping of audio output signals to valid -1.0 to +1.0 range in all modes by default, instead of only in non-low-latency mode as in previous versions of the driver. Allow to change defaults for dithering and clamping in the 'Open' function.
~- On Windows with some ASIO soundcards and on Mac OS with some external soundcards, direct input monitoring is supported. This requires hardware support by the soundcard and allows to feed back sound from the soundcards inputs (microphone etc.) to its outputs with minimal latency. Most soundcards don't support this feature, so you'll need to use ""PsychPortAudio's"" software implementation which has a slightly higher latency.
~- Improved support for sound schedules: Now allows to specify and schedule onset/offset/pauses of sounds wrt. to the system clock, i.e., in the same timebase as ""GetSecs"" and all other timestamps in Psychtoolbox.
~- Support for virtual audio devices and mixing: Allows to open a physical soundcard as a master device, then create multiple "slave devices" which attach to different channels of the master device. Output of multiple slave devices is combined/merged/mixed and send to the master device. This allows to play back multiple independent soundtracks simultaneously and with independent control of content, timing and volume. Also allows to address each channel or set of channels on a card separately. New function //""PsychPortAudio('OpenSlave')""// controls this functionality.
~- Support for capturing and recording the mixed output stream as it gets sent to the real soundcard, e.g., for feedback, testing, debugging and documentation purpose.
~- Support for per device and per channel gain and volume control via the new 'Volume' function.
~- Support for precisely timed amplitude modulation (AM) of each virtual audio output slave device by definition of time series of gain values which can be applied with sample-accurate timing. Cfe. ""BasicAMAndMixScheduleDemo"" for demo of AM modulation, volume control, mixing and scheduling support.
~- Option to resume playback in a 'Start' call where it was last 'Stop'ped, instead of restarting at the beginning.
== Serial port hardware support ==
~- Some performance improvements to ""IOPort"" and some parameters to allow to workaround operating system / serial port driver bugs on some setups.
~- ""CMUBox"" driver for serialport or USB response boxes now supports also the ""fORP"" device when connected via a serial port and to use the ""UBW32/Bitwhacker"" as a response button box.
~- Further improvements to high precision visual stimulus onset timing and timestamping. Also added new tests and workarounds for various broken graphics drivers on Windows and Mac OS.
~- Experimental support for ""OpenML"" based visual stimulus onset scheduling and timestamping for ""GNU/Linux"". This is an opt-in, work in progress. Not yet ready for mainstream use, but will allow to take advantage of Linux special facilities, once they are completed and stable.
~- Support for NV_swap_group and SGIXX_swap_group extensions on Linux and Windows. Some professional grade graphics cards, e.g., some AMD ""FireGL/FirePro"" cards and some ""NVidia QuadroFX"" cards do support these extensions in hardware. These allow to perfectly synchronize bufferswaps and visual stimulus timing across multiple windows, displays, graphics cards or even different nodes on visualization clusters. //Screen// will automatically use these extensions if they are present and a dual-display stereo mode or other dual display / multi window mode is used.
~- Support for creation and writing of Quicktime movie files on Mac OS and Windows. Allows to create and write movie files. Currently only supports one video track per movie and doesn't support soundtrack. Works with any codec supported by Quicktime. ""ImagingStereoDemo"" contains test- and example code to demonstrate usage. Can create a movie which records the animated stereo display.
~- Various bugfixes and help text updates.
~- The imaging pipeline ""PsychImaging"" in conjunction with ""PsychColorCorrection"" now also allows to apply automatic display vignetting correction aka shading correction to automatically compensate for spatially varying differences in luminance or per color gains of display devices, e.g., due to lense vignetting on projectors. ""VignetCalibration"" implements an interactive calibration procedure, ""VignettingCorrectionDemo"" and ""AdditiveBlendingForLinearSuperpositionTutorial"" demonstrate how a calibration is applied for realtime vignetting correction.
~- //""ScreenDrawDots""// is a reimplementation for the //""Screen('DrawDots')""// function to allow smooth dot drawing on broken Mac OS 10.6.3 systems.
~- //""PsychDrawSprites2D""// allow for drawing of large numbers of similar textures, so called Sprites. It behaves exactly like //""Screen('DrawDots')""//, except that it doesn't draw dots, but little copies of a given texture, with selectable size, position, rotation and color. This is demonstrated in ""DotDemo"" by passing an optional flag.
~- A new ""Sadowski-Illusion"" demo.
~- Full support for the ""VPixx technologies DataPixx"" device on all platforms, except Apple ""PowerPC"" and Windows with Matlab versions before V7.4 (R2007a). All special graphics display functions (stereo, multi-display, mirroring, high precision color and luminance display) are supported via ""PsychImaging"", e.g., demonstrated in ""BitsPlusCSFDemo"", ""AdditiveBlendingForLinearSuperpositionTutorial"" and ""ImagingStereoDemo"". Timestamping functionality and other convenience functions, as well as audio capture and voice keys are available via ""PsychDataPixx"" and ""DatapixxAudioKey"", ""PsychPortAudioDatapixxTimingTest"". See ""help DatapixxToolbox"". All low-level features are supported via the ""Datapixx"" mex file driver.
~- ""OpenGL for Matlab and Octave"": Add support for GLU tesselator functions.
~- New ""DotRotDemo"" for rotating dot fields by Keith Schneider.
== Misc stuff ==
~- Many new and improved display calibration, gamma correction and color handling routines by David Brainard's lab.
~- Some improvements to general toolbox routines by Diederick Niehorster.
~- Support for later models of the ""RTBox"" response button box in the ""PsychRTBox"" driver.
~- Bugfixes and workarounds for the latest collection of bugs in ""Mac OS/X Snow Leopard 10.6.3 and MS-Windows"".
~- Compatibility fixes to mex files to provide good support for Ubuntu Linux 10.04 LTS "Lucid Lynx".
Enjoy!
Deletions:
These updates introduce support for the USTC RTBox button response box, the PR-655 colorimeter, and various bug fixes and enhancements. Especially the //""IOPort""// and //""PsychPortAudio""// drivers have been improved again.
== Online documenation updated ==
Our tireless "master of online documentation" Tobias Wolf has updated the online documentation of all PTB functions on the Wiki, so it corresponds to the state of PTB - Beta as of 21st february 2009.
== New ""PsychRTBox"" driver for ""RTBox"" USB Response button box by Xiangrui Li et al. ==
This new driver (see ""PsychRTBoxDemo"" for demonstration of most basic functions) allows to interface with the [[http://lobes.usc.edu/RTbox "USTC RTBox Reaction Time Box"]], a response button box for button response collection from subjects with exact button press- or release timestamping. In addition to four response buttons, the box also provides a photo-diode input (including a photo-diode) and a single BNC trigger input for reception and timestamping of external trigger signals and visual stimulus onset. The driver allows to control all features of the box and to retrieve exact timestamps in the regular Psychtoolbox //""GetSecs""// time format, so the timestamps are directly comparable to timestamps returned by //""Screen('Flip'), PsychPortAudio, KbCheck, KbWait, GetSecs, WaitSecs, IOPort""// etc., which greatly simplifies calculation of reaction times and other time related events. Most aspects of the driver and especially its timing precision have been extensively tested under a variety of Macintosh computers and PC's under Microsoft Windows XP, Linux and ""MacOS/X"" 10.4.x and 10.5.x., so far with good results.
~- Important bugfix for playback of short sounds (less than about 50 milliseconds) on ""MS-Windows"" and ""GNU/Linux"". Due to a flaw in the underlying ""PortAudio"" library, trying to call //""PsychPortAudio('Stop')""// after playback of such short sounds could cause Matlab to hang until it got forcefully terminated. This is fixed. However, this bug was only present in betas released in January 2009. Older versions of the driver didn't expose this flaw.
~- //""PsychPortAudio methods 'Start', 'Stop', and 'RescheduleStart'""// now also allow you to define a //sound offset time// (called 'stop' time) in addition to the previous 'when' sound onset time: This allows to schedule a sound playback which lasts until an exactly specified point in time, nearly sample accurate, ie., with sub-millisecond precision. The 'Stop' subfunction allows you to (re-)specify a stop time while playback is already active, for on-the-fly rescheduling of your sound timing. This is done by setting the new optional ""'stopTime'"" parameter.
~- These routines also allow you to specifiy and respecify (while playback is already active) the repetition count 'repetitions' for a defined number of sound repetitions, and the repetition count can be fractional now, e.g., 1.5 for one and a half repetitions of a sound.
~- The //""PsychPortAudio('Stop')""// function can now request stop of sound playback (as mentioned above via ""'stopTime'"" or 'repetitions' or immediately) without waiting for the stop to actually happen. This can avoid blocking execution of your Matlab code in the 'Stop' routine for a few milliseconds, should your experiments require such a non-blocking behaviour. This is achieved by setting the new optional ""'blockUntilStopped'"" parameter to a zero value. Otherwise, the 'Stop' method will block until sound is really stopped as in previous driver versions.
~- //""PsychPortAudio('RefillBuffer', pahandle [, bufferhandle=0], bufferdata [, startIndex=0]);""// allows to refill portions of the sound playback buffer while playback is active, for dynamic updating of sound content in situations where the streaming refill via the //""PsychPortAudio('FillBuffer')""// command is not applicable. This is interesting when used in conjunction with the new //""PsychPortAudio('SetLoop')""// command to restrict sound playback to a subsection of the playback buffer.
~- The new subfunctions //""PsychPortAudio('UseSchedule')""// and //""PsychPortAudio('AddToSchedule')""// allow to predefine a whole sequence of precisely timed of sounds to be played according to a given playback schedule. This is similar to the playlists you can set in your favorite media player. The schedule can be extended on the fly during sound playback to allow very flexible sound playback which can concatenate different sounds with well defined gaps inbetween or completely gap-free. Unfortunately we don't have any interesting demos for this new function yet.
~- For people with very low latency requirements, the driver can be switched into a new mode of operation, called "runmode 1" via the //""PsychPortAudio('RunMode')""// function. By default, runmode 0 is used. In runmode 1, the audio hardware, once started, keeps running all the time. This consumes more system memory and processing ressources on your computer during the runtime of your script, as processing is active even if no sound is played at all, but it allows for a faster stop and restart of playback operations, ie., it can avoid multiple milliseconds of delay, especially on Linux, but also to some lesser extent on the other operating systems. You can compare this to a strategy where you keep the engine of your car running during stops at red traffic lights or in traffic jams, as opposed to our default strategy of stopping the engine at each halt and restarting after the break.
== ""Colorimeter support"" ==
~- We now support the Photo Research PR-655 colorimeter via the new //""PR655Toolbox""// in the folder //""Psychtoolbox/Psychhardware/PR655Toolbox""//. This code has been contributed by Thad Czuba. You can either use the routines in that subfolder directly, or use the higher level functions like //""CMCheckInit, CMClose, MeasXYZ and MeasSpd""// by selecting the 'metertype' argument to be 4.
~- Both, the new ""PR-655"" toolbox and the old ""PR-650"" toolbox now use the new ""IOPort"" driver instead of the old operating system dependent ""SerialComm"" driver. Due to this change, both toolboxes should now work on all operating systems, not only on ""OS/X"".
== ""IOPort"" Serial port hardware support ==
The new ""IOPort"" driver has been refined in a few areas. The driver is still much work in progress, with a few useful features missing. However, it should be already a far superior replacement for all old serial port drivers like ""PsychSerial"", ""SerialComm"" and Matlabs ""serial"" objects for most purposes.
~- //""FindSerialPort""// function: Now can also automatically find serial port devices for the //""IOPort""// serialport driver on all operating systems.
~- New optional parameter ""'HardwareBufferSizes=in,out'"" for //""IOPort('OpenSerialPort',..);""// and //""IOPort('ConfigureSerialPort', ...);""// configstring parameter. This is not set by default, and only supported on ""MS-Windows"", ignored on other platforms. It triggers the Windows ""SetupComm()"" function to set the hardware input and output buffer sizes to the requested in,out values. Hardware drivers are free to ignore the request, and it will only work if invoked after opening the device but before doing any I/O. Rationale: The operating system is supposed to choose reasonable settings for these buffersizes if not provided (according to Microsoft documentation), but the old Windows ""PsychSerial"" driver set these sizes explicitely, so we give usercode the option to do so as well, in case some buggy windows drivers misbehave if this isn't set.
~- //""IOPort('OpenSerialPort')""//: Bugfix in configuration option parser code for all operating systems. Providing settings/options in the optional //""'ConfigString'""// parameter which conflicted with the builtin defaults may cause wrong setup, ie. either the defaults take precedence or the users settings, but in a unpredictable way. This is fixed now. Didn't show up in any real applications so far, because 100% of all tested devices (and probably 95% of all devices out there) are happy with our builtin defaults.
~- Help texts have been improved as well.
~- New //""Screen('Preference','ConserveVRAM', ...)""// setting 16384 on OS/X allows to force use of AGL and Carbon in non-fullscreen windowed mode, even if a fullscreen window is requested. This as another attempt to work around the broken NVidia drivers for dual-display operations on Leopard 10.5.6 with Geforce 8000 hardware, as that bug persists on OS/X 10.5.6, and Apple engineering remains silent about this major defect. This workaround provides dual-display fullscreen display on such machines, but at a horrible performance, zero timing accuracy and defunct timestamping. It may be good enough for mostly static stimulus displays though.
~- //""Screen('Computer')""// on Mac OS should not crash anymore if machine has an empty machine name or empty username.
~- //""Screen('GlobalRect', win)""// now correctly returns the global bounding box (wrt. to origin of desktop coordinate system) of a given onscreen window handle 'win' even if the window is a real window, not a fullscreen window.
~- //""Screen('FrameRect')""//: When providing an empty (=default) rectangle, it didn't draw anything due to some bug in the batchdrawing processing routine. This is now fixed.
~- //""Screen('Resolution')""// now only checks for open onscreen windows when deciding to be cooperative or not, not for any window. Previously a resolution switch was also prevented when textures or offscreen windows where open, which is not neccessary.
~- Bugfix for Screen on Mac OS: When onscreen window wasn't a fullscreen window, but a windowed AGL+Carbon window, and the imaging pipeline was off, userspace rendering via MOGL didn't work due to a bug in the way we set up our userspace OpenGL context in the AGL setup path. This is now fixed.
~- //""Screen('FillOval')""//: Added missing documentation of //""'perfectUpToMacDiameter'""// parameter.
~- Screen subfunctions ""FillOval, FrameOval and FillArc, FrameArc, et al."" will now work with subpixel accurate precision instead of rounding given locations to full pixels at various occassions. The precision of positioning and sizing such drawing primitives is now only limited the the graphics hardware at use, no longer by Screen itself.
~- //""Screen('DrawText')""// on Linux: Didn't assign proper textcolors or render text correctly if a floating point precision HDR framebuffer was enabled, and a HDR draw shader was active to work-around GPU's without ""glClampColorARB()"" support, e.g., on Linux with current ATI driver for Radeon X1600. This is now fixed. Also made more robust against very long fontnames of more than 256 characters.
~- Bugfixes to some //""PsychRects""// functions: They didn't handle the case of passing 2, 3 or 4 rects properly. Only the single rect and > 4 rects cases were handled correctly. This is now fixed, although the current beta still contains a glitch for the exactly 4 rects case. Bugfixes by Thad Czuba and MK.
~- //""BitsPlusPlus""// error handling improved: Restores display gamma tables on error abort.
~- //""DrawFormattedText""//: New optional 'vspace' parameter allows to set line spacing between consecutive lines of text. Contributed by Alex Leykin. The function also now optionally allows to draw text that is mirrored/flipped left-right and/or upside down.
~- New function //""AddNormalsToOBJ""//: Takes an obj 3D object definition, as provided by, e.g., //""LoadOBJFile()""//, and adds per-vertex surface normal vectors to it. Useful if an OBJ file doesn't have surface normals defined. Uses cross-product computation on defining triangles to calculate normals.
~- Minor other fixes and updates to help texts.
** There are still a few unresolvable serious bugs in ""OS/X"" 10.5.6, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5 (and maybe 10.5.6, untested). Only Apple engineering will be able to fix this. **
== New or enhanced demos ==
~- //""FDFDemo""// and //""moglFDF""// received some further improvements: The //""maxFGDots""// and //""maxBGDots""// parameters are auto-adapted to meet requirements, instead of aborting with error. The new subfunction //""ReinitContext""// allows to change context stimulus parameters without need to destroy and recreate the fdf context, this is about 4 times faster when switching between conditions with high or low dot densities, short or long dot lifetimes and other parameters. The new optional ""instantOn"" flag to the ""Update"" function allows to buildup the whole dot distribution in one single 'Update' call at start of a trial. Minor other fixes and improvements. Now one can regulate the signal to noise ratio within the silhouette of the animated object between 0.0 and 1.0, allowing to introduce some background noise in the silhouette area. The //""FDFDemo""// now allows to control a couple of stimulus parameters during runtime by use of the cursor keys.
~- //""VideoCaptureDemo""// Now allows video image to cover full window, by proper, aspect preserving, rescaling.
~- //""MinimalisticOpenGLDemo""// now has an optional 'checkerboard' mode: Setting that optional flag will texture the spinning sphere with a Matlab generated checkerboard pattern instead of an earth surface image, just to show how this is done, as well as how to apply trilinear mipmap filtering to avoid any aliasing artifacts with such high-frequency patterns.
~- //""SimpleMovieDemo""// is the new most simple demo on how to playback Quicktime movies. Not fancy, but down to the absolute basics.
~- //""PsychRTBoxDemo""// demonstrates basic use of the new //""PsychRTBox""// driver for control of the USTC ""RTBox"" button response box.
== Test scripts in ""PsychTests"" ==
~- Minor improvements to dualhead display sync tests in //""GraphicsDisplaySyncAcrossDualHeadsTest""// and //""PerceptualVBLSyncTest""//.
~- //""KeyboardLatencyTest""// now allows some assessment of the timing accuracy of response boxes, the response box from Cedrus, and the reaction time box from Xiangrui Li et al.
== Misc other stuff ==
~- Merged large parts of the "Bitstuff Toolbox": This is a collection of generally useful new M-File routines in the categories ""PsychSignal, PsychOneliners and PsychProbability"". The toolbox was written and contributed under GPL license by Diederick C. Niehorster.
~- //""RestrictKeysForKbCheck""// is a new function that allows to restrict the keys to check in //""KbCheck, KbWait, et al. ""// to a subset of keys on the keyboard. This is convenient on all systems to restrict subject responses to valid response keys. On Mac OS it can also provide a significant speedup in the operation of //""KbCheck""//, reducing its execution time from 1 millisecond to a few dozen microseconds.
~- //""KbName""// now queries all connected keyboards if called via //""KbName""// from the commandline, not only the primary keyboard.
~- Improvements to geometric display calibration routines: Optionally one can load an image file as a "backdrop image" to the calibration grids in //""DisplayUndistortionBezier/BVL""//, and one can set window size to the size of those images. This allows to (mis-)use those display calibration routines for creation of generic transformations, e.g., for generic image undistortion of images or videos. The still unfinished //""ImageUndistortionDemo""// allows to apply such calibrations to loaded images from disk for the purpose of image unwarping.
~- New routines for color conversions in Munsell color space in subfolder //""PsychColorimetric/PsychMunsell""//, contributed by David Brainard.
~- Add function //""GetEchostring""//: Ported from PTB-2, contributed by yaosiang.
~- Also add functions //""GetNumber and GetEchoNumber""// from PTB-2.
~- //""Ask""// function:Strips ""ENTER"" keycode and ""BACKSPACE"" keycodes from returned replies.
~- //""WaitSecs('YieldSecs', seconds)""// is a new subfunction of //""WaitSecs""// which allows to sleep for a specified time interval //seconds//, but imprecisely. That is, the sleep is allowed to take a few milliseconds longer than specified. This allows to use a different waiting strategy which is not precise, but reduces the load on the computers processor. It is meant for code that wants to be nice by not taxing the cpu too much, e.g., in a polling loop where not every millisecond counts.
~- //""Snd""//: Always returns some 'err' status, even if it is only a zero, as this return argument is mostly meaningless in current implementation. This for backwards compatibility to old Mac OS-9 code.
~- Enhancements to //""GetClicks""// and //""GetMouse""//, as suggested by Diederick Niehorster.
~- Modified //""PsychtoolboxRegistration""// routine for online registration to use the ""pnet()"" file on Matlab runtimes to implement communication for online registration. No need to use netcat anymore, except for Octave runtimes. As netcat aka nc.exe aka nc111nt.zip is no longer needed on the ""MS-Windows"" platform it has been remove from the distribution. No problems for poor Windoze users due to idiotic virus scanners anymore.
~- The new //""PsychHomeDir""// function retrieves path to users home directory on each system, and optionally to subdirectories as well.
Revision [1508]
Edited on 2009-02-21 22:22:20 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Deletions:
Revision [1507]
Edited on 2009-02-21 22:21:06 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
== Online documenation updated ==
Our tireless "master of online documentation" Tobias Wolf has updated the online documentation of all PTB functions on the Wiki, so it corresponds to the state of PTB - Beta as of 21st february 2009.
This new driver (see ""PsychRTBoxDemo"" for demonstration of most basic functions) allows to interface with the [[http://lobes.usc.edu/RTbox "USTC RTBox Reaction Time Box"]], a response button box for button response collection from subjects with exact button press- or release timestamping. In addition to four response buttons, the box also provides a photo-diode input (including a photo-diode) and a single BNC trigger input for reception and timestamping of external trigger signals and visual stimulus onset. The driver allows to control all features of the box and to retrieve exact timestamps in the regular Psychtoolbox //""GetSecs""// time format, so the timestamps are directly comparable to timestamps returned by //""Screen('Flip'), PsychPortAudio, KbCheck, KbWait, GetSecs, WaitSecs, IOPort""// etc., which greatly simplifies calculation of reaction times and other time related events. Most aspects of the driver and especially its timing precision have been extensively tested under a variety of Macintosh computers and PC's under Microsoft Windows XP, Linux and ""MacOS/X"" 10.4.x and 10.5.x., so far with good results.
Our tireless "master of online documentation" Tobias Wolf has updated the online documentation of all PTB functions on the Wiki, so it corresponds to the state of PTB - Beta as of 21st february 2009.
This new driver (see ""PsychRTBoxDemo"" for demonstration of most basic functions) allows to interface with the [[http://lobes.usc.edu/RTbox "USTC RTBox Reaction Time Box"]], a response button box for button response collection from subjects with exact button press- or release timestamping. In addition to four response buttons, the box also provides a photo-diode input (including a photo-diode) and a single BNC trigger input for reception and timestamping of external trigger signals and visual stimulus onset. The driver allows to control all features of the box and to retrieve exact timestamps in the regular Psychtoolbox //""GetSecs""// time format, so the timestamps are directly comparable to timestamps returned by //""Screen('Flip'), PsychPortAudio, KbCheck, KbWait, GetSecs, WaitSecs, IOPort""// etc., which greatly simplifies calculation of reaction times and other time related events. Most aspects of the driver and especially its timing precision have been extensively tested under a variety of Macintosh computers and PC's under Microsoft Windows XP, Linux and ""MacOS/X"" 10.4.x and 10.5.x., so far with good results.
Deletions:
Revision [1506]
Edited on 2009-02-21 22:12:18 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
== New ""PsychRTBox"" driver for ""RTBox"" USB Response button box by Xiangrui Li et al. ==
This new driver (see ""PsychRTBoxDemo"" for demonstration of most basic functions) allows to interface with the [[http://lobes.usc.edu/RTbox "USTC ""RTBox"" Reaction Time Box"]], a response button box for button response collection from subjects with exact button press- or release timestamping. In addition to four response buttons, the box also provides a photo-diode input (including a photo-diode) and a single BNC trigger input for reception and timestamping of external trigger signals and visual stimulus onset. The driver allows to control all features of the box and to retrieve exact timestamps in the regular Psychtoolbox //""GetSecs""// time format, so the timestamps are directly comparable to timestamps returned by //""Screen('Flip'), PsychPortAudio, KbCheck, KbWait, GetSecs, WaitSecs, IOPort""// etc., which greatly simplifies calculation of reaction times and other time related events. Most aspects of the driver and especially its timing precision have been extensively tested under a variety of Macintosh computers and PC's under Microsoft Windows XP, Linux and ""MacOS/X"" 10.4.x and 10.5.x.
This new driver (see ""PsychRTBoxDemo"" for demonstration of most basic functions) allows to interface with the [[http://lobes.usc.edu/RTbox "USTC ""RTBox"" Reaction Time Box"]], a response button box for button response collection from subjects with exact button press- or release timestamping. In addition to four response buttons, the box also provides a photo-diode input (including a photo-diode) and a single BNC trigger input for reception and timestamping of external trigger signals and visual stimulus onset. The driver allows to control all features of the box and to retrieve exact timestamps in the regular Psychtoolbox //""GetSecs""// time format, so the timestamps are directly comparable to timestamps returned by //""Screen('Flip'), PsychPortAudio, KbCheck, KbWait, GetSecs, WaitSecs, IOPort""// etc., which greatly simplifies calculation of reaction times and other time related events. Most aspects of the driver and especially its timing precision have been extensively tested under a variety of Macintosh computers and PC's under Microsoft Windows XP, Linux and ""MacOS/X"" 10.4.x and 10.5.x.
Revision [1505]
Edited on 2009-02-21 21:46:36 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""PsychPortAudio('RefillBuffer', pahandle [, bufferhandle=0], bufferdata [, startIndex=0]);""// allows to refill portions of the sound playback buffer while playback is active, for dynamic updating of sound content in situations where the streaming refill via the //""PsychPortAudio('FillBuffer')""// command is not applicable. This is interesting when used in conjunction with the new //""PsychPortAudio('SetLoop')""// command to restrict sound playback to a subsection of the playback buffer.
~- The new subfunctions //""PsychPortAudio('UseSchedule')""// and //""PsychPortAudio('AddToSchedule')""// allow to predefine a whole sequence of precisely timed of sounds to be played according to a given playback schedule. This is similar to the playlists you can set in your favorite media player. The schedule can be extended on the fly during sound playback to allow very flexible sound playback which can concatenate different sounds with well defined gaps inbetween or completely gap-free. Unfortunately we don't have any interesting demos for this new function yet.
~- For people with very low latency requirements, the driver can be switched into a new mode of operation, called "runmode 1" via the //""PsychPortAudio('RunMode')""// function. By default, runmode 0 is used. In runmode 1, the audio hardware, once started, keeps running all the time. This consumes more system memory and processing ressources on your computer during the runtime of your script, as processing is active even if no sound is played at all, but it allows for a faster stop and restart of playback operations, ie., it can avoid multiple milliseconds of delay, especially on Linux, but also to some lesser extent on the other operating systems. You can compare this to a strategy where you keep the engine of your car running during stops at red traffic lights or in traffic jams, as opposed to our default strategy of stopping the engine at each halt and restarting after the break.
~- The new subfunctions //""PsychPortAudio('UseSchedule')""// and //""PsychPortAudio('AddToSchedule')""// allow to predefine a whole sequence of precisely timed of sounds to be played according to a given playback schedule. This is similar to the playlists you can set in your favorite media player. The schedule can be extended on the fly during sound playback to allow very flexible sound playback which can concatenate different sounds with well defined gaps inbetween or completely gap-free. Unfortunately we don't have any interesting demos for this new function yet.
~- For people with very low latency requirements, the driver can be switched into a new mode of operation, called "runmode 1" via the //""PsychPortAudio('RunMode')""// function. By default, runmode 0 is used. In runmode 1, the audio hardware, once started, keeps running all the time. This consumes more system memory and processing ressources on your computer during the runtime of your script, as processing is active even if no sound is played at all, but it allows for a faster stop and restart of playback operations, ie., it can avoid multiple milliseconds of delay, especially on Linux, but also to some lesser extent on the other operating systems. You can compare this to a strategy where you keep the engine of your car running during stops at red traffic lights or in traffic jams, as opposed to our default strategy of stopping the engine at each halt and restarting after the break.
Deletions:
~- The new subfunctions //""PsychPortAudio('UseSchedule')""// and //""PsychPortAudio('AddToSchedule')""// allow to predefine a whole sequence of precisely timed of sounds to be played according to a given playback schedule. This is similar to the playlists you can set in your favorite media player. The schedule can be extended on the fly during sound playback to allow very flexible sound playback which is at the same time glitch- and gapfree. Unfortunately we don't have any interesting demos for this new function yet.
~- For people with very low latency requirements, the driver can be switched into a new mode of operation, called "runmode 1" via the //""PsychPortAudio('RunMode'""// function. By default, runmode 0 is used. In runmode 1 the audio hardware, once started, keeps running all the time. This consumes more system memory and processing ressources on your computer during the runtime of your script as processing is active even if no sound is played at all, but it allows for a faster stop and restart of playback operations, ie., it can avoid multiple milliseconds of delay, especially on Linux, but also to some lesser extent on the other operating systems. You can compare this to a strategy where you keep the engine of your car running during stops at red traffic lights or in traffic jams, as opposed to our default strategy of stopping the engine at each halt and restarting after the break.
Revision [1504]
Edited on 2009-02-21 21:43:53 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
== ""PsychPortAudio"" sound driver ==
~- Important bugfix for playback of short sounds (less than about 50 milliseconds) on ""MS-Windows"" and ""GNU/Linux"". Due to a flaw in the underlying ""PortAudio"" library, trying to call //""PsychPortAudio('Stop')""// after playback of such short sounds could cause Matlab to hang until it got forcefully terminated. This is fixed. However, this bug was only present in betas released in January 2009. Older versions of the driver didn't expose this flaw.
~- //""PsychPortAudio methods 'Start', 'Stop', and 'RescheduleStart'""// now also allow you to define a //sound offset time// (called 'stop' time) in addition to the previous 'when' sound onset time: This allows to schedule a sound playback which lasts until an exactly specified point in time, nearly sample accurate, ie., with sub-millisecond precision. The 'Stop' subfunction allows you to (re-)specify a stop time while playback is already active, for on-the-fly rescheduling of your sound timing. This is done by setting the new optional ""'stopTime'"" parameter.
~- These routines also allow you to specifiy and respecify (while playback is already active) the repetition count 'repetitions' for a defined number of sound repetitions, and the repetition count can be fractional now, e.g., 1.5 for one and a half repetitions of a sound.
~- The //""PsychPortAudio('Stop')""// function can now request stop of sound playback (as mentioned above via ""'stopTime'"" or 'repetitions' or immediately) without waiting for the stop to actually happen. This can avoid blocking execution of your Matlab code in the 'Stop' routine for a few milliseconds, should your experiments require such a non-blocking behaviour. This is achieved by setting the new optional ""'blockUntilStopped'"" parameter to a zero value. Otherwise, the 'Stop' method will block until sound is really stopped as in previous driver versions.
~- //""PsychPortAudio('RefillBuffer', pahandle [, bufferhandle=0], bufferdata [, startIndex=0]);""// allows to refill portions of the sound playback buffer while playback is active, for dynamic updating of sound content in situations where the streaming refill via the //""PsychPortAudio('FillBuffer')""// command is not applicable. This is interesting when used in conjunction with the new //""PsychPortAudio('SetLoop')""// command to define subsections of the playback buffer for sound playback.
~- The new subfunctions //""PsychPortAudio('UseSchedule')""// and //""PsychPortAudio('AddToSchedule')""// allow to predefine a whole sequence of precisely timed of sounds to be played according to a given playback schedule. This is similar to the playlists you can set in your favorite media player. The schedule can be extended on the fly during sound playback to allow very flexible sound playback which is at the same time glitch- and gapfree. Unfortunately we don't have any interesting demos for this new function yet.
~- For people with very low latency requirements, the driver can be switched into a new mode of operation, called "runmode 1" via the //""PsychPortAudio('RunMode'""// function. By default, runmode 0 is used. In runmode 1 the audio hardware, once started, keeps running all the time. This consumes more system memory and processing ressources on your computer during the runtime of your script as processing is active even if no sound is played at all, but it allows for a faster stop and restart of playback operations, ie., it can avoid multiple milliseconds of delay, especially on Linux, but also to some lesser extent on the other operating systems. You can compare this to a strategy where you keep the engine of your car running during stops at red traffic lights or in traffic jams, as opposed to our default strategy of stopping the engine at each halt and restarting after the break.
~- Important bugfix for playback of short sounds (less than about 50 milliseconds) on ""MS-Windows"" and ""GNU/Linux"". Due to a flaw in the underlying ""PortAudio"" library, trying to call //""PsychPortAudio('Stop')""// after playback of such short sounds could cause Matlab to hang until it got forcefully terminated. This is fixed. However, this bug was only present in betas released in January 2009. Older versions of the driver didn't expose this flaw.
~- //""PsychPortAudio methods 'Start', 'Stop', and 'RescheduleStart'""// now also allow you to define a //sound offset time// (called 'stop' time) in addition to the previous 'when' sound onset time: This allows to schedule a sound playback which lasts until an exactly specified point in time, nearly sample accurate, ie., with sub-millisecond precision. The 'Stop' subfunction allows you to (re-)specify a stop time while playback is already active, for on-the-fly rescheduling of your sound timing. This is done by setting the new optional ""'stopTime'"" parameter.
~- These routines also allow you to specifiy and respecify (while playback is already active) the repetition count 'repetitions' for a defined number of sound repetitions, and the repetition count can be fractional now, e.g., 1.5 for one and a half repetitions of a sound.
~- The //""PsychPortAudio('Stop')""// function can now request stop of sound playback (as mentioned above via ""'stopTime'"" or 'repetitions' or immediately) without waiting for the stop to actually happen. This can avoid blocking execution of your Matlab code in the 'Stop' routine for a few milliseconds, should your experiments require such a non-blocking behaviour. This is achieved by setting the new optional ""'blockUntilStopped'"" parameter to a zero value. Otherwise, the 'Stop' method will block until sound is really stopped as in previous driver versions.
~- //""PsychPortAudio('RefillBuffer', pahandle [, bufferhandle=0], bufferdata [, startIndex=0]);""// allows to refill portions of the sound playback buffer while playback is active, for dynamic updating of sound content in situations where the streaming refill via the //""PsychPortAudio('FillBuffer')""// command is not applicable. This is interesting when used in conjunction with the new //""PsychPortAudio('SetLoop')""// command to define subsections of the playback buffer for sound playback.
~- The new subfunctions //""PsychPortAudio('UseSchedule')""// and //""PsychPortAudio('AddToSchedule')""// allow to predefine a whole sequence of precisely timed of sounds to be played according to a given playback schedule. This is similar to the playlists you can set in your favorite media player. The schedule can be extended on the fly during sound playback to allow very flexible sound playback which is at the same time glitch- and gapfree. Unfortunately we don't have any interesting demos for this new function yet.
~- For people with very low latency requirements, the driver can be switched into a new mode of operation, called "runmode 1" via the //""PsychPortAudio('RunMode'""// function. By default, runmode 0 is used. In runmode 1 the audio hardware, once started, keeps running all the time. This consumes more system memory and processing ressources on your computer during the runtime of your script as processing is active even if no sound is played at all, but it allows for a faster stop and restart of playback operations, ie., it can avoid multiple milliseconds of delay, especially on Linux, but also to some lesser extent on the other operating systems. You can compare this to a strategy where you keep the engine of your car running during stops at red traffic lights or in traffic jams, as opposed to our default strategy of stopping the engine at each halt and restarting after the break.
Revision [1503]
Edited on 2009-02-21 21:12:11 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
== ""Colorimeter support"" ==
~- We now support the Photo Research PR-655 colorimeter via the new //""PR655Toolbox""// in the folder //""Psychtoolbox/Psychhardware/PR655Toolbox""//. This code has been contributed by Thad Czuba. You can either use the routines in that subfolder directly, or use the higher level functions like //""CMCheckInit, CMClose, MeasXYZ and MeasSpd""// by selecting the 'metertype' argument to be 4.
~- Both, the new ""PR-655"" toolbox and the old ""PR-650"" toolbox now use the new ""IOPort"" driver instead of the old operating system dependent ""SerialComm"" driver. Due to this change, both toolboxes should now work on all operating systems, not only on ""OS/X"".
~- //""FindSerialPort""// function: Now can also automatically find serial port devices for the //""IOPort""// serialport driver on all operating systems.
~- We now support the Photo Research PR-655 colorimeter via the new //""PR655Toolbox""// in the folder //""Psychtoolbox/Psychhardware/PR655Toolbox""//. This code has been contributed by Thad Czuba. You can either use the routines in that subfolder directly, or use the higher level functions like //""CMCheckInit, CMClose, MeasXYZ and MeasSpd""// by selecting the 'metertype' argument to be 4.
~- Both, the new ""PR-655"" toolbox and the old ""PR-650"" toolbox now use the new ""IOPort"" driver instead of the old operating system dependent ""SerialComm"" driver. Due to this change, both toolboxes should now work on all operating systems, not only on ""OS/X"".
~- //""FindSerialPort""// function: Now can also automatically find serial port devices for the //""IOPort""// serialport driver on all operating systems.
Revision [1502]
Edited on 2009-02-21 21:03:58 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""Screen('DrawText')""// on Linux: Didn't assign proper textcolors or render text correctly if a floating point precision HDR framebuffer was enabled, and a HDR draw shader was active to work-around GPU's without ""glClampColorARB()"" support, e.g., on Linux with current ATI driver for Radeon X1600. This is now fixed. Also made more robust against very long fontnames of more than 256 characters.
~- Bugfixes to some //""PsychRects""// functions: They didn't handle the case of passing 2, 3 or 4 rects properly. Only the single rect and > 4 rects cases were handled correctly. This is now fixed, although the current beta still contains a glitch for the exactly 4 rects case. Bugfixes by Thad Czuba and MK.
~- //""SimpleMovieDemo""// is the new most simple demo on how to playback Quicktime movies. Not fancy, but down to the absolute basics.
~- //""PsychRTBoxDemo""// demonstrates basic use of the new //""PsychRTBox""// driver for control of the USTC ""RTBox"" button response box.
~- //""Snd""//: Always returns some 'err' status, even if it is only a zero, as this return argument is mostly meaningless in current implementation. This for backwards compatibility to old Mac OS-9 code.
~- Enhancements to //""GetClicks""// and //""GetMouse""//, as suggested by Diederick Niehorster.
~- Modified //""PsychtoolboxRegistration""// routine for online registration to use the ""pnet()"" file on Matlab runtimes to implement communication for online registration. No need to use netcat anymore, except for Octave runtimes. As netcat aka nc.exe aka nc111nt.zip is no longer needed on the ""MS-Windows"" platform it has been remove from the distribution. No problems for poor Windoze users due to idiotic virus scanners anymore.
~- The new //""PsychHomeDir""// function retrieves path to users home directory on each system, and optionally to subdirectories as well.
~- Bugfixes to some //""PsychRects""// functions: They didn't handle the case of passing 2, 3 or 4 rects properly. Only the single rect and > 4 rects cases were handled correctly. This is now fixed, although the current beta still contains a glitch for the exactly 4 rects case. Bugfixes by Thad Czuba and MK.
~- //""SimpleMovieDemo""// is the new most simple demo on how to playback Quicktime movies. Not fancy, but down to the absolute basics.
~- //""PsychRTBoxDemo""// demonstrates basic use of the new //""PsychRTBox""// driver for control of the USTC ""RTBox"" button response box.
~- //""Snd""//: Always returns some 'err' status, even if it is only a zero, as this return argument is mostly meaningless in current implementation. This for backwards compatibility to old Mac OS-9 code.
~- Enhancements to //""GetClicks""// and //""GetMouse""//, as suggested by Diederick Niehorster.
~- Modified //""PsychtoolboxRegistration""// routine for online registration to use the ""pnet()"" file on Matlab runtimes to implement communication for online registration. No need to use netcat anymore, except for Octave runtimes. As netcat aka nc.exe aka nc111nt.zip is no longer needed on the ""MS-Windows"" platform it has been remove from the distribution. No problems for poor Windoze users due to idiotic virus scanners anymore.
~- The new //""PsychHomeDir""// function retrieves path to users home directory on each system, and optionally to subdirectories as well.
Deletions:
~-
Revision [1501]
Edited on 2009-02-21 20:44:18 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- Screen subfunctions ""FillOval, FrameOval and FillArc, FrameArc, et al."" will now work with subpixel accurate precision instead of rounding given locations to full pixels at various occassions. The precision of positioning and sizing such drawing primitives is now only limited the the graphics hardware at use, no longer by Screen itself.
~- //""WaitSecs('YieldSecs', seconds)""// is a new subfunction of //""WaitSecs""// which allows to sleep for a specified time interval //seconds//, but imprecisely. That is, the sleep is allowed to take a few milliseconds longer than specified. This allows to use a different waiting strategy which is not precise, but reduces the load on the computers processor. It is meant for code that wants to be nice by not taxing the cpu too much, e.g., in a polling loop where not every millisecond counts.
~- //""WaitSecs('YieldSecs', seconds)""// is a new subfunction of //""WaitSecs""// which allows to sleep for a specified time interval //seconds//, but imprecisely. That is, the sleep is allowed to take a few milliseconds longer than specified. This allows to use a different waiting strategy which is not precise, but reduces the load on the computers processor. It is meant for code that wants to be nice by not taxing the cpu too much, e.g., in a polling loop where not every millisecond counts.
Revision [1500]
Edited on 2009-02-21 20:36:52 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- New optional parameter ""'HardwareBufferSizes=in,out'"" for //""IOPort('OpenSerialPort',..);""// and //""IOPort('ConfigureSerialPort', ...);""// configstring parameter. This is not set by default, and only supported on ""MS-Windows"", ignored on other platforms. It triggers the Windows ""SetupComm()"" function to set the hardware input and output buffer sizes to the requested in,out values. Hardware drivers are free to ignore the request, and it will only work if invoked after opening the device but before doing any I/O. Rationale: The operating system is supposed to choose reasonable settings for these buffersizes if not provided (according to Microsoft documentation), but the old Windows ""PsychSerial"" driver set these sizes explicitely, so we give usercode the option to do so as well, in case some buggy windows drivers misbehave if this isn't set.
~- Merged large parts of the "Bitstuff Toolbox": This is a collection of generally useful new M-File routines in the categories ""PsychSignal, PsychOneliners and PsychProbability"". The toolbox was written and contributed under GPL license by Diederick C. Niehorster.
~- //""Ask""// function:Strips ""ENTER"" keycode and ""BACKSPACE"" keycodes from returned replies.
~- Merged large parts of the "Bitstuff Toolbox": This is a collection of generally useful new M-File routines in the categories ""PsychSignal, PsychOneliners and PsychProbability"". The toolbox was written and contributed under GPL license by Diederick C. Niehorster.
~- //""Ask""// function:Strips ""ENTER"" keycode and ""BACKSPACE"" keycodes from returned replies.
Deletions:
~- //""IOPort('Write')""// now returns a couple of additional optional timestamps, useful for special timing calibration routines like the upcoming ""PsychRTBox.m"" driver, and for low-level debugging: A prewrite timestamp, a postwrite timestamp and a timestamp of last poll loop iteration (if used)...
~- //""IOPort('Read')""// accepts (for blocking reads) a new optional setting //""PollLatency""// in //""IOPort('ConfigureSerialPort',...);""// The setting allows to select the idle time between unsuccessful poll iterations, to trade off the system load against time quantization in such time critical polling loops.
Revision [1499]
Edited on 2009-02-21 20:27:23 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
The new ""IOPort"" driver has been refined in a few areas. The driver is still much work in progress, with a few useful features missing. However, it should be already a far superior replacement for all old serial port drivers like ""PsychSerial"", ""SerialComm"" and Matlabs ""serial"" objects for most purposes.
~- //""IOPort('OpenSerialPort')""//: Bugfix in configuration option parser code for all operating systems. Providing settings/options in the optional //""'ConfigString'""// parameter which conflicted with the builtin defaults may cause wrong setup, ie. either the defaults take precedence or the users settings, but in a unpredictable way. This is fixed now. Didn't show up in any real applications so far, because 100% of all tested devices (and probably 95% of all devices out there) are happy with our builtin defaults.
~- //""Screen('FillOval')""//: Added missing documentation of //""'perfectUpToMacDiameter'""// parameter.
~- //""KbName""// now queries all connected keyboards if called via //""KbName""// from the commandline, not only the primary keyboard.
~- Add function //""GetEchostring""//: Ported from PTB-2, contributed by yaosiang.
~- Also add functions //""GetNumber and GetEchoNumber""// from PTB-2.
~- //""IOPort('OpenSerialPort')""//: Bugfix in configuration option parser code for all operating systems. Providing settings/options in the optional //""'ConfigString'""// parameter which conflicted with the builtin defaults may cause wrong setup, ie. either the defaults take precedence or the users settings, but in a unpredictable way. This is fixed now. Didn't show up in any real applications so far, because 100% of all tested devices (and probably 95% of all devices out there) are happy with our builtin defaults.
~- //""Screen('FillOval')""//: Added missing documentation of //""'perfectUpToMacDiameter'""// parameter.
~- //""KbName""// now queries all connected keyboards if called via //""KbName""// from the commandline, not only the primary keyboard.
~- Add function //""GetEchostring""//: Ported from PTB-2, contributed by yaosiang.
~- Also add functions //""GetNumber and GetEchoNumber""// from PTB-2.
Deletions:
~- //""IOPort('ConfigureSerialPort')""// allows via new options to enable asynchronous background reading of data from the serial port via a parallel background thread on ""MacOSX"" and ""GNU/Linux"", this feature is not yet supported on Windows. If async read is enabled, //""IOPort('Read')""// will not directly fetch data from the serial port, but it will fetch data that has been read already in the background by the reader thread. This allows to automatically collect streaming data from serial port in the background, for later retrieval via 'Read' calls. This feature is experimental for now, its programming interface may change!
Revision [1498]
Edited on 2009-02-21 20:19:17 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- New //""Screen('Preference','ConserveVRAM', ...)""// setting 16384 on OS/X allows to force use of AGL and Carbon in non-fullscreen windowed mode, even if a fullscreen window is requested. This as another attempt to work around the broken NVidia drivers for dual-display operations on Leopard 10.5.6 with Geforce 8000 hardware, as that bug persists on OS/X 10.5.6, and Apple engineering remains silent about this major defect. This workaround provides dual-display fullscreen display on such machines, but at a horrible performance, zero timing accuracy and defunct timestamping. It may be good enough for mostly static stimulus displays though.
~- //""Screen('FrameRect')""//: When providing an empty (=default) rectangle, it didn't draw anything due to some bug in the batchdrawing processing routine. This is now fixed.
~- //""Screen('Resolution')""// now only checks for open onscreen windows when deciding to be cooperative or not, not for any window. Previously a resolution switch was also prevented when textures or offscreen windows where open, which is not neccessary.
~- //""DrawFormattedText""//: New optional 'vspace' parameter allows to set line spacing between consecutive lines of text. Contributed by Alex Leykin. The function also now optionally allows to draw text that is mirrored/flipped left-right and/or upside down.
~- New routines for color conversions in Munsell color space in subfolder //""PsychColorimetric/PsychMunsell""//, contributed by David Brainard.
~- //""Screen('FrameRect')""//: When providing an empty (=default) rectangle, it didn't draw anything due to some bug in the batchdrawing processing routine. This is now fixed.
~- //""Screen('Resolution')""// now only checks for open onscreen windows when deciding to be cooperative or not, not for any window. Previously a resolution switch was also prevented when textures or offscreen windows where open, which is not neccessary.
~- //""DrawFormattedText""//: New optional 'vspace' parameter allows to set line spacing between consecutive lines of text. Contributed by Alex Leykin. The function also now optionally allows to draw text that is mirrored/flipped left-right and/or upside down.
~- New routines for color conversions in Munsell color space in subfolder //""PsychColorimetric/PsychMunsell""//, contributed by David Brainard.
Deletions:
Revision [1497]
Edited on 2009-02-21 20:09:49 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
=== Psychtoolbox beta updates up to and including the update from 2009-02-18 (SVN Revision 1245) ===
These updates introduce support for the USTC RTBox button response box, the PR-655 colorimeter, and various bug fixes and enhancements. Especially the //""IOPort""// and //""PsychPortAudio""// drivers have been improved again.
~- //""Screen('Computer')""// on Mac OS should not crash anymore if machine has an empty machine name or empty username.
~- //""Screen('GlobalRect', win)""// now correctly returns the global bounding box (wrt. to origin of desktop coordinate system) of a given onscreen window handle 'win' even if the window is a real window, not a fullscreen window.
~- Bugfix for Screen on Mac OS: When onscreen window wasn't a fullscreen window, but a windowed AGL+Carbon window, and the imaging pipeline was off, userspace rendering via MOGL didn't work due to a bug in the way we set up our userspace OpenGL context in the AGL setup path. This is now fixed.
~- //""BitsPlusPlus""// error handling improved: Restores display gamma tables on error abort.
~- //""DrawFormattedText""//: New optional 'vspace' parameter allows to set line spacing between consecutive lines of text. Contributed by Alex Leykin.
** There are still a few unresolvable serious bugs in ""OS/X"" 10.5.6, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5 (and maybe 10.5.6, untested). Only Apple engineering will be able to fix this. **
~- //""FDFDemo""// and //""moglFDF""// received some further improvements: The //""maxFGDots""// and //""maxBGDots""// parameters are auto-adapted to meet requirements, instead of aborting with error. The new subfunction //""ReinitContext""// allows to change context stimulus parameters without need to destroy and recreate the fdf context, this is about 4 times faster when switching between conditions with high or low dot densities, short or long dot lifetimes and other parameters. The new optional ""instantOn"" flag to the ""Update"" function allows to buildup the whole dot distribution in one single 'Update' call at start of a trial. Minor other fixes and improvements. Now one can regulate the signal to noise ratio within the silhouette of the animated object between 0.0 and 1.0, allowing to introduce some background noise in the silhouette area. The //""FDFDemo""// now allows to control a couple of stimulus parameters during runtime by use of the cursor keys.
~- //""VideoCaptureDemo""// Now allows video image to cover full window, by proper, aspect preserving, rescaling.
~- //""MinimalisticOpenGLDemo""// now has an optional 'checkerboard' mode: Setting that optional flag will texture the spinning sphere with a Matlab generated checkerboard pattern instead of an earth surface image, just to show how this is done, as well as how to apply trilinear mipmap filtering to avoid any aliasing artifacts with such high-frequency patterns.
~- New function //""AddNormalsToOBJ""//: Takes an obj 3D object definition, as provided by, e.g., //""LoadOBJFile()""//, and adds per-vertex surface normal vectors to it. Useful if an OBJ file doesn't have surface normals defined. Uses cross-product computation on defining triangles to calculate normals.
~-
~- //""RestrictKeysForKbCheck""// is a new function that allows to restrict the keys to check in //""KbCheck, KbWait, et al. ""// to a subset of keys on the keyboard. This is convenient on all systems to restrict subject responses to valid response keys. On Mac OS it can also provide a significant speedup in the operation of //""KbCheck""//, reducing its execution time from 1 millisecond to a few dozen microseconds.
~- Improvements to geometric display calibration routines: Optionally one can load an image file as a "backdrop image" to the calibration grids in //""DisplayUndistortionBezier/BVL""//, and one can set window size to the size of those images. This allows to (mis-)use those display calibration routines for creation of generic transformations, e.g., for generic image undistortion of images or videos. The still unfinished //""ImageUndistortionDemo""// allows to apply such calibrations to loaded images from disk for the purpose of image unwarping.
~-
These updates introduce support for the USTC RTBox button response box, the PR-655 colorimeter, and various bug fixes and enhancements. Especially the //""IOPort""// and //""PsychPortAudio""// drivers have been improved again.
~- //""Screen('Computer')""// on Mac OS should not crash anymore if machine has an empty machine name or empty username.
~- //""Screen('GlobalRect', win)""// now correctly returns the global bounding box (wrt. to origin of desktop coordinate system) of a given onscreen window handle 'win' even if the window is a real window, not a fullscreen window.
~- Bugfix for Screen on Mac OS: When onscreen window wasn't a fullscreen window, but a windowed AGL+Carbon window, and the imaging pipeline was off, userspace rendering via MOGL didn't work due to a bug in the way we set up our userspace OpenGL context in the AGL setup path. This is now fixed.
~- //""BitsPlusPlus""// error handling improved: Restores display gamma tables on error abort.
~- //""DrawFormattedText""//: New optional 'vspace' parameter allows to set line spacing between consecutive lines of text. Contributed by Alex Leykin.
** There are still a few unresolvable serious bugs in ""OS/X"" 10.5.6, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5 (and maybe 10.5.6, untested). Only Apple engineering will be able to fix this. **
~- //""FDFDemo""// and //""moglFDF""// received some further improvements: The //""maxFGDots""// and //""maxBGDots""// parameters are auto-adapted to meet requirements, instead of aborting with error. The new subfunction //""ReinitContext""// allows to change context stimulus parameters without need to destroy and recreate the fdf context, this is about 4 times faster when switching between conditions with high or low dot densities, short or long dot lifetimes and other parameters. The new optional ""instantOn"" flag to the ""Update"" function allows to buildup the whole dot distribution in one single 'Update' call at start of a trial. Minor other fixes and improvements. Now one can regulate the signal to noise ratio within the silhouette of the animated object between 0.0 and 1.0, allowing to introduce some background noise in the silhouette area. The //""FDFDemo""// now allows to control a couple of stimulus parameters during runtime by use of the cursor keys.
~- //""VideoCaptureDemo""// Now allows video image to cover full window, by proper, aspect preserving, rescaling.
~- //""MinimalisticOpenGLDemo""// now has an optional 'checkerboard' mode: Setting that optional flag will texture the spinning sphere with a Matlab generated checkerboard pattern instead of an earth surface image, just to show how this is done, as well as how to apply trilinear mipmap filtering to avoid any aliasing artifacts with such high-frequency patterns.
~- New function //""AddNormalsToOBJ""//: Takes an obj 3D object definition, as provided by, e.g., //""LoadOBJFile()""//, and adds per-vertex surface normal vectors to it. Useful if an OBJ file doesn't have surface normals defined. Uses cross-product computation on defining triangles to calculate normals.
~-
~- //""RestrictKeysForKbCheck""// is a new function that allows to restrict the keys to check in //""KbCheck, KbWait, et al. ""// to a subset of keys on the keyboard. This is convenient on all systems to restrict subject responses to valid response keys. On Mac OS it can also provide a significant speedup in the operation of //""KbCheck""//, reducing its execution time from 1 millisecond to a few dozen microseconds.
~- Improvements to geometric display calibration routines: Optionally one can load an image file as a "backdrop image" to the calibration grids in //""DisplayUndistortionBezier/BVL""//, and one can set window size to the size of those images. This allows to (mis-)use those display calibration routines for creation of generic transformations, e.g., for generic image undistortion of images or videos. The still unfinished //""ImageUndistortionDemo""// allows to apply such calibrations to loaded images from disk for the purpose of image unwarping.
~-
Deletions:
The special patched ""portaudio_x86.dll"" audio low-level driver with compiled-in support for Steinberg's ASIO sound interface for use on Microsoft Windows systems with our //""PsychPortAudio""// driver has a new home on our Wiki. You no longer need to request the driver from Mario Kleiner via e-mail. [[http://psychtoolbox.org/wikka.php?wakka=PsychPortAudio Instead, simply download the zip file with the driver from the PsychPortAudio section of the Wiki]]. The zip file contains the DLL, a readme file with installation, setup and usage instructions, and the special license for use of this driver, which deviates from our normal GPL license.
=== Psychtoolbox beta update from 2008-11-4 (SVN Revision 1151) ===
This update introduces support for "formless dot field" type stimuli, and various bug fixes and enhancements. Especially the //""IOPort""// driver has been improved again.
~- Regression in anaglyph stereo mode fixed: Anaglyph stereo as demonstrated in //""StereoDemo""// with settings 6,7,8 and 9 didn't work. This is fixed.
~- Robustness improvements to //""Screen('DrawText')""// on ""OS/X"": If a corrupt text string is supplied, the function doesn't crash anymore, but abort with a (hopefully) diagnostic error message.
~- Bugfix to //""Screen('DrawText')""// on Windows: If text is drawn into different windows (onscreen or offscreen) with different text sizes or other different font settings, text should be drawn properly, instead of sometimes applying wrong settings. This was a bug in the way textsettings are cached internally to improve speed.
~- //""Screen('FillPoly')""// received a few performance optimizations. However most of them only had a minor impact on performance. Drawing of complex, concave, potentially self-intersecting filled polygons still needs substantial processing on the CPU and is therefore much slower than drawing of simple concave polygons or simple convex polygons (which are the fastest).
~- Potential robustness improvement for //""Screen('FrameRect')""// against broken graphics drivers when setting 'penSize'. This is a potential improvement, which may or may not help on broken drivers.
~- //""DrawFormattedText""//: No longer aborts with error on empty text string as input, but simply does nothing in that case.
~- //moglmorpher//: The fast 3D morpher contained special workaround code for some serious bugs in the ATI display drivers on ""OS/X"" Tiger 10.4.x. As i've learned, the drivers got fixed at least in Leopard 10.5.5, so when used on 10.5, the workaround caused malfunctions on the fixed drivers! Now we detect the ""OS/X"" version, and only enable the workaround on versions lower than 10.5.5. This works now on all 10.4 systems and 10.5.5. I don't know how it behaves on 10.5.0 to 10.5.4, due to lack of a testing system.
~- Small fix to //""VideoDelayLoopMiniDemo""// for use with built-in iSight cameras of some Macintosh computers. A bug in the ""OS/X"" operating system caused wrong image display on such cams.
~- Fix a bug in //""PsychVideoSwitcher""// driver which caused the TTL trigger mechanism to fail. Also extended trigger function: One can select if trigger should happen at each 'Flip' until disabled, or for a predetermined number of 'Flip's then auto-disable.
~- //""PsychImaging""//: Add support code for setup of native 10 bpc framebuffers on supported ""ATI FireGL/Pro and NVidia GTX"" cards.
~- Fix in //""ConvolutionKernelTest""// for error handling when invalid convolution kernels are passed.
** There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3, 10.5.4 and 10.5.5, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5. Only Apple engineering will be able to fix this. **
~- //""FDFDemo""// is a new demo: It demonstrates basic usage of the new //""moglFDF""// function, rendering an animated rotating "random dot" motion sphere. The //""moglFDF""// function allows to efficiently draw a special class of random dot "structure from motion" stimuli, so called "(F)ormless (D)ot (F)ields". The algorithm is heavily inspired by the [[http://www.journalofvision.org/8/5/8/ algorithm introduced by Jedediah M. Singer and David L. Sheinberg in their Journal of Vision paper "A method for the real-time rendering of formless dot field structure-from-motion stimuli" (Journal of Vision, 8, 1-8)]]. It should behave mostly as the method described in that paper, but operate at a significantly higher speed if stimuli are demanding (e.g., high display resolution, large number of dots, complex underlying 3D geometry), as the //""moglFDF""// routine pushes nearly all compute intense operations onto the GPU, only random number generation and flow control are done on the CPU. However, as the paper doesn't state actual benchmark numbers and i never had a look at their implementation, this is an unverified assumption so far. This code has been tested for multiple months in-house for complex 3D facial motion stimuli and worked well, but given its complexity there may remain more or less subtle bugs or limitations of the method for other classes of stimuli. Let me know if you find this routine useful and if you encounter limitations. One limitation is the need for half-way recent graphics hardware: Minimum requirements are a ""NVidia GeForce 6000"" series card or later, or a ""ATI Radeon X1000"" series card or later, more specifically hardware with support for ""ShaderModel 3.0"" or later and floating point framebuffers.
~- //""ImagingStereoMoviePlayer""// Minor improvements.
~- //""MovingLineDemo""//: Changed behaviour to be more useful for exposing the troubles with flat panels.
~- //""AdditiveBlendingForLinearSuperpositionTutorial""// now also demonstrates how to use the TTL trigger mechanism of the ""VideoSwitcher"" device.
~- //""BitsPlusCSFDemo""// contrary to its name now also supports optional output to ""VideoSwitcher"" device , ATI 10 bpc framebuffer and ""PseudoGray"" output (aka bit stealing). It also allows to display an intensity gradient test chart instead of a CSF chart.
~- //""SearchGammaTable""// and various display calibration routines improved by David Brainard, also improvements to //""CalDemo""//
~- Fix annoying warning about unrecognized escape sequence for //""KbName""// on Linux.
~- Modifications to ""//SerialComm//"" to translate a hardware path, e.g. /dev/cu.usbserial, to a port name and improvements to //""FindSerialPort""// by Christopher Broussard.
Revision [1486]
Edited on 2008-11-09 20:23:45 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
== New download location for Portaudio driver with ASIO support ==
The special patched ""portaudio_x86.dll"" audio low-level driver with compiled-in support for Steinberg's ASIO sound interface for use on Microsoft Windows systems with our //""PsychPortAudio""// driver has a new home on our Wiki. You no longer need to request the driver from Mario Kleiner via e-mail. [[http://psychtoolbox.org/wikka.php?wakka=PsychPortAudio Instead, simply download the zip file with the driver from the PsychPortAudio section of the Wiki]]. The zip file contains the DLL, a readme file with installation, setup and usage instructions, and the special license for use of this driver, which deviates from our normal GPL license.
The special patched ""portaudio_x86.dll"" audio low-level driver with compiled-in support for Steinberg's ASIO sound interface for use on Microsoft Windows systems with our //""PsychPortAudio""// driver has a new home on our Wiki. You no longer need to request the driver from Mario Kleiner via e-mail. [[http://psychtoolbox.org/wikka.php?wakka=PsychPortAudio Instead, simply download the zip file with the driver from the PsychPortAudio section of the Wiki]]. The zip file contains the DLL, a readme file with installation, setup and usage instructions, and the special license for use of this driver, which deviates from our normal GPL license.
Revision [1485]
Edited on 2008-11-09 20:15:32 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""FDFDemo""// is a new demo: It demonstrates basic usage of the new //""moglFDF""// function, rendering an animated rotating "random dot" motion sphere. The //""moglFDF""// function allows to efficiently draw a special class of random dot "structure from motion" stimuli, so called "(F)ormless (D)ot (F)ields". The algorithm is heavily inspired by the [[http://www.journalofvision.org/8/5/8/ algorithm introduced by Jedediah M. Singer and David L. Sheinberg in their Journal of Vision paper "A method for the real-time rendering of formless dot field structure-from-motion stimuli" (Journal of Vision, 8, 1-8)]]. It should behave mostly as the method described in that paper, but operate at a significantly higher speed if stimuli are demanding (e.g., high display resolution, large number of dots, complex underlying 3D geometry), as the //""moglFDF""// routine pushes nearly all compute intense operations onto the GPU, only random number generation and flow control are done on the CPU. However, as the paper doesn't state actual benchmark numbers and i never had a look at their implementation, this is an unverified assumption so far. This code has been tested for multiple months in-house for complex 3D facial motion stimuli and worked well, but given its complexity there may remain more or less subtle bugs or limitations of the method for other classes of stimuli. Let me know if you find this routine useful and if you encounter limitations. One limitation is the need for half-way recent graphics hardware: Minimum requirements are a ""NVidia GeForce 6000"" series card or later, or a ""ATI Radeon X1000"" series card or later, more specifically hardware with support for ""ShaderModel 3.0"" or later and floating point framebuffers.
Deletions:
Revision [1484]
Edited on 2008-11-09 20:12:01 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""FDFDemo""// is a new demo: It demonstrates basic usage of the new //""moglFDF""// function, rendering an animated rotating "random dot" motion sphere. The //""moglFDF""// function allows to efficiently draw a special type of random dot "structure from motion" stimuli, so called "(F)ormless (D)ot (F)ields". The algorithm is heavily inspired by the [[http://www.journalofvision.org/8/5/8/ algorithm introduced by Jedediah M. Singer and David L. Sheinberg in their Journal of Vision paper "A method for the real-time rendering of formless dot field structure-from-motion stimuli" (Journal of Vision, 8, 1-8)]]. It should behave mostly as the method described in that paper, but operate at a significantly higher speed if stimuli are demanding (e.g., high display resolution, large number of dots, complex underlying 3D geometry), as the //""moglFDF""// routine pushes nearly all compute intense operations onto the GPU, only random number generation and flow control are done on the CPU. However, as the paper doesn't state actual benchmark numbers and i never had a look at their implementation, this is an unverified assumption so far. This code has been tested for multiple months in-house for complex 3D facial motion stimuli and worked well, but given its complexity there may remain more or less subtle bugs or limitations of the method for other classes of stimuli. Let me know if you find this routine useful and if you encounter limitations. One limitation is the need for half-way recent graphics hardware: Minimum requirements are a ""NVidia GeForce 6000"" series card or later, or a ""ATI Radeon X1000"" series card or later, more specifically hardware with support for ""ShaderModel 3.0"" or later and floating point framebuffers.
Revision [1483]
Edited on 2008-11-09 19:41:49 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
This update introduces support for "formless dot field" type stimuli, and various bug fixes and enhancements. Especially the //""IOPort""// driver has been improved again.
** There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3, 10.5.4 and 10.5.5, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5. Only Apple engineering will be able to fix this. **
~- //""ImagingStereoMoviePlayer""// Minor improvements.
~- //""BitsPlusCSFDemo""// contrary to its name now also supports optional output to ""VideoSwitcher"" device , ATI 10 bpc framebuffer and ""PseudoGray"" output (aka bit stealing). It also allows to display an intensity gradient test chart instead of a CSF chart.
== Test scripts in ""PsychTests"" ==
~- Minor improvements to dualhead display sync tests in //""GraphicsDisplaySyncAcrossDualHeadsTest""// and //""PerceptualVBLSyncTest""//.
~- //""KeyboardLatencyTest""// now allows some assessment of the timing accuracy of response boxes, the response box from Cedrus, and the reaction time box from Xiangrui Li et al.
~- //""SearchGammaTable""// and various display calibration routines improved by David Brainard, also improvements to //""CalDemo""//
~- Fix annoying warning about unrecognized escape sequence for //""KbName""// on Linux.
~- Modifications to ""//SerialComm//"" to translate a hardware path, e.g. /dev/cu.usbserial, to a port name and improvements to //""FindSerialPort""// by Christopher Broussard.
** There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3, 10.5.4 and 10.5.5, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5. Only Apple engineering will be able to fix this. **
~- //""ImagingStereoMoviePlayer""// Minor improvements.
~- //""BitsPlusCSFDemo""// contrary to its name now also supports optional output to ""VideoSwitcher"" device , ATI 10 bpc framebuffer and ""PseudoGray"" output (aka bit stealing). It also allows to display an intensity gradient test chart instead of a CSF chart.
== Test scripts in ""PsychTests"" ==
~- Minor improvements to dualhead display sync tests in //""GraphicsDisplaySyncAcrossDualHeadsTest""// and //""PerceptualVBLSyncTest""//.
~- //""KeyboardLatencyTest""// now allows some assessment of the timing accuracy of response boxes, the response box from Cedrus, and the reaction time box from Xiangrui Li et al.
~- //""SearchGammaTable""// and various display calibration routines improved by David Brainard, also improvements to //""CalDemo""//
~- Fix annoying warning about unrecognized escape sequence for //""KbName""// on Linux.
~- Modifications to ""//SerialComm//"" to translate a hardware path, e.g. /dev/cu.usbserial, to a port name and improvements to //""FindSerialPort""// by Christopher Broussard.
Deletions:
== Hardware support ==
**There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3, 10.5.4 and 10.5.5, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5. Only Apple engineering will be able to fix this. **
== New test scripts in ""PsychTests"" ==
Revision [1482]
Edited on 2008-11-09 19:27:57 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""GetMouse""// on ""OS/X"" fixed: If used on multi-core Macintosh computers with many cores, e.g., ""MacPro"" 8 core machines and recent multi-threaded Matlab versions, the function crashed Matlab reliably on each single invocation, unless Matlabs GUI was disabled, ie. Matlab was run in -nojvm mode! This was a classic race-condition, probably present since the very first Psychtoolbox release around 1995! This bug only gets triggered with increasing probability on machines with large numbers of processor cores and on operating systems with efficient multi-threading support, so it basically never happened on single processor machines or under Mac OS 10.3 and earlier, and only very seldom on dual-core machines with recent Mac OS versions.
~- Regression in anaglyph stereo mode fixed: Anaglyph stereo as demonstrated in //""StereoDemo""// with settings 6,7,8 and 9 didn't work. This is fixed.
~- //""DrawFormattedText""//: No longer aborts with error on empty text string as input, but simply does nothing in that case.
~- //moglmorpher//: The fast 3D morpher contained special workaround code for some serious bugs in the ATI display drivers on ""OS/X"" Tiger 10.4.x. As i've learned, the drivers got fixed at least in Leopard 10.5.5, so when used on 10.5, the workaround caused malfunctions on the fixed drivers! Now we detect the ""OS/X"" version, and only enable the workaround on versions lower than 10.5.5. This works now on all 10.4 systems and 10.5.5. I don't know how it behaves on 10.5.0 to 10.5.4, due to lack of a testing system.
~- Small fix to //""VideoDelayLoopMiniDemo""// for use with built-in iSight cameras of some Macintosh computers. A bug in the ""OS/X"" operating system caused wrong image display on such cams.
~- Fix a bug in //""PsychVideoSwitcher""// driver which caused the TTL trigger mechanism to fail. Also extended trigger function: One can select if trigger should happen at each 'Flip' until disabled, or for a predetermined number of 'Flip's then auto-disable.
~- //""PsychImaging""//: Add support code for setup of native 10 bpc framebuffers on supported ""ATI FireGL/Pro and NVidia GTX"" cards.
~- Fix in //""ConvolutionKernelTest""// for error handling when invalid convolution kernels are passed.
~- Minor other fixes and updates to help texts.
~- //""MovingLineDemo""//: Changed behaviour to be more useful for exposing the troubles with flat panels.
~- //""AdditiveBlendingForLinearSuperpositionTutorial""// now also demonstrates how to use the TTL trigger mechanism of the ""VideoSwitcher"" device.
== New test scripts in ""PsychTests"" ==
~- Regression in anaglyph stereo mode fixed: Anaglyph stereo as demonstrated in //""StereoDemo""// with settings 6,7,8 and 9 didn't work. This is fixed.
~- //""DrawFormattedText""//: No longer aborts with error on empty text string as input, but simply does nothing in that case.
~- //moglmorpher//: The fast 3D morpher contained special workaround code for some serious bugs in the ATI display drivers on ""OS/X"" Tiger 10.4.x. As i've learned, the drivers got fixed at least in Leopard 10.5.5, so when used on 10.5, the workaround caused malfunctions on the fixed drivers! Now we detect the ""OS/X"" version, and only enable the workaround on versions lower than 10.5.5. This works now on all 10.4 systems and 10.5.5. I don't know how it behaves on 10.5.0 to 10.5.4, due to lack of a testing system.
~- Small fix to //""VideoDelayLoopMiniDemo""// for use with built-in iSight cameras of some Macintosh computers. A bug in the ""OS/X"" operating system caused wrong image display on such cams.
~- Fix a bug in //""PsychVideoSwitcher""// driver which caused the TTL trigger mechanism to fail. Also extended trigger function: One can select if trigger should happen at each 'Flip' until disabled, or for a predetermined number of 'Flip's then auto-disable.
~- //""PsychImaging""//: Add support code for setup of native 10 bpc framebuffers on supported ""ATI FireGL/Pro and NVidia GTX"" cards.
~- Fix in //""ConvolutionKernelTest""// for error handling when invalid convolution kernels are passed.
~- Minor other fixes and updates to help texts.
~- //""MovingLineDemo""//: Changed behaviour to be more useful for exposing the troubles with flat panels.
~- //""AdditiveBlendingForLinearSuperpositionTutorial""// now also demonstrates how to use the TTL trigger mechanism of the ""VideoSwitcher"" device.
== New test scripts in ""PsychTests"" ==
Deletions:
~- ""DrawFormattedText"": No longer aborts with error on empty text string as input, but simply does nothing in that case.
~- moglmorpher: The fast 3D morpher contained special workaround code for some serious bugs in the ATI display drivers on ""OS/X"" Tiger 10.4.x. As i've learned, the drivers got fixed at least in Leopard 10.5.5, so when used on 10.5, the workaround caused malfunctions on the fixed drivers! Now we detect the ""OS/X"" version, and only enable the workaround on versions lower than 10.5.5. This works now on all 10.4 systems and 10.5.5. I don't know how it behaves on 10.5.0 to 10.5.4, due to lack of a testing system.
~- Small fix to ""VideoDelayLoopMiniDemo"" for use with built-in iSight cameras of some Macintosh computers. A bug in the ""OS/X"" operating system caused wrong image display on such cams.
~- Fix a bug in ""PsychVideoSwitcher"" driver which caused the TTL trigger mechanism to fail. Also extended trigger function: One can select if trigger should happen at each 'Flip' until disabled, or for a predetermined number of 'Flip's then auto-disable.
~-Minor other fixes and updates to help texts.
~- //""AdditiveBlendingForLinearSuperpositionTutorial""// shows two things:
~~- How to take advantage of high precision floating point textures, framebuffers and additive alpha-blending to efficiently draw mathematically correct superimposed stimuli, e.g., overlapping gratings with controllable contrast. This demonstrates a very efficient way of doing such things.
~~- How to enable support for a variety of supported high precision display devices and methods. The demo shows correct setup of nearly all currently supported devices. Type //""help AdditiveBlendingForLinearSuperpositionTutorial""// for an overview. The previous demo, which was specific to the CRS ""Bits++"" box, has been merged into this demo.
== New test scripts in ""PsychTests"" ==
Revision [1481]
Edited on 2008-11-09 19:06:20 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
=== Psychtoolbox beta update from 2008-11-4 (SVN Revision 1151) ===
This update introduces support for "formless dot field" type stimuli, and bug fixes for demos and subroutines. The //""IOPort""// driver has been improved as well.
~- //""IOPort('Write')""// now supports a //blocking// flag of 2 on all operating systems. The old Linux specific polling for "transmitter empty" has been moved to //blocking// = 3. A mode of 2 now polls for the number of pending bytes for writeout in the system write buffer and repeats the polling loop until pending bytes = 0. This is supported on all operating systems.
~- //""IOPort('Write')""// now returns a couple of additional optional timestamps, useful for special timing calibration routines like the upcoming ""PsychRTBox.m"" driver, and for low-level debugging: A prewrite timestamp, a postwrite timestamp and a timestamp of last poll loop iteration (if used)...
~- //""IOPort('Read')""// accepts (for blocking reads) a new optional setting //""PollLatency""// in //""IOPort('ConfigureSerialPort',...);""// The setting allows to select the idle time between unsuccessful poll iterations, to trade off the system load against time quantization in such time critical polling loops.
~- //""IOPort('ConfigureSerialPort')""// allows via new options to enable asynchronous background reading of data from the serial port via a parallel background thread on ""MacOSX"" and ""GNU/Linux"", this feature is not yet supported on Windows. If async read is enabled, //""IOPort('Read')""// will not directly fetch data from the serial port, but it will fetch data that has been read already in the background by the reader thread. This allows to automatically collect streaming data from serial port in the background, for later retrieval via 'Read' calls. This feature is experimental for now, its programming interface may change!
== Improvements and bug fixes to Screen and other drawing functions -- The Visuals ==
~- Regression in anaglyph stereo mode fixed: Anaglyph stereo as demonstrated in ""StereoDemo"" with settings 6,7,8 and 9 didn't work. This is fixed.
~- Robustness improvements to //""Screen('DrawText')""// on ""OS/X"": If a corrupt text string is supplied, the function doesn't crash anymore, but abort with a (hopefully) diagnostic error message.
~- Bugfix to //""Screen('DrawText')""// on Windows: If text is drawn into different windows (onscreen or offscreen) with different text sizes or other different font settings, text should be drawn properly, instead of sometimes applying wrong settings. This was a bug in the way textsettings are cached internally to improve speed.
~- //""Screen('FillPoly')""// received a few performance optimizations. However most of them only had a minor impact on performance. Drawing of complex, concave, potentially self-intersecting filled polygons still needs substantial processing on the CPU and is therefore much slower than drawing of simple concave polygons or simple convex polygons (which are the fastest).
~- Potential robustness improvement for //""Screen('FrameRect')""// against broken graphics drivers when setting 'penSize'. This is a potential improvement, which may or may not help on broken drivers.
~- ""DrawFormattedText"": No longer aborts with error on empty text string as input, but simply does nothing in that case.
~- moglmorpher: The fast 3D morpher contained special workaround code for some serious bugs in the ATI display drivers on ""OS/X"" Tiger 10.4.x. As i've learned, the drivers got fixed at least in Leopard 10.5.5, so when used on 10.5, the workaround caused malfunctions on the fixed drivers! Now we detect the ""OS/X"" version, and only enable the workaround on versions lower than 10.5.5. This works now on all 10.4 systems and 10.5.5. I don't know how it behaves on 10.5.0 to 10.5.4, due to lack of a testing system.
~- Small fix to ""VideoDelayLoopMiniDemo"" for use with built-in iSight cameras of some Macintosh computers. A bug in the ""OS/X"" operating system caused wrong image display on such cams.
~- Fix a bug in ""PsychVideoSwitcher"" driver which caused the TTL trigger mechanism to fail. Also extended trigger function: One can select if trigger should happen at each 'Flip' until disabled, or for a predetermined number of 'Flip's then auto-disable.
**There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3, 10.5.4 and 10.5.5, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5. Only Apple engineering will be able to fix this. **
This update introduces support for "formless dot field" type stimuli, and bug fixes for demos and subroutines. The //""IOPort""// driver has been improved as well.
~- //""IOPort('Write')""// now supports a //blocking// flag of 2 on all operating systems. The old Linux specific polling for "transmitter empty" has been moved to //blocking// = 3. A mode of 2 now polls for the number of pending bytes for writeout in the system write buffer and repeats the polling loop until pending bytes = 0. This is supported on all operating systems.
~- //""IOPort('Write')""// now returns a couple of additional optional timestamps, useful for special timing calibration routines like the upcoming ""PsychRTBox.m"" driver, and for low-level debugging: A prewrite timestamp, a postwrite timestamp and a timestamp of last poll loop iteration (if used)...
~- //""IOPort('Read')""// accepts (for blocking reads) a new optional setting //""PollLatency""// in //""IOPort('ConfigureSerialPort',...);""// The setting allows to select the idle time between unsuccessful poll iterations, to trade off the system load against time quantization in such time critical polling loops.
~- //""IOPort('ConfigureSerialPort')""// allows via new options to enable asynchronous background reading of data from the serial port via a parallel background thread on ""MacOSX"" and ""GNU/Linux"", this feature is not yet supported on Windows. If async read is enabled, //""IOPort('Read')""// will not directly fetch data from the serial port, but it will fetch data that has been read already in the background by the reader thread. This allows to automatically collect streaming data from serial port in the background, for later retrieval via 'Read' calls. This feature is experimental for now, its programming interface may change!
== Improvements and bug fixes to Screen and other drawing functions -- The Visuals ==
~- Regression in anaglyph stereo mode fixed: Anaglyph stereo as demonstrated in ""StereoDemo"" with settings 6,7,8 and 9 didn't work. This is fixed.
~- Robustness improvements to //""Screen('DrawText')""// on ""OS/X"": If a corrupt text string is supplied, the function doesn't crash anymore, but abort with a (hopefully) diagnostic error message.
~- Bugfix to //""Screen('DrawText')""// on Windows: If text is drawn into different windows (onscreen or offscreen) with different text sizes or other different font settings, text should be drawn properly, instead of sometimes applying wrong settings. This was a bug in the way textsettings are cached internally to improve speed.
~- //""Screen('FillPoly')""// received a few performance optimizations. However most of them only had a minor impact on performance. Drawing of complex, concave, potentially self-intersecting filled polygons still needs substantial processing on the CPU and is therefore much slower than drawing of simple concave polygons or simple convex polygons (which are the fastest).
~- Potential robustness improvement for //""Screen('FrameRect')""// against broken graphics drivers when setting 'penSize'. This is a potential improvement, which may or may not help on broken drivers.
~- ""DrawFormattedText"": No longer aborts with error on empty text string as input, but simply does nothing in that case.
~- moglmorpher: The fast 3D morpher contained special workaround code for some serious bugs in the ATI display drivers on ""OS/X"" Tiger 10.4.x. As i've learned, the drivers got fixed at least in Leopard 10.5.5, so when used on 10.5, the workaround caused malfunctions on the fixed drivers! Now we detect the ""OS/X"" version, and only enable the workaround on versions lower than 10.5.5. This works now on all 10.4 systems and 10.5.5. I don't know how it behaves on 10.5.0 to 10.5.4, due to lack of a testing system.
~- Small fix to ""VideoDelayLoopMiniDemo"" for use with built-in iSight cameras of some Macintosh computers. A bug in the ""OS/X"" operating system caused wrong image display on such cams.
~- Fix a bug in ""PsychVideoSwitcher"" driver which caused the TTL trigger mechanism to fail. Also extended trigger function: One can select if trigger should happen at each 'Flip' until disabled, or for a predetermined number of 'Flip's then auto-disable.
**There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3, 10.5.4 and 10.5.5, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Frame sequential stereo on NVidia 8000 series hardware seems to be seriously broken in 10.5.5. Only Apple engineering will be able to fix this. **
Deletions:
This update introduces support for synchronizing the displays of ATI based dual-display setups on ""OS/X"", experimental support for 10 bit native framebuffers on some graphics hardware, smallish fixes for demos and subroutines, and a few new demos and tests in ""PsychDemos"" and ""PsychTests"", as well as improvements to existing demos. The new //""IOPort""// has been improved as well.
~- The optional //nonBlocking// flag of the //""IOPort('Write')""// and //""IOPort('Read')""// subfunctions is replaced by a //blocking// flag instead! If you didn't specify that flag in code using that driver, you won't need to change anything in your code, because the default behaviour is the same - and the default is pretty reasonable. If you specified that flag in your code, you'll have to change that flag to be the opposite of what it was! If you used a setting of //0//, change it to //1// and vice versa. The old flag //nonBlocking// used a double-negation - A setting of zero meant //no non blocking operation, ie., blocking operation//! Beta testing proved that this twisted definition is too hard on the brain, including the brain of the person that developed the driver ;-) -- The meaning of the new //blocking// flag is easy to understand, so the potential of wrong use of that flag should be greatly reduced.
~- On ""GNU/Linux"", the //blocking// flag in the //""IOPort('Write')""// subfunction can also be set to a setting of //2//, on other operating systems a setting of //2// is treated like a setting of //1// for now. A settting of //2// requests use of an especially low-latency mode of waiting for write completion. This is useful for code that needs especially high timing precision in sending data out of the serial port, but it incurs much higher processor load, so it should be used judiciously. With some serial port hardware, it can cause a complete hang of the application due to low level driver bugs (e.g., the current FTDI serial-over-usb driver).
~- At //""IOPort('Verbosity',0)""// verbosity level zero, the driver won't abort an //""[handle, errmsg] = IOPort('OpenSerialPort',...);""// call anymore if opening the serial port fails. Instead it returns //handle// to be a negative number and returns an operating system dependent error message in the optional return argument //errmsg//. The text string //errmsg// contains some specific (searchable) text tokens to signal some frequent error conditions. Specifically, the text string //ENOENT// is contained in //errmsg// if one tries to open a non-existent serial port device. Accessing a device which is already opened by some other process, or with insufficient access permissions, or opening a serial port that exists but doesn't have an operational device connected, will return //EBUSY// and/or //EPERM// as part of the //errmsg// string. This behaviour and tokens allows custom written Matlab code to auto-detect and probe available and operational serial ports by trying to open known ports and checking the return codes. Useful for automatic device detection.
~- The //""CedrusResponseBox""// driver has been improved to take advantage of the improved //""IOPort""// driver for higher robustness in error handling. The overall robustness of Cedrus response box support hasn't increased though, but we are quite certain that this is mostly due to design flaws in the response boxes. Still no response from Cedrus developer support, 4 month after an inquiry...
== Improvements to Screen -- The Visuals ==
Most improvements are related to the image processing pipeline. While the detailed documentation is contained in the files referenced below, most functions are accessed and controlled by the //""PsychImaging""// function and the basic help for how to use them can be found there. Demos mentioned below demonstrate this stuff in "real world" scripts.
~- Support for native 10 bits per color component (10 bpc) framebuffers on some graphics hardware + operating system combinations:
~ On ""GNU/Linux"" and ""OS/X"" with ATI Radeon GPU's of the consumer level Radeon X1000 series and the Radeon HD2000 / 3000 / 4000 series and later, we provide //experimental// support for 10 bit framebuffers with our own homegrown solution. On Linux you need to start Octave or Matlab as system administrator or via the //sudo// command so it has the neccessary permissions to do so. On ""OS/X"" you need to load our special //""PsychtoolboxKernelDriver""//, see //""help PsychtoolboxKernelDriver""// for how to do that. Support is experimental in the sense that we can't guarantee that this feature will work reliable (or at all) on a given system configuration, because we use tricks that are not officially supported or recommended by ATI or Apple, so this feature may or may not work due to factors out of our control. If it works, it may break with future operating system upgrades, so if you need it, better make a backup of your operating system in case you'd need to downgrade!
~ That said, it works pretty well on the tested machines with Tiger 10.4.11, and it actually worked like that since multiple Psychtoolbox beta releases. The news is that we finally verified it really gives 10 bits resolution on consumer Radeon cards via some perceptual visual test - A nice greyscale gradient test image which shows clearly perceptible intensity steps at the expected locations in 8 bit framebuffer mode, but a smooth gradient in experimental 10 bit framebuffer mode.
~ On Microsoft Windows and ""GNU/Linux"", the first graphics cards with native, officially vendor supported 10 bit framebuffers start to hit the market. If you happen to have such a card, Psychtoolbox will support it as well, without the need for special experimental tricks. These cards should support 10 bit reliably - assuming the vendors implementation is correct. As of now, vendors have announced some level of 10 bit support for the following cards:
~ ATI/AMD ""FirePro"" / ""FireGL"" GPU of the latest 2008 generation is advertised as supporting 10 bit on special 10 bit digital displays (e.g., high precision flat panels with ""DisplayPort""), it may soon support 10 bit over the analog output as well (ie., VGA driven CRT monitors etc.).
~ The latest generation NVidia Quadro GPU's on Linux (and probably Windows?) will support 10 bit output, according to [[http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/README/chapter-28.html this excerpt from the release notes of the latest NVidia display drivers for Linux.]]
~ The latest generation of NVidia Geforce GPU's is rumored to support 10 bit natively under some circumstances as well: [[http://www.tgdaily.com/content/view/38649/135/ See this link]] [[http://blogs.zdnet.com/hardware/?p=2079&page=4 and this link.]]
~- The //""PsychtoolboxKernelDriver""// for ""OS/X"" has been refined. We've verified that it is able to synchronize (or resynchronize, after some change of display settings or display configuration) the video refresh cycles of two identical displays connected to the two output connectors of a dual-head graphics card. This works only on ATI Radeon graphics cards of the X1000 series (and likely later models of the HD series) and only for one single dual-head card. It has only been tested on the Radeon Mobility X1600 so far. You need to choose identical monitors and identical display settings for resolution, color depths and refresh rate if you want the monitors to stay in sync after a synchronization, otherwise they'll quickly drift out of sync due to different timing. You need to load the kernel driver as described in //""help PsychtoolboxKernelDriver""//. Then you can issue the //""residual = Screen('Preference', 'SynchronizeDisplays', 1);""// command to trigger a resync. The optional return argument //residual// will contain a remaining offset in scanlines between the two displays. The driver will try up to four times to resync. We always managed to get perfect sync this way. The scripts //""PerceptualVBLSyncTest([0,1])""// and //""GraphicsDisplaySyncAcrossDualHeadsTest""// allow you to test the sync. The first script allows for a perceptual test, the latter script for some numeric assessment.
~- The //""PsychtoolboxKernelDriver""// for ""OS/X"" also provides support for beamposition timestamping on ATI graphics cards -- a feature lacking on current ""OS/X"". This support is nothing new, just worth mentioning again.
~- We no longer unconditionally disable beamposition queries on MS-Windows with Intel GPU's. Some modern Intel GPU's will probably work correctly and our tests have improved so much that we should be able to detect problematic chips automatically. So some Intel GPU's will provide more accurate stimulus timestamping.
~- Capabilities of the ATI ""FireGL / FirePro"" GPU should be now detected correctly on Windows and Linux.
~- A new image processing function //""AddImageUndistortionToGLOperator()""// plus demo //""ImageUndistortionDemo.m""// how to use it: It allows application of geometric "unwarp" transformation as created by ""DisplayUndistortionBVL/Bezier"" to textures and offscreen windows by use of //""Screen('TransformTexture')""// instead of as part of preflip operations. This allows for geometric undistortion of input images, instead of whole display devices. The demo is kind of sketchy, that's why it is added to the ""PsychAlpha/"" subfolder to label it as workable but immature. This method is useful if you don't want to correct for geometric distortions of your display device (for that, see //""help DisplayUndistortionBVL""//), but if you have some optically distorted input video footage or images (e.g., from some camera) that you want to undistort, or if you want to actually apply a geometric distortion to your visual stimulus image.
== New built-in workarounds in Screen for broken graphics drivers and operating systems ==
These workarounds get automatically enabled if the corresponding problem is detected on your system. Some will print out some warning messages to inform you about the problem and possible caveats related to the workaround. Remember: It's always better to fix the system than to rely on some workaround which can only fix 90% of the problem and isn't totally for free. Therefore stay informed about graphics driver and operating system updates if your system has problems.
~-MS-Windows with many ATI cards and recent NVidia cards/drivers: Beamposition queries fail and therefore get disabled. Certain types of failure can be auto-detected and a workaround is enabled. This workaround should reenable high-precison timestamping on such systems, at the expense of slightly increased processor load in certain cases. The warning message of Screen will tell you about more details and refer you to some help text that explains further caveats of this approach.
~ In this release we've increased the sensitivity of the test which is supposed to detect such broken beamposition mechanism on startup, so it is less likely to miss some broken configs. In case it still misses some bugs, you can add the new setting //4096// to a call //""Screen('Preference', 'ConserveVRAM', ...);""//, see //""help ConserveVRAMSettings""// for more info. This will unconditionally enable the special workarounds, even if our test doesn't detect any problems.
**There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!**
~- //""SimpleVoiceTriggerDemo""// demonstrates two different methods of implementing voice triggers via the //""PsychPortAudio""// driver. The //""BasicSoundInputDemo""// and a few other scripts demonstrate this as well, but this demo is cut down to show only the essentials of voice trigger support. Please note that this is just a simple threshold-based trigger, nothing fancy. One could implement more clever filtering to make it more robust, but the basic structure would be the same.
~- //""DrawMirroredTextDemo""// now also shows how to mirror (flip) text upside down instead of only left vs. right.
~- //""MovingLineDemo""// just shows a pair of vertical lines which move horizontally over the screen from left to right. The speed of travel can be set. Why? Because it nicely illustrates the kind of display artifacts and strong motion blur you can get for moving stimuli if you use a flat panel instead of a CRT monitor.
Two tests illustrate the accuracy, or rather inaccuracy, of keypress and mousebuttonpress timestamps. Try them yourself! There are good reasons why special response boxes are still sold and bought for precise reaction time measurements.
~- //""KeyboardLatencyTest""//: This test scripts implements a method to measure absolute keyboard or mouse latency, ie., how close the measured keypress time, e.g., via //""KbCheck""// or //""GetMouse""// is to the real keypress time on your standard keyboard, trackpad our mouse. The script relies on a properly configured //""PsychPortAudio""// driver and a sensitive microphone attached to or close to your keyboard or mouse. I've tested it with the built-in microphone of a ""MacBookPro"". The measurement procedure consists of you repeatedly hitting keys on the keyboard or buttons on you mouse / trackpad. The noise made by hitting the buttons or keys gets captured by the microphone and timestamped by our audio driver + threshold based "voice trigger" implementation. Keypress / Mouse button press time is also measured via a tight //""KbCheck""//, //""KbTriggerWait""// or //""GetMouse""// loop. The script then compares the timestamps of both methods to compute average keypress latency and variability in timing, assuming/knowing that the audio measurements are usually more accurate and low latency on well working audio hardware. The method is of course not perfect, needs careful tuning of sound thresholds and a well working sound card, and you should obviously not trust the measurements down to the millisecond - or at least first verify correct working of the sound trigger method with measurement equipment before trusting it . Still it provides some quite nice illustration of how //large// and //noisy// latencies from standard keyboards and mice can be. Also with identical hardware, latencies can vary significantly depending on operating system and model of keyboard or mouse. Example: On a ""MacBookPro"" under ""OS/X"" average latencies of 16 msecs for external mouse queries and 30 msecs for internal keyboard queries have been observed. The same machine under Ubuntu Linux 7.1 showed also 30 msecs average latency for the keyboard, but 60 msecs latency for the mouse. Variability of mouse timestamps was lower than that of keyboard timestamps.
~- //""HIDIntervalTest""//: This scripts measures the sampling interval of human interface devices (HID), specifically mice and keyboards. During a measurement loop of 10 seconds duration, it asks you to randomly and furiously hit keys on the keyboard, press mouse buttons and move the mouse. Then it plots histograms with the distribution of timestamps collected from mouse button up/down, mouse movement and keypress/release events. The histograms illustrate the sampling - and therefore - quantization of HID devices. Here a few results: On the ""MacBookPro"" under ""OS/X"" 10.4.11, the internal keyboard as well as buttons on trackpad and mouse are sampled at roughly 8 msec intervals. The sampling frequency of mouse movements however is directly related to the display refresh interval: At 60 Hz refresh, 1000 / 60 = 16.6 msecs. At 75 Hz refresh, 1000 / 75 = 13.333 msecs etc. The same machine under Linux has a constant sampling interval of 8 msecs for mouse, trackpad and keyboard. Some other machine tested under ""WindowsXP"" showed a sampling interval of 16 msecs for mouse and keyboard.
~- Diederick C. Niehorster contributed a new function //""ShrinkMatrix""// and a speed improvement to the existing function //""Magnify2DMatrix""//. Both functions are used for shrinking or expanding Matlab matrices.
~- The file extensions of all MEX files for Matlab 7.4 (""R2007a"") and later on Microsoft Windows have been changed from //.dll// to //.mexw32// - the preferred name extension in new Matlab releases. This to prevent unneccessary warning messages by the upcoming Matlab ""R2008b"" about deprecated file extensions.
Revision [1441]
Edited on 2008-08-17 17:20:28 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
This update introduces support for synchronizing the displays of ATI based dual-display setups on ""OS/X"", experimental support for 10 bit native framebuffers on some graphics hardware, smallish fixes for demos and subroutines, and a few new demos and tests in ""PsychDemos"" and ""PsychTests"", as well as improvements to existing demos. The new //""IOPort""// has been improved as well.
Deletions:
Revision [1440]
Edited on 2008-08-17 17:19:02 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""DrawMirroredTextDemo""// now also shows how to mirror (flip) text upside down instead of only left vs. right.
~- //""MovingLineDemo""// just shows a pair of vertical lines which move horizontally over the screen from left to right. The speed of travel can be set. Why? Because it nicely illustrates the kind of display artifacts and strong motion blur you can get for moving stimuli if you use a flat panel instead of a CRT monitor.
~- Diederick C. Niehorster contributed a new function //""ShrinkMatrix""// and a speed improvement to the existing function //""Magnify2DMatrix""//. Both functions are used for shrinking or expanding Matlab matrices.
~- The file extensions of all MEX files for Matlab 7.4 (""R2007a"") and later on Microsoft Windows have been changed from //.dll// to //.mexw32// - the preferred name extension in new Matlab releases. This to prevent unneccessary warning messages by the upcoming Matlab ""R2008b"" about deprecated file extensions.
~- //""MovingLineDemo""// just shows a pair of vertical lines which move horizontally over the screen from left to right. The speed of travel can be set. Why? Because it nicely illustrates the kind of display artifacts and strong motion blur you can get for moving stimuli if you use a flat panel instead of a CRT monitor.
~- Diederick C. Niehorster contributed a new function //""ShrinkMatrix""// and a speed improvement to the existing function //""Magnify2DMatrix""//. Both functions are used for shrinking or expanding Matlab matrices.
~- The file extensions of all MEX files for Matlab 7.4 (""R2007a"") and later on Microsoft Windows have been changed from //.dll// to //.mexw32// - the preferred name extension in new Matlab releases. This to prevent unneccessary warning messages by the upcoming Matlab ""R2008b"" about deprecated file extensions.
Deletions:
~-""MinimalisticOpenGLDemo"" allows to set flags to demonstrate multisample anti-aliasing with/without imaging pipeline enabled.
~- Other small enhancements to demos, downloaders and installers.
~-
Revision [1439]
Edited on 2008-08-17 17:10:21 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
== New or enhanced demos ==
~- //""AdditiveBlendingForLinearSuperpositionTutorial""// shows two things:
~~- How to take advantage of high precision floating point textures, framebuffers and additive alpha-blending to efficiently draw mathematically correct superimposed stimuli, e.g., overlapping gratings with controllable contrast. This demonstrates a very efficient way of doing such things.
~~- How to enable support for a variety of supported high precision display devices and methods. The demo shows correct setup of nearly all currently supported devices. Type //""help AdditiveBlendingForLinearSuperpositionTutorial""// for an overview. The previous demo, which was specific to the CRS ""Bits++"" box, has been merged into this demo.
~- //""SimpleVoiceTriggerDemo""// demonstrates two different methods of implementing voice triggers via the //""PsychPortAudio""// driver. The //""BasicSoundInputDemo""// and a few other scripts demonstrate this as well, but this demo is cut down to show only the essentials of voice trigger support. Please note that this is just a simple threshold-based trigger, nothing fancy. One could implement more clever filtering to make it more robust, but the basic structure would be the same.
== New test scripts in ""PsychTests"" ==
Two tests illustrate the accuracy, or rather inaccuracy, of keypress and mousebuttonpress timestamps. Try them yourself! There are good reasons why special response boxes are still sold and bought for precise reaction time measurements.
~- //""KeyboardLatencyTest""//: This test scripts implements a method to measure absolute keyboard or mouse latency, ie., how close the measured keypress time, e.g., via //""KbCheck""// or //""GetMouse""// is to the real keypress time on your standard keyboard, trackpad our mouse. The script relies on a properly configured //""PsychPortAudio""// driver and a sensitive microphone attached to or close to your keyboard or mouse. I've tested it with the built-in microphone of a ""MacBookPro"". The measurement procedure consists of you repeatedly hitting keys on the keyboard or buttons on you mouse / trackpad. The noise made by hitting the buttons or keys gets captured by the microphone and timestamped by our audio driver + threshold based "voice trigger" implementation. Keypress / Mouse button press time is also measured via a tight //""KbCheck""//, //""KbTriggerWait""// or //""GetMouse""// loop. The script then compares the timestamps of both methods to compute average keypress latency and variability in timing, assuming/knowing that the audio measurements are usually more accurate and low latency on well working audio hardware. The method is of course not perfect, needs careful tuning of sound thresholds and a well working sound card, and you should obviously not trust the measurements down to the millisecond - or at least first verify correct working of the sound trigger method with measurement equipment before trusting it . Still it provides some quite nice illustration of how //large// and //noisy// latencies from standard keyboards and mice can be. Also with identical hardware, latencies can vary significantly depending on operating system and model of keyboard or mouse. Example: On a ""MacBookPro"" under ""OS/X"" average latencies of 16 msecs for external mouse queries and 30 msecs for internal keyboard queries have been observed. The same machine under Ubuntu Linux 7.1 showed also 30 msecs average latency for the keyboard, but 60 msecs latency for the mouse. Variability of mouse timestamps was lower than that of keyboard timestamps.
~- //""HIDIntervalTest""//: This scripts measures the sampling interval of human interface devices (HID), specifically mice and keyboards. During a measurement loop of 10 seconds duration, it asks you to randomly and furiously hit keys on the keyboard, press mouse buttons and move the mouse. Then it plots histograms with the distribution of timestamps collected from mouse button up/down, mouse movement and keypress/release events. The histograms illustrate the sampling - and therefore - quantization of HID devices. Here a few results: On the ""MacBookPro"" under ""OS/X"" 10.4.11, the internal keyboard as well as buttons on trackpad and mouse are sampled at roughly 8 msec intervals. The sampling frequency of mouse movements however is directly related to the display refresh interval: At 60 Hz refresh, 1000 / 60 = 16.6 msecs. At 75 Hz refresh, 1000 / 75 = 13.333 msecs etc. The same machine under Linux has a constant sampling interval of 8 msecs for mouse, trackpad and keyboard. Some other machine tested under ""WindowsXP"" showed a sampling interval of 16 msecs for mouse and keyboard.
~- //""AdditiveBlendingForLinearSuperpositionTutorial""// shows two things:
~~- How to take advantage of high precision floating point textures, framebuffers and additive alpha-blending to efficiently draw mathematically correct superimposed stimuli, e.g., overlapping gratings with controllable contrast. This demonstrates a very efficient way of doing such things.
~~- How to enable support for a variety of supported high precision display devices and methods. The demo shows correct setup of nearly all currently supported devices. Type //""help AdditiveBlendingForLinearSuperpositionTutorial""// for an overview. The previous demo, which was specific to the CRS ""Bits++"" box, has been merged into this demo.
~- //""SimpleVoiceTriggerDemo""// demonstrates two different methods of implementing voice triggers via the //""PsychPortAudio""// driver. The //""BasicSoundInputDemo""// and a few other scripts demonstrate this as well, but this demo is cut down to show only the essentials of voice trigger support. Please note that this is just a simple threshold-based trigger, nothing fancy. One could implement more clever filtering to make it more robust, but the basic structure would be the same.
== New test scripts in ""PsychTests"" ==
Two tests illustrate the accuracy, or rather inaccuracy, of keypress and mousebuttonpress timestamps. Try them yourself! There are good reasons why special response boxes are still sold and bought for precise reaction time measurements.
~- //""KeyboardLatencyTest""//: This test scripts implements a method to measure absolute keyboard or mouse latency, ie., how close the measured keypress time, e.g., via //""KbCheck""// or //""GetMouse""// is to the real keypress time on your standard keyboard, trackpad our mouse. The script relies on a properly configured //""PsychPortAudio""// driver and a sensitive microphone attached to or close to your keyboard or mouse. I've tested it with the built-in microphone of a ""MacBookPro"". The measurement procedure consists of you repeatedly hitting keys on the keyboard or buttons on you mouse / trackpad. The noise made by hitting the buttons or keys gets captured by the microphone and timestamped by our audio driver + threshold based "voice trigger" implementation. Keypress / Mouse button press time is also measured via a tight //""KbCheck""//, //""KbTriggerWait""// or //""GetMouse""// loop. The script then compares the timestamps of both methods to compute average keypress latency and variability in timing, assuming/knowing that the audio measurements are usually more accurate and low latency on well working audio hardware. The method is of course not perfect, needs careful tuning of sound thresholds and a well working sound card, and you should obviously not trust the measurements down to the millisecond - or at least first verify correct working of the sound trigger method with measurement equipment before trusting it . Still it provides some quite nice illustration of how //large// and //noisy// latencies from standard keyboards and mice can be. Also with identical hardware, latencies can vary significantly depending on operating system and model of keyboard or mouse. Example: On a ""MacBookPro"" under ""OS/X"" average latencies of 16 msecs for external mouse queries and 30 msecs for internal keyboard queries have been observed. The same machine under Ubuntu Linux 7.1 showed also 30 msecs average latency for the keyboard, but 60 msecs latency for the mouse. Variability of mouse timestamps was lower than that of keyboard timestamps.
~- //""HIDIntervalTest""//: This scripts measures the sampling interval of human interface devices (HID), specifically mice and keyboards. During a measurement loop of 10 seconds duration, it asks you to randomly and furiously hit keys on the keyboard, press mouse buttons and move the mouse. Then it plots histograms with the distribution of timestamps collected from mouse button up/down, mouse movement and keypress/release events. The histograms illustrate the sampling - and therefore - quantization of HID devices. Here a few results: On the ""MacBookPro"" under ""OS/X"" 10.4.11, the internal keyboard as well as buttons on trackpad and mouse are sampled at roughly 8 msec intervals. The sampling frequency of mouse movements however is directly related to the display refresh interval: At 60 Hz refresh, 1000 / 60 = 16.6 msecs. At 75 Hz refresh, 1000 / 75 = 13.333 msecs etc. The same machine under Linux has a constant sampling interval of 8 msecs for mouse, trackpad and keyboard. Some other machine tested under ""WindowsXP"" showed a sampling interval of 16 msecs for mouse and keyboard.
Revision [1438]
Edited on 2008-08-17 16:28:09 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- Capabilities of the ATI ""FireGL / FirePro"" GPU should be now detected correctly on Windows and Linux.
~- A new image processing function //""AddImageUndistortionToGLOperator()""// plus demo //""ImageUndistortionDemo.m""// how to use it: It allows application of geometric "unwarp" transformation as created by ""DisplayUndistortionBVL/Bezier"" to textures and offscreen windows by use of //""Screen('TransformTexture')""// instead of as part of preflip operations. This allows for geometric undistortion of input images, instead of whole display devices. The demo is kind of sketchy, that's why it is added to the ""PsychAlpha/"" subfolder to label it as workable but immature. This method is useful if you don't want to correct for geometric distortions of your display device (for that, see //""help DisplayUndistortionBVL""//), but if you have some optically distorted input video footage or images (e.g., from some camera) that you want to undistort, or if you want to actually apply a geometric distortion to your visual stimulus image.
~- A new image processing function //""AddImageUndistortionToGLOperator()""// plus demo //""ImageUndistortionDemo.m""// how to use it: It allows application of geometric "unwarp" transformation as created by ""DisplayUndistortionBVL/Bezier"" to textures and offscreen windows by use of //""Screen('TransformTexture')""// instead of as part of preflip operations. This allows for geometric undistortion of input images, instead of whole display devices. The demo is kind of sketchy, that's why it is added to the ""PsychAlpha/"" subfolder to label it as workable but immature. This method is useful if you don't want to correct for geometric distortions of your display device (for that, see //""help DisplayUndistortionBVL""//), but if you have some optically distorted input video footage or images (e.g., from some camera) that you want to undistort, or if you want to actually apply a geometric distortion to your visual stimulus image.
Revision [1437]
Edited on 2008-08-17 16:14:26 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- The //""PsychtoolboxKernelDriver""// for ""OS/X"" also provides support for beamposition timestamping on ATI graphics cards -- a feature lacking on current ""OS/X"". This support is nothing new, just worth mentioning again.
~- We no longer unconditionally disable beamposition queries on MS-Windows with Intel GPU's. Some modern Intel GPU's will probably work correctly and our tests have improved so much that we should be able to detect problematic chips automatically. So some Intel GPU's will provide more accurate stimulus timestamping.
~ In this release we've increased the sensitivity of the test which is supposed to detect such broken beamposition mechanism on startup, so it is less likely to miss some broken configs. In case it still misses some bugs, you can add the new setting //4096// to a call //""Screen('Preference', 'ConserveVRAM', ...);""//, see //""help ConserveVRAMSettings""// for more info. This will unconditionally enable the special workarounds, even if our test doesn't detect any problems.
**There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!**
~- We no longer unconditionally disable beamposition queries on MS-Windows with Intel GPU's. Some modern Intel GPU's will probably work correctly and our tests have improved so much that we should be able to detect problematic chips automatically. So some Intel GPU's will provide more accurate stimulus timestamping.
~ In this release we've increased the sensitivity of the test which is supposed to detect such broken beamposition mechanism on startup, so it is less likely to miss some broken configs. In case it still misses some bugs, you can add the new setting //4096// to a call //""Screen('Preference', 'ConserveVRAM', ...);""//, see //""help ConserveVRAMSettings""// for more info. This will unconditionally enable the special workarounds, even if our test doesn't detect any problems.
**There are still a few unresolvable serious bugs in ""OS/X"" 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!**
Deletions:
Revision [1436]
Edited on 2008-08-17 15:57:12 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- The //""PsychtoolboxKernelDriver""// for ""OS/X"" has been refined. We've verified that it is able to synchronize (or resynchronize, after some change of display settings or display configuration) the video refresh cycles of two identical displays connected to the two output connectors of a dual-head graphics card. This works only on ATI Radeon graphics cards of the X1000 series (and likely later models of the HD series) and only for one single dual-head card. It has only been tested on the Radeon Mobility X1600 so far. You need to choose identical monitors and identical display settings for resolution, color depths and refresh rate if you want the monitors to stay in sync after a synchronization, otherwise they'll quickly drift out of sync due to different timing. You need to load the kernel driver as described in //""help PsychtoolboxKernelDriver""//. Then you can issue the //""residual = Screen('Preference', 'SynchronizeDisplays', 1);""// command to trigger a resync. The optional return argument //residual// will contain a remaining offset in scanlines between the two displays. The driver will try up to four times to resync. We always managed to get perfect sync this way. The scripts //""PerceptualVBLSyncTest([0,1])""// and //""GraphicsDisplaySyncAcrossDualHeadsTest""// allow you to test the sync. The first script allows for a perceptual test, the latter script for some numeric assessment.
Revision [1435]
Edited on 2008-08-17 15:46:18 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- Support for native 10 bits per color component (10 bpc) framebuffers on some graphics hardware + operating system combinations:
~ On ""GNU/Linux"" and ""OS/X"" with ATI Radeon GPU's of the consumer level Radeon X1000 series and the Radeon HD2000 / 3000 / 4000 series and later, we provide //experimental// support for 10 bit framebuffers with our own homegrown solution. On Linux you need to start Octave or Matlab as system administrator or via the //sudo// command so it has the neccessary permissions to do so. On ""OS/X"" you need to load our special //""PsychtoolboxKernelDriver""//, see //""help PsychtoolboxKernelDriver""// for how to do that. Support is experimental in the sense that we can't guarantee that this feature will work reliable (or at all) on a given system configuration, because we use tricks that are not officially supported or recommended by ATI or Apple, so this feature may or may not work due to factors out of our control. If it works, it may break with future operating system upgrades, so if you need it, better make a backup of your operating system in case you'd need to downgrade!
~ That said, it works pretty well on the tested machines with Tiger 10.4.11, and it actually worked like that since multiple Psychtoolbox beta releases. The news is that we finally verified it really gives 10 bits resolution on consumer Radeon cards via some perceptual visual test - A nice greyscale gradient test image which shows clearly perceptible intensity steps at the expected locations in 8 bit framebuffer mode, but a smooth gradient in experimental 10 bit framebuffer mode.
~ On Microsoft Windows and ""GNU/Linux"", the first graphics cards with native, officially vendor supported 10 bit framebuffers start to hit the market. If you happen to have such a card, Psychtoolbox will support it as well, without the need for special experimental tricks. These cards should support 10 bit reliably - assuming the vendors implementation is correct. As of now, vendors have announced some level of 10 bit support for the following cards:
~ ATI/AMD ""FirePro"" / ""FireGL"" GPU of the latest 2008 generation is advertised as supporting 10 bit on special 10 bit digital displays (e.g., high precision flat panels with ""DisplayPort""), it may soon support 10 bit over the analog output as well (ie., VGA driven CRT monitors etc.).
~ The latest generation NVidia Quadro GPU's on Linux (and probably Windows?) will support 10 bit output, according to [[http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/README/chapter-28.html this excerpt from the release notes of the latest NVidia display drivers for Linux.]]
~ The latest generation of NVidia Geforce GPU's is rumored to support 10 bit natively under some circumstances as well: [[http://www.tgdaily.com/content/view/38649/135/ See this link]] [[http://blogs.zdnet.com/hardware/?p=2079&page=4 and this link.]]
~-Minor other fixes and updates to help texts.
~ On ""GNU/Linux"" and ""OS/X"" with ATI Radeon GPU's of the consumer level Radeon X1000 series and the Radeon HD2000 / 3000 / 4000 series and later, we provide //experimental// support for 10 bit framebuffers with our own homegrown solution. On Linux you need to start Octave or Matlab as system administrator or via the //sudo// command so it has the neccessary permissions to do so. On ""OS/X"" you need to load our special //""PsychtoolboxKernelDriver""//, see //""help PsychtoolboxKernelDriver""// for how to do that. Support is experimental in the sense that we can't guarantee that this feature will work reliable (or at all) on a given system configuration, because we use tricks that are not officially supported or recommended by ATI or Apple, so this feature may or may not work due to factors out of our control. If it works, it may break with future operating system upgrades, so if you need it, better make a backup of your operating system in case you'd need to downgrade!
~ That said, it works pretty well on the tested machines with Tiger 10.4.11, and it actually worked like that since multiple Psychtoolbox beta releases. The news is that we finally verified it really gives 10 bits resolution on consumer Radeon cards via some perceptual visual test - A nice greyscale gradient test image which shows clearly perceptible intensity steps at the expected locations in 8 bit framebuffer mode, but a smooth gradient in experimental 10 bit framebuffer mode.
~ On Microsoft Windows and ""GNU/Linux"", the first graphics cards with native, officially vendor supported 10 bit framebuffers start to hit the market. If you happen to have such a card, Psychtoolbox will support it as well, without the need for special experimental tricks. These cards should support 10 bit reliably - assuming the vendors implementation is correct. As of now, vendors have announced some level of 10 bit support for the following cards:
~ ATI/AMD ""FirePro"" / ""FireGL"" GPU of the latest 2008 generation is advertised as supporting 10 bit on special 10 bit digital displays (e.g., high precision flat panels with ""DisplayPort""), it may soon support 10 bit over the analog output as well (ie., VGA driven CRT monitors etc.).
~ The latest generation NVidia Quadro GPU's on Linux (and probably Windows?) will support 10 bit output, according to [[http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/README/chapter-28.html this excerpt from the release notes of the latest NVidia display drivers for Linux.]]
~ The latest generation of NVidia Geforce GPU's is rumored to support 10 bit natively under some circumstances as well: [[http://www.tgdaily.com/content/view/38649/135/ See this link]] [[http://blogs.zdnet.com/hardware/?p=2079&page=4 and this link.]]
~-Minor other fixes and updates to help texts.
Deletions:
Revision [1434]
Edited on 2008-08-17 12:44:00 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
=== Psychtoolbox beta update from 2008-08-15 (SVN Revision 1110) ===
This update, apart from the usual work-arounds for broken graphics card drivers, mainly introduces support for synchronizing the displays of ATI based dual-display setups on ""OS/X"", experimental support for 10 bit native framebuffers on some ATI hardware, smallish fixes for demos and subroutines, and a few new demos and tests in ""PsychDemos"" and ""PsychTests"", as well as improvements to existing demos. The new //""IOPort""// has been improved as well.
== ""IOPort"" Serial port hardware support ==
The new ""IOPort"" driver has been refined in a few areas. The driver is still much work in progress, with a few useful features missing. However, it should be already a superior replacement for all old serial port drivers like ""PsychSerial"", ""SerialComm"" and Matlabs ""serial"" objects for most purposes.
~- The optional //nonBlocking// flag of the //""IOPort('Write')""// and //""IOPort('Read')""// subfunctions is replaced by a //blocking// flag instead! If you didn't specify that flag in code using that driver, you won't need to change anything in your code, because the default behaviour is the same - and the default is pretty reasonable. If you specified that flag in your code, you'll have to change that flag to be the opposite of what it was! If you used a setting of //0//, change it to //1// and vice versa. The old flag //nonBlocking// used a double-negation - A setting of zero meant //no non blocking operation, ie., blocking operation//! Beta testing proved that this twisted definition is too hard on the brain, including the brain of the person that developed the driver ;-) -- The meaning of the new //blocking// flag is easy to understand, so the potential of wrong use of that flag should be greatly reduced.
~- On ""GNU/Linux"", the //blocking// flag in the //""IOPort('Write')""// subfunction can also be set to a setting of //2//, on other operating systems a setting of //2// is treated like a setting of //1// for now. A settting of //2// requests use of an especially low-latency mode of waiting for write completion. This is useful for code that needs especially high timing precision in sending data out of the serial port, but it incurs much higher processor load, so it should be used judiciously. With some serial port hardware, it can cause a complete hang of the application due to low level driver bugs (e.g., the current FTDI serial-over-usb driver).
~- At //""IOPort('Verbosity',0)""// verbosity level zero, the driver won't abort an //""[handle, errmsg] = IOPort('OpenSerialPort',...);""// call anymore if opening the serial port fails. Instead it returns //handle// to be a negative number and returns an operating system dependent error message in the optional return argument //errmsg//. The text string //errmsg// contains some specific (searchable) text tokens to signal some frequent error conditions. Specifically, the text string //ENOENT// is contained in //errmsg// if one tries to open a non-existent serial port device. Accessing a device which is already opened by some other process, or with insufficient access permissions, or opening a serial port that exists but doesn't have an operational device connected, will return //EBUSY// and/or //EPERM// as part of the //errmsg// string. This behaviour and tokens allows custom written Matlab code to auto-detect and probe available and operational serial ports by trying to open known ports and checking the return codes. Useful for automatic device detection.
~- Help texts have been improved as well.
~- The //""CedrusResponseBox""// driver has been improved to take advantage of the improved //""IOPort""// driver for higher robustness in error handling. The overall robustness of Cedrus response box support hasn't increased though, but we are quite certain that this is mostly due to design flaws in the response boxes. Still no response from Cedrus developer support, 4 month after an inquiry...
This update, apart from the usual work-arounds for broken graphics card drivers, mainly introduces support for synchronizing the displays of ATI based dual-display setups on ""OS/X"", experimental support for 10 bit native framebuffers on some ATI hardware, smallish fixes for demos and subroutines, and a few new demos and tests in ""PsychDemos"" and ""PsychTests"", as well as improvements to existing demos. The new //""IOPort""// has been improved as well.
== ""IOPort"" Serial port hardware support ==
The new ""IOPort"" driver has been refined in a few areas. The driver is still much work in progress, with a few useful features missing. However, it should be already a superior replacement for all old serial port drivers like ""PsychSerial"", ""SerialComm"" and Matlabs ""serial"" objects for most purposes.
~- The optional //nonBlocking// flag of the //""IOPort('Write')""// and //""IOPort('Read')""// subfunctions is replaced by a //blocking// flag instead! If you didn't specify that flag in code using that driver, you won't need to change anything in your code, because the default behaviour is the same - and the default is pretty reasonable. If you specified that flag in your code, you'll have to change that flag to be the opposite of what it was! If you used a setting of //0//, change it to //1// and vice versa. The old flag //nonBlocking// used a double-negation - A setting of zero meant //no non blocking operation, ie., blocking operation//! Beta testing proved that this twisted definition is too hard on the brain, including the brain of the person that developed the driver ;-) -- The meaning of the new //blocking// flag is easy to understand, so the potential of wrong use of that flag should be greatly reduced.
~- On ""GNU/Linux"", the //blocking// flag in the //""IOPort('Write')""// subfunction can also be set to a setting of //2//, on other operating systems a setting of //2// is treated like a setting of //1// for now. A settting of //2// requests use of an especially low-latency mode of waiting for write completion. This is useful for code that needs especially high timing precision in sending data out of the serial port, but it incurs much higher processor load, so it should be used judiciously. With some serial port hardware, it can cause a complete hang of the application due to low level driver bugs (e.g., the current FTDI serial-over-usb driver).
~- At //""IOPort('Verbosity',0)""// verbosity level zero, the driver won't abort an //""[handle, errmsg] = IOPort('OpenSerialPort',...);""// call anymore if opening the serial port fails. Instead it returns //handle// to be a negative number and returns an operating system dependent error message in the optional return argument //errmsg//. The text string //errmsg// contains some specific (searchable) text tokens to signal some frequent error conditions. Specifically, the text string //ENOENT// is contained in //errmsg// if one tries to open a non-existent serial port device. Accessing a device which is already opened by some other process, or with insufficient access permissions, or opening a serial port that exists but doesn't have an operational device connected, will return //EBUSY// and/or //EPERM// as part of the //errmsg// string. This behaviour and tokens allows custom written Matlab code to auto-detect and probe available and operational serial ports by trying to open known ports and checking the return codes. Useful for automatic device detection.
~- Help texts have been improved as well.
~- The //""CedrusResponseBox""// driver has been improved to take advantage of the improved //""IOPort""// driver for higher robustness in error handling. The overall robustness of Cedrus response box support hasn't increased though, but we are quite certain that this is mostly due to design flaws in the response boxes. Still no response from Cedrus developer support, 4 month after an inquiry...
Deletions:
This update, apart from work-arounds for for broken graphics card drivers mainly introduces support for anti-aliasing of visual stimuli while the image processing pipeline is used. So far, use of the imaging pipeline and of multisampled anti-aliasing where mutually exclusive. Simultaneous use of both is available on graphics hardware and operating systems that support the required OpenGL extensions EXT_framebuffer_blit and EXT_framebuffer_multisample.
~- Serial port support: Small improvements to "IOPort", a new cross-platform driver for control of Input/Output ports and esp. serial ports. At verbosity level zero, the driver shut now really shut up. If opening a port fails at verbosity level zero, no abort due to error is done, instead an invalid handle -1 is returned. This allows code to probe serial ports via trial and error without cluttering the console window of Matlab/Octave. Timing behaviour of blocking writes to serial port improved: Should now really block on Windows until data has been written out the port. On Linux a new polling-for-completion mode allows to poll for write completion instead of blocking. This is useful to get lower latencies on short writes, e.g., for clock calibration routines that are used to sync PTB's clock with external hardware clocks.
~- //""KbCheck(-1)""// now allows to treat all connected keyboards on ""OS/X"" as one single keyboard, instead of querying each keyboard in isolation (when a keyboard index of a specific keyboard is passed) or of the primary keyboard alone. Contributed by Andrew Leber.
~- //""CharAvail""// Christopher Broussard implemented some speed optimizations for that command.
~- Support for multisample anti-aliasing when using the imaging pipeline: If the optional 'multisample' parameter in //""Screen('OpenWindow')""// or //""PsychImaging('OpenWindow')""// is set to a non-zero value, then multisample anti-aliasing will be used in the same way as when the imaging pipeline is disabled. This wasn't supported up to now, because it requires a totally different internal implementation. Additionally, //""Screen('OpenOffscreenWindow')""// with imaging pipeline enabled, honors a new optional 'multisample' parameter, so one can enable or disable multisample anti-aliasing for offscreen windows on a per-offscreen windows basis. Please note though that anti-aliased offscreen windows can't be directly drawn or copied around via //""Screen('DrawTexture') or Screen('CopyWindow')""//, neither can't there images be read-back directly via //""Screen('GetImage')""//. Instead one needs to create a "normal" offscreen window of matching size and use //""Screen('CopyWindow')""// to create a copy of a multisampled offscreen window into such a normal offscreen window. The copy will be anti-aliased and drawable. This is due to the way the underlying hardware works -- The use of //""Screen('CopyWindow')""// triggers an explicit multisample resolve and anti-aliasing operation for more control.
~On MS-Windows and GNU/Linux, most recent NVidia and ATI GPU's do support anti-aliasing with the imaging pipeline on. On ""OS/X"", only some ATI GPU's do support this feature when used on "Leopard" version 10.5.3 or later, but support for NVidia GPU's on "Leopard" is expected to arrive in a future ""OS/X"" release.
~-//""Screen('CopyWindow')""// will use a new internal implementation on systems that support EXT_framebuffer_blit extension for more flexibility and speed. Should this pretty new code expose any bugs, you can use //""Screen('Preference', 'ConserveVRAM', 2048);""// setting to switch back to the old implementation, but don't forget to report such issues to the forum, should there be any.
~-The subfunction //""Screen('Blendfunction')""// optionally allows to set a "color write mask": You can selectively enable or disable drawing into specific color channels, in case this is of any use. E.g., you could only enable the red channel for drawing ops, so any following drawing commands only change colors in the red channel, but leave the green, blue or alpha components of the framebuffer untouched.
~-MS-Windows with many ATI cards and recent NVidia cards: Crash when trying to use 3D mode. Fixed: You no longer need to provide the special //""Screen('ConserveVRAM')""// flags to manually enable workarounds. Should just work, without any known limitations.
~-OS/X with all graphics cards on both "Tiger" and "Leopard": Wrong conversion of very small values in floating point textures of 16 bit float precision. Very small values (around 10e-9) which should be rounded down to zero, as they are not representable by that format, "wrap around" and result in huge numbers that create severe visual artifacts. This is an operating system bug. Our code now performs this rounding itself, restoring correct behaviour, at the cost of additional computation time in //""Screen('MakeTexture')""// when using such floating point textures. If you use 32 bpc floating point textures instead, numerical precision will be much higher, and there are no known problems with that format. 16bpc textures are accurate to 3 digits behind the decimal point, whereas 32 bpc float textures are accurate to around 7-8 digits - sufficient for any conceivable use. However such high precision textures take up twice the amount of memory and have potentially lower drawing speeds-- Life is full of trade-offs...
~-Some optimizations to the internal texture creation code to allow for faster texture creation on some broken ATI drivers on Windows: Speedup can be 10x or more.
~-The timestamping code in Screen has been improved further to try to prevent false alerts wrt. broken timestamping on some slightly deficient graphics drivers under rare conditions.
~-Workaround in //""Screen('DrawDots')""// and //""Screen('DrawLines')""// to prevent hard graphics system lockups on some totally broken ""OS/X"" 10.5 systems with NVidia hardware.
~-Workaround in procedural gabor and sine grating shaders for bugs in the GLSL shading language implementation for ATI Radeon HD cards on ""OS/X"" 10.5.3 and 10.5.4. The workaround fully resolves the issue. Apple engineering confirms a fix will be available in an upcoming OS release.
~-Small fix to //""InitializeMatlabOpenGL""//, contributed by Mingjing Zhang, Vision Research Lab., University of Science and Technology of China. Had trouble loading the GL constants file if PTB was installed in a path with spaces in its name on MS-Windows.
Revision [1395]
Edited on 2008-07-12 21:41:01 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- //""KbCheck(-1)""// now allows to treat all connected keyboards on ""OS/X"" as one single keyboard, instead of querying each keyboard in isolation (when a keyboard index of a specific keyboard is passed) or of the primary keyboard alone. Contributed by Andrew Leber.
~- //""CharAvail""// Christopher Broussard implemented some speed optimizations for that command.
~-Workaround in //""Screen('DrawDots')""// and //""Screen('DrawLines')""// to prevent hard graphics system lockups on some totally broken ""OS/X"" 10.5 systems with NVidia hardware.
~-Small fix to //""InitializeMatlabOpenGL""//, contributed by Mingjing Zhang, Vision Research Lab., University of Science and Technology of China. Had trouble loading the GL constants file if PTB was installed in a path with spaces in its name on MS-Windows.
However, there are still a few unresolvable serious bugs in ""OS/X"" 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!
== Misc other stuff ==
~-""MoviePlaybackDemoOSX"" can now optionally the "Buy a Mac" ads from Apple's website instead of the boring colliding discs demo movie on "OS/X". Unfortunately movie playback from the web is only supported on "OS/X", so the main target audience is missed ;-)
~-""MinimalisticOpenGLDemo"" allows to set flags to demonstrate multisample anti-aliasing with/without imaging pipeline enabled.
~- Other small enhancements to demos, downloaders and installers.
~-
~- //""CharAvail""// Christopher Broussard implemented some speed optimizations for that command.
~-Workaround in //""Screen('DrawDots')""// and //""Screen('DrawLines')""// to prevent hard graphics system lockups on some totally broken ""OS/X"" 10.5 systems with NVidia hardware.
~-Small fix to //""InitializeMatlabOpenGL""//, contributed by Mingjing Zhang, Vision Research Lab., University of Science and Technology of China. Had trouble loading the GL constants file if PTB was installed in a path with spaces in its name on MS-Windows.
However, there are still a few unresolvable serious bugs in ""OS/X"" 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!
== Misc other stuff ==
~-""MoviePlaybackDemoOSX"" can now optionally the "Buy a Mac" ads from Apple's website instead of the boring colliding discs demo movie on "OS/X". Unfortunately movie playback from the web is only supported on "OS/X", so the main target audience is missed ;-)
~-""MinimalisticOpenGLDemo"" allows to set flags to demonstrate multisample anti-aliasing with/without imaging pipeline enabled.
~- Other small enhancements to demos, downloaders and installers.
~-
Deletions:
However, there are still a few unresolvable serious bugs in OS/X 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!
Revision [1394]
Edited on 2008-07-12 21:29:42 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
=== Psychtoolbox beta update from 2008-07-12 (SVN Revision 1090) ===
This update, apart from work-arounds for for broken graphics card drivers mainly introduces support for anti-aliasing of visual stimuli while the image processing pipeline is used. So far, use of the imaging pipeline and of multisampled anti-aliasing where mutually exclusive. Simultaneous use of both is available on graphics hardware and operating systems that support the required OpenGL extensions EXT_framebuffer_blit and EXT_framebuffer_multisample.
~- Serial port support: Small improvements to "IOPort", a new cross-platform driver for control of Input/Output ports and esp. serial ports. At verbosity level zero, the driver shut now really shut up. If opening a port fails at verbosity level zero, no abort due to error is done, instead an invalid handle -1 is returned. This allows code to probe serial ports via trial and error without cluttering the console window of Matlab/Octave. Timing behaviour of blocking writes to serial port improved: Should now really block on Windows until data has been written out the port. On Linux a new polling-for-completion mode allows to poll for write completion instead of blocking. This is useful to get lower latencies on short writes, e.g., for clock calibration routines that are used to sync PTB's clock with external hardware clocks.
~- Support for multisample anti-aliasing when using the imaging pipeline: If the optional 'multisample' parameter in //""Screen('OpenWindow')""// or //""PsychImaging('OpenWindow')""// is set to a non-zero value, then multisample anti-aliasing will be used in the same way as when the imaging pipeline is disabled. This wasn't supported up to now, because it requires a totally different internal implementation. Additionally, //""Screen('OpenOffscreenWindow')""// with imaging pipeline enabled, honors a new optional 'multisample' parameter, so one can enable or disable multisample anti-aliasing for offscreen windows on a per-offscreen windows basis. Please note though that anti-aliased offscreen windows can't be directly drawn or copied around via //""Screen('DrawTexture') or Screen('CopyWindow')""//, neither can't there images be read-back directly via //""Screen('GetImage')""//. Instead one needs to create a "normal" offscreen window of matching size and use //""Screen('CopyWindow')""// to create a copy of a multisampled offscreen window into such a normal offscreen window. The copy will be anti-aliased and drawable. This is due to the way the underlying hardware works -- The use of //""Screen('CopyWindow')""// triggers an explicit multisample resolve and anti-aliasing operation for more control.
~On MS-Windows and GNU/Linux, most recent NVidia and ATI GPU's do support anti-aliasing with the imaging pipeline on. On ""OS/X"", only some ATI GPU's do support this feature when used on "Leopard" version 10.5.3 or later, but support for NVidia GPU's on "Leopard" is expected to arrive in a future ""OS/X"" release.
~-//""Screen('CopyWindow')""// will use a new internal implementation on systems that support EXT_framebuffer_blit extension for more flexibility and speed. Should this pretty new code expose any bugs, you can use //""Screen('Preference', 'ConserveVRAM', 2048);""// setting to switch back to the old implementation, but don't forget to report such issues to the forum, should there be any.
~-The subfunction //""Screen('Blendfunction')""// optionally allows to set a "color write mask": You can selectively enable or disable drawing into specific color channels, in case this is of any use. E.g., you could only enable the red channel for drawing ops, so any following drawing commands only change colors in the red channel, but leave the green, blue or alpha components of the framebuffer untouched.
~-Minor other fixes or help text updates.
== New built-in workarounds in Screen for broken graphics drivers and operating systems ==
These workarounds get automatically enabled if the corresponding problem is detected on your system. Some will print out some warning messages to inform you about the problem and possible caveats related to the workaround. Remember: It's always better to fix the system than to rely on some workaround which can only fix 90% of the problem and isn't totally for free. Therefore stay informed about graphics driver and operating system updates if your system has problems.
~-MS-Windows with many ATI cards and recent NVidia cards: Crash when trying to use 3D mode. Fixed: You no longer need to provide the special //""Screen('ConserveVRAM')""// flags to manually enable workarounds. Should just work, without any known limitations.
~-MS-Windows with many ATI cards and recent NVidia cards/drivers: Beamposition queries fail and therefore get disabled. Certain types of failure can be auto-detected and a workaround is enabled. This workaround should reenable high-precison timestamping on such systems, at the expense of slightly increased processor load in certain cases. The warning message of Screen will tell you about more details and refer you to some help text that explains further caveats of this approach.
~-OS/X with all graphics cards on both "Tiger" and "Leopard": Wrong conversion of very small values in floating point textures of 16 bit float precision. Very small values (around 10e-9) which should be rounded down to zero, as they are not representable by that format, "wrap around" and result in huge numbers that create severe visual artifacts. This is an operating system bug. Our code now performs this rounding itself, restoring correct behaviour, at the cost of additional computation time in //""Screen('MakeTexture')""// when using such floating point textures. If you use 32 bpc floating point textures instead, numerical precision will be much higher, and there are no known problems with that format. 16bpc textures are accurate to 3 digits behind the decimal point, whereas 32 bpc float textures are accurate to around 7-8 digits - sufficient for any conceivable use. However such high precision textures take up twice the amount of memory and have potentially lower drawing speeds-- Life is full of trade-offs...
~-Some optimizations to the internal texture creation code to allow for faster texture creation on some broken ATI drivers on Windows: Speedup can be 10x or more.
~-The timestamping code in Screen has been improved further to try to prevent false alerts wrt. broken timestamping on some slightly deficient graphics drivers under rare conditions.
~-Workaround in //""Screen('DrawDots')""// and //""Screen('DrawLines')""// to prevent hard graphics system lockups on some totally broken OS/X 10.5 systems with NVidia hardware.
~-Workaround in procedural gabor and sine grating shaders for bugs in the GLSL shading language implementation for ATI Radeon HD cards on ""OS/X"" 10.5.3 and 10.5.4. The workaround fully resolves the issue. Apple engineering confirms a fix will be available in an upcoming OS release.
However, there are still a few unresolvable serious bugs in OS/X 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!
This update, apart from work-arounds for for broken graphics card drivers mainly introduces support for anti-aliasing of visual stimuli while the image processing pipeline is used. So far, use of the imaging pipeline and of multisampled anti-aliasing where mutually exclusive. Simultaneous use of both is available on graphics hardware and operating systems that support the required OpenGL extensions EXT_framebuffer_blit and EXT_framebuffer_multisample.
~- Serial port support: Small improvements to "IOPort", a new cross-platform driver for control of Input/Output ports and esp. serial ports. At verbosity level zero, the driver shut now really shut up. If opening a port fails at verbosity level zero, no abort due to error is done, instead an invalid handle -1 is returned. This allows code to probe serial ports via trial and error without cluttering the console window of Matlab/Octave. Timing behaviour of blocking writes to serial port improved: Should now really block on Windows until data has been written out the port. On Linux a new polling-for-completion mode allows to poll for write completion instead of blocking. This is useful to get lower latencies on short writes, e.g., for clock calibration routines that are used to sync PTB's clock with external hardware clocks.
~- Support for multisample anti-aliasing when using the imaging pipeline: If the optional 'multisample' parameter in //""Screen('OpenWindow')""// or //""PsychImaging('OpenWindow')""// is set to a non-zero value, then multisample anti-aliasing will be used in the same way as when the imaging pipeline is disabled. This wasn't supported up to now, because it requires a totally different internal implementation. Additionally, //""Screen('OpenOffscreenWindow')""// with imaging pipeline enabled, honors a new optional 'multisample' parameter, so one can enable or disable multisample anti-aliasing for offscreen windows on a per-offscreen windows basis. Please note though that anti-aliased offscreen windows can't be directly drawn or copied around via //""Screen('DrawTexture') or Screen('CopyWindow')""//, neither can't there images be read-back directly via //""Screen('GetImage')""//. Instead one needs to create a "normal" offscreen window of matching size and use //""Screen('CopyWindow')""// to create a copy of a multisampled offscreen window into such a normal offscreen window. The copy will be anti-aliased and drawable. This is due to the way the underlying hardware works -- The use of //""Screen('CopyWindow')""// triggers an explicit multisample resolve and anti-aliasing operation for more control.
~On MS-Windows and GNU/Linux, most recent NVidia and ATI GPU's do support anti-aliasing with the imaging pipeline on. On ""OS/X"", only some ATI GPU's do support this feature when used on "Leopard" version 10.5.3 or later, but support for NVidia GPU's on "Leopard" is expected to arrive in a future ""OS/X"" release.
~-//""Screen('CopyWindow')""// will use a new internal implementation on systems that support EXT_framebuffer_blit extension for more flexibility and speed. Should this pretty new code expose any bugs, you can use //""Screen('Preference', 'ConserveVRAM', 2048);""// setting to switch back to the old implementation, but don't forget to report such issues to the forum, should there be any.
~-The subfunction //""Screen('Blendfunction')""// optionally allows to set a "color write mask": You can selectively enable or disable drawing into specific color channels, in case this is of any use. E.g., you could only enable the red channel for drawing ops, so any following drawing commands only change colors in the red channel, but leave the green, blue or alpha components of the framebuffer untouched.
~-Minor other fixes or help text updates.
== New built-in workarounds in Screen for broken graphics drivers and operating systems ==
These workarounds get automatically enabled if the corresponding problem is detected on your system. Some will print out some warning messages to inform you about the problem and possible caveats related to the workaround. Remember: It's always better to fix the system than to rely on some workaround which can only fix 90% of the problem and isn't totally for free. Therefore stay informed about graphics driver and operating system updates if your system has problems.
~-MS-Windows with many ATI cards and recent NVidia cards: Crash when trying to use 3D mode. Fixed: You no longer need to provide the special //""Screen('ConserveVRAM')""// flags to manually enable workarounds. Should just work, without any known limitations.
~-MS-Windows with many ATI cards and recent NVidia cards/drivers: Beamposition queries fail and therefore get disabled. Certain types of failure can be auto-detected and a workaround is enabled. This workaround should reenable high-precison timestamping on such systems, at the expense of slightly increased processor load in certain cases. The warning message of Screen will tell you about more details and refer you to some help text that explains further caveats of this approach.
~-OS/X with all graphics cards on both "Tiger" and "Leopard": Wrong conversion of very small values in floating point textures of 16 bit float precision. Very small values (around 10e-9) which should be rounded down to zero, as they are not representable by that format, "wrap around" and result in huge numbers that create severe visual artifacts. This is an operating system bug. Our code now performs this rounding itself, restoring correct behaviour, at the cost of additional computation time in //""Screen('MakeTexture')""// when using such floating point textures. If you use 32 bpc floating point textures instead, numerical precision will be much higher, and there are no known problems with that format. 16bpc textures are accurate to 3 digits behind the decimal point, whereas 32 bpc float textures are accurate to around 7-8 digits - sufficient for any conceivable use. However such high precision textures take up twice the amount of memory and have potentially lower drawing speeds-- Life is full of trade-offs...
~-Some optimizations to the internal texture creation code to allow for faster texture creation on some broken ATI drivers on Windows: Speedup can be 10x or more.
~-The timestamping code in Screen has been improved further to try to prevent false alerts wrt. broken timestamping on some slightly deficient graphics drivers under rare conditions.
~-Workaround in //""Screen('DrawDots')""// and //""Screen('DrawLines')""// to prevent hard graphics system lockups on some totally broken OS/X 10.5 systems with NVidia hardware.
~-Workaround in procedural gabor and sine grating shaders for bugs in the GLSL shading language implementation for ATI Radeon HD cards on ""OS/X"" 10.5.3 and 10.5.4. The workaround fully resolves the issue. Apple engineering confirms a fix will be available in an upcoming OS release.
However, there are still a few unresolvable serious bugs in OS/X 10.5.3 and 10.5.4, especially prominent with NVidia 8000 series hardware for which no workaround exists. E.g., multi-display operation (stereo setups) seems to be highly unreliable and dysfunctional. Certain //""Screen('CopyWindow')""// commands can caus a hard graphics system lockup for no conceivable reason. Many posts on public internet forums and the Apple mailing lists suggest many more similar serious problems. Only Apple engineering will be able to fix this. Currently we recommend to not upgrade to 10.5.3 or 10.5.4 on machines that are crucial for your productive work!
Deletions:
This update, apart from the usual bug fixes (mostly for broken graphics card drivers, but also for a few ptb bugs) mainly improves support for high precision drawing and display of visual stimuli. Another major part is consistent support of serial port access for all operating systems and runtime environments. And then there are lots of improvements to single functions.
~- Experimental support for the basic functions of the USB 1024-LS digital ""I/O"" box on Apple ""OS/X"". This is implemented but untested -- no feedback was received by any of the persons who wanted to try it.
~- Support for [[http://www.cedrus.com/responsepads/rb_series.htm Cedrus response boxes of the RBx30 series and compatible XiD devices.]] See "help CedrusResponseBox" for how to use the new CedrusResponseBox command to operate and query the box. Please note that the current driver only "sort of works" for the basic features of the box, although a lot of time has been spent by multiple people trying to make it work. More advanced features are implemented, but their reliability is low enough to render them useless for most purpose. Basic key queries and button event queries work, so you can actually get responses from your subjects. Queries of the built-in timers work, but due to some interesting design flaws in the protocol, i'm not sure what they should be good for, unless you can get external baseline signals from the TTL trigger input ports. Setup, control and query of the TTL i/o port sometimes (in about one third of all trials) works under some random and unrepeatable circumstances, so good luck if you want to use them. I am still waiting since 30th of April for any helpful comments or suggestions from Cedrus developer support about how one can make their devices more cooperative with software other than their own. Thanks to Jenny Read, Cambridge Research Systems, Jon Peirce, Thomas Tanner and Tobias Wolf for suggestions, code examples, testing or sharing the pain.
~- Improved support for the EGI/Netstation EEG system. Our old NetStation control function apparently only worked on PowerPC based Macintosh computers. The new driver works on all Apple Macintosh computers and should also work on Intel PC under Windows and Linux. Thanks to Gergely Csibra and Zhao Fan for fixing this.
~- The pnet mex file for TCP/UDP/IP support has been recompiled to allow for lower communication latency. This should improve timing for at least NetStation and the iViewX eyetrackers.
~- Serial port support: This update contains the first release of "IOPort", a new cross-platform driver for control of Input/Output ports. The driver works with Matlab and Octave on all supported operating systems OSX, Linux and Windows. This initial release provides unified support for serial ports, both native ones and serial ports emulated over USB protocol or other protocols. Future versions of the driver are intended to provide support for other types of I/O ports, e.g., parallel ports. As of now, the driver is only used by the CedrusResponseBox M-File, but long-term all code should be switched to this unified driver, e.g., the PR-650 photometer routines etc, so we can get rid of special solutions like PsychSerial or SerialComm.
~- Mouse wheel support: On OS/X the function GetMouseWheel() allows query of the state/movement of the mouse wheels of wheel mice. However, this seems to occassionally crash after multiple "clear all" -> run script -> "clear all" cycles for yet unresolved reasons.
~- Much improved HDR/High precision drawing support, including improved GPU capabilities detection, especially on Apple OSX: Psychtoolbox should support drawing of arbitrary color values, even ones with negative signs, on OS X as well. In the past, this feature was only available on MS-Windows and Linux due to some software design restriction in all versions of OS X. PTB can now detect such restrictions and enable a special internal workaround solution that achieves the same without relying on the operating systems support. The ability to draw "negative" color values is mostly useful for subtracting color from a given framebuffer image in combination with alpha-blending, e.g., for fast and efficient drawing of large numbers of gabor patches or superimposed patches. Examples of this technique are demonstrated in ""BitsPlusPlusAdditiveBlendingForLinearSuperpositionTutorial"" or ""GarboriumDemo"". There is also a new but not fully finished test script ""HighColorPrecisionDrawingTest"". It allows to get some basic measures of the accuracy (how closely does the drawn color/luminance match the requested one) of drawing commands. Some test cases sometimes give worse numbers than they should due to some quirks in some graphics cards which are unrelated to accuracy but confounded with it. E.g., if the majority of test results tells you that your system can draw with 16 bits of precision, but one or two tests tell you it only has 6 bits or 0 bits of precision, then you can assume that the 16 bits is the more correct number and the other one is the outlier.
~ This functionality is mostly controlled by the special //floatprecision// flags of //""Screen('MakeTexture',...)""// for drawing of high precision textures, and the //""Screen('ColorRange',....)""// command for drawing of other primitives and control over the required precision, value range and clamping behaviour of such drawing operations. General control of framebuffer precision is again done via //""PsychImaging""// and its subfunctions.
~- High precision display device drivers for most common devices, and a test to test them:
~- [[http://www.crsltd.com/catalog/bits%2B%2B/index.html CRS Bits++ in all modes ]] -- Detail improvements: Support for automatic gamma correction in ""Mono++ and Color++"" modes (see below) and for overlay windows in ""Mono++"" mode. Some automatic fixes for some broken graphics drivers as well.
~- [[http://lobes.usc.edu/VideoSwitcher/ VideoSwitcher by Xiangru Li et al.]] -- A video attenuator device with active amplifiers, useable with standard RGB monitors for high precision luminance output, including a single TTL trigger output port. See help for ""PsychVideoSwitcher"".
~- Generic video attenuator support via Lookup table transforms: Allows to drive any attenuator style device. You create some Luminance to RGB lookup table for your device in a device specific manner. Our driver performs automatic mapping of luminance values to proper RGB values from the table. Supports devices with up to 16 bit luminance resolution.
~- [[http://r0k.us/graphics/pseudoGrey.html PseudoGray shader aka BitStealing]]: An algorithm that tries to squeeze out a few extra bits of luminance reproduction on standard 8 bits per color component graphics cards: See help for ""CreatePseudoGrayLUT""
~- ATI 10 bpc framebuffer refinements: See help for ""PsychHelperCreateARGB2101010RemapCLUT"" and for ""PsychtoolboxKernelDriver""
~- ""BrightSideHDR"" refined: Support for the [[http://en.wikipedia.org/wiki/DR37-P DR37-P high dynamic range display]] from ""BrightSide"" also received a few detail improvements.
The ""BitsPlusPlusAdditiveBlendingForLinearSuperpositionTutorial"" currently demonstrates how to enable and use the different drivers in its source code. While this script used to only demonstrate ""Bits++ Mono++"" mode, it its now more generic and will need a new name.
The ""HighPrecisionLuminanceOutputDriversImagingPipelineTest"" tests accuracy of the different output drivers, except for the CRS ""Bits++"" which has its own test script like in the past.
~- Color management integrated into all opmodes, e.g., gamma correction: This applies only in conjunction with use of the imaging pipeline. It should work with all HDR / high precision output drivers (see above). Read help for ""PsychColorCorrection"" for an overview. Currently only a simple gamma correction is implemented, but this is easily extensible.
~- High quality spatial display calibration and geometric undistortion routines, [[http://bankslab.berkeley.edu/ contributed by the Banks Vision Lab at University of California, Berkeley]]. Read the ""help DisplayUndistortionBVL"" for an overview of functionality and usage of the calibration procedure. Their website also contains some instructions. The current help text was mostly written by me, so i'm the one to blame for sloppy explanations and they are the ones to praise for high quality calibration routines ;-)
~- Some new PsychImaging subfunctions, e.g., dynamic selection of processing ROI: You can restrict image processing to some subregion of the display to save computation time if you need high redraw rates on high resolution displays, your graphics card is too slow and the stimulus only covers a fraction of the display area.
Revision [1377]
Edited on 2008-06-29 13:17:55 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Deletions:
Revision [1376]
Edited on 2008-06-29 13:10:48 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
Most improvements are related to the image processing pipeline. While the detailed documentation is contained in the files referenced below, most functions are accessed and controlled by the //""PsychImaging""// function and the basic help for how to use them can be found there. Demos mentioned below demonstrate this stuff in "real world" scripts.
~ This functionality is mostly controlled by the special //floatprecision// flags of //""Screen('MakeTexture',...)""// for drawing of high precision textures, and the //""Screen('ColorRange',....)""// command for drawing of other primitives and control over the required precision, value range and clamping behaviour of such drawing operations. General control of framebuffer precision is again done via //""PsychImaging""// and its subfunctions.
~- Color management integrated into all opmodes, e.g., gamma correction: This applies only in conjunction with use of the imaging pipeline. It should work with all HDR / high precision output drivers (see above). Read help for ""PsychColorCorrection"" for an overview. Currently only a simple gamma correction is implemented, but this is easily extensible.
~- High quality spatial display calibration and geometric undistortion routines, [[http://bankslab.berkeley.edu/ contributed by the Banks Vision Lab at University of California, Berkeley]]. Read the ""help DisplayUndistortionBVL"" for an overview of functionality and usage of the calibration procedure. Their website also contains some instructions. The current help text was mostly written by me, so i'm the one to blame for sloppy explanations and they are the ones to praise for high quality calibration routines ;-)
~- Some new PsychImaging subfunctions, e.g., dynamic selection of processing ROI: You can restrict image processing to some subregion of the display to save computation time if you need high redraw rates on high resolution displays, your graphics card is too slow and the stimulus only covers a fraction of the display area.
~ This functionality is mostly controlled by the special //floatprecision// flags of //""Screen('MakeTexture',...)""// for drawing of high precision textures, and the //""Screen('ColorRange',....)""// command for drawing of other primitives and control over the required precision, value range and clamping behaviour of such drawing operations. General control of framebuffer precision is again done via //""PsychImaging""// and its subfunctions.
~- Color management integrated into all opmodes, e.g., gamma correction: This applies only in conjunction with use of the imaging pipeline. It should work with all HDR / high precision output drivers (see above). Read help for ""PsychColorCorrection"" for an overview. Currently only a simple gamma correction is implemented, but this is easily extensible.
~- High quality spatial display calibration and geometric undistortion routines, [[http://bankslab.berkeley.edu/ contributed by the Banks Vision Lab at University of California, Berkeley]]. Read the ""help DisplayUndistortionBVL"" for an overview of functionality and usage of the calibration procedure. Their website also contains some instructions. The current help text was mostly written by me, so i'm the one to blame for sloppy explanations and they are the ones to praise for high quality calibration routines ;-)
~- Some new PsychImaging subfunctions, e.g., dynamic selection of processing ROI: You can restrict image processing to some subregion of the display to save computation time if you need high redraw rates on high resolution displays, your graphics card is too slow and the stimulus only covers a fraction of the display area.
Deletions:
* Some new PsychImaging subfunctions, e.g., dynamic selection of processing ROI.
Revision [1375]
Edited on 2008-06-29 12:54:59 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- Experimental support for the basic functions of the USB 1024-LS digital ""I/O"" box on Apple ""OS/X"". This is implemented but untested -- no feedback was received by any of the persons who wanted to try it.
The ""BitsPlusPlusAdditiveBlendingForLinearSuperpositionTutorial"" currently demonstrates how to enable and use the different drivers in its source code. While this script used to only demonstrate ""Bits++ Mono++"" mode, it its now more generic and will need a new name.
The ""HighPrecisionLuminanceOutputDriversImagingPipelineTest"" tests accuracy of the different output drivers, except for the CRS ""Bits++"" which has its own test script like in the past.
* Color management integrated into all opmodes, e.g., gamma correction: This applies only in conjunction with use of the imaging pipeline. It should work with all HDR / high precision output drivers (see above). Read help for ""PsychColorCorrection"" for an overview. Currently only a simple gamma correction is implemented, but this is easily extensible.
The ""BitsPlusPlusAdditiveBlendingForLinearSuperpositionTutorial"" currently demonstrates how to enable and use the different drivers in its source code. While this script used to only demonstrate ""Bits++ Mono++"" mode, it its now more generic and will need a new name.
The ""HighPrecisionLuminanceOutputDriversImagingPipelineTest"" tests accuracy of the different output drivers, except for the CRS ""Bits++"" which has its own test script like in the past.
* Color management integrated into all opmodes, e.g., gamma correction: This applies only in conjunction with use of the imaging pipeline. It should work with all HDR / high precision output drivers (see above). Read help for ""PsychColorCorrection"" for an overview. Currently only a simple gamma correction is implemented, but this is easily extensible.
Deletions:
* Color management integrated into all opmodes, e.g., gamma correction.
Revision [1374]
Edited on 2008-06-29 12:43:07 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- Support for [[http://www.cedrus.com/responsepads/rb_series.htm Cedrus response boxes of the RBx30 series and compatible XiD devices.]] See "help CedrusResponseBox" for how to use the new CedrusResponseBox command to operate and query the box. Please note that the current driver only "sort of works" for the basic features of the box, although a lot of time has been spent by multiple people trying to make it work. More advanced features are implemented, but their reliability is low enough to render them useless for most purpose. Basic key queries and button event queries work, so you can actually get responses from your subjects. Queries of the built-in timers work, but due to some interesting design flaws in the protocol, i'm not sure what they should be good for, unless you can get external baseline signals from the TTL trigger input ports. Setup, control and query of the TTL i/o port sometimes (in about one third of all trials) works under some random and unrepeatable circumstances, so good luck if you want to use them. I am still waiting since 30th of April for any helpful comments or suggestions from Cedrus developer support about how one can make their devices more cooperative with software other than their own. Thanks to Jenny Read, Cambridge Research Systems, Jon Peirce, Thomas Tanner and Tobias Wolf for suggestions, code examples, testing or sharing the pain.
== Improvements to Screen -- The Visuals ==
~- Much improved HDR/High precision drawing support, including improved GPU capabilities detection, especially on Apple OSX: Psychtoolbox should support drawing of arbitrary color values, even ones with negative signs, on OS X as well. In the past, this feature was only available on MS-Windows and Linux due to some software design restriction in all versions of OS X. PTB can now detect such restrictions and enable a special internal workaround solution that achieves the same without relying on the operating systems support. The ability to draw "negative" color values is mostly useful for subtracting color from a given framebuffer image in combination with alpha-blending, e.g., for fast and efficient drawing of large numbers of gabor patches or superimposed patches. Examples of this technique are demonstrated in ""BitsPlusPlusAdditiveBlendingForLinearSuperpositionTutorial"" or ""GarboriumDemo"". There is also a new but not fully finished test script ""HighColorPrecisionDrawingTest"". It allows to get some basic measures of the accuracy (how closely does the drawn color/luminance match the requested one) of drawing commands. Some test cases sometimes give worse numbers than they should due to some quirks in some graphics cards which are unrelated to accuracy but confounded with it. E.g., if the majority of test results tells you that your system can draw with 16 bits of precision, but one or two tests tell you it only has 6 bits or 0 bits of precision, then you can assume that the 16 bits is the more correct number and the other one is the outlier.
~- High precision display device drivers for most common devices, and a test to test them:
~- [[http://www.crsltd.com/catalog/bits%2B%2B/index.html CRS Bits++ in all modes ]] -- Detail improvements: Support for automatic gamma correction in ""Mono++ and Color++"" modes (see below) and for overlay windows in ""Mono++"" mode. Some automatic fixes for some broken graphics drivers as well.
~- [[http://lobes.usc.edu/VideoSwitcher/ VideoSwitcher by Xiangru Li et al.]] -- A video attenuator device with active amplifiers, useable with standard RGB monitors for high precision luminance output, including a single TTL trigger output port. See help for ""PsychVideoSwitcher"".
~- Generic video attenuator support via Lookup table transforms: Allows to drive any attenuator style device. You create some Luminance to RGB lookup table for your device in a device specific manner. Our driver performs automatic mapping of luminance values to proper RGB values from the table. Supports devices with up to 16 bit luminance resolution.
~- [[http://r0k.us/graphics/pseudoGrey.html PseudoGray shader aka BitStealing]]: An algorithm that tries to squeeze out a few extra bits of luminance reproduction on standard 8 bits per color component graphics cards: See help for ""CreatePseudoGrayLUT""
~- ATI 10 bpc framebuffer refinements: See help for ""PsychHelperCreateARGB2101010RemapCLUT"" and for ""PsychtoolboxKernelDriver""
~- ""BrightSideHDR"" refined: Support for the [[http://en.wikipedia.org/wiki/DR37-P DR37-P high dynamic range display]] from ""BrightSide"" also received a few detail improvements.
* Color management integrated into all opmodes, e.g., gamma correction.
* Some new PsychImaging subfunctions, e.g., dynamic selection of processing ROI.
* New demos.
== Improvements to Screen -- The Visuals ==
~- Much improved HDR/High precision drawing support, including improved GPU capabilities detection, especially on Apple OSX: Psychtoolbox should support drawing of arbitrary color values, even ones with negative signs, on OS X as well. In the past, this feature was only available on MS-Windows and Linux due to some software design restriction in all versions of OS X. PTB can now detect such restrictions and enable a special internal workaround solution that achieves the same without relying on the operating systems support. The ability to draw "negative" color values is mostly useful for subtracting color from a given framebuffer image in combination with alpha-blending, e.g., for fast and efficient drawing of large numbers of gabor patches or superimposed patches. Examples of this technique are demonstrated in ""BitsPlusPlusAdditiveBlendingForLinearSuperpositionTutorial"" or ""GarboriumDemo"". There is also a new but not fully finished test script ""HighColorPrecisionDrawingTest"". It allows to get some basic measures of the accuracy (how closely does the drawn color/luminance match the requested one) of drawing commands. Some test cases sometimes give worse numbers than they should due to some quirks in some graphics cards which are unrelated to accuracy but confounded with it. E.g., if the majority of test results tells you that your system can draw with 16 bits of precision, but one or two tests tell you it only has 6 bits or 0 bits of precision, then you can assume that the 16 bits is the more correct number and the other one is the outlier.
~- High precision display device drivers for most common devices, and a test to test them:
~- [[http://www.crsltd.com/catalog/bits%2B%2B/index.html CRS Bits++ in all modes ]] -- Detail improvements: Support for automatic gamma correction in ""Mono++ and Color++"" modes (see below) and for overlay windows in ""Mono++"" mode. Some automatic fixes for some broken graphics drivers as well.
~- [[http://lobes.usc.edu/VideoSwitcher/ VideoSwitcher by Xiangru Li et al.]] -- A video attenuator device with active amplifiers, useable with standard RGB monitors for high precision luminance output, including a single TTL trigger output port. See help for ""PsychVideoSwitcher"".
~- Generic video attenuator support via Lookup table transforms: Allows to drive any attenuator style device. You create some Luminance to RGB lookup table for your device in a device specific manner. Our driver performs automatic mapping of luminance values to proper RGB values from the table. Supports devices with up to 16 bit luminance resolution.
~- [[http://r0k.us/graphics/pseudoGrey.html PseudoGray shader aka BitStealing]]: An algorithm that tries to squeeze out a few extra bits of luminance reproduction on standard 8 bits per color component graphics cards: See help for ""CreatePseudoGrayLUT""
~- ATI 10 bpc framebuffer refinements: See help for ""PsychHelperCreateARGB2101010RemapCLUT"" and for ""PsychtoolboxKernelDriver""
~- ""BrightSideHDR"" refined: Support for the [[http://en.wikipedia.org/wiki/DR37-P DR37-P high dynamic range display]] from ""BrightSide"" also received a few detail improvements.
* Color management integrated into all opmodes, e.g., gamma correction.
* Some new PsychImaging subfunctions, e.g., dynamic selection of processing ROI.
* New demos.
Deletions:
Revision [1347]
Edited on 2008-06-22 12:50:40 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
See for example [[PTBDoc:Screen Screen]]
Revision [1342]
Edited on 2008-06-15 23:31:18 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
~- Support for [[http://www.cedrus.com/responsepads/rb_series.htm Cedrus response boxes of the RBx30 series and compatible XiD devices.]] See "help CedrusResponseBox" for how to use the new CedrusResponseBox command to operate and query the box. Please note that the current driver only "sort of works" for the basic features of the box, although a lot of time has been spent by multiple people trying to make it work. More advanced features are implemented, but their reliability is low enough to render them useless for most purpose. Basic key queries and button event queries work, so you can actually get responses from your subjects. Queries of the built-in timers work, but due to some interesting design flaws in the protocol, i'm not sure what they should be good for. Setup, control and query of the TTL i/o port sometimes works under some random and unrepeatable circumstances, so good luck if you want to use them. I am still waiting since 30th of April for any helpful comments or suggestions from Cedrus developer support about how one can make their devices more cooperative with software other than their own. Thanks to Jenny Read, Cambridge Research Systems, Jon Peirce, Thomas Tanner and Tobias Wolf for suggestions, code examples, testing and sharing the pain. No thanks to Cedrus Inc.
~- Serial port support: This update contains the first release of "IOPort", a new cross-platform driver for control of Input/Output ports. The driver works with Matlab and Octave on all supported operating systems OSX, Linux and Windows. This initial release provides unified support for serial ports, both native ones and serial ports emulated over USB protocol or other protocols. Future versions of the driver are intended to provide support for other types of I/O ports, e.g., parallel ports. As of now, the driver is only used by the CedrusResponseBox M-File, but long-term all code should be switched to this unified driver, e.g., the PR-650 photometer routines etc, so we can get rid of special solutions like PsychSerial or SerialComm.
~- Mouse wheel support: On OS/X the function GetMouseWheel() allows query of the state/movement of the mouse wheels of wheel mice. However, this seems to occassionally crash after multiple "clear all" -> run script -> "clear all" cycles for yet unresolved reasons.
~- Serial port support: This update contains the first release of "IOPort", a new cross-platform driver for control of Input/Output ports. The driver works with Matlab and Octave on all supported operating systems OSX, Linux and Windows. This initial release provides unified support for serial ports, both native ones and serial ports emulated over USB protocol or other protocols. Future versions of the driver are intended to provide support for other types of I/O ports, e.g., parallel ports. As of now, the driver is only used by the CedrusResponseBox M-File, but long-term all code should be switched to this unified driver, e.g., the PR-650 photometer routines etc, so we can get rid of special solutions like PsychSerial or SerialComm.
~- Mouse wheel support: On OS/X the function GetMouseWheel() allows query of the state/movement of the mouse wheels of wheel mice. However, this seems to occassionally crash after multiple "clear all" -> run script -> "clear all" cycles for yet unresolved reasons.
Deletions:
~-
Revision [1341]
Edited on 2008-06-15 23:14:31 by MarioKleiner [News for beta updates Jan 2010 to June 2010.]Additions:
=== Psychtoolbox beta update from 2008-06-09 (SVN Revision 1064) ===
This update, apart from the usual bug fixes (mostly for broken graphics card drivers, but also for a few ptb bugs) mainly improves support for high precision drawing and display of visual stimuli. Another major part is consistent support of serial port access for all operating systems and runtime environments. And then there are lots of improvements to single functions.
== Hardware support ==
~- Support for [[http://www.cedrus.com/responsepads/rb_series.htm Cedrus response boxes of the RBx30 series and compatible XiD devices.]] See "help CedrusResponseBox" for how to use the new CedrusResponseBox command to operate and query the box. Please note that the current driver only "sort of works" for the basic features of the box, although a lot of time has been spent by multiple people trying to make it work. More advanced features are implemented, but their reliability is low enough to render them useless for most purpose. Basic key queries and button event queries work, so you can actually get responses from your subjects. Queries of the built-in timers work, but due to some interesting design flaws in the protocol, i'm not sure what they should be good for. Setup, control and query of the TTL i/o port sometimes works under some random and unrepeatable circumstances, so good luck if you want to use them. I am still waiting since 30th of April for any helpful comments or suggestions from Cedrus developer support about how one can make their devices more cooperative with software other than their own. Thanks to Jenny Read, Cambridge Research Systems, Jon Peirce, Thomas Tanner and Tobias Wolf. No thanks to Cedrus Inc.
~- Improved support for the EGI/Netstation EEG system. Our old NetStation control function apparently only worked on PowerPC based Macintosh computers. The new driver works on all Apple Macintosh computers and should also work on Intel PC under Windows and Linux. Thanks to Gergely Csibra and Zhao Fan for fixing this.
~- The pnet mex file for TCP/UDP/IP support has been recompiled to allow for lower communication latency. This should improve timing for at least NetStation and the iViewX eyetrackers.
~-
This update, apart from the usual bug fixes (mostly for broken graphics card drivers, but also for a few ptb bugs) mainly improves support for high precision drawing and display of visual stimuli. Another major part is consistent support of serial port access for all operating systems and runtime environments. And then there are lots of improvements to single functions.
== Hardware support ==
~- Support for [[http://www.cedrus.com/responsepads/rb_series.htm Cedrus response boxes of the RBx30 series and compatible XiD devices.]] See "help CedrusResponseBox" for how to use the new CedrusResponseBox command to operate and query the box. Please note that the current driver only "sort of works" for the basic features of the box, although a lot of time has been spent by multiple people trying to make it work. More advanced features are implemented, but their reliability is low enough to render them useless for most purpose. Basic key queries and button event queries work, so you can actually get responses from your subjects. Queries of the built-in timers work, but due to some interesting design flaws in the protocol, i'm not sure what they should be good for. Setup, control and query of the TTL i/o port sometimes works under some random and unrepeatable circumstances, so good luck if you want to use them. I am still waiting since 30th of April for any helpful comments or suggestions from Cedrus developer support about how one can make their devices more cooperative with software other than their own. Thanks to Jenny Read, Cambridge Research Systems, Jon Peirce, Thomas Tanner and Tobias Wolf. No thanks to Cedrus Inc.
~- Improved support for the EGI/Netstation EEG system. Our old NetStation control function apparently only worked on PowerPC based Macintosh computers. The new driver works on all Apple Macintosh computers and should also work on Intel PC under Windows and Linux. Thanks to Gergely Csibra and Zhao Fan for fixing this.
~- The pnet mex file for TCP/UDP/IP support has been recompiled to allow for lower communication latency. This should improve timing for at least NetStation and the iViewX eyetrackers.
~-