forked from GafferHQ/gaffer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Changes
2740 lines (1685 loc) · 142 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# 0.94.0
#### Apps
- Increased default size of browser app (#795).
- Added bookmarks support to Op windows in the browser app (#787).
- Fixed position of quit confirmation dialogue (#751).
- Fixed parsing of command line arguments with spaces.
#### UI
- Fixed PySide incompatibility in VectorDataWidget.
- Improved VectorDataWidget numeric editing (#637).
- Simplified OpDialogue exception reporting (#806).
- Fixed "Open Recent..." crash bug in PySide builds (#548).
- Used OpDialogue to improve progress/error reports in OpPathPreview (#792).
- Enabled background mode for OpDialogue launched from BrowserEditor.
- Fixed OpPathPreview UI glitch.
- Fixed "KeyError: 'currentTab'" error when loading custom layouts.
- Added more sensible initial widget sizes to BrowserEditor. The sizes are also saved and restored when modes are switched.
- Improved Bookmarks
- Identifies recent items by full paths, so multiple recent items with the same basename may coexist.
- Prevents heavy usage of one bookmarks category from removing the recent items for the general (no category) bookmarks.
- Improves bookmarks UI in PathChooserWidget to display full paths of recent items.
- Most recent items are now displayed at the top.
- Added creation of bookmarks by dragging on to bookmarks icon.
- Fixed cursor bug in StringPlugValueWidget continuous update mode (#796).
- Fixed bug in non-editable MultiLineStringPlugValueWidgets.
- Fixed upside down nodule labels.
- Fixed overzealous Viewport drag tracking (#550).
- Improved SceneHierarchy to view any output ScenePlug, regardless of name. This improves compatibility with Boxes, where the user can make an output plug with any name they want.
- Added right click menu for Box plugs in NodeGraph. This allows the renaming and deletion of promoted nodules.
- Added dropdown menu for Displays node quantize parameters.
- Improved Displays node UI (#15).
- Added command-line representation of Op values in the UI (#793).
- Added workaround for squash/stretch in viewport camera look-through (#826).
- Added custom editor to PathVectorDataWidget. This enables tab completion, nice dropdown menus and a browser for PathVectorDataParameters.
- Added indexing methods to VectorDataWidget.
- Added presetsOnly dropdown menus to CompoundVectorParameterValueWidget (#470).
- Added an auto-load preset for ops (#804).
- Added filtering by image type for ImageReader and ImageWriter file dialogues.
#### Core
- Combined setValue() serialisation for CompoundNumericPlugs (#761).
- Fixed Box plug promotion to support ImagePlugs and ScenePlugs.
#### Scene
- Renamed GLSL shaders to UpperCamelCase. This matches the naming convention we use for OSL shaders.
- Added a Grid node.
- Fixed FilteredSceneProcessor to allow Box promotion of Filter plug.
#### Image
- Fixed a bug in ImageTransform that could result in corrupted output.
#### API
- Added GraphComponentClass and GadgetClass to improve bindings.
- Added NodeGadgetClass to improve bindings of NodeGadgets.
- Added immediate execution mode to OpDialogue.
- Fixed NodeGadget::noduleTangent() binding.
- Fixed potential bug in NodeGadget::create().
- Fixed LRUCache getter cost calculations.
- Fixed Metadata test hang.
- Improved Window.resizeToFitChild() behaviour. If called on an as-yet unshown window, it would move the window to the top left corner of the screen. Now the window will still be opened in a sensible place. Added additional shrink and expand arguments to further control the resize behaviour.
- Added support for fixed size CompoundVectorParameterValueWidget. The ["UI"]["sizeEditable"] user data entry can be given a BoolData value of False, which will cause the +/- buttons to be hidden in the UI, enforcing a fixed length on the data in the vector parameters.
- Added per-column editability to CompoundVectorParameterValueWidget. This uses a ["UI"]["editable"] user data entry in each child parameter, where a BoolData value of False will make the column for that parameter read-only (#766).
- Made Bookmarks.acquire() support passing Widgets and GraphComponents.
- Added support for callable dialogue keywords in PathPlugValueWidget.
- Fixed drag/drop to allow modal dialogue creation in dropSignal().
- Added public Serialisation::acquireSerialiser() method.
- Added ValuePlugSerialiser::valueNeedsSerialisation() method. This can be reimplemented by derived classes to provide more control over the serialisation of values.
- Privatised numeric and string PlugValueWidget implementations.
- Added ViewportGadget viewportChangedSignal() and cameraChangedSignal().
- Added SpacerGadget size accessors.
- Added iterator typedefs for all GafferUI::Gadget subclasses.
- Improved Box plug promotion API.
- Made BlockedConnection and UndoContext non-copyable.
- Added useNameAsPlugName argument to CompoundDataPlug::addMembers(). Also added python bindings for CompoundDataPlug::fillCompoundData() and CompoundDataPlug::fillCompoundObject().
- Gave Displays node parameter plugs more useful names.
- Added VectorDataWidget.editSignal(). This allows custom Widgets to be provided to edit the values held in the table cells.
- Added Widget.focusChangedSignal().
- Added VectorDataWidget setColumnEditable/getColumnEditable methods.
- Added right click preset menu for CompoundVectorParameterValueWidget. This also adds the ability for any custom parameter menu to operate with CompoundVectorParameters, whereas before they couldn't.
#### Build
- Now using Coverity static analysis - this resulted in a number of bugs being found and fixed in this version.
# 0.93.0
#### Core
- Added the ability to specify Metadata overrides to specify instances of Plugs and Nodes.
#### UI
- Added UI Editor. This allows the user plug layout for any node to be edited - plugs can be reordered, dividers added and help strings specified. In particular this allows the creation of custom UIs for Boxes, which can then be exported and loaded by References.
- Fixed initial unsortedness of PathListingWidgets.
#### Scene
- Added PrimitiveVariables node. This allows arbitrary primitive variables with constant interpolation to be added to objects.
- Added Duplicate node. This allows arbitrary numbers of duplicates of subhierarchies to be created, each with their own transform.
#### OSL
- Specifying lockgeom=1 by default for all OSL shading engines. This means that primitive variables (user data in OSL parlance) are not automatically mapped to shader inputs unless those inputs have explicitly set lockgeom=0 in the source (which is rare). This almost doubles the speed of a simple image noising operation.
- Fixed OSLShader::acceptsInput( NULL ) crash.
#### API
- Added PlugLayout class, which creates node editor UIs driven by Metadata. This will replace all existing plug layouts over time.
- Added StringAlgo.h, containing various string utilities, including wildcard matching (#707).
- Added metadata accessors to OSLShader.
- Fixed module import order and namespace pollution issues.
- Replaced Metadata regexes with new string matching code.
- Added Metadata signals emitted on registration of values.
- Made NameWidget accept None for the the GraphComponent.
- Added borderWidth argument to SplitContainer constructor.
- Added PathListingWidget setHeaderVisible()/getHeaderVisible() methods.
- Added PathListingWidget.pathAt() method.
- Fixed bug in GafferUI::Pointer::setFromFile( "" )
- Added a DictPath.dict() accessor.
- Moved NodeEditor.acquire() to NodeSetEditor.acquire(). This allows it to be used to acquire an editor of any type.
- Added fallbackResult to WeakMethod.
- Fixed CompoundPlug plugSetSignal() emission when children change.
# 0.92.1
#### Scene
- Improved shader assignment reporting in SceneInspector (#335)
- Improved shader handle generation
# 0.92.0
#### Core
- Made Plug flags serialisation more future proof (#684).
- Removed redundant serialisation of default values. This reduced file sizes by 25% and load times by nearly 20% for a large production script. Note that changing the default value for a plug or shader parameter now represents a backwards compatibility break with old scripts.
- Optimised python bindings, giving speedups in many areas, including file loading and shader generation.
- Removed parameter mapping from ObjectReader
- Fixed threading bugs in ObjectReader.
- Fixed bugs preventing expressions being used with filenames in ObjectReader.
#### UI
- Improved plug "Edit Input..." menu item. It now ensures that the input plug widget is directly visible on screen, whereas before it could only show the node editor for the input node.
- Prevented nodes from being created offscreen (#640).
- Exposed "enabled" plugs in a new Node Editor "Node" tab (#759).
- Fixed MessageWidget crashes encountered in Maya.
- Fixed bug preventing positioning of new nodes within backdrops (#769).
- Added workaround for PyQt/uuid crashes (#775).
- Added filtering so that DirNameParameter file browsers will only show directories and not files (#774).
- Fixes image viewer colour swatches when the image doesn't contain an alpha channel.
- Improved scene preview support to include .abc, .cob, and .pdc files (any files for which Cortex has a Reader implementation).
#### Scene
- Options and Attributes nodes now have sensible default values for their plugs.
#### Image
- Fixed bugs associated with negative display window origins.
- Fixed crash when creating ImageWriters with another image node selected (#681 #255).
#### Arnold
- Arnold shader names are now prefixed with "ai" within the node search menu, to aid finding them amongst the other nodes.
#### API
- Added Widget.reveal() method (#503).
- Added extend argument to NodeGraph.frame(). The default value of false behaves exactly as before - the specified set of nodes are framed in the viewport. A value of true still causes the nodes to be included in the framing, but in addition to the original contents of the frame.
- Properly implemented CompoundNumericPlugValueWidget.childPlugValueWidget().
- Removed MessageWidget.textWidget() method. The internal text widget should now be considered private. The currently displayed messages may be cleared using the new MessageWidget.clear() method.
- Removed deprecated MessageWidget.appendException() method.
- Added control over the default button to the OpDialogue. This controls whether the OK or Cancel button is focussed by default when displaying the Op. The default value is as before, focussing the OK button, but the value can be controlled either by user data in the Op or by passing an alternative argument to the OpDialogue constructor.
- Adopted new Python wrapping mechanism from Cortex.
- Fixed pollution of GafferUI namespace with IECore module.
- Added DirNameParameterValueWidget.
- PathPreviewWidget now respects registration order.
#### Build
- Requires Cortex 8.2.0.
# 0.91.0
#### Apps
- Fixed gui startup error in ocio.py.
#### Core
- Fixed copy/paste problems where inappropriate values would be copied for plugs with inputs, where the input was not in the selection being copied (#740).
#### UI
- Added a first implementation of an automatic node layout algorithm. This is available via the Edit/Arrange menu item (#638).
- Fixed image viewer data window display in the presence of an offset display window.
- Fixed TextGadget vertical bound. It was slightly different depending on the text contents, causing different nodes to appear with slightly different heights.
- Moved OSLObject and OSLImage shader inputs to the left of the node.
- Added message filtering to MessageWidget.
#### Scene
- Fixed AlembicSource refresh failure (#737).
- Fixed errors when AlembicSource filename is "".
#### RenderMan
- Added support for multiple types in RSL "coshaderType" annotation (#621).
#### OSL
- Added support for arbitrary image channels to the OSLImage node. The InChannel and InLayer shaders should be used to fetch channels and layers from the input image, and the OutChannel and OutLayer shaders may be used to write values to the output channels and layers. The Out* shaders should be plugged into an OutImage shader which is then plugged into the OSLImage node.
- Added support for arbitrary primitive variables to the OSLObject node. The InFloat, InColor, InNormal, InPoint and InVector shaders provide access to vertex primitive variables on the input primitive, and the corresponding Out* shaders
can be used to write values to the output primitive variables. The Out* shaders should be pluggined into an OutObject shader which is then plugged in to the OSLObject node.
- Added V3fVectorData support to OSLRenderer user data queries.
- Fixed dirty propagation through OSLShader closure outputs.
- Improved OSL processor shader input acceptance.
- Only accepts OSLShader nodes if they hold a surface shader, as other shader types can't be used directly.
- Also accepts Box and ShaderSwitch connections so that shaders can be connected indirectly.
- Revised shader naming convention to UpperCamelCase. The names of existing shaders have therefore changed.
#### API
- Moved OSLImage::shadingEngine() method to OSLShader::shadingEngine().
- Removed FormatPlugSerialiser from the public interface - it was not intended to be subclassed.
- Removed FormatBindings namespace and moved formatRepr() into the GafferImageBindings namespace.
- Switched formatRepr() signature to take a reference rather than a pointer.
- Added MessageWidget setMessageLevel() and getMessageLevel() methods.
# 0.90.0
#### Scene
- Fixed off-by-one error in scene cache preview frame ranges.
#### UI
- Fixed slight jump when connections are first drawn.
- Removed PathFilter paths plug representation in the NodeGraph. There aren't really any nodes we would connect to it.
- Improved OpDialogue warning display. If an Op completes successfully, but emits error or warning messages in the process, these will now always be flagged before the user can continue.
#### API
- Refactored ConnectionGadget into an abstract base class with a factory, to allow for the creation of custom subclasses. A new StandardConnectionGadget class contains the functionality of the old ConnectionGadget. Config files may register creation function for connections to control the type of gadget created, and its style etc.
- Added MessageWidget.messageCount() method. This returns the number of messages currently being displayed.
- Added OpDialogue.messageWidget() method. This provides access to the message display for the Op being executed.
- Added MessageWidget.forwardingMessageHandler(), to allow messages received by the widget to be propagated on to other handlers. This can be useful for connecting the OpDialogue to a centralised logging system.
- Deprecated MessageWidget appendMessage() and appendException() methods. The same result can be achieved by passing messages via the message handler instead.
# 0.89.0
#### Core
- Added Support for NumericPlug->BoolPlug and BoolPlug->NumericPlug connections.
#### UI
- Added additional types to the user plug creation menu.
- Added pre-selection highlighting in the NodeGraph (#94).
- Added "Create Expression..." menu option for bool plugs.
- Fixed NodeGraph resizing to crop rather than scale (#10).
- Fixed read only CompoundPlug labels.
- Added workarounds for Qt OpenGL problem on OS X (#404 and #396).
#### Scene
- Added Parent node. This allows one hierarchy to be parented into another (#91).
- Fixed bug which could cause incorrect bound computation at the parent node in the Instancer.
- Seeds and Instancer classes now preserve existing children of the parent location, renaming the new locations to avoid name clashes if necessary.
- Added tag filtering to the SceneReader node.
- Enabled input connections to PathFilter "paths" plug. This allows it to be promoted to box level and be driven by expressions etc (#704).
#### Apps
- Updated view app to contain tabs with different views (info, header, preview etc).
- Added scene cache previews to the browser and view apps (#416).
#### API
- Removed BranchCreator name plug - derived classes are now responsible for generating the entirety of their branch.
- Modified BranchCreator hashing slightly to improve performance - derived classes hashBranch*() methods are now responsible for calling the base class implementation.
- Fixed Box::canPromotePlug( readOnlyPlug ) to return false.
- Fixed Box::canPromotePlug() to check child plugs too.
- Fixed bug in read only Plugs with input connections.
- Added Gadget setHighlighted() and getHighlighted() methods.
- Added supportedExtensions() methods to ImageReader and SceneReader.
- Added Viewer.view() and Viewer.viewGadgetWidget() methods.
- Added NodeToolbar and StandardNodeToolbar classes.
#### Build
- Updated public build to use OpenEXR 2.1.
- Updated public build to use OpenImageIO 1.3.12.
- Updated public build to use OpenShadingLanguage 1.4.1.
- Removed pkg-config from the dependency requirements.
# 0.88.1
#### Core
- Added env app which mimics /usr/bin/env
- Enabled Python threading by default in Gaffer python module
#### UI
- Renaming is available for promoted children of CompoundDataPlugs
- Moved scene node filter plugs to the right hand side of the node
#### Image
- Fixed threading issue in Display node
# 0.88.0
#### Core
- Fixed threading issue in caching code.
- Implemented per-instance metadata for Box nodes. This will provide the basis for the user to make further customisations to Boxes, like setting descriptions for plugs and so on.
- Fixed bug in Switch node which could cause crashes when promoting the index plug.
- Added pivot to TransformPlug.
#### UI
- NodeGraph node tooltips now display a helpful description for the node. Node authors can define this text using the "description" Metadata entry (which is intended to provide a static description of the node's purpose) and the "summary" Metadata which may optionally be computed dynamically to describe the current state of the node (#157).
- Fixed initial value jump in viewer gamma/exposure virtual sliders.
- NodeGraph nodes may now display plugs on all sides, rather than just top/bottom or left/right as before. Node authors may control plug placement by defining a "nodeGadget:nodulePosition" Metadata entry.
- ShaderAssignment nodes now receive their shader input from the left (#82).
- Fixed OpDialogue hangs caused by the rapid output of many messages from an Op.
- Fixed strange browser behaviour when editing a path which is no longer valid (#64).
- Improved image viewer responsiveness, especially when used as a render viewer.
- Fixed position of plugs in the NodeGraph when the node gadget was very narrow.
- Made Box nodule positions match internal nodule positions (#608).
- Simplified OpDialogue error display - long error messages are now only visible in the Details view, rather than cluttering up the main window, and potentially making it very large on screen.
#### Scene
- Added a ParentConstraint node (#26).
- Added "includeRoot" plug to GafferScene::SubTree. This means that when choosing /path/to/theNewRoot as the root, the subtree will be output under /theNewRoot rather than /. Previously this was only possible by using an Isolate node followed by a Subtree (#565).
- Added "targetOffset" plug to the Constraint node. This is of most use for offsetting the aim point in the AimConstraint node (#278).
- Fixed bug in copying a node which has an input from an unselected PathFilter.
- Fixed bug in ShaderAssignment node which could cause crashes when querying for acceptable inputs.
- Improved the transform node
- Added a pivot plug (#156)
- Added a space plug to specify whether the transform is applied in World or Object space.
#### Image
- Fixed ImageReader problem which caused the green and blue channels of non-float images to be offset horizontally.
- Fixed bug which could cause the OpenColorIO node to output greyscale images.
- Optimised Display node.
- Optimised ChannelDataProcessor::channelEnabled().
#### OSL
- Updated for compatibility with OSL 1.3, 1.4 and 1.5 (master branch).
- Removed unsupported closures from OSLRenderer.
- Added debug() closure support to OSLRenderer to allow the output of multiple values via ShadingEngine::shade(). The closure takes an optional "type" keyword argument to define the type of the resulting output.
#### API
- Added GafferUI.SpacerGadget class.
- Reimplemented GafferUI.Metadata in C++, so it can be used from C++ code as well as from Python.
- Fixed bug in Widget.mousePosition() with GLWidget overlays.
- Fixed GafferScene.ScenePath.isValid() to only consider a path as valid if all parents up to the root exist according to ScenePlug.childNames().
- Added space conversion methods to GafferImage::Format. These are useful for converting between the Cortex and OpenEXR Y-down space to the Gaffer y-up space.
- Fixed GafferImage::FormatData serialisation.
- Removed deprecated ImageView( name, inputPlug ) constructor. This was being used by old View subclasses which would pass their own input plug and then use setPreprocessor() to insert some conversion network. Subclasses should now use insertConverter(), following the example in GafferImageUITest.ImageViewTest.testDeriving.
- Moved Metadata class from libGafferUI module to libGaffer.
#### Build
- Fixed compilation with GCC 4.4.
# 0.87.1
#### UI
- Constrained slider positions inside range by default (#99). Shift modifier allows slides to exceed range.
- Key modifiers are now correctly updated during drags.
- Fixed PySide incompatibility in Slider.
#### Image
- Added ImageSampler node to GafferImage
- Fixed colour space used for ImageView colour sampling (now in linear space).
# 0.87.0
#### UI
- Added visualisation of clipping colours in the image viewer (#572).
#### Core
- Boxes now export all non-hidden plugs for referencing. Prior to this they only exported "in", "out" and user plugs.
- Fixed unwanted plug promotion when nesting Boxes inside Boxes.
#### Scene
- Fixed Subtree update problem.
- Added enabling/disabling support to SceneTimeWarp and SceneContextVariables.
- Added a SceneSwitch node. This can be used to choose between different scene hierarchies.
- Added a ShaderSwitch node. This can be used to switch between different shaders being fed into a ShaderAssignment. It is also compatible with RenderMan coshaders, so can be used to switch between different coshaders in a network.
#### Image
- Added a Clamp node
- Fixed bug in Display node which caused problems when using multiple Displays at once.
- Added ImageTimeWarp, ImageContextVariables and ImageSwitch nodes - these are equivalent to their Scene module counterparts.
#### API
- Added missing IntrusivePtr typedefs to GafferImage
- Added RecursionPredicate to FilteredRecursiveChildIterator. This allows the definition of iterators which automatically prune the recursion based on some condition.
- Redefined RecursivePlugIterators so that they do not recurse into nested nodes - instead they just visit all the plugs of the parent node.
- Improved Node::plugSetSignal() behaviour. The signal is now emitted for all the outputs of the plug being set in addition to the source plug - otherwise plugSetSignal() could not be used effectively for plugs which had been promoted to Box level.
- Renamed SceneContextProcessorBase to SceneMixinBase.
#### Build
- Fixed build for Ubuntu 12.04.
- Updated public build to use Arnold 4.1.
- Removed OIIO versioning workaround - previously we had to rename the OIIO library to avoid conflicts with Arnold, but since Arnold 4.1 such conflicts no longer exist.
- Updated default boost version to 1.51.0.
- Added dependenciesPackage build target. This can be used to make a package of prebuilt dependencies to seed a build. from.
- Updated default Cortex version to 8.0.0b5.
# 0.86.0
#### UI
- Added exposure and gamma controls to the image viewer (#571).
- Added colourspace management to the image viewer (#573). By default display colourspaces are taken from the OCIO config, but any image processing node (or Box containing them) can be registered via config files to provide alternative methods of colour management.
- Added auto expand option to the scene viewer (#163).
- Added Shift+Down shortcut for full expansion in the scene viewer (#556).
- Added "look through camera" in the scene viewer (#49).
- Added global Left/Right keyboard shortcuts for frame increment/decrement (#52).
- Added background operation to op dialogues in the op and browser apps. The UI now remains responsive during execution and displays IECore messages and results (#591).
- Objects can now be dragged from the Viewer and SceneHierarchy into path fields such as the AimConstraint target or the StandardOptions camera.
- Buttons now accept Return and Enter keypresses in addition to the space bar and clicking.
- Confirmation dialogues now focus the default button so they can be dismissed using the keyboard.
- Tarted up the About dialogue with a nice new logo courtesy of Tiziana Beretta.
- Fixed MenuButton bug whereby menus could be shown partially offscreen.
- Fixed Timeline bugs
- Wraparound during playback would remove the fractional part of the frame number
- Entering a value in the frame field which was outside the frame range would make it impossible to subsequently enter a fractional frame number.
- Changing the frame number via the numeric field didn't update until focus left the field.
- Fixed clipping problem in BusyWidget drawing, and removed overhead of invisible BusyWidgets.
- Fixed GadgetWidget overlay event handling problems.
- Fixed crashes when MultiSelectionMenu was used in GLWidget overlay.
- Viewer toolbar now omits labels when Metadata value is "".
- Made the NodeGraph save and restore its framing when entering and leaving Boxes (#626).
- Fixed PathWidget menu positioning when used as a GLWidget overlay.
#### Scene
- Added a UnionFilter node (#594).
- Optimised SceneReader. It now computes constant hashes where data is not animated, resulting in significant speedups and reduced memory consumption. Approximately 2x speedup and 50% memory usage reduction has been seen in animated production assets (#545).
- Optimised SceneHierarchy update for improved playback performance (#545). 4x speedups have been seen with animated production assets.
- Fixed the laggy node dragging seen after expanding the SceneHierarchy contents and moving the current frame a few times (#209).
- Disabled StandardOptions camera and resolution by default.
#### Image
- Optimised OpenColorIO node performance.
- Optimised grade node performance and memory usage (through improved hash implementation).
- Set Grade node's gamma plug minimum value to 0.
- Fixed threading related OpenColorIO crashes on OS X.
- Fixed ImagePrimitiveSource hashing bug. This would manifest itself as a corrupted image when connecting a disabled node downstream from a Display node (#420).
- Fixed miscellaneous hashing bugs.
#### Core
- Optimised StringPlug::getValue() and StringPlug::hash() for cases where the string doesn't contain substitutions.
- Fixed bug in Path inequality operator.
- Renamed python deprecation warning output - Python2.7 disabled this by default.
#### API
- Added a new Playback class. This provides a central controller for all clients who wish to initiate playback or react when playback occurs.
- Added ColorProcessor base class. This makes it easier to implement image processing nodes which mix across channels.
- DependencyNode::affects() is now called for output plugs too. This can trip up poorly implemented DependencyNode::affects() overrides - see f1e9cb3bf20430b7889795dcb5eccec863f1e2e7 for details.
- Resolved ambiguities in Widget auto-parenting keyword arguments. Parenting arguments should now be passed as "parenting = { ... }" rather than just "...". The old style of argument passing will be deprecated (#655).
- Added ViewportGadget::set/getCameraEditable() methods.
- Added previous root node to GraphGadget::rootChangedSignal().
- Added set/getTextSelectable() method to GafferUI.Label.
- Added Dialogue set/getModal() methods.
- Added Path._emitPathChanged() protected method. This can be used by derived classes to emit the pathChangedSignal(), avoiding emitting it if nothing is listening. All subclasses should use this in preference to self.pathChangedSignal()( self ).
- Added Context::hasSubstitutions() method. This can be used to query if a string contains any substitutions supported by Context::substitute().
- Added Slider set/getPositionIncrement() methods. These allows the cursor key position nudging behaviour to be controlled.
- Added const version of GafferUI::View::getPreprocessor.
- Added EnumPlugValueWidget.selectionMenu() method.
- Renamed ImageNode::hash*Plug() methods to hash*(), for consistency with the rest of the framework.
- Refactored ImageNode hashing for improved performance and clarity - see 78b8739f1867ecd3b660838d384cdd6083734d92 for details.
- Added many missing IntrusivePtr typedefs.
- Added support for "divider" Metadata in viewer toolbars.
# 0.85.1
#### Scene
- Compatibility with Cortex 8.0.0b1
# 0.85.0
#### API
- Added Bookmarks API for storing Path bookmarks by application, path type, and category (#55)
- Configs can define custom bookmarks on startup (https://github.com/ImageEngine/gaffer/wiki/Custom-Bookmarks)
- Parameters can specify the bookmarks category with a ["UI"]["bookmarksCategory"] user data entry
- Support in the gui, browser, and op apps
- Support in File menu, PathChooserDialogue, PathChooserWidget, PathParameter, PathVectorParameter, RenderMan shader parameter, Box, and Reference node UIs
- Added Style::changedSignal()
- Added Window set/getIcon and setting GafferLogoMini as the default window icon
- Added TextWidget set/getPreferredCharacterWidth methods
- Fixed ParameterisedHolder parameterChanged() crashes
- Fixed Widget.bound() on OS X
- Fixed some bugs with null plugs in Box's plug promotion methods
#### GL
- Fixed GLSL shaders used by the UI for OpenGL 2.1 (requires Cortex 8.0.0-a23)
- Fixed OpenGL drawing when embedded in Houdini (requires Cortex 8.0.0-a22)
#### UI
- Added ColorSwatchPlugValueWidget (#625)
- Added new Gaffer logos (though only using them for window icons currently)
- Increased preferred width of PathWidgets (#515)
- Improved PathChooserDialogue handling of invalid selections (#628)
- Fixed Dialogue positioning and focussing on Linux (#220, #642, #62)
- Fixed SectionedCompoundDataPlugValueWidget child widget bugs (#588)
- Fixed Timeline start/end field sizing bug (#111)
#### Scene
- Added DeleteAttributes node and AttributeProcessor base class (#587)
- Fixed PrimitiveVariableProcessor::affects()
#### RenderMan
- Fixed RenderManShader.acceptsInput() crash
#### OSL
- Added closure parameter support to OSLShader
# 0.84.0
#### UI
- Added shift+drag of node to panel to create duplicate editor (#575).
- Added HSV readout for pixel below mouse in image viewer (#576).
- Improved the UI for Attributes and Options, to distinguish between the boolean used to enable a setting and the boolean used to define the value (#65).
- Fixed unwanted scaling of Button images.
- Added a toolbar to the viewer, initially with only a single button for specifying the 3D display style (#114).
- Improved MenuButton menu positioning.
- Fixed bug where searchable menus kept keyboard focus after closing.
- Fixed focus stealing problems apparent in Viewer and NodeGraph. They still take focus on mouse enter, but will not steal focus from text entry widgets (#555, #439).
- Added per-column visibility for CompoundVectorParameterValueWidget. Visibility is specified using the standard ["UI"]["visible"] userData entries on the child parameters which provide the columns (#526).
- Stopped plug controls accepting drags from themselves. This was causing trouble for users who were accidentally dragging and dropping a single line from a PathVectorDataPlugValueWidget onto itself, thus removing all the other lines.
- Added drag start threshold, to make it harder to accidentally start a drag (#593).
- Disabled "Remove input" menu item for read only plugs and uis.
- Disabled Box promotion menus on read only UIs (#604).
- Disabled ganging menu items for read only UIs.
- Stopped standard graph layout reconnecting invisible nodes.
#### Scene
- Prevented rogue connections being made to Shader "parameters" Plug.
- Fixed bugs in computing hashes for transform, object and attributes at the scene root.
#### OSL
- Added support for struct parameters.
- Added shaders for doing basic vector arithmetic.
- Added support for N global variable in OSLRenderer.
- Fixed OSLShader hash bug. Because OSL shaders are the first shader type we've supported where a single shader can have multiple outputs, we weren't taking into account _which_ particular output was connected when computing the hash.
- Prevented vector->color connections for OSLShader nodes. OSL itself doesn't allow such connections so we mustn't either. Also added a vectorToColor shader to help work around the restriction.
#### Documentation
- Started versioning documentation releases - they follow the app release version.
- Changed modifier key styling in documentation content to match that used in interface.
- NodeEditor content expanded.
- NodeGraph content expanded.
- New images.
- New screen grab setups.
- Simplified example light shader.
#### API
- Renamed CheckBox to BoolWidget and added different display modes. CheckBox remains as an alias to BoolWidget for backwards compatibility.
- Added stream insertion operator for GafferScene::ScenePlug::ScenePath.
- Fixed RunTimeTyped declaration for SceneView. It was declared as deriving from View rather than View3D.
- Fixed bug in Widget.widgetAt().
- Added widget overlays to GLWidget. This allows any Widget subclass to be displayed as an overlay on top of the OpenGL contents.
- Added setColumnVisible/getColumnVisible methods to VectorDataWidget.
- Implemented VectorDataPlugValueWidget.setHighlighted().
- Fixed StandardNodeUI.setReadOnly() to properly affect plug labels.
- Implemented setPlug on a SectionedCompoundDataPlugValueWidget.
- Fixed DependencyNode::enabledPlug() python bindings.
- Added python binding for ValuePlug::setFrom().
# 0.83.0
#### UI
- Added support for framing nodes and plugs dragged to the NodeGraph.
- Fixed overzealous pinning of nodes dragged to editors. Specifically, a node dragged from within an editor would be accepted as a pinning-drag into that very same editor. Now a drag must originate from outside the editor to be considered for pinning.
- Stopped GafferUI.Frame from expanding beyond the min/max of its contents. It now behaves like the other containers in this respect. Frames can still expand, but now only when their contents want to. Updated ErrorDialogue for this fix by adding some appropriate Spacers, and updated it to use the newer "with" syntax for building UIs at the same time.
- Added highlighted rendering for frames.
- Added ConnectionPlugValueWidget. This is a fallback widget for plugs that otherwise have no value to display. It shows the input connection to the plug, and provides means of navigation to that input (#130).
- Added post-execution behaviours to OpDialogue. These allow the UI writer, the Op writer or the user to choose whether or not the dialogue should be closed after the Op has executed (#560).
- Fixed PathListingWidget errors when "/" path is invalid. Invalid root paths occur quite frequently in the SceneHierarchy editor when an invalid filename has been entered in a SceneReader or AlembicReader. Those nodes will still display an error, but the SceneHierarchy now won't output a confusing stacktrace which distracts people from the root cause (#528).
- Added Alt click modifier for selecting upstream nodes in GraphGadget. Alt+Shift click adds all upstream nodes to the selection. Alt+Ctrl click removes all upstream nodes from the selection (#437).
- Fixed launching of external URLs on OS X.
#### Scene
- Fixed Prune node's forward declarations of lights and cameras. Previously it would not correctly remove the forward declaration for an object whose ancestor had been pruned.
- Added Isolate node type. This removes all paths which are not directly above or below the chosen location - particularly useful for singling out certain assets from a large scene (#564).
- Improved default values for Seeds and Instancer nodes. The new defaults mean there are less steps to perform to get something happening.
- Stopped annoying startup errors when 3delight or arnold are missing (#486).
#### OSL
- Introduced a new gaffer module which integrates Open Shading Language.
- OSLShader node represents OSL shaders and allows them to be connected into shading networks.
- OSLImage node executes OSL shaders in the context of an input image to perform arbitrary image processing.
- OSLObject node executes OSL shaders in the context of an object's primitive variables to perform geometry deformation.
#### API
- Added custom formatters and name depth control to NameLabel.
- Added Widget.isAncestorOf() method.
- Added ButtonEvent.button field.
- Improved path matching to provide more complete information.
- Added GraphGadget::upstreamNodeGadgets() method.
#### Support apps
- Added ability to specify Widget to be grabbed in the screenGrab app.
####################################################################################################
# 0.82.0
#### Core
- Made Plug::acceptsInput() consider current output connections (#532).
#### UI
- Added even-more-simplified mode to StandardNodeUI (#549).
- Fixed GraphGadget for NULL return from NodeGadget::create(). This allows NodeGadget::registerNodeGadget() to be used with functions that will return NULL to signify that the node should be hidden.
#### Scene
- Fixed errors reading polygon normals from Alembic files (courtesy of Cortex 8.0.0-a18).
- Added MapOffset node for offsetting texture coordinates.
#### RenderMan
- Fixed output of multiple displays (courtesy of Cortex 8.0.0-a18) (#357).
- Added automatic instancing capabilities (courtesy of Cortex 8.0.0-a18).
0.81.0
======
Core
----
- Improved dirtiness propagation mechanism to remove duplicate signal emission.
UI
--
- Backdrop improvements
- Backdrop contents can now be scaled, so large backdrops can still have readable text when zoomed out.
- Fixed bug which meant that empty backdrops didn't immediately redraw as highlighted when selected.
- Improved resizing behaviour.
- Fixed cut and paste bug.
Scene
-----
- Added doublesided attribute to StandardAttributes node (#275).
Arnold
------
- Fixed packaging of Arnold plugins.
- Fixed problem where light shaders weren't being created as lights.
RenderMan
---------
- Fixed public build to work with older 3delight versions where RiProceduralV isn't available.
- Added support for several new attributes in RenderManAttributes node (#275).
API
---
- The plugDirtiedSignal() is now emitted when a value has been edited with ValuePlug::setValue() - this means that observers need only ever use plugDirtiedSignal() instead of also having to use plugSetSignal() as well.
- Added Style::characterBound(). This returns a bounding box guaranteed to cover the largest character in the font. It is useful for correctly positioning the text baseline among other things.
0.80.0
======
UI
--
- NodeGraph now only drag-selects nodes that are wholly contained in the drag area, not merely intersecting it.
- Added a Backdrop node (#153).
RenderMan
---------
- Added support for "help" shader annotation in RenderManShaderUI (#536). This provides help for the shader as a whole and is mapped into the MetaData as the node description, appearing in the NodeEditor as a tooltip.
API
---
- Added optional continuous update to string PlugValueWidgets, controlled by the continuousUpdate parameters to the constructor. This transfers the text from the ui to the plug on every keypress.
Core
----
- Fixed serialisation of dynamic BoxPlugs.
Documentation
-------------
- Improvements too numerous to mention.
0.79.0
======
UI
--
- Added additional plug types to the CompoundDataPlug new plug menu (#522).
- Fixed bug in searchable Menus with no entries (#527).
Scene
-----
- Added CustomAttributes and CustomOptions nodes. These will be used instead of the old Attributes and Options nodes, and exist to better distinguish their use from the Standard, RenderMan and Arnold options and attributes nodes.
RenderMan
---------
- Enabled hosting of RenderManShaders inside custom Box classes. Previously it only worked inside Boxes and not classes derived from Box.
API
---
- Added python subclassing ability to Serialisation::Serialiser (#520).
0.78.0
======
API
---
- Added python bindings for signal::num_slots and signal::empty().
- Added Gadget::idleSignal(). This allows Gadgets to do things during the idle times of the host event loop.
- Added NodeEditor.nodeUI() method.
- Added CompoundEditor.editorAddedSignal().
- Enabled subclassing of Box from Python.
- Made RenderManShaderUI public.
Core
---
- Fixed serialisation of ExecutableOpHolder.
- Added dynamic requirement plugs to Executable.
-
UI
--
- Added middle mouse drag for dragging nodules to the script editor without dragging a connection.
- Further increased width of plug labels in NodeEditor (#98).
- Fixed read-only RenderManShader UIs.
- Fixed bug whereby read-only PlugValueWidgets were accepting drags.
- Added Help menu.
- Added NodeGraph auto-scrolling.
- Added support for "presets" parameter type hint.
OS X
----
- Fixed GafferImageUI linking.
0.77.0
======
- Added alignment support and addSpacer method to ListContainer.
- Fixed an update bug in the pixel value inspector (#401).
- Added the pinned status to saved layouts (#444).
- Added read-only mode to NodeUIs and NodeEditor (#414). Note that this currently interacts poorly with activators on RenderManShader node, and will be fixed in a future release.
- Fixed read-only MultiLineTextWidget bugs.
- Implemented tag reading in SceneReader node. Tags are represented as BoolData attributes called "user:tag:tagName" (#494).
- Increased width of plug labels in NodeEditor (#98).
- Improved the default layout to include SceneHierarchy and SceneInspector and Timeline editors.
- Fixed TabbedContainer sizing when tabs not visible.
- Fixed crashes when loading old scripts where coshader array parameters were stored as Compound plugs.
- Fixed propagation of shader hashes through Boxes.
- Allowed shaders to accept inputs from Boxes, even if the Box doesn't currently output a shader.
- Changed internal image coordinate system to have 0,0 at bottom left (formerly at top left).
0.76.0
======
- Added Application._executeStartupFiles() method (#354).
- Added RemoveChannels image node.
- Added a PointConstraint node (#482).
- Fixed framing error when entering a Box.
- Image viewer now displays channels in grey scale.
- Added Widget.widgetAt() method.
- Added ability to hide tabs in layouts.
- Fixed bug converting coshader array from fixed to variable length.
- Added Serialiser::postScript() method.
0.75.0
======
- Added a channel mask feature to GafferImageUI::ImageView. Use the r,g,b and a keys to isolate individual channels (#403).
- Updated for compatibility with Cortex 8.0.0a14.
- Updated screengrab app to allow the execution of a commands file.
- Added a node find dialogue, accessible via the Edit/Find.. menu item (#454).
- Added NodeGraph.frame( nodes ) method. This can be used to frame specific nodes within the viewport of the NodeGraph.
- Addressed thread related hangs when using an InteractiveRenderManRender and deleting or connecting nodes.
0.74.0
======
- Added a multitude of miscellaneous documentation improvements.
- Implemented parameterName.type RenderManShader annotation (#456).
- Implemented parameterName.coshaderType RenderManShader annotation (#460).
- Fixed disabled Shader pass-through bugs.
- Added variable length coshader array support to RenderManShader (#462).
0.73.0
======
- Implemented connection hiding for the NodeGraph. This is accessed by right clicking on a node in the Node Graph and using the new "Show Input Connections" and "Show Output Connections" menu items (#429).
- Fixed const correctness of GraphGadget::getNodePosition().
- Fixed connection drag bug. Dragging the endpoint of a connection around and then placing it back where it started was breaking the connection, whereas it should have been having no effect.
- Replaced Enabled/Disable node menu item with Enabled checkbox.
- Added titles to the node graph context menus.
0.72.2
======
- Fixed Box creation with nested connected plugs. This allows the creation of Boxes with shader nodes with input connections.
- Fixed removal of nodules from nodes in the graph ui when Plugs are removed.
- Fixed InputGenerator bugs and added python bindings and tests.
- Fixed Group bugs involving dynamically generated inputs and undo (#179, #210, #302).
- Tidied up node menu labels.
- Renamed WriteNode to ObjectWriter and ReadNode to ObjectReader (#17).
- Fixed minimum height of ramp editor (#445).
- Fixed empty messages from ErrorDialogue.ExceptionHandler.
- Added popup error dialogues for file save failures (#449).
- Fixed context used by interactive render nodes.
0.72.1
======
- Updated PySide build.
- Fixed bug expanding objects in viewer when a custom variable was needed by the computation (#438).
- Fixed boxing of RenderMan coshaders (#440).
- Fixed Qt 4.6 compatibility.
0.72.0
======
- Added workaround for weird focus-stealing behaviour in Maya.
- Added application variable to the scope available to the screen grab command.
- Added support for empty and relative paths in Gaffer.Path. ( #432, #324 )
- Added root parameter to all path constructors. This is used to define the root when the path parameter is passed a list of items. Because python doesn't allow overloaded functions this is slightly awkward - see documentation of Path.__init__ for discussion of how this would break down into overloaded constructors when we move the implementation to C++.
- Added Path.root() and Path.isEmpty() methods.
- Added Path.setFromPath() method, which copies the elements and the root from another path. This should be used in place of code which formerly did path[:] = otherPath[:].
Note that the new root parameter changes the parameter order for all Path (and derived class) constructors - if you were formerly passing a filter as a non-keyword argument you should now pass it as a keyword argument to avoid problems. Additionally, if you implemented a custom Path subclass, you need to add the root parameter to your constructor and update your copy() and children() implementations. The DictPath changes provide a minimal example of what needs changing.
0.71.0
======
- Variable substitution improvements
- Added standard ${script:name} variable (#407)
- Added custom script-wide variables accessible via the File->Settings menu (#407)
- Added support for variable references within variables (recursive substitution)
- Added environment variable and ~ substitution
- Added standard ${project:name} and ${project:rootDirectory} variables.
- Fixed save and load of ReadOnly plugs.
- Removed Escape hotkey for leaving full screen mode. The same function is served by the ` hotkey.
- Defined default locations for ribs, ass files and rendered images.
- Added automatic directory creation for display, rib and ass locations (#59)
- Added GraphComponent::clearChildren() method
- Greyed out File->RevertToSaved menu item when it doesn't make sense
- Improved CompoundDataPlug data representation
- CompoundPlugValueWidget using PlugValueWidget.hasLabel() to avoid unecessary labelling
- Fixed UI for promoted plugs (#264)
- Fixed bug where deleted children of Boxes weren't removed from the selection (#430)
- Fixed bug where pinned nodes were still visible in the UI after being deleted (#308)
- Fixed hangs caused by adjusting colours while rerendering
- Tidied up some test cases
0.70.0
======
* Added Ganging for CompoundNumericPlugs (#402)
* Added menu item for loading renderman shaders from file (#125)
* Added color ramp editing support (#286)
* Added spline parameter support to RenderManShader::loadShader()
* Added shader annotations for passing default values to RenderManShader splines
* Added dividers in the NodeEditor, available to RenderMan shaders via the annotation "parameterName.divider" (#288)
* Added API for undo merging.
* Added ScriptNode::undoAddedSignal() (#103)
* Fixed hiding of Menu when using the search box
* Fixed tab focus ordering in NodeEditor (#107)
* Improved GadgetWidget focus behaviour (#119)
* Fixed redundant CompoundNumericPlug serialisation (#2)
* Fixed scrubbing of values for IntPlugs
* Fixed size issues caused by TabbedContainer size policy (Settings and About window)
* Fixed bug in Random::affects()
* Fixed multiple undo entries in virtual sliders, cursor up/down nudging, color choser, and ramps (#400)
* Fixed Ctrl+C copy shortcut in non-editable MultiLineTextWidgets
* Hid Shader enabled plug in the UI (#398)
0.69.1
======
* Fixed bug with top level actions breaking searchable menus
* Fixed node reconnection crashes in ScriptNode::deleteNodes and StandardGraphLayout::ConnectNodeInternal
0.69.0
======
* Implemented drag and drop between plugs in the NodeEditor (#285)
Drags are initiated on the label for the plug.
Left drag initiates a drag for connecting plugs.
Shift-left drag and middle drag initiate a drag for transferring values between plugs.
Colours may now also be dragged from the viewer onto a plug.
There are custom pointer icons for each type of drag (#44)
* Added blinking indication for plugs preventing the opening of a colour picker (#185).
* Implemented enabling/disabling for shader nodes (#327).
By default disabled shaders behave as if their output connections didn't exist.
RenderMan shaders may act as a pass-through by defining a "primaryInput" annotation naming an input coshader parameter.
* LinkedScene files (.lscc) are now previewable in the browser
* ImageReader only reads the necessary channel from the OpenImageIO cache
* Reverted non-gui ExecutableRender::execute() to block until the render is complete (#353).
* Fixed Nuke link error
* Fixed browser op mode
* Fixed missing Recent Files bug (#378).
* Fixed some bugs with extraneous dragBegins
* Removed namespace prefixes from typenames for displaying to the user (#389).
* Removed deperecated ModelCacheSource
0.68.0
======
* Improved speed of renderman shader menu.
* Image stats node in ImageView now uses the preprocessed input plug if the raw input is not an ImagePlug
* Removed right-click layout context menu.
* Added "Unpromote from Box" item to plug popup menu.
* Fixed menu title so it doesn't interfere with menu keyboard navigation.
0.67.0
======
* Fixed potential lockup with NumericPlugs.
* Fixed RenderMan ShaderMenu match expressions (broken in 0.66.0)
* Reintroduced the node name into the NodeEditor header.
* Exposed LayoutMenu submenu callable publicly.
* Implemented in-place renaming for user plugs (#213).
* Added support for RSL "parameterName.label" annotation (#372).
* Added a MapProjection node.
* Added sample window to the ImageViewer.
* Fixed UI test cases broken by the per-application menu commits.
* Can once again build for OS X.
* Added support for packaging as .dmg on OS X.
0.66.0
======