SDL et GLUT

[Résolu]
Signaler
Messages postés
10
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
22 juillet 2008
-
Messages postés
10
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
22 juillet 2008
-
Bonjour à tous!

J'ai un petit problème: Je voudrais utiliser OpenGL et la SDL en même temps. Je sais que c'est possible, j'ai trouvé plein de tutoriaux, pas de soucis pour ca.

Par contre, je n'arrive pas à construire mon application, le linker me crie dessus à chaque fois. Voici ce qu'il me dit:

Linking console executable: SDLapp.exe

.objs\main.o:main.cpp:(.text+0x1c): undefined reference to `__glutInitWithExit@12'

.objs\main.o:main.cpp:(.text+0x3d): undefined reference to `__glutCreateWindowWithExit@8'

.objs\main.o:main.cpp:(.text+0x5d): undefined reference to `__glutCreateMenuWithExit@8'

Je travaille avec Code::Blocks, et dans les options du projet, j'ai:

mingw32
SDLmain
SDL
opengl32
glu32
le lien vers libglut32.a

J'ai essayé de linker d'autres fichiers, mais rien n'y fait. J'ai fouillé tout ce que je pouvais sur le net, et je n'ai rien trouvé non plus...

HELP !

4 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
C'est un problème, visiblement, très courant. Peut-être que ceci t'aidera:
http://www.gamedev.net/community/forums/topic.asp?topic_id=64724

C++ (@++)<!--
Messages postés
10
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
22 juillet 2008

Merci pour ta réponse rapide, j'ai vu qu'elle y était déjà hier soir!

Effectivement, en remplacant le header par un plus vieux, ca ne met plus ces messages d'erreurs... mais d'autres arrivent

Je vais y aller moins directement, plus pas à pas... et je repasserai si je n'arrive vraiment à rien! (c'est en se dépatouillant qu'on apprend non? )

Encore merci en tout cas!
Messages postés
10
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
22 juillet 2008

 Encore un problème! Mais cette fois, ce n'est pas des librairies (j'ai abandonné GLUT pour un petit moment). Pour l'instant, je veux juste faire une fenêtre SDL avec du OpenGL dedans, puis en prendre une capture d'écran (c'est pour ca que je suis venu sur la SDL). Et ca ne marche pas.

- Au départ, j'ai testé le programme SDL donné par Code::Blocks comme exemple, il marche bien
- Ensuite j'ai fait une capture d'écran. Ca marche
- Puis j'ai rajouté les librairies OpenGL et GLU, et les ai linkées. Ca marche encore
- J'ai fait un rendu OpenGL dans la fenêtre... et là ...

Quand je lance l'exécution, tout ce passe bien, pas de signaux d'erreurs, je vois meme le rendu dans la fenêtre (un morceau de triangle rouge).
Par contre, à la fermeture de la fenêtre, pas question d'enregistrer! J'ai meme mis une récupération d'erreur, et je n'obtiens rien. Un fichier bitmap est bien créé, mais il ne contient rien (0 octets).

Voici mon code:

#include <GL/gl.h>
#include <GL/glu.h>
#include <SDL/SDL.h>
#include <cstdlib>
#include



using namespace std;




int main ( int argc, char** argv )
{
     if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "Unable to init SDL: %s\n", SDL_GetError() );
        return 1;
    }


    atexit(SDL_Quit);




     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);




    SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16, SDL_OPENGL);
    if ( !screen )
    {
        printf("Unable to set 640x480 video: %s\n", SDL_GetError());
        return 1;
    }




    glClearColor(1.0,1.0,1.0,1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0, 0, 640, 480);
    gluPerspective(45,(1.0*640)/(480),0,1000);
    glMatrixMode(GL_MODELVIEW);




    bool done = false;
    while (!done)
    {
         SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
            case SDL_QUIT:
                done = true;
                break;




            case SDL_KEYDOWN:
                {
                         if (event.key.keysym.sym == SDLK_ESCAPE)
                        done = true;
                    break;
                }
            } 
        } 


        glClear(GL_COLOR_BUFFER_BIT);




        glLoadIdentity();
        gluLookAt(0.0, 1.0, 0.0,
                    0.0, 0.0, 0.0,
                    0.0, 0.0, 1.0);




        glColor4f(1.0,0,0,1.0);




        glBegin(GL_TRIANGLES);
            glVertex3f(0,0,0);
            glVertex3f(1,0,1);
            glVertex3f(1,0,0);
        glEnd();




        SDL_GL_SwapBuffers();




    }






    if (SDL_SaveBMP(screen,"ecran.bmp") < 0)
        cerr << "Erreur! " << endl;




    printf("Exited cleanly\n");
    return 0;
}


Re Help!



 
Messages postés
10
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
22 juillet 2008

Une petite information en plus: lorsque je debug avec C::B, j'obtiens une segmentation fault!


Voici la pile des fonctions:


#0 0x6811f6f8 SDL_SetTimer (??:??)
#1 0x68111034 SDL_SetTimer (??:??)
#2 0x6812842a SDL_LowerBlit (??:??)
#3 0x681247fa SDL_SaveBMP_RW (??:??)
#4 0x00401648 SDL_main (??:??)
#5 0x00401dab console_main (./src/main/win32/SDL_win32_main.c:246)
#6 0x00401f89 WinMain (./src/main/win32/SDL_win32_main.c:382)
#7 0x0040182a main (??:??)