mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-07 21:56:44 +01:00
gamestate: Add Gamestate_PreDraw call
Meant to be used to draw into auxiliary bitmaps. Separating it from Gamestate_Draw allows for better render target scheduling.
This commit is contained in:
parent
b806f1b596
commit
1e09583c7e
3 changed files with 22 additions and 3 deletions
|
@ -26,7 +26,7 @@ struct GamestateAPI {
|
||||||
void (*draw)(struct Game* game, void* data);
|
void (*draw)(struct Game* game, void* data);
|
||||||
void (*logic)(struct Game* game, void* data, double delta);
|
void (*logic)(struct Game* game, void* data, double delta);
|
||||||
void (*tick)(struct Game* game, void* data);
|
void (*tick)(struct Game* game, void* data);
|
||||||
|
void (*predraw)(struct Game* game, void* data);
|
||||||
void* (*load)(struct Game* game, void (*progress)(struct Game* game));
|
void* (*load)(struct Game* game, void (*progress)(struct Game* game));
|
||||||
void (*post_load)(struct Game* game, void* data);
|
void (*post_load)(struct Game* game, void* data);
|
||||||
void (*start)(struct Game* game, void* data);
|
void (*start)(struct Game* game, void* data);
|
||||||
|
@ -34,7 +34,6 @@ struct GamestateAPI {
|
||||||
void (*resume)(struct Game* game, void* data);
|
void (*resume)(struct Game* game, void* data);
|
||||||
void (*stop)(struct Game* game, void* data);
|
void (*stop)(struct Game* game, void* data);
|
||||||
void (*unload)(struct Game* game, void* data);
|
void (*unload)(struct Game* game, void* data);
|
||||||
|
|
||||||
void (*process_event)(struct Game* game, void* data, ALLEGRO_EVENT* ev);
|
void (*process_event)(struct Game* game, void* data, ALLEGRO_EVENT* ev);
|
||||||
void (*reload)(struct Game* game, void* data);
|
void (*reload)(struct Game* game, void* data);
|
||||||
|
|
||||||
|
@ -77,6 +76,7 @@ bool IsGamestateVisible(struct Game* game, struct Gamestate* gamestate);
|
||||||
#define Gamestate_Draw GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Draw)
|
#define Gamestate_Draw GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Draw)
|
||||||
#define Gamestate_Logic GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Logic)
|
#define Gamestate_Logic GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Logic)
|
||||||
#define Gamestate_Tick GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Tick)
|
#define Gamestate_Tick GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Tick)
|
||||||
|
#define Gamestate_PreDraw GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_PreDraw)
|
||||||
#define Gamestate_Load GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Load)
|
#define Gamestate_Load GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Load)
|
||||||
#define Gamestate_PostLoad GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_PostLoad)
|
#define Gamestate_PostLoad GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_PostLoad)
|
||||||
#define Gamestate_Start GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Start)
|
#define Gamestate_Start GAMESTATE_CONCAT(LIBSUPERDERPY_GAMESTATE, _Gamestate_Start)
|
||||||
|
@ -93,6 +93,7 @@ extern int Gamestate_ProgressCount;
|
||||||
__attribute__((used)) void Gamestate_Draw(struct Game* game, struct GamestateResources* data);
|
__attribute__((used)) void Gamestate_Draw(struct Game* game, struct GamestateResources* data);
|
||||||
__attribute__((used)) void Gamestate_Logic(struct Game* game, struct GamestateResources* data, double delta);
|
__attribute__((used)) void Gamestate_Logic(struct Game* game, struct GamestateResources* data, double delta);
|
||||||
__attribute__((used)) void Gamestate_Tick(struct Game* game, struct GamestateResources* data);
|
__attribute__((used)) void Gamestate_Tick(struct Game* game, struct GamestateResources* data);
|
||||||
|
__attribute__((used)) void Gamestate_PreDraw(struct Game* game, struct GamestateResources* data);
|
||||||
__attribute__((used)) void* Gamestate_Load(struct Game* game, void (*progress)(struct Game*));
|
__attribute__((used)) void* Gamestate_Load(struct Game* game, void (*progress)(struct Game*));
|
||||||
__attribute__((used)) void Gamestate_PostLoad(struct Game* game, struct GamestateResources* data);
|
__attribute__((used)) void Gamestate_PostLoad(struct Game* game, struct GamestateResources* data);
|
||||||
__attribute__((used)) void Gamestate_Start(struct Game* game, struct GamestateResources* data);
|
__attribute__((used)) void Gamestate_Start(struct Game* game, struct GamestateResources* data);
|
||||||
|
@ -117,6 +118,7 @@ void GAMESTATE_INIT_NAME(LIBSUPERDERPY_GAMESTATE)(void) {
|
||||||
.draw = (void*)Gamestate_Draw,
|
.draw = (void*)Gamestate_Draw,
|
||||||
.logic = (void*)Gamestate_Logic,
|
.logic = (void*)Gamestate_Logic,
|
||||||
.tick = (void*)Gamestate_Tick,
|
.tick = (void*)Gamestate_Tick,
|
||||||
|
.predraw = (void*)Gamestate_PreDraw,
|
||||||
.load = (void*)Gamestate_Load,
|
.load = (void*)Gamestate_Load,
|
||||||
.post_load = (void*)Gamestate_PostLoad,
|
.post_load = (void*)Gamestate_PostLoad,
|
||||||
.start = (void*)Gamestate_Start,
|
.start = (void*)Gamestate_Start,
|
||||||
|
|
|
@ -24,11 +24,13 @@ __attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_PostLoad)();
|
||||||
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_Pause)(); \
|
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_Pause)(); \
|
||||||
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_Resume)(); \
|
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_Resume)(); \
|
||||||
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_Reload)(); \
|
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_Reload)(); \
|
||||||
|
__attribute__((used)) void GAMESTATES_STUB_CONCAT(name, _Gamestate_PreDraw)(); \
|
||||||
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Tick)() {} \
|
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Tick)() {} \
|
||||||
void GAMESTATES_STUB_CONCAT(name, _Gamestate_PostLoad)() {} \
|
void GAMESTATES_STUB_CONCAT(name, _Gamestate_PostLoad)() {} \
|
||||||
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Pause)() {} \
|
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Pause)() {} \
|
||||||
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Resume)() {} \
|
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Resume)() {} \
|
||||||
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Reload)() {}
|
void GAMESTATES_STUB_CONCAT(name, _Gamestate_Reload)() {}
|
||||||
|
void GAMESTATES_STUB_CONCAT(name, _Gamestate_PreDraw)() {}
|
||||||
|
|
||||||
|
|
||||||
${LIBSUPERDERPY_GAMESTATES_STUB}
|
${LIBSUPERDERPY_GAMESTATES_STUB}
|
||||||
|
|
|
@ -46,13 +46,27 @@ SYMBOL_INTERNAL void SimpleCompositor(struct Game* game) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SYMBOL_INTERNAL void DrawGamestates(struct Game* game) {
|
SYMBOL_INTERNAL void DrawGamestates(struct Game* game) {
|
||||||
|
struct Gamestate* tmp = game->_priv.gamestates;
|
||||||
|
while (tmp) {
|
||||||
|
if (tmp->loaded && tmp->started && tmp->api->predraw) {
|
||||||
|
game->_priv.current_gamestate = tmp;
|
||||||
|
tmp->api->predraw(game, tmp->data);
|
||||||
|
}
|
||||||
|
tmp = tmp->next;
|
||||||
|
}
|
||||||
|
if (game->loading.shown && game->_priv.loading.gamestate->api->predraw) {
|
||||||
|
game->_priv.loading.gamestate->api->predraw(game, game->_priv.loading.gamestate->data);
|
||||||
|
}
|
||||||
|
|
||||||
if (!game->_priv.params.disable_bg_clear && !game->_priv.params.handlers.compositor) {
|
if (!game->_priv.params.disable_bg_clear && !game->_priv.params.handlers.compositor) {
|
||||||
ClearScreen(game);
|
ClearScreen(game);
|
||||||
}
|
}
|
||||||
struct Gamestate* tmp = game->_priv.gamestates;
|
|
||||||
if (game->_priv.params.handlers.predraw) {
|
if (game->_priv.params.handlers.predraw) {
|
||||||
game->_priv.params.handlers.predraw(game);
|
game->_priv.params.handlers.predraw(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmp = game->_priv.gamestates;
|
||||||
while (tmp) {
|
while (tmp) {
|
||||||
if ((tmp->loaded) && (tmp->started)) {
|
if ((tmp->loaded) && (tmp->started)) {
|
||||||
game->_priv.current_gamestate = tmp;
|
game->_priv.current_gamestate = tmp;
|
||||||
|
@ -405,6 +419,7 @@ SYMBOL_INTERNAL bool LinkGamestate(struct Game* game, struct Gamestate* gamestat
|
||||||
if (!(gamestate->api->process_event = dlsym(gamestate->handle, "Gamestate_ProcessEvent"))) { GS_ERROR; }
|
if (!(gamestate->api->process_event = dlsym(gamestate->handle, "Gamestate_ProcessEvent"))) { GS_ERROR; }
|
||||||
|
|
||||||
// optional
|
// optional
|
||||||
|
gamestate->api->predraw = dlsym(gamestate->handle, "Gamestate_PreDraw");
|
||||||
gamestate->api->tick = dlsym(gamestate->handle, "Gamestate_Tick");
|
gamestate->api->tick = dlsym(gamestate->handle, "Gamestate_Tick");
|
||||||
gamestate->api->post_load = dlsym(gamestate->handle, "Gamestate_PostLoad");
|
gamestate->api->post_load = dlsym(gamestate->handle, "Gamestate_PostLoad");
|
||||||
gamestate->api->pause = dlsym(gamestate->handle, "Gamestate_Pause");
|
gamestate->api->pause = dlsym(gamestate->handle, "Gamestate_Pause");
|
||||||
|
|
Loading…
Reference in a new issue