IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Qt 4.7 et OpenGL 3.x [2D/3D]


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Qt 4.7 et OpenGL 3.x
    Bonjour,

    Je tente actuellement de faire fonctionner une application basique utilisant opengl 3.2 avec Qt 4.7 (visual studio addin). Je rencontre cependant une série de problèmes qui semblent liés à la création de contexte opengl 3.x. Mon niveau étant assez faible (je cherche avant tout à créer le projet de base qui me permettera de suivre les leçons du livre "opengl superbible"...), je serai extrêmement reconnaissant si quelqu'un pouvait me donner un exemple, un conseil, un lien vers un article, n'importe quoi en fait, qui pourrait m'aider à y voir plus clair.

    Je précise que l'utilisation séparée d'opengl 3.x (avec FreeGlut) et de Qt ne me pose pas de problème, pas plus que l'utilisation d'opengl < 3.x avec Qt qui est très bien documentée et étayée par de nombreux exemples. Je précise aussi que j'ai déjà fait énormément de recherches sur le net à ce sujet mais que je n'ai rien trouvé, excepté des discussions évoquant le même problème, mais toujours sans solution...

    Bref, si quelqu'un parmi vous utilise qt avec opengl 3.x, un retour d'expérience serait très appréciable...

    Merci d'avance !

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut


    Si tu as des messages d'erreurs qui apparaissent, ce serait bien de les indiquer, c'est plus facile pour aider. Ainsi que le code qui les crée.

    Sinon, tu peux voir ce tuto : http://fhalgand.developpez.com/tutor...e-application/
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse.

    L'application est réduite à sa plus simple expression : une classe "Window" (QWidget) avec comme enfant une classe "GLScene" héritant de QGLWidget.

    J'ai remarqué que je ne parvenais pas à obtenir un contexte 3.2 valide (et par conséquent, que l'initialisation de glew échouait systématiquement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    #include "glscene.h"
     
    GLScene::GLScene(QWidget *parent)
    	: QGLWidget(parent)
    {
    	QGLFormat& format = QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer);
    	format.setVersion(3, 2);
    	QGLContext * context = new QGLContext(format);
    	if (!context->isValid()) 
                qFatal("Contexte 3.2 non valide");
    	else
                this->setContext(context); // Jamais exécuté...
            if (glew_init() != GL_OK)
                qFatal("Erreur lors de l'initialisation de Glew"); // Toujours exécuté...
    }
    Ce qui explique sans doute qu'à chaque fois que je fais un test avec une fonction opengl >= 3.x, j'obtiens une erreur du type :

    "Exception de première chance ... violation d'accès lors de la lecture de l'emplacement 0x00000000"

    Voilà voilà. Des idées ?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour Grammato et bienvenue sur le forum

    Plusieurs remarques :

    - C'est quoi cette fonction setContext ? Ca compile avec ? Parce que ce c'est pas une fonction de QGLWidget.

    - En fait, il vaut créer QGLWidget en lui donnant le contexte dès l'initialisation.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GLScene::GLScene(QWidget *parent)
    	: QGLWidget(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer), parent)
    ...
    - As-tu testé si le contexte fournit par défaut est compatible 3.x ? Personnellement, j'ai des contextes 4.x par défaut sans problème avec Qt 4.7 (sous linux, je n'ai pas essayé sous Windows). Pour tester, il suffit d'utiliser les flags de QGLFormat dans QGLWidget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format().openGLVersionFlags().testFlag(QGLFormat::OpenGL_Version_3_0);
    - Que souhaites-tu utiliser comme fonctionnalité de OpenGL 3.x ? Beaucoup de fonctionnalité ont leurs propres classes Qt pour les gérer.

    - Si tu n'as que 2 ou 3 fonctions non disponible dans Qt, personnellement, je préfère les importer moi même avec la fonction QGLContext::getProcAddress :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PFNGLGENBUFFERSARBPROC glGenBuffers; // déclaration de la fonction
    ...
    glGenBuffers = (PFNGLGENBUFFERSARBPROC) getProcAddress("glGenBuffersARB"); // initialisation de la fonction
    Bon courage

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour toutes ces remarques, mon problème est maintenant résolu !

    Grâce à la fonction que tu m'as indiquée, j'ai pu me rendre compte que je bénéficiais effectivement déjà d'un contexte opengl 3.2 par défaut. Mon erreur était en fait une bête erreur de débutant : en passant d'un edi à l'autre, j'ai fini par oublier de placer le "glext.h" dans les includes de visual studio... . Il me manquait également un appel : avant l'initialisation de glew...

    Maintenant tout fonctionne, que ce soit avec glew ou en chargeant les fonctions "à la main".

    Que souhaites-tu utiliser comme fonctionnalité de OpenGL 3.x ? Beaucoup de fonctionnalité ont leurs propres classes Qt pour les gérer.
    Oui, j'ai remarqué qu'il y avait des classes pour les shaders notamment, mais le problème c'est que je ne crois pas pouvoir m'en servir dans l'état actuel de mes connaissances, à moins qu'il y ait une documentation importante, des exemples de programmes complets, etc., mais je n'en ai pas trouvé en ce qui me concerne...

    C'est quoi cette fonction setContext ? Ca compile avec ? Parce que ce c'est pas une fonction de QGLWidget
    Oui, ca compile. C'est l'intellisense de VC qui m'a fait tomber dessus. Apparemment, c'est une vieille fonction qui était déjà obsolète il y a des années. En tous cas, elle n'est plus dans la doc'. Bref, à éviter...

    Merci encore pour l'aide apportée !

    Bonne soirée

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Oui, j'ai remarqué qu'il y avait des classes pour les shaders notamment, mais le problème c'est que je ne crois pas pouvoir m'en servir dans l'état actuel de mes connaissances, à moins qu'il y ait une documentation importante, des exemples de programmes complets, etc., mais je n'en ai pas trouvé en ce qui me concerne...
    Il y a un tutoriel en cours de rédaction mais il ne sortira pas avant... 2 semaines au moins.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Super, je vais surveiller ça de près.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Il y a maintenant un tuto détaillé sur le site de QT. : Comment utiliser opengl en core profile avec Qt.

    Fonctionne aussi en compatibility profile,
    Et sans glew.

    http://developer.qt.nokia.com/wiki/H...rofile_with_Qt

    C'est simple... comme toujours avec Qt!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  2. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo