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);