moar caching

This commit is contained in:
Sebastian Krzyszkowiak 2012-03-01 01:14:24 +01:00
parent cbdb68382c
commit ee67f89116
8 changed files with 57 additions and 34 deletions

View file

@ -43,7 +43,8 @@ int About_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
}
void About_Preload(struct Game *game) {
game->about.image = al_load_bitmap( "data/table.png" );
game->about.image =LoadFromCache(game, "table.png", al_get_display_width(game->display), al_get_display_height(game->display));
//game->about.image = al_load_bitmap( "data/table.png" );
game->about.letter = al_load_bitmap( "data/letter.png" );
game->about.sample = al_load_sample( "data/about.flac" );
game->about.font = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game->display)*0.035,0 );
@ -111,7 +112,8 @@ void About_Preload(struct Game *game) {
game->about.fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
al_set_target_bitmap(game->about.fade_bitmap);
al_draw_scaled_bitmap(game->about.image,0,0,al_get_bitmap_width(game->about.image),al_get_bitmap_height(game->about.image),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_bitmap(game->about.image, 0, 0, 0);
//al_draw_scaled_bitmap(game->about.image,0,0,al_get_bitmap_width(game->about.image),al_get_bitmap_height(game->about.image),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_scaled_bitmap(game->about.letter,0,0,al_get_bitmap_width(game->about.letter),al_get_bitmap_height(game->about.letter),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_bitmap_region(game->about.text_bitmap, 0, 0, al_get_bitmap_width(game->about.text_bitmap), al_get_display_height(game->display)*0.8, al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.1, 0);

View file

@ -66,7 +66,10 @@ void Intro_Preload(struct Game *game) {
game->intro.position = 0;
game->intro.page = 0;
game->intro.in_animation = false;
game->intro.table_bitmap = al_load_bitmap( "data/paper.png" );
game->intro.table_bitmap =LoadFromCache(game, "paper.png", al_get_display_width(game->display), al_get_display_height(game->display));
//game->intro.table_bitmap = al_load_bitmap( "data/paper.png" );
game->intro.sample = al_load_sample( "data/intro.flac" );
if (!game->intro.sample){
@ -76,15 +79,15 @@ void Intro_Preload(struct Game *game) {
game->intro.table = al_create_bitmap(al_get_display_width(game->display)*5, al_get_display_height(game->display));
game->intro.font = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game->display)*0.04,0 );
al_set_target_bitmap(game->intro.table);
al_draw_scaled_bitmap(game->intro.table_bitmap, 0, 0, al_get_bitmap_width(game->intro.table_bitmap), al_get_bitmap_height(game->intro.table_bitmap), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*1, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*1.5, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*2, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*2.5, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*3, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*3.5, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*4, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_scaled_bitmap(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*4.5, 0, al_get_display_width(game->display)/2, al_get_display_height(game->display), 0);
al_draw_bitmap(game->intro.table_bitmap, 0, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*1, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*1.5, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*2, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*2.5, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*3, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*3.5, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*4, 0, 0);
al_draw_bitmap_region(game->intro.table_bitmap, al_get_bitmap_width(game->intro.table_bitmap)/2, 0, al_get_bitmap_width(game->intro.table_bitmap)/2, al_get_bitmap_height(game->intro.table_bitmap), al_get_display_width(game->display)*4.5, 0, 0);
float y;
float oldx = -1;

View file

@ -58,7 +58,8 @@ void Level_Preload(struct Game *game) {
game->level.derpy_frame_tmp = 0;
game->level.derpy_pos = -0.2;
PrintConsole(game, "Initializing level %d...", game->level.current_level);
game->level.image = al_load_bitmap( "data/table.png" );
//game->level.image = al_load_bitmap( "data/table.png" );
game->level.image =LoadFromCache(game, "table.png", al_get_display_width(game->display), al_get_display_height(game->display));
game->level.sample = al_load_sample( "data/moonwalk.flac" );
game->level.derpy_walkcycle = al_load_bitmap( "data/derpcycle.png" );
@ -71,7 +72,7 @@ void Level_Preload(struct Game *game) {
game->level.fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
al_set_target_bitmap(game->level.fade_bitmap);
al_draw_scaled_bitmap(game->level.image,0,0,al_get_bitmap_width(game->level.image),al_get_bitmap_height(game->level.image),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_bitmap(game->level.image,0,0,0);
al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level);
al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead.");
al_set_target_bitmap(al_get_backbuffer(game->display));

View file

@ -79,12 +79,13 @@ void Loading_Load(struct Game *game) {
else al_draw_bitmap(game->loading.image, 0, 0, 0);
} else GenerateLoadingBitmap();
*/
game->loading.image = LoadFromCache(game, "loading.png", al_get_display_width(game->display), al_get_display_height(game->display));
game->loading.image = al_load_bitmap( "data/loading.png");
//game->loading.image = LoadFromCache(game, "loading.png", al_get_display_width(game->display), al_get_display_height(game->display));
// Scale "Loading" bitmap
al_set_target_bitmap(game->loading.loading_bitmap);
al_draw_bitmap(game->loading.image, 0, 0, 0);
//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_bitmap(game->loading.image, 0, 0, 0);
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...");
al_set_target_bitmap(al_get_backbuffer(game->display));
al_destroy_bitmap(game->loading.image);

View file

@ -122,16 +122,20 @@ void LoadGameState(struct Game *game) {
game->loadstate = -1;
}
void ScaleBitmap(ALLEGRO_BITMAP* source, int width, int height) {
void ScaleBitmap(ALLEGRO_BITMAP* source, int width, int height, float val) {
if ((al_get_bitmap_width(source)==width) && (al_get_bitmap_height(source)==height)) {
al_draw_bitmap(source, 0, 0, 0);
return;
}
int x, y;
for (y = 0; y < height; y++) {
float pixy = ((float)y / height) * al_get_bitmap_height(source);
for (x = 0; x < width; x++) {
float pixx = ((float)x / width) * al_get_bitmap_width(source);
ALLEGRO_COLOR a = al_get_pixel(source, pixx-0.25, pixy-0.25);
ALLEGRO_COLOR b = al_get_pixel(source, pixx+0.25, pixy-0.25);
ALLEGRO_COLOR c = al_get_pixel(source, pixx-0.25, pixy+0.25);
ALLEGRO_COLOR d = al_get_pixel(source, pixx+0.25, pixy+0.25);
ALLEGRO_COLOR a = al_get_pixel(source, pixx-val, pixy-val);
ALLEGRO_COLOR b = al_get_pixel(source, pixx+val, pixy-val);
ALLEGRO_COLOR c = al_get_pixel(source, pixx-val, pixy+val);
ALLEGRO_COLOR d = al_get_pixel(source, pixx+val, pixy+val);
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,
@ -157,7 +161,7 @@ ALLEGRO_BITMAP* LoadFromCache(struct Game *game, char* filename, int width, int
source = al_load_bitmap( origfn );
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
ScaleBitmap(source, width, height);
ScaleBitmap(source, width, height, 0.35);
al_save_bitmap(cachefn, target);
PrintConsole(game, "Cache bitmap %s generated.", filename);
}
@ -242,6 +246,8 @@ int main(int argc, char **argv){
if (game.fullscreen) al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW);
al_set_new_display_option(ALLEGRO_VSYNC, 1, ALLEGRO_SUGGEST);
al_set_new_display_option(ALLEGRO_OPENGL, 1, ALLEGRO_SUGGEST);
al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST);
al_set_new_display_option(ALLEGRO_SAMPLES, 0, ALLEGRO_REQUIRE);
game.display = al_create_display(game.width, game.height);
if(!game.display) {
fprintf(stderr, "failed to create display!\n");

View file

@ -168,7 +168,7 @@ void PrintConsole(struct Game *game, char* format, ...);
/*! \brief Draws console bitmap on screen. */
void DrawConsole(struct Game *game);
void ScaleBitmap(ALLEGRO_BITMAP* source, int width, int height);
void ScaleBitmap(ALLEGRO_BITMAP* source, int width, int height, float val);
ALLEGRO_BITMAP* LoadFromCache(struct Game *game, char* filename, int width, int height);
#endif

View file

@ -87,13 +87,16 @@ void Map_Preload(struct Game *game) {
PrintConsole(game, "Last level available: %d", game->map.selected);
game->map.arrowpos = 0;
game->map.map = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
game->map.background = al_load_bitmap( "data/table.png" );
game->map.map_bg = al_load_bitmap( "data/map/background.png" );
game->map.arrow = al_load_bitmap( "data/arrow.png" );
game->map.click_sample = al_load_sample( "data/click.flac" );
char filename[30] = { };
sprintf(filename, "data/map/highlight%d.png", game->map.available);
game->map.highlight = al_load_bitmap( filename );
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
game->map.arrow = al_load_bitmap( "data/arrow.png" );
game->map.click_sample = al_load_sample( "data/click.flac" );
game->map.sample = al_load_sample( "data/map.flac" );
if (!game->map.sample){
@ -105,10 +108,16 @@ void Map_Preload(struct Game *game) {
exit(-1);
}
ALLEGRO_BITMAP *scaled =LoadFromCache(game, "table.png", al_get_display_width(game->display), al_get_display_height(game->display));
al_set_target_bitmap(game->map.map);
al_draw_scaled_bitmap(game->map.background,0,0,al_get_bitmap_width(game->map.background),al_get_bitmap_height(game->map.background),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_scaled_bitmap(game->map.map_bg,0,0,al_get_bitmap_width(game->map.map_bg),al_get_bitmap_height(game->map.map_bg),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_scaled_bitmap(game->map.highlight,0,0,al_get_bitmap_width(game->map.highlight),al_get_bitmap_height(game->map.highlight),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_bitmap(scaled, 0, 0 ,0);
al_destroy_bitmap(scaled);
//ScaleBitmap(game->map.background, al_get_display_width(game->display), al_get_display_height(game->display), 0.5);
ScaleBitmap(game->map.map_bg, al_get_display_width(game->display), al_get_display_height(game->display), 0.5);
ScaleBitmap(game->map.highlight, al_get_display_width(game->display), al_get_display_height(game->display), 0.5);
//al_draw_scaled_bitmap(game->map.background,0,0,al_get_bitmap_width(game->map.background),al_get_bitmap_height(game->map.background),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
//al_draw_scaled_bitmap(game->map.map_bg,0,0,al_get_bitmap_width(game->map.map_bg),al_get_bitmap_height(game->map.map_bg),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
//al_draw_scaled_bitmap(game->map.highlight,0,0,al_get_bitmap_width(game->map.highlight),al_get_bitmap_height(game->map.highlight),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_set_target_bitmap(al_get_backbuffer(game->display));
}

View file

@ -112,7 +112,7 @@ void Menu_Preload(struct Game *game) {
game->menu.menu_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)*0.45);
al_set_target_bitmap(game->menu.menu_bitmap);
al_clear_to_color(al_map_rgba(0,0,0,0));
ScaleBitmap(game->menu.image, al_get_display_width(game->display), al_get_display_height(game->display)*0.45);
ScaleBitmap(game->menu.image, al_get_display_width(game->display), al_get_display_height(game->display)*0.45, 0.75);
//al_draw_scaled_bitmap(game->menu.image,0, 0, al_get_bitmap_width(game->menu.image), al_get_bitmap_height(game->menu.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0);
al_destroy_bitmap(game->menu.image);
@ -120,21 +120,21 @@ void Menu_Preload(struct Game *game) {
game->menu.cloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.25);
al_set_target_bitmap(game->menu.cloud_bitmap);
al_clear_to_color(al_map_rgba(0,0,0,0));
ScaleBitmap(game->menu.cloud, al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap));
ScaleBitmap(game->menu.cloud, al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap), 0.75);
//al_draw_scaled_bitmap(game->menu.cloud,0, 0, al_get_bitmap_width(game->menu.cloud), al_get_bitmap_height(game->menu.cloud), 0, 0, al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap),0);
al_destroy_bitmap(game->menu.cloud);
game->menu.cloud2_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.2, al_get_display_height(game->display)*0.1);
al_set_target_bitmap(game->menu.cloud2_bitmap);
al_clear_to_color(al_map_rgba(0,0,0,0));
ScaleBitmap(game->menu.cloud2, al_get_bitmap_width(game->menu.cloud2_bitmap), al_get_bitmap_height(game->menu.cloud2_bitmap));
ScaleBitmap(game->menu.cloud2, al_get_bitmap_width(game->menu.cloud2_bitmap), al_get_bitmap_height(game->menu.cloud2_bitmap), 0.75);
//al_draw_scaled_bitmap(game->menu.cloud2,0, 0, al_get_bitmap_width(game->menu.cloud2), al_get_bitmap_height(game->menu.cloud2), 0, 0, al_get_bitmap_width(game->menu.cloud2_bitmap), al_get_bitmap_height(game->menu.cloud2_bitmap),0);
al_destroy_bitmap(game->menu.cloud2);
game->menu.pinkcloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.33125, al_get_display_height(game->display)); //*0.8122);
game->menu.pinkcloud_scaled = al_create_bitmap(al_get_bitmap_width(game->menu.pinkcloud_bitmap), al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.8122);
al_set_target_bitmap(game->menu.pinkcloud_scaled);
ScaleBitmap(game->menu.pinkcloud, al_get_bitmap_width(game->menu.pinkcloud_scaled), al_get_bitmap_height(game->menu.pinkcloud_scaled));
ScaleBitmap(game->menu.pinkcloud, al_get_bitmap_width(game->menu.pinkcloud_scaled), al_get_bitmap_height(game->menu.pinkcloud_scaled), 0.75);
//al_draw_scaled_bitmap(game->menu.pinkcloud,0, 0, al_get_bitmap_width(game->menu.pinkcloud), al_get_bitmap_height(game->menu.pinkcloud), 0, 0, al_get_bitmap_width(game->menu.pinkcloud_scaled), al_get_bitmap_height(game->menu.pinkcloud_scaled),0);
al_destroy_bitmap(game->menu.pinkcloud);
@ -149,7 +149,8 @@ void Menu_Preload(struct Game *game) {
game->menu.mountain_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.055, al_get_display_height(game->display)/9);
al_set_target_bitmap(game->menu.mountain_bitmap);
al_clear_to_color(al_map_rgba(0,0,0,0));
al_draw_scaled_bitmap(game->menu.mountain,0, 0, al_get_bitmap_width(game->menu.mountain), al_get_bitmap_height(game->menu.mountain), 0, 0, al_get_bitmap_width(game->menu.mountain_bitmap), al_get_bitmap_height(game->menu.mountain_bitmap),0);
ScaleBitmap(game->menu.mountain, al_get_bitmap_width(game->menu.mountain_bitmap), al_get_bitmap_height(game->menu.mountain_bitmap), 0.75);
//al_draw_scaled_bitmap(game->menu.mountain,0, 0, al_get_bitmap_width(game->menu.mountain), al_get_bitmap_height(game->menu.mountain), 0, 0, al_get_bitmap_width(game->menu.mountain_bitmap), al_get_bitmap_height(game->menu.mountain_bitmap),0);
al_destroy_bitmap(game->menu.mountain);
al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP);