如何获得透明的SDL_Surface?

时间:2012-04-22 07:42:19

标签: delphi sdl pascal

我正在尝试获得一个透明的SDL_Surface(在它上面插入半透明的矩形),这就是我所做的:

surface := SDL_CreateRGBSurface(SDL_SWSURFACE, XMAX*TILE_SIZE,
YMAX*TILE_SIZE, BPP, 0, 0, 0, SDL_ALPHA_TRANSPARENT);
SDL_FillRect(surface, nil, SDL_MapRGBA(surface^.format, 0, 0, 0, 0));

这仍然不起作用,我得到的表面是黑色而不是透明。有什么想法吗?

奖励:为了避免多个透明矩形相互叠加,我有什么方法可以移除这些矩形然后再对新的矩形进行blit(没有再次渲染背景......)?

1 个答案:

答案 0 :(得分:0)

通过查看docs for SDL_CreateRGBSurface,我认为您需要将SDL_SWSURFACE替换为SDL_SRCALPHA

对于奖金部分,您可能首先尝试使硬件加速工作......但如果这不是一个选项而且您愿意花一些记忆:

  • 首先,在绘制矩形之前,复制下面的像素。

  • 要删除最上面的矩形,只需重新显示存储的背景图像即可。

  • 要删除任何其他矩形,请重新显示其背景,然后从上到下重新绘制其上方矩形的重叠部分。