Enabled GafferOSL build in IE config.
Removed hardcoded OSL version in IE config.
Consolidated FilteredSceneProcessor filter access into helper methods.

At a later date this will give us a single place to control the Context in which filter queries are made.
First pass at SetFilter.
Added further unit tests for SetFilter.
Made SetFilter compatible with Isolate and Prune nodes.
Improved FilteredSceneProcessor documentation.
Added UI file for SetFilter.

This includes a useful right click menu for populating the set plug with the names of sets available in the connected scenes.
Replaced custom Filter context with field in standard context.

Now we have an optimised Context implementation, the performance difference appears negligible, and using the standard Context for everything is preferable over having special cases.

I did consider modifying the Context class to allow RunTimeTyped storage rather than just Data storage, so that the scene plug could be stored without encoding as uint64_t, but decided against it. Because RunTimeTyped (or GraphComponent, or Plug) doesn't have a copy() method, it would make implementing the ownership semantics the Context requires impossible, or would require documenting special cases for non-copyable types. It seems preferable to have one nasty isolated cast for an isolated use case than to confuse an API which is central to everything.
Added context argument to FilteredSceneProcessor utility methods.

Since we already have access to the context, it doesn't make sense to pull it out of thread local storage again.
Removed unnecessary Context construction in Prune and Isolate.

Also improved documentation in FilteredSceneProcessor to reduce the chance of doing it again.
Implemented UnionFilter::sceneAffectsMatch().

UnionFilter is now compatible with SetFilter inputs.

Fixes #92.
Fixed boost::flat_map/gcc 4.1.2 crash.

The boost::flat_map implementation makes calls to container_detail::force_copy(), which as far as GCC 4.1.2 is concerned breaks strict aliasing rules. GCC then outputs code which crashes in our Context class, which uses flat_map internally.

This is "fixed" by disabling the strict-aliasing optimisations when we detect compilation with GCC 4.1.2. Although there may be some performance implications to this, it turns out that our OS X builds never enabled that optimisation, because there it does not default to on with -O2, and performance has always seemed OK.

As one nice side effect of this, we have now removed the disabling of warnings for strict-aliasing problems, which were previously disabled across all compilers on Linux (to work around other problems in boost, and the -isystem flag in GCC 4.1.2). So we now do at least have more complete error checking in more recent compilers.
Fixed strict aliasing warning in ExecutableNodeBinding.

The previous implementation made some sketchy assumptions about the layout of MurmurHash. The new version doesn't.
Merge pull request #853 from johnhaddon/strictAliasingShenanigans

Strict aliasing shenanigans
Fixed deadlock removing input from running InteractiveRender node.

We were calling from Python into C++ by calling ViewportGadget::dropSignal() in GadgetWidget, and that was calling Plug::setInput( NULL ), which would then trigger destruction of the renderer in InteractiveRender, which would then start trying to flush buckets and close display drivers on a background thread, which would end up in GafferDisplayDriver, which would emit dataReceivedSignal() or imageReceivedSignal(), which would attempt to enter into python to call the python slots which were connected, but block because the GadgetWidget thread had the GIL. Fun.

Now releasing the GIL in all signal calls, which fixes this and should prevent a host of similar problems in the future.
Added pausing of interactive renders.

Previously pausing a render just meant that we stopped sending edits, but the render was still happening in the background and taking up valuable cycles. We now pause the renderer itself in addition to not sending edits any more.

Refactored the code a bit to make it all easier to follow. Before, we were changing our internal state and stopping/starting renders in various different signal handlers and it was hard to follow the overall logic. Now we use much simpler signal handlers which just track what has been dirtied, and keep all our update logic in a single update() method, which is hopefully easier to follow.

Fixes #646.
Hid ScriptNode binding internals in an anonymous namespace.
Added GIL release to ScriptNode undo() and redo() bindings.

This fixes a deadlock when an IPR restart was triggered from undo or redo - with the UI holding the GIL on the main thread and the Display node emitting a signal with a python slot attached on a background thread.
Merge pull request #851 from johnhaddon/setFilter

SetFilter