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 <iostream>
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!