Screenshot sourcecode

way back when, someone posted some code that saved a .BMP
snapshot out for SDL surfaces with and without the OPENGL
flag.
my archive-hunting has left me empty handed. i was wondering
who posted it? if there was a ‘newer’ version? and if it
could be posted again? (or maybe directions to it somewhere)

Pete Shinners wrote:

way back when, someone posted some code that saved a .BMP
snapshot out for SDL surfaces with and without the OPENGL
flag.
my archive-hunting has left me empty handed. i was wondering
who posted it? if there was a ‘newer’ version? and if it
could be posted again? (or maybe directions to it somewhere)

Here’s the latest version of the one I posted:

#include <stdlib.h>

#include “SDL.h”
#include “gl.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 * 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;
    }