MWorks 0.11 released
MWorks 0.11 is now available for Mac and iPad. Highlights of this release include:
- Native support for the arm64 (aka Apple silicon) architecture on macOS
- Migration of stimulus code to Apple’s Metal API
- Stimulus display frame capture
- Support for XIMEA cameras
- Python image stimulus
- Python conduit improvements
Please note: This is the last MWorks release that will support ITC-18 and NI-DAQ devices.
MWorks 0.11 requires a Mac running macOS Mojave (10.14.6) or later or an iPad running iPadOS 14.7 or later.
For a full list of changes in this release, please see the release notes below.
Apple Silicon Support
MWorks now provides native support for the arm64 (aka Apple silicon) processor architecture on macOS. All macOS applications, plugins, and tools now include native binaries for both arm64 and x86_64 (Intel) processors, except for the following components, which depend on Intel-only external libraries:
- EyeLink device
- ITC-18 device
- XIMEA camera device
- MATLAB data tools and MWClient MATLAB window
Native arm64 versions of these components will be added in a future release if/when arm64 versions of the required libraries become available.
Core
Visual Stimuli
-
All standard stimulus types have been reimplemented using Apple’s Metal API. Existing OpenGL-based stimuli are still supported and can be used alongside Metal-based stimuli, but this support will likely end in the next MWorks release.
-
The transition to Metal necessitated changes (mostly minor) to some stimulus types:
-
Blend factors can no longer be changed after the stimulus is loaded
-
Added max_num_dots parameter to moving dots
-
Added max_size_x and max_size_y parameters to text stimulus
-
The effects of some stimulus-related actions performed by render actions may not be visible until the next display update pass
-
-
Added support for stimulus display frame capture (more info)
-
Added Python image stimulus
-
Added central_starting_phase parameter to drifting grating
-
Normalized Gaussian mask values are now clamped to [0,1]. This fixes an issue where the mask could produce unintended colors when blending with a non-grayscale background. Applies to both the mask and drifting grating stimuli.
-
Fixed a rendering error that produced unintended edge effects in text stimulus
-
Attempts to create a video stimulus from an audio-only file are now handled properly
-
Image file stimulus no longer uses mipmaps, as they consume GPU resources and seem unlikely to offer any benefit in actual usage
-
The display update thread now gets a brief “warm up” interval before the experiment starts. This seems to eliminate the single “update_stimulus_display action took more than two display refresh cycles” warning often seen when an experiment starts on iOS.
-
Reduced lock contention between main state system thread and stimulus display update thread, which could lead to serious performance issues on iOS
I/O Devices
-
Added support for XIMEA cameras (more info)
-
USB HID device now detects and reports device removal and can recover if the device is reconnected (more info)
-
Mouse input device parameters mouse_position_x and mouse_position_y are now optional, so that the device can be used just to hide the cursor
-
-
Ensure that clock offset is computed even when there are no input channels
-
Handle devices that don’t support pixel mode and/or VSYNC mode (e.g the original DATAPixx)
-
-
Stimulus display device parameter background_color is now optional
Other
-
Replicators can now contain sounds
-
Added predicted_output_time parameter to clear stimulus display action
-
Update stimulus display action is now slightly more lenient when deciding if a display update has taken too long to complete
-
Fixed some issues in and improved the method of getting the server address on iOS
Applications
-
Addressed some UI issues on macOS 11 and 12
-
On iOS, don’t block the first-run dialog asking for permission to use the local network
-
Clarified MWServer’s “Use color management” preference
MWClient
-
Python bridge window now alerts the user if the script fails to launch (e.g. because the selected Python executable doesn’t exist)
-
Variables window now permits selection of group headings
-
Variables window now discards input that contains only whitespace
Python and MATLAB Tools
-
Python plugin now embeds Python 3.9 (instead of 3.8)
-
Python tools now require Python 3.6 or later
-
Python conduits
-
Added
CachingIPCClientConduit
, which receives events for all codes and caches the most recent data for each (more info) -
Added
register_callback_for_all_events
method -
register_callback_for_code
now actually works in all situations
-
-
MATLAB tools now require MATLAB R2018b or later
Internals/Development
-
Upgraded to new versions of many supporting libraries:
- boost: 1.73.0 ➞ 1.77.0
- libffi: 3.3 ➞ 3.4.2
- libusb: 1.0.23 ➞ 1.0.24
- libxslt: 1.1.29 ➞ 1.1.34
- msgpack: 3.3.0 ➞ 4.0.3
- numpy: 1.19.1 ➞ 1.21.4
- openssl: 1.1.1g ➞ 1.1.1l
- python: 3.8.5 ➞ 3.9.9
- sqlite: 3.32.3 ➞ 3.37.0
- zeromq: 4.3.2 ➞ 4.3.4
-
StimulusDisplay, OpenGLContextManager, and their subclasses have been significantly reworked as part of the transition from OpenGL to Metal
-
Stimulus classes must now declare their required rendering mode by implementing (or inheriting) the method
getRenderingMode
-
Removed support for OpenGL on iOS
-
Datum instances can now be marked non-compressible, which prevents MWK2Writer from trying to compress their serialized representation
-
All standard conduits (server, client, and Python) now use ZeroMQ for event transport (instead of shared-memory IPC)
-
The directories
/Library/Application Support/MWorks/Developer/include
and/Library/Application Support/MWorks/Developer/lib
now contain architecture-specific subdirectories for arm64 and x86_64