Problemes OpenGl avec SDL

cs_ToNtOnYoYo Messages postés 8 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 15 juin 2005 - 14 juin 2005 à 02:43
cs_ToNtOnYoYo Messages postés 8 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 15 juin 2005 - 15 juin 2005 à 12:22
bonjour bonjour...

voila mon prob.. j'essaye d'afficher une simple ligne nooire ds ma fenetre ( créé avec SDL)

et ca ne marche pas ..

je vous laisse le code..

svp help , dites moi ce qui va pas.. j'ai essayé énormement de choses, sans succès



------>





#include

#include



#include

#include

#include





SDL_Surface *Screen;





int Init( void )

{

if ( SDL_Init( SDL_INIT_VIDEO ) == -1 )

{

fprintf(stderr,"Echec lors du chargement de la vidéo : %s", SDL_GetError() );

SDL_Quit();

}



SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);

SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 32);



if ( Screen = SDL_SetVideoMode( 640, 480, 32, SDL_OPENGL ) )

{



SDL_WM_SetCaption ("Test", "Test");






glShadeModel(GL_SMOOTH);



glClearColor (1.0f, 1.0f, 1.0f,
1.0f);



glClearDepth(1.0f);




glEnable(GL_DEPTH_TEST);




glDepthFunc(GL_LEQUAL);



glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

return 1;

}



return 0;

}





void Afficher(void)

{



glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(-1.5f, 0.0f, -10.0f);



glBegin(GL_LINES);

glColor3f(0.0, 0.0, 0.0);



glVertex2i(100,0);

glVertex2i(100,480);



glEnd();



glFlush();

SDL_GL_SwapBuffers ();









}





int main(int argc, char* argv[])

{

//si l'initialisation se passe normalement on pousuit

if (Init())

{

//on afficher notre forme



Afficher();



while (1)

{



SDL_Event event;

SDL_WaitEvent(&event);



//on attend un evenement .. click sur la croix pour sortir par exemple

switch (event.type)

{

case SDL_QUIT:

SDL_Quit();

return 0;

}





}



}



return 0;

}

---->



merci d'avance

2 réponses

Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
14 juin 2005 à 19:06
déjà, un depth buffer de 32-bit, çà existe pas . Le max c'est 24-bit(je sais plus pourquoi mais c'est un fait) .

Ensuite, tu peux faire SDL_GL_SwparBuffers mais si t'as pas spécifier qu'il faut utiliser le dobule buffering, çà va être dur:

SDL_OPENGL|SDL_DOUBLEBUF .

De plus, glFlush() est inutile .

Enfin, faudrait spécifier la vue que tu utilise genre:



void GL_Resize(int width,int height)

{

// on défini la taille du viewport

glViewport(0,0,width,height);

// on passe en mode matrice pour la projection

glMatrixMode(GL_PROJECTION);

// on remet la matrice à l'identité

glLoadIdentity();

// vue 2D à la taille de l'écran

gluOrtho2D(0,width,height,0);

// on repasse en mode matrice modélisation

glMatrixMode(GL_MODELVIEW);

// remet la matrice à l'identité

glLoadIdentity();

}



bah oui, parce que si tu dis pas à opengl le viewport, il va pas savoir où dessiner .

donc au final çà devrait faire:



#include

#include



#include

#include

#include



void GL_Resize(int width,int height)


{


// on défini la taille du viewport


glViewport(0,0,width,height);


// on passe en mode matrice pour la projection


glMatrixMode(GL_PROJECTION);


// on remet la matrice à l'identité


glLoadIdentity();


// vue 2D à la taille de l'écran


gluOrtho2D(0,width,height,0);


// on repasse en mode matrice modélisation


glMatrixMode(GL_MODELVIEW);


// remet la matrice à l'identité


glLoadIdentity();


}



SDL_Surface *Screen;





int Init( void )

{

if ( SDL_Init( SDL_INIT_VIDEO ) == -1 )

{

fprintf(stderr,"Echec lors du chargement de la vidéo : %s", SDL_GetError() );

SDL_Quit();

}



SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);

SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 32);



if ( Screen = SDL_SetVideoMode( 640, 480, 32, SDL_OPENGL ) )

{



SDL_WM_SetCaption ("Test", "Test");

GL_Resize(640,480);




glShadeModel(GL_SMOOTH);



glClearColor (1.0f, 1.0f, 1.0f,
1.0f);



glClearDepth(1.0f);




glEnable(GL_DEPTH_TEST);




glDepthFunc(GL_LEQUAL);



glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

return 1;

}



return 0;

}





void Afficher(void)

{



glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(-1.5f, 0.0f, -10.0f);



glBegin(GL_LINES);

glColor3f(0.0, 0.0, 0.0);



glVertex2i(100,0);

glVertex2i(100,480);



glEnd();



glFlush();

SDL_GL_SwapBuffers ();









}





int main(int argc, char* argv[])

{

//si l'initialisation se passe normalement on pousuit

if (Init())

{

//on afficher notre forme



Afficher();



while (1)

{



SDL_Event event;

SDL_WaitEvent(&event);



//on attend un evenement .. click sur la croix pour sortir par exemple

switch (event.type)

{

case SDL_QUIT:

SDL_Quit();

return 0;

}





}



}



return 0;

}


voilà


A m a u r y
0
cs_ToNtOnYoYo Messages postés 8 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 15 juin 2005
15 juin 2005 à 12:22
j'ai lu de la doc, et j'ai pu corrigé mes erreurs tout seul !, mais merci de ton aide ;)

A+
0
Rejoignez-nous