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: [email protected] [[email protected]] on behalf of Yves Bailly [[email protected]] Sent: Monday, March 17, 2014 8:45 AM To: [email protected] 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 [email protected] http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
