OpenGL dans Qt5

Le support d’OpenGL dans Qt5 a été modifié pour mieux l’intégrer avec les nouveaux modules de Qt : QtQuick2 et Qt3D. Cet article présente les modifications apportées dans Qt5.

OpenGL dans Qt4

Dans Qt4, les fonctionnalités d’OpenGL sont implémentées dans un module spécifique, QtOpenGL. Ce module était utilisé par différentes classes pour bénéficier de l’accélération matérielle. Il existe plusieurs méthodes pour activer l’accélération matérielle :

  • pour activer par défaut l’utilisation de OpenGL, utiliser la ligne de commande « -graphicssystem opengl » ou la fonction QApplication::setGraphicsSystem(« opengl ») ;
  • pour QGraphicsView (QtGraphics) ou QDeclarativeView (QtQuick), utiliser la fonction setViewport(new QGLWidget) ;
  • on peut également utiliser QPainter directement sur un QGLWidget ;
  • avec le QML Viewer, utilisez la commande « -opengl ».

L’organisation des modules
Dans Qt4, on a donc un problème dans l’organisation des modules. Beaucoup de classes de QtGui peuvent dépendre des classes appartenant à QtOpenGL alors que ce module dépend normalement de QtGui.
C’est pour cela que de nouvelles classes font leur apparition dans Qt5 et que les différents modules ont été réorganisés :

  • les classes QOpenGL appartiennent au module QtGui et fournissent les fonctionnalités de base permettant l’accélération matérielle pour toute les classes de rendu de Qt ;
  • la classe QWidget n’est plus le parent de toutes les classes de rendu. Cette classe et ses dérivées (QGraphicsView) sont transférées dans le module « widgets » ;
  • QtQuick 2 utilise maintenant scenegraph à la place de QWidget et la classe QDeclarativeView devient QQuickView et OpenGL est utilisé par défaut ;
  • QtOpenGL continue d’exister pour fournir la classe QGLWidget et ses dérivés. Le code OpenGL Qt4 est donc compatible avec Qt5 ;
  • le module Qt3d fait son apparition pour fournir un moteur 3D plus avancé. Ce module est suffisamment important et fera donc l’objet d’un article spécifique.

Remarque : il faut faire attention de ne pas confondre le module QtOpenGL, contenant les classes commençant par QGL, et le module QtGui, contenant les classes commençant par QOpenGL (sans t).

Les classes de QtGui dans Qt5
Le module QtGui de Qt5 réutilise des classes existantes du module QtOpenGL de Qt4. Les noms sont explicites :

  1. QOpenGLBuffer ;
  2. QOpenGLContext ;
  3. QOpenGLFramebufferObject ;
  4. QOpenGLFramebufferObjectFormat ;
  5. QOpenGLShader ;
  6. QOpenGLShaderProgram.

Plusieurs nouvelles classes font leur apparition :

  1. QOpenGLContextGroup : groupe de contextes OpenGL pouvant partager des ressources. Cette classe est gérée automatiquement par les objets QOpenGLContext ;
  2. QOpenGLFunctions : fournit un accès indépendant de la plateforme aux fonctions d’OpenGL ;
  3. QOpenGLPaintDevice : permet de dessiner dans un contexte OpenGL avec QPainter ;
  4. QOpenGLStaticContext : manque de documentation ;
  5. QOpenGLContextData : manque de documentation ;
  6. QWindowsGLContext : manque de documentation.

Que faut-il modifier pour utiliser OpenGL dans Qt5
Tout d’abord, il faut Qt5. Le plus simple est d’utiliser les dépôts PPA sur Ubuntu : https://launchpad.net/~forumnokia/+archive/fn-ppa. Qt5 sera installé dans le répertoire /opt/qt5. Pour ajouter cette version de Qt dans QtCreator, il faut aller dans le menu « Outils » puis « Options… », allez dans « Compiler et exécuter… » puis l’onglet « Versions de Qt ». Cliquer sur « Ajouter » et aller chercher le fichier « /opt/qt5/bin/qmake ». Voilà, Qt5 est prêt à être utilisé.

Normalement, vous pouvez utiliser vos projets directement, mais il est préférable de prendre l’habitude d’ajouter le module « widgets » (remarque : l’ajout des modules core et gui n’est pas obligatoire puisqu’ils sont inclus par défaut) :

1
2
3
4
QT += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets
}

Amusez-vous bien !

Une réflexion au sujet de « OpenGL dans Qt5 »

  1. Ping : Les modules de Qt 5 « C++, Qt et GPU

Les commentaires sont fermés.