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.