mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-23 01:59:43 +01:00
Re-add temporary allocation in BlitSurfaceTransform
Unfortunately there needs to be an intermediate surface for proper alpha color blending to happen via SDL_BlitSurface. The exact SDL blending logic seems complicated and unclear for me to implement at the moment, and my attempts kind of failed, so this is just a stopgap measure to at least get the game rendering how it was before I screwed it up.
This commit is contained in:
parent
91339c77db
commit
2e03f2b03d
1 changed files with 12 additions and 1 deletions
|
@ -220,6 +220,14 @@ static void BlitSurfaceTransform(
|
|||
blit_y = dest_rect->y;
|
||||
}
|
||||
|
||||
/* FIXME: Find a way to do this without allocating... */
|
||||
SDL_Surface* tempsurface = RecreateSurface(dest);
|
||||
if (tempsurface == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SDL_SetSurfaceBlendMode(tempsurface, SDL_BLENDMODE_BLEND);
|
||||
|
||||
for (int x = 0; x < orig_rect.w; x++)
|
||||
{
|
||||
for (int y = 0; y < orig_rect.h; y++)
|
||||
|
@ -237,9 +245,12 @@ static void BlitSurfaceTransform(
|
|||
}
|
||||
|
||||
const SDL_Color result = transform(pixel, color);
|
||||
DrawPixel(dest, blit_x + x, blit_y + y, result);
|
||||
DrawPixel(tempsurface, blit_x + x, blit_y + y, result);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_BlitSurface(tempsurface, NULL, dest, NULL);
|
||||
VVV_freefunc(SDL_FreeSurface, tempsurface);
|
||||
}
|
||||
|
||||
static SDL_Color transform_color(const SDL_Color pixel, const SDL_Color color)
|
||||
|
|
Loading…
Reference in a new issue