[Interest] Using OpenGL with Qt

Agocs Laszlo Laszlo.Agocs at digia.com
Mon Mar 17 09:28:17 CET 2014


Hello,

Some notes about QOpenGLFunctions:

One QOpenGLFunctions belongs to one QOpenGLContext. Creating additional instances of QOpenGLFunctions for the same context will automatically share the internals behind the scenes so "it's way too much memory and time for each to resolve is functions" should not be the case. Also, functions that are never called are never resolved.

Cheers,
Laszlo

________________________________________
From: interest-bounces+laszlo.agocs=digia.com at qt-project.org [interest-bounces+laszlo.agocs=digia.com at qt-project.org] on behalf of Yves Bailly [yves.bailly at sescoi.fr]
Sent: Monday, March 17, 2014 8:45 AM
To: interest at qt-project.org
Subject: [Interest] Using OpenGL with Qt

Greetings all,

I would like to raise again a question which has already been discussed
a bit, without finding a satisfactory answer (for me at least).

It's about using OpenGL, more precisely getting access to OpenGL functions.

Is it possible to use Glew with Qt 5.2? I mean, is it possible to use Glew,
QGLWidget, QOpenGLShader, etc. in the same piece of code?

I know there are the QOpenGLFunctions_* classes, but they're too cumbersome
to use for any heavy work. They somehow require to have a kind of global
instance, e.g.
QOpenGLFunctions_3_3_Core* gl = QOpenGLContext::current()->versionFunctions<...>();
...which then leads to code like
gl->glSomething();
gl->glDoThis();
gl->glDoThat();
...
That "gl->gl" prefix is just odd and makes it almost impossible to reuse
existing, older (Glew-based) code. Just try to copy-paste some GL example
from the web, or copy-paste this "gl->gl" code to some other program not
using Qt. In a even slightly mixed environment, it's really a pain.

And subclassing from QOpenGLFUnctions_* is not an option when you may have
thousands of instances: it's way to much memory and time for each to
resolve its functions.

Note subclassing *can* be an option, if only there was some kind of smart
constructor which would share internals, pretty much like it's done so well
since so long in QString, QImage, containers... Something like this:

class QOpenGLFunctions_3_3_Core
{
   public:
     QOpenGLFunctions_3_3_Core(QOpenGLFunctions_3_3_Core* shared_internals)
     /* ... */
};

Than it can be used easily:

class My_Class: public My_Parent, protected QOpenGLFunctions_3_3_Core
{
   public:
     My_Class(Some_Data data):
       My_Parent(data),
       QOpenGLFunctions_3_3_Core(
         QOpenGLContext::current()
           ->versionFunctions<QOpenGLFunctions_3_3_Core>())
     { }
};

Then from inside "My_Class", no more need for any kind of "gl->" prefix and
everyone is happy :-)

Or maybe I missed something? For now our only alternative is to use Glew,
can you confirm it works well alongside Qt?

Regards,

--
      /- Yves Bailly - Software developer   -\
      \- Sescoi R&D  - http://www.sescoi.fr -/
"The possible is done. The impossible is being done. For miracles,
thanks to allow a little delay."
_______________________________________________
Interest mailing list
Interest at qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest



More information about the Interest mailing list