0.97.0
This release is focussed mainly on optimisation and bug fixes, with significant speedups being provided by moving to a new caching implementation provided by Cortex 9. Behind the scenes it also contains progress towards exposing Dispatcher functionality at the user level.
Core
- Optimised FilteredChildIterator and PlugIterator. This alone gives more than a 5% speedup in a simple Instancer benchmark. 
- Fixed serialisation of non-dynamic ArrayPlugs. This bug caused the appearance of duplicate requirements plugs on executable nodes (#580). 
UI
- Added a grid to the 3D viewer. 
- Added NodeGraph menu item for selecting objects affected by a node - accessed by right clicking on a filtered scene node. 
- Fixed several causes of zombie widgets which could cause errors at shutdown. 
- Moved the Execute button for ExecutableNodes to a prominent position in the header of the NodeEditor. 
- Added SceneWriter to the node menu. Also reorganised the Scene menu to include a File submenu, and simplified the Object menu by moving generators into the Source submenu. 
Scene
- Optimised Shader network computation - reducing runtime by 35% for typical production networks. 
Arnold
- Fixed ArnoldRender “Generate expanded .ass” mode. It was using a “-resaveop” command line flag removed from kick in Arnold version 4.0.10.0. 
API
- Added ability for Gadgets to have child Gadgets. Previously only ContainerGadgets could have children. 
- Rederived NodeGadget from Gadget rather than IndividualContainer. This allows more flexibility in NodeGadget implementations, and also better hides the implementation details. 
- Added methods for controlling Gadget visibility. 
- Rederived ViewportGadget from Gadget rather than IndividualContainer. This allows viewports to have multiple child gadgets, which paves the way for more complex views and interactive manipulators. 
- Made UI registration methods accept classes in place of TypeIds. 
- Added public GafferScene::Filter methods for specifying input scene via Context. 
- Added SceneAlgo.h with methods for querying all objects matching a filter. 
- Continued refactoring the Executable framework, in preparation for exposing it to users - Americanized spelling. 
- Renamed ExecuteUI to DispatcherUI. 
- Renamed ExecutableNode “dispatcherParameters” plug to simply “dispatcher”. 
- Rederived SceneWriter from ExecutableNode. 
- Rederived Dispatcher from Node, to allow settings to be specified via plugs. 
- Renamed Dispatcher::addAllPlugs() to Dispatcher::setupPlugs(). 
- Renamed Dispatcher::addPlugs() to Dispatcher::doSetupPlugs. 
 
- Added shutdown checks for zombie widgets and scripts. 
- Fixed “base class not created yet” GafferRenderMan import error. 
- Added _copy parameter to Shader::state() python binding. 
Documentation
- Improved formatting of Doxygen documentation - a brief description of each class is now shown above the detailed member documentation. 
Build
- Requires Cortex 9.0.0-a1. 
- Recent Cortex LRUCache improvements offer significant performance gains. 
- Updated default TBB version to 4.2.