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

OpenGL Discussion :

[Opengl 3.x (4.x)] Code minimum?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 208
    Par défaut [Opengl 3.x (4.x)] Code minimum?
    Bonjour bonjour !

    La dernière fois que j'ai touché à OpenGL c'était du 1.4 (ou ES 2.0), et j'ai envie de m'y remettre!

    Donc,

    _Installation de la nouvelle mouture d'Eclipse => OK.
    _Compilation / Exécution d'un HelloWorld => OK.
    _Création d'une fenêtre windows => OK

    Maintenant j'ai des soucis concernant OpenGL.

    J'ai lu la FAQ, et voici ce qui est précisé :

    Dorénavant, la spécification officiel d'OpenGL 3.1 nous invite à utiliser un nouveau fichier d'en-tête, gl3.h, à placer dans le dossier GL3, et donc d'avoir uniquement cette ligne : #include <GL3/gl3.h>
    J'ai donc téléchargé ce header, placé dans un dossier qui me semble correcte (C:\MinGW\include\GL3), et fait ce petit include.
    La FAQ précise ensuite :

    Pour utiliser ces extensions, il vous suffira donc de linker à votre application les fichiers opengl32.lib et glew32.lib, et de n'inclure que le fichier gl3.h (et non glew.h, puisque celui-ci contient encore toutes les fonctions dépréciées).
    J'ai donc ouvert les propriétés de mon projet Eclipse, et dans les options : C/C++ Build -> Settings -> Tool Settings -> MinGW C++ Linker -> Librairies , j'ai ajouté "opengl32" et "glew32".

    Pour que le link soit effectivement effectif, j'ai juste besoin de préciser le nom?
    Dois-je préciser l'extension?
    Ou le chemin?

    A noter que glew32 a été téléchargée par mes soins et placée dans le répertoire C:\MinGW\lib .
    Par contre, après recherche sur mon PC, je n'ai pas de "opengl32.lib".

    Après quelques recherche, j'ai trouvé ceci :

    opengl32.lib and glu32.lib are microsoft compiler specific libraries for mingw those are called libopengl32.a and libglu32.a.
    Effectivement, j'ai bien un fichier libopengl32.a.

    J'ai donc modifié le link "opengl32" par "libopengl32" (toujours sans chemin, ni extension (le chemin étant définis dans ma variable d'environnement PATH, je pense qu'il est déjà connu d'Eclipse)).

    Mais voilou, mon projet ne compile pas, voici la première erreur que j'obtiens :

    'glClear' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 105 C/C++ Problem
    Et d'autres du même acabit.
    Une petite recherche dans le fichier inclut, gl3.h, me montre pourtant que ces fonctions sont déclarées.

    Du coup je ne comprends pas, j'ai bien #include gl3.h, pourquoi ce n'est pas reconnu?

    Ce n'est pas tout, d'autres erreurs sont trouvée, de ce genre là :

    'GLEW_OK' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 60 C/C++ Problem
    Celles ci sont propre à glew.
    La FAQ précisant bien de ne pas inclure glew.h, simplement de linker les lib, j'en conclu que le link n'est pas bien pris en compte.

    J'ai donc tenté en rajoutant l'extension, puis le chemin de mes lib, rien n'y fait : toujours les mêmes erreurs.

    A noter que j'ai suivi ce tuto : OpenGL 3.x pour windows.

    D'où ma demande : connaissez vous un site avec un tuto pour une application minimal OpenGL 3.x (ou plus) ?
    Voir si j'ai tout bien fait.
    A moins que ça ne soit simplement due à ma façon de joindre les lib sous Eclipse, quelqu'un peut m'éclairer sur ce sujet? Ou je ferais mieux d'aller poster sur le forum dédié à Eclipse?

    Merci pour votre aide

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Déjà, il fait être archi sur que votre PC soit compatible avec OpenGL 3.

    Après pour les bibliothèques ( libs ) il ne faut pas mettre le 'lib' au début du nom, lorsque l'on les rajoute à l'éditeur. L'extension non plus n'est pas à mettre.

    Pour l'histoire du fichier d'entête de GLEW, je suis plutot très étonné, car dans aucun cas, nous n'aurons de GLEW_INIT dans l'entête d'OpenGL.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 208
    Par défaut
    Bonjour LittleWhite ,

    Merci pour ta réponse rapide!

    Mon PC est équipé d'une GeForce GTX 480, dont le pilote est à peu près à jour (258.96, support de l'OpenGL 4.0).

    Pour les bibliothèques, je suis donc revenu à ce qui suit :

    opengl32
    glew32
    Le nom de la bibliothèque à chargée est donc indépendante de son nom de fichier?
    Eclipse va de lui même savoir que "opengl32" fait référence à libopengl32.a ?
    L'ordre d'ajout des bibliothèques est il important?

    Effectivement, l'entête d'OpenGL ne fait aucunement référence à glew.
    Un #include de glew.h semble bien supprimer les erreurs liées à glew.

    Mais de nouvelles erreurs apparaissent :

    'WGL_CONTEXT_MAJOR_VERSION_ARB' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 64 C/C++ Problem
    Cette fois il est question de wgl.
    Ces définitions sont présentes dans wglew.h .

    Mais inclure ce fichier d'entête ne résout pas ces erreurs.

    Pour résumer, voici les erreurs lorsque j'inclus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <GL/glew.h>
    #include <GL3/gl3.h>
    'WGL_CONTEXT_FLAGS_ARB' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 66 C/C++ Problem
    'WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 66 C/C++ Problem
    'WGL_CONTEXT_MAJOR_VERSION_ARB' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 64 C/C++ Problem
    'WGL_CONTEXT_MINOR_VERSION_ARB' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 65 C/C++ Problem
    'wglCreateContextAttribsARB' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 71 C/C++ Problem
    'wglewIsSupported' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 70 C/C++ Problem
    6 erreurs, toutes liées à des définitions propres à glew.

    Lorsque j'inclus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <GL/glew.h>
    #include <GL/wglew.h>
    #include <GL3/gl3.h>
    référence indéfinie vers « _imp____wglewCreateContextAttribsARB » OpenGL01_4.cpp /OpenGL01/src ligne 71 C/C++ Problem
    référence indéfinie vers « _imp__glewInit » OpenGL01_4.cpp /OpenGL01/src ligne 59 C/C++ Problem
    référence indéfinie vers « _imp__wglewIsSupported » OpenGL01_4.cpp /OpenGL01/src ligne 70 C/C++ Problem
    référence indéfinie vers « ChoosePixelFormat@8 » OpenGL01_4.cpp /OpenGL01/src ligne 48 C/C++ Problem
    référence indéfinie vers « SetPixelFormat@12 » OpenGL01_4.cpp /OpenGL01/src ligne 52 C/C++ Problem
    référence indéfinie vers « SwapBuffers@4 » OpenGL01_4.cpp /OpenGL01/src ligne 106 C/C++ Problem
    Serait ce de nouveau des erreurs de link?
    Une recherche rapide sur google m'a permit de trouver un bout de solution : ajouter la bibliothèque libgdi32.a .

    Il ne me reste plus que ces 3 erreurs :

    référence indéfinie vers « _imp____wglewCreateContextAttribsARB » OpenGL01_4.cpp /OpenGL01/src ligne 71 C/C++ Problem
    référence indéfinie vers « _imp__glewInit » OpenGL01_4.cpp /OpenGL01/src ligne 59 C/C++ Problem
    référence indéfinie vers « _imp__wglewIsSupported » OpenGL01_4.cpp /OpenGL01/src ligne 70 C/C++ Problem
    Serait ce l'ordre de l'ajout de mes bibliothèques qui m'embête ? => Aucun changement suivant différentes combinaisons.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Pour les dernières erreurs, il semble bien que cela vienne du manque de glew32, mais comme votre compilateur ne dit pas qu'il manque, cela va.
    Donc peut être qu'il manque une autre bibliothèque, je pense que c'est lié à WGL, et que dans la théorie, GLEW_Init c'est bon sauf qu'il manque une fonction qu'il appelle.
    Malheureusement, je ne sais pas qu'elle bibliothèque gère cela.
    Je pense que c'est celle pour la création de fenêtre ( GLUT ? WinAPI ? ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pas besoin de gl3.h si tu inclus glew.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Oui, mais au début, l'utilisateur ne voulait pas des fonctionnalités des vieilles version de OpenGL ( avant le 3 ), donc ne pas inclure le gl3.h
    Après, bon, il faut inclure le glew.h avant le gl3.h ça c'est sur. Le gl3.h n'est pas obligatoire, je pense... mais finalement, je ne pense pas que le problème est dans les entetes ... enfin ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 208
    Par défaut
    Bonjour bonjour!

    @ ponce :

    Oui, mais comme le souligne LittleWhite, je comptais suivre les instructions de la FAQ OpenGL de developpez, et utiliser gl3.h au lieu de glew.h qui contient des fonctions dépréciées.

    Mais si je n'inclus que ce que me dit la FAQ, GL3/gl3.h, les fonctions relatives à glew dans le tuto que j'ai choppé sur le net ne sont plus déclarées.
    La première erreur se trouve à la ligne 59 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GLenum error = glewInit(); // Enable GLEW
    'glewInit' was not declared in this scope OpenGL01_4.cpp /OpenGL01/src ligne 59 C/C++ Problem
    Mais alors du coup, je ne comprends pas ce que nous raconte la FAQ.
    A quoi cela sert il de linker la bibliothèque glew32, si on n'inclus pas le header de glew?
    Peut on quand même utiliser les fonctions déclarées dans glew?

    Apparemment non puisque j'ai une erreur de compilation.

    Bref, faisons les choses dans l'ordre : éclairez voir ma lanterne la dessus :

    Pourquoi n'inclure que gl3.h et linker glew32.lib?

Discussions similaires

  1. OpenGL + GLFW 3 Template pour Code::Blocks
    Par LittleWhite dans le forum Contribuez
    Réponses: 0
    Dernier message: 26/08/2014, 19h24
  2. Choix de l'execution du code OpenGL : GPU ou CPU ?
    Par Invité dans le forum OpenGL
    Réponses: 2
    Dernier message: 29/11/2006, 16h56
  3. Application d'une matrice OPENGL par son propre code
    Par fanoplusplus64k dans le forum OpenGL
    Réponses: 4
    Dernier message: 03/10/2006, 23h36
  4. Réponses: 3
    Dernier message: 19/04/2006, 21h02
  5. Réponses: 7
    Dernier message: 12/05/2004, 22h27

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