Screenshot

Since I had to implement a screenshot for SDL (when using openGL),
and had to mess with it a bit to get it to work, I figured I’d
package up the code and post it here in case anyone else might
be able to use it.

Oh. um. This code is released for anyone to anything they want
with blah blah blah and don’t sue me if it destroys your life etc.
-------------- next part --------------
#include <stdlib.h>

#include “SDL.h”

int Screenshot(char *filename)
{
SDL_Surface *screen;
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 * w * 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<h; i++)
	memcpy(((char *) temp->pixels) + temp->pitch * i, pixels + 3*w * (h-i-1), w*3);
free(pixels);

SDL_SaveBMP(temp, filename);
SDL_FreeSurface(temp);
return 0;

}