gamestate: add optional PostLoad hook for stuff that needs to be done on GPU thread

This commit is contained in:
Sebastian Krzyszkowiak 2018-07-05 20:55:32 +02:00
parent a314ad2d6d
commit 521e6bf431
4 changed files with 8 additions and 0 deletions

View file

@ -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);

View file

@ -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");

View file

@ -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);

View file

@ -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);