diff --git a/src/image.c b/src/image.c index cc77ea2..3682ffb 100644 --- a/src/image.c +++ b/src/image.c @@ -33,10 +33,6 @@ #include "alpha_plane.h" #include "ags.h" -/* fader */ -static const int fadeX[16] = {0,2,2,0,1,3,3,1,1,3,3,1,0,2,2,0}; -static const int fadeY[16] = {0,2,0,2,1,3,1,3,0,2,0,2,1,3,1,3}; - static void (*copy_from_alpha)(agsurface_t *, BYTE *, BYTE *, int, int, ALPHA_DIB_COPY_TYPE); static void (*copy_to_alpha)(agsurface_t *, BYTE *, BYTE *, int, int, ALPHA_DIB_COPY_TYPE); @@ -44,33 +40,6 @@ static void (*copy_to_alpha)(agsurface_t *, BYTE *, BYTE *, int, int, ALPHA_DIB_ /* private methods image操作 16bpp */ /******************************************************************************/ -static void fadeOut16(SDL_Surface *dst, int lv, int col) { - WORD *yld; - int x, y; - - for (y = 0; y < dst->h; y += 4) { - yld = PIXEL_AT(dst, 0, y + fadeY[lv]); - for (x = 0; x < dst->w; x += 4) { - *(yld + fadeX[lv]) = col; - yld += 4; - } - } -} - -static void fadeIn16(SDL_Surface *src, SDL_Surface *dst, int lv) { - WORD *yls, *yld; - int x, y; - - for (y = 0; y < src->h; y += 4) { - yls = PIXEL_AT(src, 0, y + fadeY[lv]); - yld = PIXEL_AT(dst, 0, y + fadeY[lv]); - for (x = 0; x < src->w; x += 4) { - *(yld + fadeX[lv]) = *(yls + fadeX[lv]); - yls += 4; yld += 4; - } - } -} - static void image_copy_from_alpha16(agsurface_t *dib, BYTE *sdata, BYTE *ddata, int w, int h, ALPHA_DIB_COPY_TYPE flag) { int x, y; BYTE *yls; @@ -193,73 +162,10 @@ static void image_copy_to_alpha16(agsurface_t *dib, BYTE *sdata, BYTE *ddata, in } } -/******************************************************************************/ -/* private methods image操作 packed 24bpp */ -/******************************************************************************/ - -static void fadeOut24p(SDL_Surface *dst, int lv, int col) { - BYTE *yld; - int x, y; - - for (y = 0; y < dst->h; y += 4) { - yld = PIXEL_AT(dst, 0, y + fadeY[lv]); - for (x = 0; x < dst->w; x += 4) { - *(yld + fadeX[lv]) = - *(yld + fadeX[lv] +1) = - *(yld + fadeX[lv] +2) = (BYTE)col; - yld += (4*3); - } - } -} - -static void fadeIn24p(SDL_Surface *src, SDL_Surface *dst, int lv) { - DWORD *yls; - BYTE *yld; - int x, y; - - for (y = 0; y < src->h; y += 4) { - yls = PIXEL_AT(src, 0, y + fadeY[lv]); - yld = PIXEL_AT(dst, 0, y + fadeY[lv]); - for (x = 0; x < src->w; x += 4) { - *(yld + fadeX[lv] ) = PIXB24(*(yls + fadeX[lv])); - *(yld + fadeX[lv] +1) = PIXG24(*(yls + fadeX[lv])); - *(yld + fadeX[lv] +2) = PIXR24(*(yls + fadeX[lv])); - yls += 4; yld += (4*3); - } - } -} - /******************************************************************************/ /* private methods image操作 24/32bpp */ /******************************************************************************/ -static void fadeOut24(SDL_Surface *dst, int lv, int col) { - DWORD *yld; - int x, y; - - for (y = 0; y < dst->h; y += 4) { - yld = PIXEL_AT(dst, 0, y + fadeY[lv]); - for (x = 0; x < dst->w; x += 4) { - *(yld + fadeX[lv]) = col; - yld += 4; - } - } -} - -static void fadeIn24(SDL_Surface *src, SDL_Surface *dst, int lv) { - DWORD *yls, *yld; - int x, y; - - for (y = 0; y < src->h; y += 4) { - yls = PIXEL_AT(src, 0, y + fadeY[lv]); - yld = PIXEL_AT(dst, 0, y + fadeY[lv]); - for (x = 0; x < src->w; x += 4) { - *(yld + fadeX[lv]) = *(yls + fadeX[lv]); - yls += 4; yld += 4; - } - } -} - static void image_copy_from_alpha24(agsurface_t *dib, BYTE *sdata, BYTE *ddata, int w, int h, ALPHA_DIB_COPY_TYPE flag) { int x, y; BYTE *yls; @@ -405,38 +311,6 @@ void image_setdepth(int depth) { } } -/* - fade out for 16/24/32 -*/ -void image_fadeOut(SDL_Surface *img, int lv, int col) { - switch(img->format->BytesPerPixel) { - case 2: - fadeOut16(img, lv, col); break; - case 3: - fadeOut24p(img, lv, col); break; - case 4: - fadeOut24(img, lv, col); break; - default: - break; - } -} - -/* - fade in for 16/24/32 -*/ -void image_fadeIn(SDL_Surface *src, SDL_Surface *dst, int lv) { - switch(dst->format->BytesPerPixel) { - case 2: - fadeIn16(src, dst, lv); break; - case 3: - fadeIn24p(src, dst, lv); break; - case 4: - fadeIn24(src, dst, lv); break; - default: - break; - } -} - void image_copy_from_alpha(agsurface_t *dib, int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_COPY_TYPE flag) { BYTE *sdata = GETOFFSET_ALPHA(dib, sx, sy); BYTE *ddata = GETOFFSET_PIXEL(dib, dx, dy); diff --git a/src/image.h b/src/image.h index e4f84e5..a795899 100644 --- a/src/image.h +++ b/src/image.h @@ -29,8 +29,6 @@ #include "ags.h" extern void image_setdepth(int); -extern void image_fadeOut(SDL_Surface *img, int lv, int col); -extern void image_fadeIn(SDL_Surface *src, SDL_Surface *dst, int lv); extern void image_copy_from_alpha(agsurface_t *dib, int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_COPY_TYPE flag); extern void image_copy_to_alpha(agsurface_t *dib, int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_COPY_TYPE flag); extern void image_Mosaic(SDL_Surface *dib, int sx, int sy, int w, int h, int dx, int dy, int slice); diff --git a/src/sdl_draw.c b/src/sdl_draw.c index 8b86a31..f008c9a 100644 --- a/src/sdl_draw.c +++ b/src/sdl_draw.c @@ -42,6 +42,9 @@ #include "nact.h" #include "debugger.h" +static const int fadeX[16] = {0,2,2,0,1,3,3,1,1,3,3,1,0,2,2,0}; +static const int fadeY[16] = {0,2,0,2,1,3,1,3,0,2,0,2,1,3,1,3}; + static int fadestep[256] = {0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40, 42,43,45,46,48,49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78, @@ -370,50 +373,51 @@ static void setWhiteness(SDL_Surface *s, int val) { } static void fader_in(int n) { - static SDL_Surface *s_fader; + static SDL_Surface *src; if (n == 0) { - s_fader = SDL_CreateRGBSurface(0, sdl_display->w, sdl_display->h, + src = SDL_CreateRGBSurface(0, sdl_display->w, sdl_display->h, sdl_display->format->BitsPerPixel, 0, 0, 0, 0); - if (sdl_display->format->BitsPerPixel == 8) { - memcpy(s_fader->format->palette->colors, - sdl_display->format->palette->colors, - sizeof(SDL_Color) * 256); - } SDL_Rect r_src = {view_x, view_y, view_w, view_h}; SDL_Rect r_dst = {winoffset_x, winoffset_y, view_w, view_h}; - SDL_BlitSurface(sdl_dib, &r_src, s_fader, &r_dst); + SDL_BlitSurface(sdl_dib, &r_src, src, &r_dst); } if (n == 255) { - SDL_FreeSurface(s_fader); + SDL_FreeSurface(src); sdl_updateAll(); return; } - - SDL_LockSurface(s_fader); - SDL_LockSurface(sdl_display); - - image_fadeIn(s_fader, sdl_display, n / 16); - - SDL_UnlockSurface(sdl_display); - SDL_UnlockSurface(s_fader); + + int lv = n / 16; + for (int y = 0; y < src->h; y += 4) { + DWORD *yls = PIXEL_AT(src, 0, y + fadeY[lv]); + DWORD *yld = PIXEL_AT(sdl_display, 0, y + fadeY[lv]); + for (int x = 0; x < src->w; x += 4) { + *(yld + fadeX[lv]) = *(yls + fadeX[lv]); + yls += 4; yld += 4; + } + } + sdl_dirty = TRUE; } -static void fader_out(int n,Uint32 c) { +static void fader_out(int n, Uint32 c) { if (n == 255) { SDL_FillRect(sdl_display, NULL, c); return; } - - SDL_LockSurface(sdl_display); - - image_fadeOut(sdl_display, (255 - n) / 16, c); - - SDL_UnlockSurface(sdl_display); - + + int lv = (255 - n) / 16; + for (int y = 0; y < sdl_display->h; y += 4) { + DWORD *yld = PIXEL_AT(sdl_display, 0, y + fadeY[lv]); + for (int x = 0; x < sdl_display->w; x += 4) { + *(yld + fadeX[lv]) = c; + yld += 4; + } + } + sdl_dirty = TRUE; } @@ -481,8 +485,8 @@ void sdl_wrapColor(int sx, int sy, int w, int h, BYTE c, int rate) { /* mask update まだ */ void sdl_maskupdate(int sx, int sy, int w, int h, int dx, int dy, int func, int step) { - if (step == 256) { + WARNING("Unimplemented effect %d\n", func); ags_copyArea(sx, sy, w, h, dx, dy); ags_updateArea(dx, dy, w, h); }