mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 19:16:44 +01:00
moar memory bitmaps
This commit is contained in:
parent
7de296ae93
commit
cbdb68382c
4 changed files with 74 additions and 10 deletions
|
@ -42,9 +42,8 @@ void Loading_Load(struct Game *game) {
|
||||||
al_flip_display();
|
al_flip_display();
|
||||||
|
|
||||||
game->loading.loading_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
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);
|
|
||||||
|
|
||||||
void GenerateLoadingBitmap() {
|
/* void GenerateLoadingBitmap() {
|
||||||
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
|
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
|
||||||
game->loading.image = al_load_bitmap( "data/loading.png" );
|
game->loading.image = al_load_bitmap( "data/loading.png" );
|
||||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
||||||
|
@ -79,9 +78,12 @@ void Loading_Load(struct Game *game) {
|
||||||
GenerateLoadingBitmap();
|
GenerateLoadingBitmap();
|
||||||
else al_draw_bitmap(game->loading.image, 0, 0, 0);
|
else al_draw_bitmap(game->loading.image, 0, 0, 0);
|
||||||
} else GenerateLoadingBitmap();
|
} else GenerateLoadingBitmap();
|
||||||
|
*/
|
||||||
|
game->loading.image = LoadFromCache(game, "loading.png", al_get_display_width(game->display), al_get_display_height(game->display));
|
||||||
|
|
||||||
// Scale "Loading" bitmap
|
// Scale "Loading" bitmap
|
||||||
al_set_target_bitmap(game->loading.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_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_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_set_target_bitmap(al_get_backbuffer(game->display));
|
||||||
|
|
53
src/main.c
53
src/main.c
|
@ -122,6 +122,58 @@ void LoadGameState(struct Game *game) {
|
||||||
game->loadstate = -1;
|
game->loadstate = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScaleBitmap(ALLEGRO_BITMAP* source, int width, int height) {
|
||||||
|
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 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_draw_pixel(x, y, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ALLEGRO_BITMAP* LoadFromCache(struct Game *game, char* filename, int width, int height) {
|
||||||
|
ALLEGRO_BITMAP *source, *target = al_create_bitmap(width, height);
|
||||||
|
al_set_target_bitmap(target);
|
||||||
|
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||||
|
char origfn[255] = "data/";
|
||||||
|
char cachefn[255] = "data/cache/";
|
||||||
|
strcat(origfn, filename);
|
||||||
|
strcat(cachefn, filename);
|
||||||
|
void GenerateBitmap() {
|
||||||
|
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
|
||||||
|
|
||||||
|
source = al_load_bitmap( origfn );
|
||||||
|
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
||||||
|
|
||||||
|
ScaleBitmap(source, width, height);
|
||||||
|
al_save_bitmap(cachefn, target);
|
||||||
|
PrintConsole(game, "Cache bitmap %s generated.", filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
source = al_load_bitmap( cachefn );
|
||||||
|
if (source) {
|
||||||
|
if ((al_get_bitmap_width(source)!=width) || (al_get_bitmap_height(source)!=height)) {
|
||||||
|
al_destroy_bitmap(source);
|
||||||
|
GenerateBitmap();
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
return source;
|
||||||
|
} else GenerateBitmap();
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv){
|
int main(int argc, char **argv){
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
|
@ -199,6 +251,7 @@ int main(int argc, char **argv){
|
||||||
if (game.fullscreen) al_hide_mouse_cursor(game.display);
|
if (game.fullscreen) al_hide_mouse_cursor(game.display);
|
||||||
|
|
||||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
||||||
|
al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ANY_32_WITH_ALPHA);
|
||||||
|
|
||||||
game.font = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game.display)*0.09,0 );
|
game.font = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game.display)*0.09,0 );
|
||||||
game.font_console = al_load_ttf_font("data/DejaVuSansMono.ttf",al_get_display_height(game.display)*0.018,0 );
|
game.font_console = al_load_ttf_font("data/DejaVuSansMono.ttf",al_get_display_height(game.display)*0.018,0 );
|
||||||
|
|
|
@ -168,4 +168,7 @@ void PrintConsole(struct Game *game, char* format, ...);
|
||||||
/*! \brief Draws console bitmap on screen. */
|
/*! \brief Draws console bitmap on screen. */
|
||||||
void DrawConsole(struct Game *game);
|
void DrawConsole(struct Game *game);
|
||||||
|
|
||||||
|
void ScaleBitmap(ALLEGRO_BITMAP* source, int width, int height);
|
||||||
|
ALLEGRO_BITMAP* LoadFromCache(struct Game *game, char* filename, int width, int height);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
22
src/menu.c
22
src/menu.c
|
@ -28,7 +28,7 @@ void Menu_Draw(struct Game *game) {
|
||||||
al_draw_tinted_bitmap(game->menu.mountain_bitmap,al_map_rgba_f(tint,tint,tint,tint),game->menu.mountain_position, 0,0);
|
al_draw_tinted_bitmap(game->menu.mountain_bitmap,al_map_rgba_f(tint,tint,tint,tint),game->menu.mountain_position, 0,0);
|
||||||
al_draw_scaled_bitmap(game->menu.cloud_bitmap,0,0,al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap), al_get_display_width(game->display)*(sin((game->menu.cloud_position/40)-4.5)-0.3), al_get_display_height(game->display)*0.35, al_get_bitmap_width(game->menu.cloud_bitmap)/2, al_get_bitmap_height(game->menu.cloud_bitmap)/2,0);
|
al_draw_scaled_bitmap(game->menu.cloud_bitmap,0,0,al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap), al_get_display_width(game->display)*(sin((game->menu.cloud_position/40)-4.5)-0.3), al_get_display_height(game->display)*0.35, al_get_bitmap_width(game->menu.cloud_bitmap)/2, al_get_bitmap_height(game->menu.cloud_bitmap)/2,0);
|
||||||
al_draw_bitmap(game->menu.cloud2_bitmap,al_get_display_width(game->display)*(game->menu.cloud2_position/100.0), al_get_display_height(game->display)/1.5,0);
|
al_draw_bitmap(game->menu.cloud2_bitmap,al_get_display_width(game->display)*(game->menu.cloud2_position/100.0), al_get_display_height(game->display)/1.5,0);
|
||||||
al_draw_bitmap(game->menu.menu_bitmap,0, 0,0);
|
al_draw_bitmap(game->menu.menu_bitmap,0, al_get_display_height(game->display)*0.55,0);
|
||||||
al_draw_bitmap(game->menu.pinkcloud_bitmap,(al_get_display_width(game->display)*0.12) + (cos((game->menu.cloud_position/25+80)*1.74444))*40, 0,0);
|
al_draw_bitmap(game->menu.pinkcloud_bitmap,(al_get_display_width(game->display)*0.12) + (cos((game->menu.cloud_position/25+80)*1.74444))*40, 0,0);
|
||||||
al_draw_bitmap(game->menu.cloud_bitmap,al_get_display_width(game->display)*game->menu.cloud_position/100, 30,0);
|
al_draw_bitmap(game->menu.cloud_bitmap,al_get_display_width(game->display)*game->menu.cloud_position/100, 30,0);
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ void Menu_Preload(struct Game *game) {
|
||||||
game->menu.loaded = true;
|
game->menu.loaded = true;
|
||||||
//game->menu.image = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
//game->menu.image = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
||||||
//al_destroy_bitmap(game->menu.image); // ugh...
|
//al_destroy_bitmap(game->menu.image); // ugh...
|
||||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MEMORY_BITMAP);
|
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
|
||||||
game->menu.image = al_load_bitmap( "data/menu.png" );
|
game->menu.image = al_load_bitmap( "data/menu.png" );
|
||||||
game->menu.mountain = al_load_bitmap( "data/mountain.png" );
|
game->menu.mountain = al_load_bitmap( "data/mountain.png" );
|
||||||
game->menu.cloud = al_load_bitmap( "data/cloud.png" );
|
game->menu.cloud = al_load_bitmap( "data/cloud.png" );
|
||||||
|
@ -79,7 +79,9 @@ void Menu_Preload(struct Game *game) {
|
||||||
game->menu.rain = al_load_bitmap( "data/rain.png" );
|
game->menu.rain = al_load_bitmap( "data/rain.png" );
|
||||||
game->menu.pie = al_load_bitmap( "data/pie.png" );
|
game->menu.pie = al_load_bitmap( "data/pie.png" );
|
||||||
game->menu.pinkcloud = al_load_bitmap( "data/pinkcloud.png" );
|
game->menu.pinkcloud = al_load_bitmap( "data/pinkcloud.png" );
|
||||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR);
|
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
||||||
|
|
||||||
|
//game->menu.menu_bitmap = LoadFromCache(game, "menu.png", al_get_display_width(game->display), al_get_display_height(game->display));
|
||||||
|
|
||||||
game->menu.sample = al_load_sample( "data/menu.flac" );
|
game->menu.sample = al_load_sample( "data/menu.flac" );
|
||||||
game->menu.rain_sample = al_load_sample( "data/rain.flac" );
|
game->menu.rain_sample = al_load_sample( "data/rain.flac" );
|
||||||
|
@ -107,29 +109,33 @@ void Menu_Preload(struct Game *game) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scale menu bitmap
|
// Scale menu bitmap
|
||||||
game->menu.menu_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
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_set_target_bitmap(game->menu.menu_bitmap);
|
||||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||||
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);
|
ScaleBitmap(game->menu.image, al_get_display_width(game->display), al_get_display_height(game->display)*0.45);
|
||||||
|
//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);
|
al_destroy_bitmap(game->menu.image);
|
||||||
|
|
||||||
// Cloud menu bitmap
|
// Cloud menu bitmap
|
||||||
game->menu.cloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.25);
|
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_set_target_bitmap(game->menu.cloud_bitmap);
|
||||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||||
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);
|
ScaleBitmap(game->menu.cloud, al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap));
|
||||||
|
//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);
|
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);
|
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_set_target_bitmap(game->menu.cloud2_bitmap);
|
||||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||||
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);
|
ScaleBitmap(game->menu.cloud2, al_get_bitmap_width(game->menu.cloud2_bitmap), al_get_bitmap_height(game->menu.cloud2_bitmap));
|
||||||
|
//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);
|
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_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);
|
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);
|
al_set_target_bitmap(game->menu.pinkcloud_scaled);
|
||||||
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);
|
ScaleBitmap(game->menu.pinkcloud, al_get_bitmap_width(game->menu.pinkcloud_scaled), al_get_bitmap_height(game->menu.pinkcloud_scaled));
|
||||||
|
//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);
|
al_destroy_bitmap(game->menu.pinkcloud);
|
||||||
|
|
||||||
game->menu.pie_bitmap = al_create_bitmap(al_get_display_width(game->display)/2, al_get_display_height(game->display)); //*0.8122);
|
game->menu.pie_bitmap = al_create_bitmap(al_get_display_width(game->display)/2, al_get_display_height(game->display)); //*0.8122);
|
||||||
|
|
Loading…
Reference in a new issue