0.96.0

Core

  • Added support for Box data to CompoundDataPlug.

  • Optimised the Context class considerably, particularly for temporary Contexts created during computation. A synthetic test which does nothing but create temporary Contexts shows a reduction in runtime of 97%, resulting in a 30% reduction in total runtime for a more real-world test using the Instancer node (#427).

  • Fixed Context copy construction doubling in Python bindings.

  • Fixed circular references within the undo system, which caused memory leaks where scripts were not destroyed at the appropriate time (#397).

  • Optimised ComputeNode::hash(). This yields ~14% reduction in runtime for a simple Reformat benchmark.

UI

  • Fixed PyQt circular references within GafferUI.Menu (#397).

  • Fixed crash caused by File->Quit menu item.

  • Improved UI for BoxPlugs.

Scene

  • Added crop window to StandardOptions node (#688).

  • Renamed gaffer:visibility attribute to scene:visible, to support the standard attribute with that name in Cortex scene caches.

  • Added a SetFilter node (#92).

  • Fixed deadlock removing input from running InteractiveRender node, or undoing or redoing such an operation.

  • Added pausing for interactive renders (#646).

API

  • Renamed BoxPlug min() and max() methods to minPlug() and maxPlug().

  • Made Context::Scope noncopyable.

  • Added GAFFERTEST_ASSERT macro. This should be used by test cases implemented in C++, and throws an exception which can be caught and reported by the Python unit test runner.

  • Added _copy argument to Context::get() bindings.

  • Added optimised Context copy constructor, primarily for use in constructing temporary Contexts. See class documentation for details.

  • Added checks for zombie ScriptNodes and Widgets at app shutdown. This can catch many common programming errors.

  • Added BoxPlugValueWidget class.