No, I meant mixing regular widgets with QGLWidget. Like, say, having a 
QGLWidget as a child of another QWidget, in a layout or in an MDI area, etc. On 
platforms that restrict themselves to a single native window and window surface 
this is problematic since a QGLWidget always requires its own window/surface.

QGLWidget, QOpenGLWidget, QQuickWidget all have a dependency on the widgets 
module. These should only be used when the application needs some other 
(Q)widgets too. You should not be basing new development on Q(Open)GLWidget if 
that is not the case.

You are absolutely right about QWindow. Using QWindow with a few lines of 
simple "boilerplate"(?) code is still the way to go, if the design allows it. 
This avoids the dependency on the widgets module and allows a higher degree of 
control than QGLWidget could ever offer.
However, to make life easier, there are plans about introducing a QOpenGLWindow 
with an API equivalent to QOpenGLWidget. As the name suggests this would be a 
convenience wrapper of QWindow without any QWidget dependencies.

This could complete the offering in 5.4 as follows:

QOpenGLWidget: the successor of QGLWidget. Targeted for mixing native GL 
content with other widgets. Not recommended for GL-only toplevels due to the 
implicit compositing step. (*)

QQuickWidget: the equivalent for Quick

QOpenGLWindow: the lightweight and best performing option for windows that 
contain nothing but OpenGL content (e.g. games). Can still be "embedded" into a 
QWidget window using createWindowContainer but a number of restrictions apply 
(stacking etc.).

QQuickWindow/QQuickView: the equivalent for Quick

Best regards,
Laszlo

(*) Unlike QGLWidget, there is no native window under the hood for a 
(non-toplevel) Q(OpenGL|Quick)Widget. Instead, they render into a framebuffer 
object. The textures are then composited by the top-level widget. This 
obviously carries a performance penalty.

________________________________________
From: interest-bounces+laszlo.agocs=digia....@qt-project.org 
[interest-bounces+laszlo.agocs=digia....@qt-project.org] on behalf of Till 
Oliver Knoll [till.oliver.kn...@gmail.com]
Sent: Tuesday, February 18, 2014 5:27 PM
To: Qt Project
Subject: Re: [Interest] Platform eglfs and OpenGL

Am 18.02.2014 um 15:25 schrieb Agocs Laszlo <laszlo.ag...@digia.com>:

> Nothing stops you from "using OpenGL in a Qt application", what you cannot do 
> is mixing QGLWidget with other widgets. Take hellogl_es2 for example and 
> strip out the MainWindow with all the widgets. If you only have the QGLWidget 
> and nothing else, it will work fine on eglfs too.

You must have meant "you cannot mix Q*Open*GLWidget" (yet) with QGLWidget?

Wasn't there as well the suggestion (in some Qt blog) to use a QWindow with a 
GL surface (write all the tedious boilerplate code you now are supposed to 
write yourself *ahem*) and then "wrap" that QWindow into a QWidget (with a 
"wrapper" class/container: QWidget::createWindowContainer())?

And that Q*Open*GLWidget would implement exactly that, so /we/ don't have to 
write the boilerplate code and basically end up with what we had with the 
*previous* QGLWidget, except that the new QOpenGL classes grok better together 
with recent OpenGL 4.x context?

So what you suggested is that if I want to start using OpenGL *now* (Qt 5.2) I 
should be using QWindow with GL surface, write the boilerplate code myself (all 
that initialiseGL, updateGL, resizeGL stuff) and wrap that into a "QWidget 
container"?

And once Qt >=5.4 appears I would throw away my QWindow based class (see 
"boilerplate code") and start using Q*Open*GLWidget - correct?


Is that the (simplified) story? :)

Cheers,
  Oliver

P.S. Yes, we really want *QWidgets* & OpenGL here ;)
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to