Thanks to Andreas Umbach and Pete Shinners about the
Screenshot routine written by Ray Kelm. It works
very well, I’m very happy.
I had to make a small modification to pass the screen
as an argument, so here’s my version of Screenshot:
int Screenshot(SDL_Surface *screen, char *filename)
{
SDL_Surface *temp;
unsigned char *pixels;
int i;
if (!(screen->flags & SDL_OPENGL)) {
SDL_SaveBMP(temp, filename);
return 0;
}
temp = SDL_CreateRGBSurface(SDL_SWSURFACE,
screen->w, screen->h, 24,
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
0x000000FF, 0x0000FF00, 0x00FF0000, 0
#else
0x00FF0000, 0x0000FF00, 0x000000FF, 0
#endif
);
if (temp == NULL) return -1;
pixels = malloc(3 * screen->w * screen->h);
if (pixels == NULL) {
SDL_FreeSurface(temp);
return -1;
}
glReadPixels(0, 0, screen->w, screen->h,
GL_RGB, GL_UNSIGNED_BYTE, pixels);
for (i=0; i<screen->h; i++)
memcpy(((char *) temp->pixels) + temp->pitch * i,
pixels + 3*screen->w * (screen->h-i-1),
screen->w*3);
free(pixels);
SDL_SaveBMP(temp, filename);
SDL_FreeSurface(temp);
return 0;
}
Thanks again
Marc