From 5895e206dceb9d943386f73cbfcd5f2d7ce09905 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Wed, 29 Feb 2012 23:17:32 +0100 Subject: [PATCH] use pregenerated bitmap in loading screen --- src/loading.c | 59 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/loading.c b/src/loading.c index 13f3d9e..50474f9 100644 --- a/src/loading.c +++ b/src/loading.c @@ -41,34 +41,45 @@ void Loading_Load(struct Game *game) { DrawConsole(game); al_flip_display(); - al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); - game->loading.image = al_load_bitmap( "data/loading.png" ); - al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR); - game->loading.loading_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); al_set_target_bitmap(game->loading.loading_bitmap); - int width = al_get_display_width(game->display); - int height = al_get_display_height(game->display); - int x, y; - for (y = 0; y < height; y++) { - float pixy = ((float)y / height) * al_get_bitmap_height(game->loading.image); - for (x = 0; x < width; x++) { - float pixx = ((float)x / width) * al_get_bitmap_width(game->loading.image); - ALLEGRO_COLOR a = al_get_pixel(game->loading.image, pixx-0.25, pixy-0.25); - ALLEGRO_COLOR b = al_get_pixel(game->loading.image, pixx+0.25, pixy-0.25); - ALLEGRO_COLOR c = al_get_pixel(game->loading.image, pixx-0.25, pixy+0.25); - ALLEGRO_COLOR d = al_get_pixel(game->loading.image, pixx+0.25, pixy+0.25); - ALLEGRO_COLOR result = al_map_rgba_f( - (a.r+b.r+c.r+d.r) / 4, - (a.g+b.b+c.g+d.g) / 4, - (a.b+b.g+c.b+d.b) / 4, - (a.a+b.a+c.a+d.a) / 4 - ); - al_put_pixel(x, y, result); - } - } + void GenerateLoadingBitmap() { + al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); + game->loading.image = al_load_bitmap( "data/loading.png" ); + al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR); + int width = al_get_display_width(game->display); + int height = al_get_display_height(game->display); + int x, y; + for (y = 0; y < height; y++) { + float pixy = ((float)y / height) * al_get_bitmap_height(game->loading.image); + for (x = 0; x < width; x++) { + float pixx = ((float)x / width) * al_get_bitmap_width(game->loading.image); + ALLEGRO_COLOR a = al_get_pixel(game->loading.image, pixx-0.25, pixy-0.25); + ALLEGRO_COLOR b = al_get_pixel(game->loading.image, pixx+0.25, pixy-0.25); + ALLEGRO_COLOR c = al_get_pixel(game->loading.image, pixx-0.25, pixy+0.25); + ALLEGRO_COLOR d = al_get_pixel(game->loading.image, pixx+0.25, pixy+0.25); + ALLEGRO_COLOR result = al_map_rgba_f( + (a.r+b.r+c.r+d.r) / 4, + (a.g+b.b+c.g+d.g) / 4, + (a.b+b.g+c.b+d.b) / 4, + (a.a+b.a+c.a+d.a) / 4 + ); + al_put_pixel(x, y, result); + } + } + al_save_bitmap("data/cache/loading.png", game->loading.loading_bitmap); + PrintConsole(game, "Cache bitmap generated."); + } + + game->loading.image = al_load_bitmap( "data/cache/loading.png"); + if (game->loading.image) { + if ((al_get_bitmap_width(game->loading.image)!=al_get_display_width(game->display)) || (al_get_bitmap_height(game->loading.image)!=al_get_display_height(game->display))) + GenerateLoadingBitmap(); + else al_draw_bitmap(game->loading.image, 0, 0, 0); + } else GenerateLoadingBitmap(); + // Scale "Loading" bitmap //al_draw_scaled_bitmap(game->loading.image,0, 0, al_get_bitmap_width(game->loading.image), al_get_bitmap_height(game->loading.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0); al_draw_text_with_shadow(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.0234, al_get_display_height(game->display)*0.85, ALLEGRO_ALIGN_LEFT, "Loading...");