SDL et GLUT

Résolu
Samaths Messages postés 10 Date d'inscription jeudi 6 septembre 2007 Statut Membre Dernière intervention 22 juillet 2008 - 11 mars 2008 à 19:53
Samaths Messages postés 10 Date d'inscription jeudi 6 septembre 2007 Statut Membre Dernière intervention 22 juillet 2008 - 12 mars 2008 à 19:58
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mars 2008 à 21:37
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++ (@++)<!--
Samaths Messages postés 10 Date d'inscription jeudi 6 septembre 2007 Statut Membre Dernière intervention 22 juillet 2008
12 mars 2008 à 18:10
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!
Samaths Messages postés 10 Date d'inscription jeudi 6 septembre 2007 Statut Membre Dernière intervention 22 juillet 2008
12 mars 2008 à 19:27
 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!



 
Samaths Messages postés 10 Date d'inscription jeudi 6 septembre 2007 Statut Membre Dernière intervention 22 juillet 2008
12 mars 2008 à 19:58
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 (??:??)
Rejoignez-nous