amiga_imgv

diff src/sdl/gfx.c @ 6:ae0ada629b03

wohooo it works :)
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 27 Oct 2017 15:42:58 +0300
parents 0d3d7b020e6a
children 4c36d0f44aa6
line diff
     1.1 --- a/src/sdl/gfx.c	Fri Oct 27 12:32:24 2017 +0300
     1.2 +++ b/src/sdl/gfx.c	Fri Oct 27 15:42:58 2017 +0300
     1.3 @@ -123,20 +123,24 @@
     1.4  #define GMASK		(fbsurf->format->Gmask)
     1.5  #define BMASK		(fbsurf->format->Bmask)
     1.6  
     1.7 +#define PACKRGB(r, g, b)	((((r) << RSHIFT) & RMASK) | \
     1.8 +		(((g) << GSHIFT) & GMASK) | \
     1.9 +		(((b) << BSHIFT) & BMASK))
    1.10 +
    1.11  void gfx_show_image(struct ham_image *img)
    1.12  {
    1.13  	int i, j, k;
    1.14 -	uint32_t palette[16];
    1.15 +	uint32_t color, palette[16];
    1.16  	uint32_t *dest;
    1.17  	unsigned char *src;
    1.18 +	struct palchange *chg = img->chglist;
    1.19  
    1.20  	for(i=0; i<16; i++) {
    1.21  		uint16_t pcol = img->palette[i];
    1.22  		int red = ARED(pcol);
    1.23  		int green = AGREEN(pcol);
    1.24  		int blue = ABLUE(pcol);
    1.25 -		palette[i] = (red << RSHIFT) | (green << GSHIFT) | (blue << BSHIFT);
    1.26 -		printf("palette[%d]: %d %d %d\n", i, red, green, blue);
    1.27 +		palette[i] = PACKRGB(red, green, blue);
    1.28  	}
    1.29  
    1.30  	if(SDL_MUSTLOCK(fbsurf)) {
    1.31 @@ -146,8 +150,16 @@
    1.32  	dest = fbsurf->pixels;
    1.33  	src = img->pixels;
    1.34  	for(i=0; i<img->height; i++) {
    1.35 +		while(chg && chg->line <= i) {
    1.36 +			int idx = (chg->entry & 0xf000) >> 12;
    1.37 +			int red = ARED(chg->entry);
    1.38 +			int green = AGREEN(chg->entry);
    1.39 +			int blue = ABLUE(chg->entry);
    1.40 +			palette[idx] = PACKRGB(red, green, blue);
    1.41 +			chg = chg->next;
    1.42 +		}
    1.43 +
    1.44  		for(j=0; j<img->width; j++) {
    1.45 -			uint32_t color;
    1.46  			unsigned char idx = 0;
    1.47  			unsigned char ham;
    1.48  			int bit = 7 - (j & 7);
    1.49 @@ -156,23 +168,20 @@
    1.50  				idx |= (((*(src + k * img->width / 8) >> bit) & 1) << k);
    1.51  			}
    1.52  
    1.53 -			printf("%d ", idx);
    1.54 -			color = palette[idx];
    1.55  			ham = (idx >> 4) & 3;
    1.56 -			color = (i & j) ? dest[-1] : 0;
    1.57  
    1.58  			switch(ham) {
    1.59  			case 0:
    1.60  				color = palette[idx];
    1.61  				break;
    1.62  			case 1:
    1.63 -				color = (color & ~BMASK) | (((uint32_t)idx & 0xf) << BSHIFT);
    1.64 +				color = (color & ~BMASK) | (((uint32_t)ABLUE(idx)) << BSHIFT);
    1.65  				break;
    1.66  			case 2:
    1.67 -				color = (color & ~RMASK) | (((uint32_t)idx & 0xf) << RSHIFT);
    1.68 +				color = (color & ~RMASK) | (((uint32_t)ABLUE(idx)) << RSHIFT);
    1.69  				break;
    1.70  			case 3:
    1.71 -				color = (color & ~GMASK) | (((uint32_t)idx & 0xf) << GSHIFT);
    1.72 +				color = (color & ~GMASK) | (((uint32_t)ABLUE(idx)) << GSHIFT);
    1.73  			}
    1.74  
    1.75  			*dest++ = color;
    1.76 @@ -182,7 +191,6 @@
    1.77  		}
    1.78  		src += img->width / 8 * (img->nbitplanes - 1);
    1.79  	}
    1.80 -	putchar('\n');
    1.81  
    1.82  	if(SDL_MUSTLOCK(fbsurf)) {
    1.83  		SDL_UnlockSurface(fbsurf);