enh(viz): make Qt overlays compatible with the 3D scene
Description
The Ogre Qt widget has been heavily reworked. This was motivated by the need to have Qt widgets as an overlay.
To make this possible, we chose to let Qt make the OpenGL compositing of the whole application. However, this required us to make a part of the composition ourselves. It was no longer possible to use a classic Ogre::RenderWindow
because at some point, it will end up trying to handle its own final back buffer, while we want to render in the FBO managed by Qt. Thus, Ogre::RenderWindow
was banned in favour of Ogre::RenderTarget
. This implied other significant changes to handle viewport resizes with listeners.
Closes #857 (closed) #103 (closed)
Other changes
- SightViewer XML configuration has been heavily reworked to use shared configurations. Three new configurations are now available in
sight::config::viz::scene3D
to display a single negatoscope, a 3D scene and four-split views with a 3D scene and 3 negatoscopes. - Layer transparency: if not specified, then the OIT is disabled (you still have transparency, but it is order dependent). This ensures that most render layers do not use an expensive transparency technique if it is not required. If you need OIT,
Default
is the best setting and is an alias forHybridTransparency
- The Ogre Overlay was removed because it was hard to make it compatible with the new rendering setup. On top of that, it seems pretty irrelevant to keep two systems to do the same thing. The services that used it, like
sight::module::viz::scene3d::adaptor::SText
have been switched to Qt. - In GUI tests, it is now possible to address the views using a wid in
SView
-
SImageExtruder
can now take an optional transform matrix, in the case where the image is moved in the scene (registration for instance)
How to test it?
- Extensive tests of GUI applications
- Test with your private app