summaryrefslogtreecommitdiffstats
path: root/src/area.c
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-02-19 14:12:11 (EST)
committer P. J. McDermott <pjm@nac.net>2013-02-19 14:12:11 (EST)
commitfca5b26c8cdce0060d700186d42bacfe7ebc3d80 (patch)
tree4f7814785ff53324efc07d1be2802ec00c23deae /src/area.c
parent1b76e061f04d85d451c98023e264d897c3e5fee6 (diff)
downloadoverworld-rpg-fca5b26c8cdce0060d700186d42bacfe7ebc3d80.zip
overworld-rpg-fca5b26c8cdce0060d700186d42bacfe7ebc3d80.tar.gz
overworld-rpg-fca5b26c8cdce0060d700186d42bacfe7ebc3d80.tar.bz2
Consolidate area layers a bit.
Statically blit together as much as possible before rendering.
Diffstat (limited to 'src/area.c')
-rw-r--r--src/area.c50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/area.c b/src/area.c
index 1914dad..f90cc09 100644
--- a/src/area.c
+++ b/src/area.c
@@ -27,10 +27,27 @@ area_new(struct map *map)
static void
blit_map_layers(struct map *map, struct area *area)
{
- blit_map_layer(map, MAP_LAYER_GROUND, area, AREA_LAYER_GROUND);
- blit_map_layer(map, MAP_LAYER_OBJ_LOW, area, AREA_LAYER_OBJ_LOW);
- blit_map_layer(map, MAP_LAYER_OBJ_MID, area, AREA_LAYER_OBJ_MID);
- blit_map_layer(map, MAP_LAYER_OBJ_HIGH, area, AREA_LAYER_OBJ_HIGH);
+ area->map_layers[AREA_LAYER_BOT] = SDL_CreateRGBSurface(
+ SDL_HWSURFACE | SDL_SRCCOLORKEY,
+ map->width * map->tilewidth,
+ map->height * map->tileheight,
+ 32, 0, 0, 0, 0);
+ blit_map_layer(map, MAP_LAYER_GROUND, area, AREA_LAYER_BOT);
+ blit_map_layer(map, MAP_LAYER_OBJ_LOW, area, AREA_LAYER_BOT);
+
+ area->map_layers[AREA_LAYER_MID] = SDL_CreateRGBSurface(
+ SDL_HWSURFACE | SDL_SRCCOLORKEY,
+ map->width * map->tilewidth,
+ map->height * map->tileheight,
+ 32, 0, 0, 0, 0);
+ blit_map_layer(map, MAP_LAYER_OBJ_MID, area, AREA_LAYER_MID);
+
+ area->map_layers[AREA_LAYER_TOP] = SDL_CreateRGBSurface(
+ SDL_HWSURFACE | SDL_SRCCOLORKEY,
+ map->width * map->tilewidth,
+ map->height * map->tileheight,
+ 32, 0, 0, 0, 0);
+ blit_map_layer(map, MAP_LAYER_OBJ_HIGH, area, AREA_LAYER_TOP);
}
static void
@@ -44,15 +61,6 @@ blit_map_layer(struct map *map, enum map_layer_id map_layer,
Uint32 mts_lastgid;
SDL_Rect tilerect, layerrect;
- area->map_layers[area_layer] = SDL_CreateRGBSurface(
- SDL_HWSURFACE | SDL_SRCCOLORKEY | SDL_SRCALPHA,
- map->width * map->tilewidth,
- map->height * map->tileheight,
- 32,
- 0x000000FF,
- 0x0000FF00,
- 0x00FF0000,
- 0x00000000);
SDL_SetColorKey(area->map_layers[area_layer], SDL_SRCCOLORKEY, 0);
for (i = 0; i < map->width * map->height; ++i) {
gid = map->layers[map_layer].tiles[i];
@@ -156,12 +164,8 @@ render_area_to_surface(struct area *area, SDL_Rect *arearect,
dstrect.w, dstrect.h, dstrect.x, dstrect.y);
#endif
- /* Blit ground layer. */
- SDL_BlitSurface(area->map_layers[AREA_LAYER_GROUND], &srcrect,
- surface, &dstrect);
-
- /* Blit low objects layer. */
- SDL_BlitSurface(area->map_layers[AREA_LAYER_OBJ_LOW], &srcrect,
+ /* Blit bottom layer. */
+ SDL_BlitSurface(area->map_layers[AREA_LAYER_BOT], &srcrect,
surface, &dstrect);
/* return;*/
@@ -171,13 +175,13 @@ render_area_to_surface(struct area *area, SDL_Rect *arearect,
SDL_FillRect(surface, &tmprect,
SDL_MapRGB(surface->format, 31, 31, 127));
- /* Blit middle objects layer. */
- SDL_BlitSurface(area->map_layers[AREA_LAYER_OBJ_MID], &srcrect,
+ /* Blit middle layer. */
+ SDL_BlitSurface(area->map_layers[AREA_LAYER_MID], &srcrect,
surface, &dstrect);
/* TODO: Blit high sprites. */
- /* Blit high objects layer. */
- SDL_BlitSurface(area->map_layers[AREA_LAYER_OBJ_HIGH], &srcrect,
+ /* Blit top layer. */
+ SDL_BlitSurface(area->map_layers[AREA_LAYER_TOP], &srcrect,
surface, &dstrect);
}