Skip to content

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 for HybridTransparency
  • 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
Edited by Flavien BRIDAULT

Merge request reports