From 7f7c522b3ca7d1649aa71f97d8066ad95c083d6f Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Thu, 22 Nov 2018 03:40:41 +0100 Subject: [PATCH] make SetFramebufferAsTarget work also for the loading gamestate --- src/internal.c | 2 ++ src/mainloop.c | 3 ++- src/shader.h | 4 ++-- src/utils.c | 20 +++++++++++++------- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/internal.c b/src/internal.c index db4690b..84b33ed 100644 --- a/src/internal.c +++ b/src/internal.c @@ -279,6 +279,8 @@ SYMBOL_INTERNAL void GamestateProgress(struct Game* game) { #else al_convert_memory_bitmaps(); DrawGamestates(game); + SetFramebufferAsTarget(game); + al_clear_to_color(al_map_rgb(0, 0, 0)); double delta = al_get_time() - game->_priv.loading.time; if (game->_priv.loading.current->showLoading) { game->_priv.loading.gamestate->api->Gamestate_Logic(game, game->_priv.loading.gamestate->data, delta); diff --git a/src/mainloop.c b/src/mainloop.c index b30a31c..006b24b 100644 --- a/src/mainloop.c +++ b/src/mainloop.c @@ -251,7 +251,8 @@ static inline bool MainloopTick(struct Game* game) { al_run_detached_thread(GamestateLoadingThread, &data); while (game->_priv.loading.inProgress) { DrawGamestates(game); - al_set_target_backbuffer(game->display); + SetFramebufferAsTarget(game); + al_clear_to_color(al_map_rgb(0, 0, 0)); double delta = al_get_time() - game->_priv.loading.time; if (tmp->showLoading) { (*game->_priv.loading.gamestate->api->Gamestate_Logic)(game, game->_priv.loading.gamestate->data, delta); diff --git a/src/shader.h b/src/shader.h index 4205f1a..0a671ff 100644 --- a/src/shader.h +++ b/src/shader.h @@ -23,7 +23,7 @@ #include "libsuperderpy.h" -ALLEGRO_SHADER *CreateShader(struct Game *game, const char* vertex, const char* fragment); -void DestroyShader(struct Game *game, ALLEGRO_SHADER *shader); +ALLEGRO_SHADER* CreateShader(struct Game* game, const char* vertex, const char* fragment); +void DestroyShader(struct Game* game, ALLEGRO_SHADER* shader); #endif diff --git a/src/utils.c b/src/utils.c index 8580ad8..2f2524e 100644 --- a/src/utils.c +++ b/src/utils.c @@ -486,17 +486,23 @@ SYMBOL_EXPORT void WindowCoordsToViewport(struct Game* game, int* x, int* y) { } SYMBOL_EXPORT ALLEGRO_BITMAP* GetFramebuffer(struct Game* game) { + if (game->_priv.loading.inProgress) { + return al_get_backbuffer(game->display); + } return game->_priv.current_gamestate->fb; } SYMBOL_EXPORT void SetFramebufferAsTarget(struct Game* game) { - al_set_target_bitmap(GetFramebuffer(game)); - double x = al_get_bitmap_width(GetFramebuffer(game)) / (double)game->viewport.width; - double y = al_get_bitmap_height(GetFramebuffer(game)) / (double)game->viewport.height; - ALLEGRO_TRANSFORM t; - al_identity_transform(&t); - al_scale_transform(&t, x, y); - al_use_transform(&t); + ALLEGRO_BITMAP* framebuffer = GetFramebuffer(game); + al_set_target_bitmap(framebuffer); + if (framebuffer != al_get_backbuffer(game->display)) { + double x = al_get_bitmap_width(framebuffer) / (double)game->viewport.width; + double y = al_get_bitmap_height(framebuffer) / (double)game->viewport.height; + ALLEGRO_TRANSFORM t; + al_identity_transform(&t); + al_scale_transform(&t, x, y); + al_use_transform(&t); + } } SYMBOL_EXPORT ALLEGRO_BITMAP* CreateNotPreservedBitmap(int width, int height) {