Outils d'utilisateurs

Outils du Site


opengl_dans_qt5

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

opengl_dans_qt5 [2016/03/27 13:11]
gbdivers
opengl_dans_qt5 [2016/03/27 20:20] (Version actuelle)
winjerome
Ligne 18: Ligne 18:
 OpenGL fonctionne via un système de versions et d'extensions. Quand on veut utiliser une fonction GL, il faut regarder dans quelles versions d'OpenGL elle est disponible. Ou l'inverse : quand on utilise une version d'OpenGL, il faut vérifier les fonctions disponibles. OpenGL fonctionne via un système de versions et d'extensions. Quand on veut utiliser une fonction GL, il faut regarder dans quelles versions d'OpenGL elle est disponible. Ou l'inverse : quand on utilise une version d'OpenGL, il faut vérifier les fonctions disponibles.
  
-Les extensions sont un complément aux versions. Elles permettent d'appeler des fonctions non disponible dans une version donnée (par exemple, appeler une fonction de GL 4 dans GL 3).+Les extensions sont un complément aux versions. Elles permettent d'appeler des fonctions non disponibles dans une version donnée (par exemple, appeler une fonction de GL 4 dans GL 3).
  
 Et bien sûr, tout cela va dépendre du matériel et des capacités de la carte graphique. (Ce qui signifie qu'avant d'utiliser une fonction, il faut vérifier que le matériel la supporte). Et bien sûr, tout cela va dépendre du matériel et des capacités de la carte graphique. (Ce qui signifie qu'avant d'utiliser une fonction, il faut vérifier que le matériel la supporte).
Ligne 26: Ligne 26:
 Qt propose plusieurs outils pour gérer cela.  Qt propose plusieurs outils pour gérer cela. 
  
-QOpenGLFunctions fournit les fonctions de base que tout système DOIT supporter pour pouvoir faire tourner une application Qt 5. C'est donc la base minimale que l'on peut utiliser en ayant la garantie que cela fonctionne partout. (C'est en gros basé sur un sous ensemble d'OpenGL ES 2)+QOpenGLFunctions fournit les fonctions de base que tout système DOIT supporter pour pouvoir faire tourner une application Qt 5. C'est donc la base minimale que l'on peut utiliser en ayant la garantie que cela fonctionne partout. (C'est en gros basé sur un sous ensemble d'OpenGL ES 2.)
 les classes QOpenGLFunctions_x_y, qui permettent d'utiliser une version spécifique de GL (par exemple http://doc.qt.io/qt-5/qopenglfunctions-2-0.html ou http://doc.qt.io/qt-5/qopenglfunctions-4-5-core.html). Mais il faut vérifier que le matériel supporte cela avant d'utiliser une version particulière de GL les classes QOpenGLFunctions_x_y, qui permettent d'utiliser une version spécifique de GL (par exemple http://doc.qt.io/qt-5/qopenglfunctions-2-0.html ou http://doc.qt.io/qt-5/qopenglfunctions-4-5-core.html). Mais il faut vérifier que le matériel supporte cela avant d'utiliser une version particulière de GL
 QOpenGLContext::hasExtension et QOpenGLContext::getProcAddress permettent de gérer manuellement les extensions. Idem, il faut tester le matériel. QOpenGLContext::hasExtension et QOpenGLContext::getProcAddress permettent de gérer manuellement les extensions. Idem, il faut tester le matériel.
-toutes les fonctions plus haut niveau QOpenGLXxx (par exemple QOpenGLTexture, QOpenGLShaderProgram, QOpenGLFramebufferObject) permettent d'utiliser des fonctionnalités de GL sans se préoccuper des versions de GL. Ces classes vérifient en interne les fonctions GL utilisables, pour optimiser au mieux les tâches.+Toutes les fonctions plus haut niveau QOpenGLXxx (par exemple QOpenGLTexture, QOpenGLShaderProgram, QOpenGLFramebufferObject) permettent d'utiliser des fonctionnalités de GL sans se préoccuper des versions de GL. Ces classes vérifient en interne les fonctions GL utilisables, pour optimiser au mieux les tâches.
 Bref, pas simple tout cela. Bref, pas simple tout cela.
  
-Je te conseille de prendre un cours/tutos/livre sur une version d'OpenGL pas trop ancienne, de créer un contexte Qt avec une version de GL correspondante et de bosser avec cela.+Je vous conseille de prendre un cours/tutos/livre sur une version d'OpenGL pas trop ancienne, de créer un contexte Qt avec une version de GL correspondante et de bosser avec cela.
  
-Dans un programme pro, on ne pourra bien sur pas faire comme cela. Il faudra faire un code minimal qui fonctionne sur un maximum de matériel, puis écrire du code spécifique pour chaque fonctionnalité/matériel qui permettent d'optimiser le rendu. C'est beaucoup de boulot.+Dans un programme pro, on ne pourra bien sûr pas faire comme cela. Il faudra faire un code minimal qui fonctionne sur un maximum de matériel, puis écrire du code spécifique pour chaque fonctionnalité/matériel qui permettent d'optimiser le rendu. C'est beaucoup de boulot.
 </note> </note>
  
Ligne 92: Ligne 92:
  
   * QOpenGLContextGroup (Qt 5.0) : Possibilité de partager des ressources entre plusieurs contextes (par exemple, si une texture est utilisée dans 2 contextes, on évite de la charger 2 fois, on la partage). Plus de 2 contextes ?   * QOpenGLContextGroup (Qt 5.0) : Possibilité de partager des ressources entre plusieurs contextes (par exemple, si une texture est utilisée dans 2 contextes, on évite de la charger 2 fois, on la partage). Plus de 2 contextes ?
-  * QOpenGLVersionProfile (Qt 5.1) : permet de creer un contexte avec une version spécifique de GL avec versionFunctions. Préférer la version avec template.+  * QOpenGLVersionProfile (Qt 5.1) : permet de créer un contexte avec une version spécifique de GL avec versionFunctions. Préférer la version avec template.
  
 ==== Debug et profiling ==== ==== Debug et profiling ====
Ligne 151: Ligne 151:
 QOpenGLTimeMonitor::create(); QOpenGLTimeMonitor::create();
  
-// définie des points de mesure+// définir des points de mesure
 QOpenGLTimeMonitor::recordSample(); QOpenGLTimeMonitor::recordSample();
  
Ligne 182: Ligne 182:
  
   * QOpenGLFunctions (Qt 5.0) : support des fonctions OpenGL. Pour utiliser une fonction d'une lib en général, besoin du prototype (nom, paramètres, etc) et l'adresse dans la lib. Fait automatiquement par le link lors de la compilation.   * QOpenGLFunctions (Qt 5.0) : support des fonctions OpenGL. Pour utiliser une fonction d'une lib en général, besoin du prototype (nom, paramètres, etc) et l'adresse dans la lib. Fait automatiquement par le link lors de la compilation.
-  * QAbstractOpenGLFunctions et QOpenGLFunctions_X_x (Qt 5.1) : chargement des fonctions specifiques d'une version de GL.+  * QAbstractOpenGLFunctions et QOpenGLFunctions_X_x (Qt 5.1) : chargement des fonctions spécifiques d'une version de GL.
  
  
Ligne 193: Ligne 193:
 Remarque : a partir de GL 3.2, suppression des anciennes fonctions dans Core, conservée dans Compatibility . Remarque : a partir de GL 3.2, suppression des anciennes fonctions dans Core, conservée dans Compatibility .
  
-Qt permet de gérer tout cela (création d'un contexte avec une version spécifique, chargement d'une extension). Par défaut, OpenGL ES 2 (supporter partout, même sur mobile).+Qt permet de gérer tout cela (création d'un contexte avec une version spécifique, chargement d'une extension). Par défaut, OpenGL ES 2 (supporté partout, même sur mobile).
  
 <code cpp> <code cpp>
opengl_dans_qt5.1459077069.txt.gz · Dernière modification: 2016/03/27 13:11 par gbdivers