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 :

Fonction undefined reference avec SDL 2 et Code::Blocks


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2012
    Messages : 104
    Points : 17
    Points
    17
    Par défaut Fonction undefined reference avec SDL 2 et Code::Blocks
    Salut, je suis entrain de suivre un tutoriel. Le tutoriel est basé sur la programmation OpenGL 3.3 avec la SDL 2.0 et il y a une erreur dans le code ici présent.
    code source:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    #ifdef WIN32
    #include <GL/glew.h>
     
    #else
    #define GL3_PROTOTYPES 1
    #include <GL3/gl3.h>
     
    #endif
     
    #include <SDL2/SDL.h>
    #include <iostream>
     
    int main(int argc, char **argv)
    {
        // fenêtre pricipal
     
        SDL_Window* fenetre(0);
        SDL_GLContext contexteOpengl(0); //contexte opengl
     
        SDL_Event evenements;
        bool terminer(false);
     
     
        // Initialisation de la SDL
     
        if(SDL_Init(SDL_INIT_VIDEO) < 0)
        {
            std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
            SDL_Quit();
     
            return -1;
        }
     
        //vérification de la version opengl
     
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
     
        //création du Double Buffer
     
        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
        SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
     
     
        // Création de la fenêtre
     
        fenetre = SDL_CreateWindow("Test SDL 2.0", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
     
        if(fenetre == 0)
        {
            std::cout << "Erreur lors de la creation de la fenetre : " << SDL_GetError() << std::endl;
            SDL_Quit();
     
            return -1;
        }
     
        //création du contexte opengl
        contexteOpengl = SDL_GL_CreateContext(fenetre);
        if(contexteOpengl == 0)
        {
            std::cout << SDL_GetError() << std::endl;
            SDL_DestroyWindow(fenetre);
            SDL_Quit();
     
        }
     
    #ifdef WIN32
     
            // On initialise GLEW
     
            GLenum initialisationGLEW( glewInit() );
     
            // Si l'initialisation a échouée :
     
            if(initialisationGLEW != GLEW_OK)
            {
                // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
     
                std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;
     
     
                // On quitte la SDL
     
                SDL_GL_DeleteContext(contexteOpengl);
                SDL_DestroyWindow(fenetre);
                SDL_Quit();
     
                return -1;
            }
     
        #endif
     
        //vertices et coordonnées
        float vertices[] = {-0.5, 0.0,  0.5, 0.5,  0.5, -0.5};
     
        // Boucle principale
        while(!terminer)
        {
        SDL_WaitEvent(&evenements);
     
        if(evenements.window.event == SDL_WINDOWEVENT_CLOSE)
            terminer = true;
     
            // Nettoyage de l'écran
            glClear(GL_COLOR_BUFFER_BIT);
     
            //remplissage et activation du tableau Vertex Attrib 0
            glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
            glEnableVertexAttribArray(0);
     
           //affichage Opengl
            glDrawArrays(GL_TRIANGLES_, 0, 3);
     
           //désactivation du tableau Vertex Attrib
            glDisableVertexAttribArray(0);
     
            //actualisation de la fenetre
            SDL_GL_SwapWindow(fenetre);
        }
     
        // destruction de la fenetre
        SDL_GL_DeleteContext(contexteOpengl);
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
     
        return 0;
    }
    voici les erreurs de compilation.

    erreurs:
    -undefined reference to glClear@4
    -undefined reference to glDrawArrays@12


    Pouvez-vous m'aider à régler ce problème.Merci
    J'utilise Code::Blocks 12.11 pour programmer.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Avez-vous bien spécifier les bibliothèques dans les propriétés de projet, pour l'éditeur de lien ?
    Etes vous sous Windows, ou autre ?

    Est-ce que les fichier .h sont trouvables par le compilateur ?

    Le code avec un gros #IF WIN32 au milieu c'est tout de même hyper moche.
    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 à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2012
    Messages : 104
    Points : 17
    Points
    17
    Par défaut
    Je suis sur Windows, tout fonctionne très bien le seul problème ces qu'est ce qui cause ce problème, j'ai fais plusieurs allés retours en comparant mon code à celui du site, et mes codes sont semblables.E T pourtant sur le site le code fonctionne.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Et vous n'avez absolument que ces deux erreurs ? et non une longue liste ?
    Peut être vous n'avez pas la bonne version de GLEW. J'ai l'impression de connaitre cette erreur, mais je ne sais pas.
    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
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2012
    Messages : 104
    Points : 17
    Points
    17
    Par défaut
    Je n'aie pas de long liste d'erreurs. La bibliothèque Glew étais fournis avec le tutoriel "créer des application avec OpenGL 3.3". sur le site même et par le créateur du tutoriel. Selon-moi le problème ces les paramètres des fonctions en question dans le code. C'est le paramettre GL_COLOR_BIT de la fonction glClear() qui foire selon moi.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2012
    Messages : 104
    Points : 17
    Points
    17
    Par défaut
    La fonction:
    code:
    float vertices[] = {-0.5, -0.5, 0.0, 0.5, 0.5, -0.5}

    est trompeuse selon-moi. Sur le tutoriel que je suit en se moment, ils disent que l'on ne peut pas faire cela:
    code:
    float vertex1[] = {-0.5, -0.5};
    float vertex2[] = {0.0, 0.5};
    float vertex3[] = {0.5, -0.5};

    Alors, au-lieux de cela il écrit cette fonction que je viens de citer au début. Mais je ne crois pas que cela soit a l'origine du problème.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    La première forme est plus juste, car elle constitue qu'un seul tableau. La seconde forme créé trois tableaux différents et donc, ne peuvent pas facilement être passé à OpenGL.

    Le code qui est équivalent au premier serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float vertex[3] ;
    vertex[0] = {-0.5, -0.5};
    vertex[1] = {0.0, 0.5};
    vertex[2] = {0.5, -0.5};
    Et l'erreur de l'éditeur de liens, est ce réglé ?
    Car, ce ne sont pas les paramètres qui foire, mais le compilateur qui ne trouve pas le code des fonctions.

    Donc, je répète ma question, avez vous correctement configuré l'éditeur de liens. Notamment, il faut avoir :
    -lopengl32
    -lglew
    ...
    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.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2012
    Messages : 104
    Points : 17
    Points
    17
    Par défaut
    Ces bon j'ai juste oublier de linker opengl32 avec mon projet sdl.Désoler

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

Discussions similaires

  1. Problème "undefined reference" avec SDL
    Par NastyFlavour dans le forum C
    Réponses: 1
    Dernier message: 22/05/2014, 04h52
  2. Undefined reference avec les fonctions d'une class
    Par romnair dans le forum Débuter
    Réponses: 5
    Dernier message: 10/04/2012, 16h40
  3. Static const (undefined reference avec g++)
    Par _skip dans le forum Débuter
    Réponses: 3
    Dernier message: 21/10/2009, 11h15
  4. Undefined reference avec code blocks
    Par Airlink dans le forum Débuter
    Réponses: 1
    Dernier message: 14/06/2008, 19h40
  5. undefined reference avec mingw
    Par Plomeg dans le forum C++
    Réponses: 5
    Dernier message: 06/12/2007, 17h17

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