From 521e6bf431b491f783ebe06230b269488c603a05 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Thu, 5 Jul 2018 20:55:32 +0200 Subject: [PATCH] gamestate: add optional PostLoad hook for stuff that needs to be done on GPU thread --- src/gamestate.h | 1 + src/internal.c | 1 + src/libsuperderpy.c | 5 +++++ src/libsuperderpy.h | 1 + 4 files changed, 8 insertions(+) diff --git a/src/gamestate.h b/src/gamestate.h index 85b5a62..b2e185f 100644 --- a/src/gamestate.h +++ b/src/gamestate.h @@ -28,6 +28,7 @@ struct Gamestate_API { void (*Gamestate_Logic)(struct Game* game, void* data, double delta); void* (*Gamestate_Load)(struct Game* game, void (*progress)(struct Game* game)); + void (*Gamestate_PostLoad)(struct Game* game, void* data); void (*Gamestate_Start)(struct Game* game, void* data); void (*Gamestate_Pause)(struct Game* game, void* data); void (*Gamestate_Resume)(struct Game* game, void* data); diff --git a/src/internal.c b/src/internal.c index 4c8a89f..491f37e 100644 --- a/src/internal.c +++ b/src/internal.c @@ -319,6 +319,7 @@ SYMBOL_INTERNAL bool LinkGamestate(struct Game* game, struct Gamestate* gamestat if (!(gamestate->api->Gamestate_ProcessEvent = dlsym(gamestate->handle, "Gamestate_ProcessEvent"))) { GS_ERROR; } // optional + gamestate->api->Gamestate_PostLoad = dlsym(gamestate->handle, "Gamestate_PostLoad"); gamestate->api->Gamestate_Pause = dlsym(gamestate->handle, "Gamestate_Pause"); gamestate->api->Gamestate_Resume = dlsym(gamestate->handle, "Gamestate_Resume"); gamestate->api->Gamestate_Reload = dlsym(gamestate->handle, "Gamestate_Reload"); diff --git a/src/libsuperderpy.c b/src/libsuperderpy.c index fdc8f9f..c5091dd 100644 --- a/src/libsuperderpy.c +++ b/src/libsuperderpy.c @@ -444,6 +444,11 @@ SYMBOL_INTERNAL void libsuperderpy_mainloop(void* g) { al_set_new_bitmap_flags(data.bitmap_flags); + if (tmp->api->Gamestate_PostLoad) { + PrintConsole(game, "[%s] Post-loading...", tmp->name); + tmp->api->Gamestate_PostLoad(game, tmp->data); + } + game->_priv.loading.progress++; CalculateProgress(game); PrintConsole(game, "Gamestate \"%s\" loaded successfully.", tmp->name); diff --git a/src/libsuperderpy.h b/src/libsuperderpy.h index 9b2f873..95d51bd 100644 --- a/src/libsuperderpy.h +++ b/src/libsuperderpy.h @@ -184,6 +184,7 @@ void Gamestate_ProcessEvent(struct Game* game, struct GamestateResources* data, void Gamestate_Logic(struct Game* game, struct GamestateResources* data, double delta); void Gamestate_Draw(struct Game* game, struct GamestateResources* data); void* Gamestate_Load(struct Game* game, void (*progress)(struct Game*)); +void Gamestate_PostLoad(struct Game* game, struct GamestateResources* data); void Gamestate_Unload(struct Game* game, struct GamestateResources* data); void Gamestate_Start(struct Game* game, struct GamestateResources* data); void Gamestate_Stop(struct Game* game, struct GamestateResources* data);