You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
|
|
|
/* $Revision$ */
|
|
|
|
|
|
|
|
#include <SDL.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "sdl.h"
|
|
|
|
|
|
|
|
SDL_Surface* sdl_init() {
|
|
|
|
SDL_Surface* screen;
|
|
|
|
|
|
|
|
screen = SDL_SetVideoMode(WIDTH, HEIGHT, 8, SDL_SWSURFACE);
|
|
|
|
if(screen == NULL) {
|
|
|
|
fprintf(stderr, "Unable to set video mode: %s\n",
|
|
|
|
SDL_GetError());
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return screen;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sdl_putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
|
|
|
|
{
|
|
|
|
int bpp = surface->format->BytesPerPixel;
|
|
|
|
/* Here p is the address to the pixel we want to set */
|
|
|
|
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
|
|
|
|
|
|
|
|
switch(bpp) {
|
|
|
|
case 1:
|
|
|
|
*p = pixel;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
*(Uint16 *)p = pixel;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
|
|
|
|
p[0] = (pixel >> 16) & 0xff;
|
|
|
|
p[1] = (pixel >> 8) & 0xff;
|
|
|
|
p[2] = pixel & 0xff;
|
|
|
|
} else {
|
|
|
|
p[0] = pixel & 0xff;
|
|
|
|
p[1] = (pixel >> 8) & 0xff;
|
|
|
|
p[2] = (pixel >> 16) & 0xff;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
*(Uint32 *)p = pixel;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|