gba-x3dtest

diff src/main_sdl.c @ 9:b0ed38f13261

working on the rasterizer
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 22 Jun 2014 05:16:10 +0300
parents fb0a0d6a8b52
children 2070a81127f2
line diff
     1.1 --- a/src/main_sdl.c	Thu Jun 19 05:53:46 2014 +0300
     1.2 +++ b/src/main_sdl.c	Sun Jun 22 05:16:10 2014 +0300
     1.3 @@ -5,6 +5,14 @@
     1.4  #include "gbasys.h"
     1.5  #include "game.h"
     1.6  
     1.7 +#ifdef PALMODE
     1.8 +#define BPP		8
     1.9 +#define PIXSZ	1
    1.10 +#else
    1.11 +#define BPP		16
    1.12 +#define PIXSZ	2
    1.13 +#endif
    1.14 +
    1.15  static int proc_events(SDL_Event *ev);
    1.16  static void handle_keyboard(int key, int state);
    1.17  
    1.18 @@ -29,7 +37,7 @@
    1.19  
    1.20  	SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE);
    1.21  
    1.22 -	if(!(surf = SDL_SetVideoMode(WIDTH * sdlscale, HEIGHT * sdlscale, 16, SDL_SWSURFACE))) {
    1.23 +	if(!(surf = SDL_SetVideoMode(WIDTH * sdlscale, HEIGHT * sdlscale, BPP, SDL_SWSURFACE))) {
    1.24  		fprintf(stderr, "failed to initialize graphics\n");
    1.25  		return 1;
    1.26  	}
    1.27 @@ -37,8 +45,8 @@
    1.28  
    1.29  	bbuf.x = WIDTH;
    1.30  	bbuf.y = HEIGHT;
    1.31 -	bbuf.bpp = 16;
    1.32 -	if(!(bbuf.pixels = malloc(WIDTH * HEIGHT * 2))) {
    1.33 +	bbuf.bpp = BPP;
    1.34 +	if(!(bbuf.pixels = malloc(WIDTH * HEIGHT * PIXSZ))) {
    1.35  		fprintf(stderr, "failed to allocate framebuffer (%dx%d)\n", WIDTH, HEIGHT);
    1.36  		SDL_Quit();
    1.37  		return 1;
    1.38 @@ -53,7 +61,11 @@
    1.39  
    1.40  	for(;;) {
    1.41  		SDL_Event ev;
    1.42 +#ifdef PALMODE
    1.43 +		uint8_t *dest, *src;
    1.44 +#else
    1.45  		uint16_t *dest, *src;
    1.46 +#endif
    1.47  
    1.48  		while(SDL_PollEvent(&ev)) {
    1.49  			if(proc_events(&ev) == -1) {
    1.50 @@ -102,14 +114,32 @@
    1.51  
    1.52  void clear_buffer(struct pixel_buffer *pbuf, unsigned short color)
    1.53  {
    1.54 -	int i;
    1.55 +	int i, sz = pbuf->x * pbuf->y;
    1.56  	unsigned short *pixels = pbuf->pixels;
    1.57  
    1.58 -	for(i=0; i<pbuf->x * pbuf->y; i++) {
    1.59 +#ifdef PALMODE
    1.60 +	color |= color << 8;
    1.61 +	sz /= 2;
    1.62 +#endif
    1.63 +
    1.64 +	for(i=0; i<sz; i++) {
    1.65  		*pixels++ = color;
    1.66  	}
    1.67  }
    1.68  
    1.69 +void set_palette(int idx, int r, int g, int b)
    1.70 +{
    1.71 +	SDL_Color col;
    1.72 +	col.r = r;
    1.73 +	col.g = g;
    1.74 +	col.b = b;
    1.75 +
    1.76 +	if(SDL_SetPalette(surf, SDL_LOGPAL | SDL_PHYSPAL, &col, idx, 1) != 1) {
    1.77 +		fprintf(stderr, "set_palette failed to set the required color\n");
    1.78 +	}
    1.79 +}
    1.80 +
    1.81 +
    1.82  int get_key_state(int key)
    1.83  {
    1.84  	return keystate & key;
    1.85 @@ -125,7 +155,7 @@
    1.86  	switch(ev->type) {
    1.87  	case SDL_KEYDOWN:
    1.88  	case SDL_KEYUP:
    1.89 -		handle_keyboard(ev->key.keysym.sym, ev->key.state == SDL_KEYDOWN);
    1.90 +		handle_keyboard(ev->key.keysym.sym, ev->key.state);
    1.91  		break;
    1.92  
    1.93  	case SDL_QUIT:
    1.94 @@ -173,6 +203,7 @@
    1.95  		break;
    1.96  
    1.97  	case '\n':
    1.98 +	case '\r':
    1.99  		gba_key = KEY_A;
   1.100  		break;
   1.101  	case '\b':