I’ve been re-working the osgQt code to fit the Qt5 windowing model closer - I have a basic proof of concept working, which I will clean up and publish shortly. This provides an osgViewer backed by a QWindow; so the widget and opengl module dependency is gone, the only Qt5 modules needed are Gui and Core.
A QWindow can be embedded in a traditional widget based application using QWidget::createWindowContainer; I will create an example of this approach as part of my submission. (And the performance of this approach is the same as the old QGLWidget inside GraphicsWindowQt).
What I’d like to know, is what other uses cases are relevant for people:
- I could re-create QWidgetImage, but using QWidget::render and avoiding any reliance on QGraphicsScene or QGraphicsProxy. If people have uses cases for QWidgetImage, that would be good to know. Especially, are you embedding ‘a few buttons’ or entire application layouts? Correctly handling keyboard focus is obviously something that’s been difficult in the current code and I expect to be similarly awkward.
- QtQuick2 integration; I’ll create a custom QQ2 item which renders OSG via a framebuffer. This will allow an OSG scene to be integrated with QQ2 UI, with reasonable performance. I would welcome any input from people who need this, and your particular requirements, especially the API for binding the osg Scene to the QML item. But, see the next point:
- I /hope/ to create a GraphicsWindowQtQuick which allows the common case of an OSG scene, with a QQ2 scene overlaid. This has some complexities to support the different OSG threading models and context lifetime, but it feels like such a common and desirable use case it’s worth spending time on.
- does anyone have a use for an equivalent of QWidgetImage for QtQuick2? I.e a chunk of QQ2 content displayed as a texture.
My intention would be to have any new classes live alongside the existing Qt4 support, since I don’t want to touch that code at all, for fear of regressing some aspect of the Qt4 support which someone may be relying upon in existing code.
If you have thoughts in this area, interesting requirements which might guide my approach, or test-case you can share, please let me know. I will definitely be doing the basic pieces outlined above, but whether I work on the QWidgetImage piece in particular depends very much on what response I get.
Kind regards,
James Turner
_______________________________________________
osg-users mailing list
osg-...@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Hi Ricky,
I understand your point of view here. But I think there are multiple use cases.
If I understand your approach well you intend having a 3d rendering app with some nice qt based features.
On the other hand we are developing a lot of software in the textile environment and 3d simulation of the fabric is just an optional add-on. So the main aspect in our case is having a geometry managed embedded window showing an ist scene.
So for us James's contribution is just what we need.
As I said before, there are many scenarios for interacting qt and osg.
Hi James,I haven't looked into osg+qt integration since a while so I might not be aware of the latest features available.From my point of view the most desired feature is to be able to integrate a qt scene (a GUI layout or a browser/pdf/svg viewer widget) inside an osg driven application smoothly - i.e. without the need of a Qt application to run as main thread loop, but hiding it as a "slave" somewhere in an osg module/node, to make those widget pluggable in a "regular" osg application.Instead if you're interested, a while ago I coded an integration to render with osg inside a QtQuick+QML application.Basically the solution implements a custom QtQuick node which renders an osgViewer scene to an FBO, and then copies the FBO contents back to the Qt context, to make it available in the qt/qml scenegraph which renders the widgets.The osgQuickNode uses a separate OpenGL context, not to interfere with the one used by Qt for its own scene rendering.All the code is here: https://github.com/rickyviking/qmlosgIf you have questions about the implementation feel free to write me.Ricky
On Mon, Aug 17, 2015 at 12:54 PM, Robert Osfield <robert....@gmail.com> wrote :
HI Alistair,I'm not familiar with Qt5/QQuck2 so can't comment on the Qt side, so have to defer to others on this.
On the OSG side osgViewer is designed specifically to handle a thread per graphics context/window - it's a core feature of how osg::GraphicsContext, osg::GraphicsThread are designed and implemented. If Qt5 requires a thread per window then this is a model that osgViewer can be capable of handling since it's inception (well before Qt5), the only question would be to how to integrate the threading in synchronization operations that Qt5 is forcing upon the set up with the way that the OSG manages things. Perhaps subclassing from osg::GraphicsThread might be one approach or other classes.
I don't know if the other direction might be possible - stop Qt trying to do eve rything that the OSG can already do perfectly without it.Robert.
On 17 August 2015 at 09:48, Alistair Baxter <alis...@mve.com> wrote:As you are no doubt aware, James, we've been looking into this sort of integration ourselves. QQuick 2 integration is part of our goal, although we hadn't been planning direct interaction between QML and out osg scenes, since we have a separate data model. Although if such a thing existed, and were sufficiently convenient to use, then we might be interested in integrating it in a similar way to how we use the existing 3D osg manipulators. We've never really been interested in QWidgetImage, we only ever used it to try and get round a window composition issue on OSX.
Our main concern at the moment is that we need a multi-window viewer. Due to the way Qt 5 has a separate opengl render thread per Window, this has meant reimplementing a significant chunk of OSGCompositeViewer in order to get it to work at all, and we are discovering a variety of thread-synchronisation issues.
_______________________________________________
osg-users mailing list
osg-...@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
osg-...@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
--
This email was Anti Virus checked by Astaro Security Gateway. http://www.sophos.com
--
This email was Anti Virus checked by Astaro Security Gateway. http://www.sophos.com

On 17 Aug 2015, at 09:48, Alistair Baxter <alis...@mve.com> wrote:Our main concern at the moment is that we need a multi-window viewer. Due to the way Qt 5 has a separate opengl render thread per Window, this has meant reimplementing a significant chunk of OSGCompositeViewer in order to get it to work at all, and we are discovering a variety of thread-synchronisation issues.
From my point of view the most desired feature is to be able to integrate a qt scene (a GUI layout or a browser/pdf/svg viewer widget) inside an osg driven application smoothly - i.e. without the need of a Qt application to run as main thread loop, but hiding it as a "slave" somewhere in an osg module/node, to make those widget pluggable in a "regular" osg application.
Instead if you're interested, a while ago I coded an integration to render with osg inside a QtQuick+QML application.Basically the solution implements a custom QtQuick node which renders an osgViewer scene to an FBO, and then copies the FBO contents back to the Qt context, to make it available in the qt/qml scenegraph which renders the widgets.The osgQuickNode uses a separate OpenGL context, not to interfere with the one used by Qt for its own scene rendering.All the code is here: https://github.com/rickyviking/qmlosgIf you have questions about the implementation feel free to write me.
On 18 Aug 2015, at 09:44, John Vidar Larring <john.l...@chyronhego.com> wrote:I've attempted to update the osgQt code to use the new QOpenGLWidget rather than the deprecated QGLWindow currently subclassed, but I've hit a snag with the the order of when when QOpenGLContext is created and when CompositeViewer expects it to be available (Probably a silly mistake that I'm overlooking). Have you had to restructure the osgQt::GraphicsWindow or osgQt::GLWindow class and the osgViewerQt example in any way to get your implementation to work?
Also, I would like to know why you chose to use QOpenGLWindow rather QOpenGLWidget considering the Qt documenation below.
From http://doc.qt.io/qt-5/qopenglwidget.html:
Adding a QOpenGLWidget into a window turns on OpenGL-based compositing for the entire window. In some special cases this may not be ideal, and the old QGLWidget-style behavior with a separate, native child window is desired. Desktop applications that understand the limitations of this approach (for example when it comes to overlaps, transparency, scroll views and MDI areas), can use QOpenGLWindow with QWidget::createWindowContainer(). This is a modern alternative to QGLWidget and is faster than QOpenGLWidget due to the lack of the additional composition step. It is strongly recommended to limit the usage of this approach to cases where there is no other choice. Note that this option is not suitable for most embedded and mobile platforms, and it is known to have issues on certain desktop platforms (e.g. OS X) too. The stable, cross-platform solution is always QOpenGLWidget.