From 3cd5b0bcca694630fcb4b977ddf7be7cd1bce153 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 20 Jan 2024 15:54:54 -0800 Subject: Rename gltfview -> game. --- game/src/plugins/plugin.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 game/src/plugins/plugin.h (limited to 'game/src/plugins/plugin.h') diff --git a/game/src/plugins/plugin.h b/game/src/plugins/plugin.h new file mode 100644 index 0000000..a2632cd --- /dev/null +++ b/game/src/plugins/plugin.h @@ -0,0 +1,52 @@ +/* + * Game plugin. + */ +#pragma once + +#include "../game.h" + +#include +#include + +#include + +typedef struct State State; + +/// Initialize the plugin, which may optionally return a state object. +/// +/// This function is called every time the plugin is (re)loaded. +/// +/// It is assumed that the plugin's state is fully encapsulated in the returned +/// state object. The plugin should not store any (mutable) state outside of the +/// returned state object (e.g., no mutable global variables.) +bool init(Game*, State**); + +/// Shut down the plugin. +/// +/// This function is called before the plugin is unloaded. +/// +/// The plugin should perform any destruction needed, but not free the state +/// object; freeing the state object's memory is handled by the caller. +void shutdown(Game*, State*); + +/// Function called the first time the plugin is loaded throughout the +/// application's lifetime. This allows the plugin to do one-time initialization +/// of the game state. +bool boot(Game*, State*); + +/// Update the plugin's and the game's state. +void update(Game*, State*, double t, double dt); + +/// Render hook. +void render(const Game*, const State*); + +/// Called when the game's window is resized. +void resize(Game* game, State* state, int width, int height); + +// Signatures for the plugin's exposed functions. +typedef bool (*plugin_init)(Game*, State**); +typedef bool (*plugin_shutdown)(Game*, State*); +typedef bool (*plugin_boot)(Game*, State*); +typedef void (*plugin_update)(Game*, State*, double t, double dt); +typedef void (*plugin_render)(const Game*, const State*); +typedef void (*plugin_resize)(Game* game, State* state, int width, int height); -- cgit v1.2.3