diff --git a/src/video/SDL_shape.c b/src/video/SDL_shape.c index ef4cc6045..f393bdf1c 100644 --- a/src/video/SDL_shape.c +++ b/src/video/SDL_shape.c @@ -77,8 +77,12 @@ SDL_CalculateShapeBitmap(SDL_WindowShapeMode mode,SDL_Surface *shape,Uint8* bitm int bytes_per_scanline = (shape->w + (ppb - 1)) / ppb; Uint8 *bitmap_scanline; SDL_Color key; + if(SDL_MUSTLOCK(shape)) SDL_LockSurface(shape); + + SDL_memset(bitmap, 0, shape->h * bytes_per_scanline); + for(y = 0;yh;y++) { bitmap_scanline = bitmap + y * bytes_per_scanline; for(x=0;xw;x++) { @@ -118,6 +122,7 @@ SDL_CalculateShapeBitmap(SDL_WindowShapeMode mode,SDL_Surface *shape,Uint8* bitm bitmap_scanline[x / ppb] |= mask_value << (x % ppb); } } + if(SDL_MUSTLOCK(shape)) SDL_UnlockSurface(shape); } diff --git a/src/video/directfb/SDL_DirectFB_shape.c b/src/video/directfb/SDL_DirectFB_shape.c index da2290f6d..ff334c804 100644 --- a/src/video/directfb/SDL_DirectFB_shape.c +++ b/src/video/directfb/SDL_DirectFB_shape.c @@ -96,8 +96,7 @@ DirectFB_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowSh SDL_DFB_CHECKERR(devdata->dfb->CreateSurface(devdata->dfb, &dsc, &data->surface)); /* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */ - SDL_DFB_ALLOC_CLEAR(bitmap, shape->w * shape->h); - SDL_CalculateShapeBitmap(shaper->mode,shape,bitmap,1); + SDL_CalculateShapeBitmap(shaper->mode, shape, bitmap, 1); src = bitmap;