0.58.0.0¶
Caution
References containing promoted Spreadsheets, when saved from Gaffer 0.58, can not be loaded in previous versions of Gaffer.
Features¶
Improvements¶
- Caching : Improved interactive performance using an improved hash cache invalidation strategy.
- SceneNode : Improved performance for all nodes that must propagate bounds from children to parents.
- PointsType : Removed unnecessary bounds computation overhead.
- OSLObject/ClosestPointSampler/CurveSampler : Improved performance for cases where multiple downstream computes require the same upstream object.
- Stats app : Added
-location
argument, to allow profiling of a single location in a scene. - AnimationEditor : Improved performance.
- MessageWidget : Added alternate presentation options allowing log-style message display, search, etc.
- Viewer : Added warning/error message count to Render Control overlay.
Fixes¶
- GraphEditor : Implemented undo for node drags (#423).
- Reference (#3810) :
- Fixed bug which caused promoted Spreadsheet values to be lost when exporting a Box for referencing.
- Fixed bug which caused promoted Spreadsheet cells to be duplicated by copy/paste.
- Prevented addition and removal of rows and columns for promoted Spreadsheets, as changes will be lost when reloading the reference.
- DeleteSets : Fixed bug which allowed the deletion of Gaffer’s internal
__lights
,__cameras
and__lightFilters
sets. These are now always preserved, because they are needed to output the scene for rendering. - TransformTool :
- Fixed handle orientation for transforms with negative scaling.
- Fixed handle positions for locations with PointConstraints or ParentConstraints applied.
- Fixed translation and rotation of locations with a ParentConstraint applied.
- Fixed rotation of locations with negative scaling.
- ImageReader/ImageWriter : Fixed handling of errors in Python functions registered using
setDefaultColorSpaceFunction()
. - StyleSheet : Fixed monospace font stack.
- GafferUI : Fixed lingering highlight state if a Button was disabled whilst the cursor was over it.
- Signal : Fixed hang which could occur if a result combiner implemented in Python tried to handle exceptions.
- NumericWidget : Fixed errors when trying to use a virtual slider with an empty value.
- GraphComponent : Fixed return value for
items()
method. The returned keys are now regularstr()
objects rather thanInternedString
. - Fixed dependency tracking bugs in the following nodes :
- UDIMQuery
- Shader
- FilterResults
- FreezeTransform
- ImageMetadata
- FlatImageProcessor
- FlatToDeep
- OpenImageIOReader
- LevelSetOffset
- MeshToLevelSet
- CopyPrimitiveVariables
- CopyAttributes
- SubTree
- MergeScenes
- CollectScenes
- Instancer
- Duplicate
- ClosestPointSampler
- CurveSampler
- DeleteSets
- SetAlgo : Fixed
affectsSetExpression()
to returnTrue
forScenePlug::setNamesPlug()
. - GafferTractor: Fixed evaluation of ‘tag’ and ‘service’ plugs on Task nodes. Previously, these plugs were evaluated in the default context, which prevented one from using custom context variables (e.g. from Wedge node) to compute tags or service keys dynamically.
- NodeEditor : Reduced layout flicker when switching between nodes.
- Spreadsheet : Fixed bug that could result in editor windows being placed partially off screen.
- ValuePlug : Fixed bug that could cause the wrong plug to be reported in
ProcessExceptions
.
API¶
- ValuePlug
- Improved interactive performance by not clearing the entire hash cache every time a plug is dirtied. Beware : this can reveal subtle bugs in
DependencyNode::affects()
implementations, causing hashes to be reused if a plug has not been dirtied appropriately. These bugs may previously have gone unnoticed but will now need fixing as a matter of urgency. The GAFFER_HASHCACHE_MODE environment variable may be set to “Legacy” to enable legacy behaviour in the interim, or to “Checked” to enable a slow mode which throws exceptions at the source of hash cache cache errors caused by badaffects()
implementations. - Added
clearHashCache()
static method. - Added
resetDefault()
method.
- Improved interactive performance by not clearing the entire hash cache every time a plug is dirtied. Beware : this can reveal subtle bugs in
- ScenePlug :
- Added
existsPlug()
accessor, and deprecated the argumentless overload of theexists()
method. - Added
childBoundsPlug()
,childBounds()
andchildBoundsHash()
methods.
- Added
- ObjectProcessor : Added
processedObjectComputeCachePolicy()
virtual method. This should be overridden to choose an appropriate cache policy whencomputeProcessedObject()
spawns TBB tasks. - SceneNode :
- Deprecated
hashOfTransformedChildBounds()
. UseScenePlug::childBoundsHash()
instead. - Deprecated
unionOfTransformedChildBounds()
. UseScenePlug::childBounds()
instead.
- Deprecated
- IECorePreview::Renderer : Added optional message handler to renderer construction to allow output message streams to be re-directed if required (#3419).
- InteractiveRender :
- InteractiveRenderTest :
- Scoped a
UIThreadCallHandler
for all test methods, available viaself.uiThreadCallHandler
. - Refactored
_createInteractiveRender
method to provide a default implementation that creates a render node with suitable error propagation.
- Scoped a
- Graphics : Renamed
errorNotificationSmall
icon toerrorSmall
. - NotificationMessageHandler : Constructor now accepts
GafferUI.MessageWidget
constructor kwargs to configure the widget. - PlugValueWidget : Added the capability to edit more than one plug at a time.
- Added
setPlugs()
andgetPlugs()
methods. The previoussetPlug()
andgetPlug()
methods remain as a convenience. - Derived classes should now override
setPlugs()
rather thansetPlug()
, but backwards compatibility is preserved for classes which have not been converted yet. - Derived classes should now implement
_updateFromPlugs()
rather than_updateFromPlug()
, but backwards compatibility is preserved for classes which have not been converted yet. create()
now optionally accepts a list of plugs in place of a single plug.- Updated the following subclasses to fully support multiple plugs :
- NumericPlugValueWidget
- CompoundNumericPlugValueWidget
- ColorSwatchPlugValueWidget
- ColorPlugValueWidget
- StringPlugValueWidget
- TweakPlugValueWidget
- BoolPlugValueWidget
- PresetsPlugValueWidget
- Added
- SetAlgo : Added Python binding for
affectsSetExpression()
. - Shader : Added
affectsAttributes()
protected method. - MessageWidget :
- Added MessageSummaryWidget class to simplify the display of message counts in other UIs.
- Added
scrollToNextMessage()
andscrollToPreviousMessage()
methods.
- MetadataAlgo : Added
readOnlyReason
, returning the outer-mostGraphComponent
that causes the specified component to be read-only. - EditScopeAlgo : Added
prunedReadOnlyReason
,transformEditReadOnlyReason
andparameterEditReadOnlyReason
to determine the outer-mostGraphComponent
causing and edit (or potential edit) to be read-only. - Window : Changed
setPosition
such that the whole window will remain on screen. SetforcePosition
toFalse
to disable this behaviour. - ImageGadget : Added support for GPU-based clipping, exposure, gamma and display transform.
- TestCase : Added
failureMessageLevel
attribute to control which messages trigger test failures. - GafferSceneTest : Added
exposure
FloatPlug
toTestLight
.
Breaking Changes¶
- Filter : Removed virtual
sceneAffectsMatch()
method. Derived classes should implementaffects()
instead. - FilterPlug : Replaced
sceneAffectsMatch()
method with a more generalsceneAffects()
method. This should be used to replace any calls to the old method. - PointsType : Changed base class from Deformer to ObjectProcessor.
- Gaffer : Removed
lazyImport()
method. - GafferUI : Removed deprecated
_qtImport()
method. Usefrom Qt import
instead. - Startup :
- Removed several compatibility shims for loading files from Gaffer versions prior to 0.20.0.0. Either resave the file from version 0.57.0.0 or adopt the appropriate shim into your own configuration. The following are affected :
- RemoveChannels nodes.
- OpenColorIO nodes.
- Certain ImageWriter settings from version 0.17.0.0 and prior.
- Expression nodes from version 0.18.0.0 and prior.
- Invalid
Node.user
plug inputs from version 0.18.0.0 and prior. - Reformat nodes from version 0.19.0.0 and prior.
- Crop nodes from version 0.20.0.0 and prior.
- TaskNodes from version 0.20.0.0 and prior.
- Removed several compatibility shims for running old Python code without modification. Either update your code or adopt the appropriate shim into your own configuration.
Gaffer.MetadataAlgo
andGaffer.MonitorAlgo
can no longer be accessed without namespace qualification.GafferImage.ImageAlgo
andGafferImage.BufferAlgo
can no longer be accessed without namespace qualification.GafferScene.SceneAlgo
can no longer be accessed without namespace qualification.GafferDispatch
attributes can no longer be accessed via theGaffer
namespace.Gaffer.UndoContext
is no longer an alias forGaffer.UndoScope
.GafferDispatchUI
attributes can no longer be accessed via theGafferUI
namespace.GafferDispatch.ExecutableNode
is no longer an alias forGafferDispatch.TaskNode
.GafferCortex.ParameterisedHolderExecutableNode
is no longer an alias forGafferCortex.ParameterisedHolderTaskNode
.GafferCortex
attributes can no longer be accessed via theGaffer
namespace.GafferCortexUI
attributes can no longer be accessed via theGafferUI
namespace.
- Removed several compatibility shims for loading files from Gaffer versions prior to 0.20.0.0. Either resave the file from version 0.57.0.0 or adopt the appropriate shim into your own configuration. The following are affected :
- RecursiveChildIterator : Changed private member data. Source compatibility is maintained.
- IECorePreview::Renderer : Changed signature for
create
andregisterType
to include optional message handler. - ObjectProcessor : Added a virtual method.
- PlugValueWidget :
- Renamed
create()
argument fromplug
toplugs
. A single plug may still be passed. - Renamed constructor argument from
plug
toplugs
. A single plug may still be passed. The same applies to the constructors for the following subclasses :- NumericPlugValueWidget
- CompoundNumericPlugValueWidget
- ColorSwatchPlugValueWidget
- ColorPlugValueWidget
- StringPlugValueWidget
- TweakPlugValueWidget
- BoolPlugValueWidget
- PresetsPlugValueWidget
- Removed connections to
plugFlagsChangedSignal()
. In the unlikely event that a derived class depends on plug flags, it must now manage the updates itself.
- Renamed
- InteractiveRender :
- Changed base class from Node to ComputeNode, added members.
state
andrenderer
plugs can no longer be connected to compute node outputs due to dirty propagation constraints.
- InteractiveRenderTest : Added
interactiveRenderNodeClass
member that must be populated with render node class by derived test cases (#3803). - MessageWidget : Removed deprecated
appendMessage
method, usemessageHandler().handle()
instead. - Shader : Added virtual method.
- MetadataAlgo :
readOnly( None )
will now raise an Exception instead of returningFalse
. - FormatPlug :
- Removed private member.
- Changed signature of
defaultValue()
method.
- ValuePlug : Added virtual method.
Build¶
- Updated to GafferHQ/dependencies 1.6.0.