X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=lib%2Fvideo%2Fsurface.cpp;h=718fbeba9595ed713b3372624096daa3b45b9a93;hb=dbaec81f639e6968ed62c288d478de1ab46148db;hp=73dc131b4bf0b73b78bf7f28237746b5a21ca6e4;hpb=1028ce017d6809007e39a8f7c034a0d62bfe3052;p=supertux.git diff --git a/lib/video/surface.cpp b/lib/video/surface.cpp index 73dc131b4..718fbeba9 100644 --- a/lib/video/surface.cpp +++ b/lib/video/surface.cpp @@ -257,24 +257,24 @@ apply_filter_to_surface(SDL_Surface* surface, int filter, Color color) { if(filter == MASK_FILTER) { + SDL_Surface* sur_copy = sdl_surface_from_sdl_surface(surface, true); + Uint8 r,g,b,a; - SDL_Rect rect; - rect.w = rect.h = 1; - SDL_LockSurface(surface); - for(int x = 0; x < surface->w; x++) - for(int y = 0; y < surface->h; y++) + + SDL_LockSurface(sur_copy); + for(int x = 0; x < sur_copy->w; x++) + for(int y = 0; y < sur_copy->h; y++) { -// SDL_LockSurface(surface); - SDL_GetRGBA(getpixel(surface,x,y), surface->format, &r,&g,&b,&a); -// SDL_UnlockSurface(surface); + SDL_GetRGBA(getpixel(sur_copy,x,y), sur_copy->format, &r,&g,&b,&a); if(a != 0) { - putpixel(surface, x,y, color.map_rgba(surface)); -// rect.x = x; rect.y = y; -// SDL_FillRect(surface, &rect, color.map_rgba(surface)); + putpixel(sur_copy, x,y, color.map_rgba(sur_copy)); } } - SDL_UnlockSurface(surface); + SDL_UnlockSurface(sur_copy); + + SDL_BlitSurface(sur_copy, NULL, surface, NULL); + SDL_FreeSurface(sur_copy); } } @@ -362,6 +362,7 @@ SDL_Surface* SuperTux::sdl_surface_from_sdl_surface(SDL_Surface* sdl_surf, bool use_alpha) { SDL_Surface* sdl_surface; +#if 0 Uint32 saved_flags; Uint8 saved_alpha; @@ -373,18 +374,21 @@ SuperTux::sdl_surface_from_sdl_surface(SDL_Surface* sdl_surf, bool use_alpha) { SDL_SetAlpha(sdl_surf, 0, 0); } +#endif if(use_alpha == false && !use_gl) sdl_surface = SDL_DisplayFormat(sdl_surf); else sdl_surface = SDL_DisplayFormatAlpha(sdl_surf); +#if 0 /* Restore the alpha blending attributes */ if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA ) { SDL_SetAlpha(sdl_surface, saved_flags, saved_alpha); } +#endif if (sdl_surface == NULL) Termination::abort("Can't covert to display format", "SURFACE"); @@ -991,10 +995,10 @@ SurfaceSDL::draw_part(float sx, float sy, float x, float y, float w, float h, Ui /* Create a Surface, make it using colorkey, blit surface into temp, apply alpha to temp sur, blit the temp into the screen */ /* Note: this has to be done, since SDL doesn't allow to set alpha to surfaces that - already have an alpha mask yet... */ + already have an alpha mask, yet... */ SDL_Surface* sdl_surface_copy = SDL_CreateRGBSurface (sdl_surface->flags, - sdl_surface->w, sdl_surface->h, sdl_surface->format->BitsPerPixel, + (int)w, (int)h, sdl_surface->format->BitsPerPixel, sdl_surface->format->Rmask, sdl_surface->format->Gmask, sdl_surface->format->Bmask, 0); @@ -1003,7 +1007,7 @@ SurfaceSDL::draw_part(float sx, float sy, float x, float y, float w, float h, Ui SDL_SetColorKey(sdl_surface_copy, SDL_SRCCOLORKEY, colorkey); - SDL_BlitSurface(sdl_surface, NULL, sdl_surface_copy, NULL); + SDL_BlitSurface(sdl_surface, &src, sdl_surface_copy, NULL); SDL_SetAlpha(sdl_surface_copy ,SDL_SRCALPHA,alpha); int ret = SDL_BlitSurface(sdl_surface_copy, NULL, screen, &dest);