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 :

Compilation linux: implicit declaration of function ‘glGenBuffers’


Sujet :

OpenGL

  1. #1
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut Compilation linux: implicit declaration of function ‘glGenBuffers’
    Bonjour,

    Je viens d'acquérir le red-book en français. Tout en lisant les passionnants chapitres, je code quelques exemples.

    Jusqu'au vertex array tout aller pour le mieux, mais je suis passé au VBO, et là je n'arrive pas à compiler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    main.c:105: warning: implicit declaration of function ‘glGenBuffers’
    main.c:107: warning: implicit declaration of function ‘glBindBuffer’
    main.c:108: warning: implicit declaration of function ‘glBufferData’
    main.c:108: error: ‘STATIC_DRAW’ undeclared (first use in this function)
    Mes lignes d'inclusion sont:
    #include <GL/glut.h>

    J'ai essayé aussi d'inclure le glext.h par défaut, puis le glext téléchargeable sur opengl.org, mais sans succès.

    J'ai peu être une petite idée d'ou le problème viendrait:
    dans mon gl.h j'ai: ** Copyright 1998-2002, NVIDIA Corporation....
    Si ce fichier date réellement de 2002 y'a peut être un problème

    ps: je suis sous ubuntu avec les pilotes nvidia 97.46 installés manuellement.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ta version statique d'OpenGL doit être inférieure à 1.5, il faut donc que tu accèdes à tout ça sous forme d'extension (donc en gros, en rajoutant ARB derrière chaque identifiant et en chargeant les fonctions explicitement -- ou en utilisant glew).

  3. #3
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Qu'est ce qu'est la version statique?
    Parceque sinon la version d'opengl c'est la 2.1.0 NVIDIA 97.46...

    C'est déjà moins pratique d'accéder au fonction de cette manière .

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Ha je vois qu'une nouvelle version des pilotes nvidia vient de sortir, voyons le changement.

  5. #5
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Pas de changement, et a priori je ne peux pas utiliser les fonctions d'opengl 1.2 non plus comme:
    glDrawRangeElements().

    Donc ma version statique serait 1.1, c'est bizarre non?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce que j'appelle version statique, c'est la bibliothèque livrée avec le compilo / OS. Sous Windows par exemple c'est la version 1.1 d'OpenGL qui est livrée.

    Par contre la version de la DLL fournie par les drivers de la carte graphique est à jour, mais il faudra accéder aux fonctionnalités supplémentaires dynamiquement via le mécanisme des extensions (vu que ces fonctions sont inconnues des .h / .a livrés avec le compilo).

    En gros c'est comme ça que ça marche.

  7. #7
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Ok, mais pourtant, elles sont définies dans glext.h non?

  8. #8
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Citation Envoyé par Laurent Gomila
    Sous Windows par exemple c'est la version 1.1 d'OpenGL qui est livrée.
    Ca veut dire que si je veux faire quelquechose de portable, j'ai intérêt à utiliser le mécanisme des extensions?

    C'est bizarre que dans le red-book, l'auteur fait comme si ces fonctions étaient incluse dans la version statique d'OpenGL par défaut...

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par MatRem
    Ok, mais pourtant, elles sont définies dans glext.h non?
    Oui, mais avec des préfixes (ARB, EXT, ...) et il faut les charger dynamiquement (glxGetProcAddress sous Linux).

    Citation Envoyé par MatRem
    Ca veut dire que si je veux faire quelquechose de portable, j'ai intérêt à utiliser le mécanisme des extensions?
    Sans doute, oui.

    C'est bizarre que dans le red-book, l'auteur fait comme si ces fonctions étaient incluse dans la version statique d'OpenGL par défaut...
    Ne pouvant pas savoir avec quelle version d'OpenGL tu vas compiler, j'imagine qu'il suppose que tu utilises celle qui est décrite dans le bouquin. Dans le cas contraire le comportement est de toute façon le même, modulo le fait qu'il faille charger la fonction dynamiquement.

  10. #10
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Oui, mais avec des préfixes (ARB, EXT, ...)
    Dans mon glext.h, a priori fourni pas nvidia, elles sont déclarées comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    #ifndef GL_VERSION_1_5
    #define GL_VERSION_1_5 1
    #ifdef GL_GLEXT_PROTOTYPES
    ...
    extern void APIENTRY glGenBuffers (GLsizei, GLuint *);
    ...
    #endif
    ...
    typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
    ...
    #endif
    ...

  11. #11
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    La version statique d'OpenGL est bien récupérable via les constantes GL_VERSION_x_x?

    Parceque si c'est le cas, la séquence suivante affiche toutes les versions:
    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
    18
    19
    20
    21
    #ifdef GL_VERSION_1_1
    printf("gl 1.1\n");
    #endif
    #ifdef GL_VERSION_1_2
    printf("gl 1.2\n");
    #endif
    #ifdef GL_VERSION_1_3
    printf("gl 1.3\n");
    #endif
    #ifdef GL_VERSION_1_4
    printf("gl 1.4\n");
    #endif
    #ifdef GL_VERSION_1_5
    printf("gl 1.5\n");
    #endif
    #ifdef GL_VERSION_2_0
    printf("gl 2.0\n");
    #endif
    #ifdef GL_VERSION_2_1
    printf("gl 2.1\n");
    #endif

  12. #12
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Bon ben au final je vais utiliser glew qui m'a l'air bien simple... meme si j'ai pas vraiment compris pourquoi ça fonctionne pas sous linux...

  13. #13
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    suite à une erreur de navigateur, mon post d'hier soir ne s'est pas... posté
    Citation Envoyé par Shenron666
    Salut,

    le seul red book que je connaisse étant la version 1.1 en ligne, ele ne traite pas des vbo mais a mon avis tu as dû louper un chapitre, il serait étonnant qu'il ne soit pas question de l'utilisation des extensions dans un chapitre précédent

    sinon renseignes toi sur l'utilisation des extensions sur nehe ou autre site de tutoriels voire utilises glee ou glew pour les gérer facilement
    je vois que tu optes pour la bonne solution de mon point de vue
    de cette manière tu n'auras pas à te casser plus la tête
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  14. #14
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    le red book existe dans toutes les versions possible et imaginable (peut être pas encore en 2.1 quand même).
    l'autre jour, j'ai vu le red book 2.0 en magasin (mais par contre il n'est plus très red mais plutôt blue maintenant )
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  15. #15
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    En fait j'ai le guide officiel OpenGL 2.0 en français...

    Je connaissais déjà le mécanisme des extensions, mais il n'en est pas fait mention avant les vbos, et je ne crois pas que ce soit expliqué en détail.
    Cependant je n'ai pas encore lu entièrement le bouquin.

    D'ailleurs les quelques pages sur les vbos sont un peu bâclées à mon goût.

    En quoi est ce "la bonne solution", de ton point de vue? Parce que si on avait accès directement aux fonctions à l'aide des seuls en-têtes standards, il me semble que ce serait plus pratique non?

    Enfin c'est vrai que glew est vraiment très simple, même pas besoin de tripoter les pointeurs de fonctions...

  16. #16
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    effectuvement, si on avait toujours les fonctions dispo dans les entetes standard, ce serait nettement plus simple... malheureusement, un jour, microsoft a décidé de ne plus mettre a jour sa dll openGL, et nous voila tous reduit a utiliser la version 1.1 (et du coup les autres OS sont obligé de suivre pour rester compatibles et portable )
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  17. #17
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par MatRem
    En quoi est ce "la bonne solution", de ton point de vue? Parce que si on avait accès directement aux fonctions à l'aide des seuls en-têtes standards, il me semble que ce serait plus pratique non?

    Enfin c'est vrai que glew est vraiment très simple, même pas besoin de tripoter les pointeurs de fonctions...
    tu réponds à la question par toi même, cela t'évites d'avoir à manipuler des pointeurs de fonctions et te simplifie l'accès aux extensions

    c'est sûr qu'avoir accès à des fonctions statiques c'est plus simple mais toute la puissance d'OpenGL est dans les extensions, exploiter les "geometry shaders" de la dernière nvidia gf8800 est possible avec opengl sans attendre une nouvelle version, puisqu'il s'agit d'une extension
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  18. #18
    Yno
    Yno est déconnecté
    Membre habitué Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Points : 141
    Points
    141
    Par défaut
    Citation Envoyé par MatRem
    En fait j'ai le guide officiel OpenGL 2.0 en français...
    [...]

    Je me permet d'intervenir, sans vraiment avoir lu la totalité de ton post, mais je te prévien juste que ce livre est un reccueil d'erreurs impressionnant.
    Certains prototypes de fonctions sont faux, quelques explications sont fausses, et pour finir, ils ne détaillent pas l'utilisation des VBOs, et ne présentent pas vraiment les prototypes de fonctions d'utilisation de ces derniers.
    Et d'ailleurs, il en est ainsi pour de nombreux "concepts", si je puis dire, qu'ils expliquent et détaillent peu, voir mal.

    Voilà, c'était mon petit avertissement du jour

  19. #19
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Merci du conseil, j'aurais du demander avant...

    Pour l'instant j'en ai lu un tiers, c'est vrai qu'il y aun peu de mal dit, quelques erreurs, et que le paragraphe sur les VBOS est léger.
    Mais sinon il ne me parait pas si mal... (pas de problème avec les prototypes de fonctions pour l'instant)
    Et en tout cas, il est plus agréable à lire que les specs, et plus complet que le red book en ligne.

    La version originale est beaucoup mieux?

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

Discussions similaires

  1. [gcc/warning] implicit declaration of function ‘close’
    Par TabrisLeFol dans le forum Réseau
    Réponses: 4
    Dernier message: 09/01/2007, 20h48
  2. Réponses: 3
    Dernier message: 18/10/2006, 20h42
  3. implicit declaration of function!
    Par moon93 dans le forum C
    Réponses: 48
    Dernier message: 16/06/2006, 14h55
  4. implicit declaration of function
    Par guillaume_pfr dans le forum C
    Réponses: 7
    Dernier message: 12/06/2003, 10h59
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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