diff options
| author | 3gg <3gg@shellblade.net> | 2024-01-19 07:21:45 -0800 |
|---|---|---|
| committer | 3gg <3gg@shellblade.net> | 2024-01-19 07:21:45 -0800 |
| commit | 4212e57d06afac8a19b09fdebc24bad10b78f1ac (patch) | |
| tree | 322b2e5cc2764ebd1855565bb8d871d9df33d704 /gltfview/src/plugins/plugin.h | |
| parent | fc883e0b0449509ba2e1c5d14d187feee098ab34 (diff) | |
Plugin refactor, moving scene from game to plugin.
Diffstat (limited to 'gltfview/src/plugins/plugin.h')
| -rw-r--r-- | gltfview/src/plugins/plugin.h | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/gltfview/src/plugins/plugin.h b/gltfview/src/plugins/plugin.h index 0e0e12c..a2632cd 100644 --- a/gltfview/src/plugins/plugin.h +++ b/gltfview/src/plugins/plugin.h | |||
| @@ -1,21 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Game plugin. | 2 | * Game plugin. |
| 3 | * | ||
| 4 | * A game plugin exposes three functions: | ||
| 5 | * - boot(): called once when the plugin is first loaded during the lifetime of | ||
| 6 | * the game. | ||
| 7 | * - init() -> state: creates and returns the plugin's state. | ||
| 8 | * - update(state): takes and updates the state, possibly with side effects. | ||
| 9 | * - render(): performs custom rendering. | ||
| 10 | * | ||
| 11 | * boot() is convenient for one-time initialization of the scene. | ||
| 12 | * | ||
| 13 | * init() is called every time the plugin is loaded. It is assumed that the | ||
| 14 | * plugin's state is encapsulated in the object returned. | ||
| 15 | * | ||
| 16 | * update() updates the plugin state and has side effects on the scene. It is | ||
| 17 | * assumed that update does not reference any global, mutable state outside of | ||
| 18 | * the scene and the plugin state returned by init(). | ||
| 19 | */ | 3 | */ |
| 20 | #pragma once | 4 | #pragma once |
| 21 | 5 | ||
| @@ -28,22 +12,41 @@ | |||
| 28 | 12 | ||
| 29 | typedef struct State State; | 13 | typedef struct State State; |
| 30 | 14 | ||
| 31 | /// Initialize the plugin's state. | 15 | /// Initialize the plugin, which may optionally return a state object. |
| 32 | State* init(Game*); | 16 | /// |
| 17 | /// This function is called every time the plugin is (re)loaded. | ||
| 18 | /// | ||
| 19 | /// It is assumed that the plugin's state is fully encapsulated in the returned | ||
| 20 | /// state object. The plugin should not store any (mutable) state outside of the | ||
| 21 | /// returned state object (e.g., no mutable global variables.) | ||
| 22 | bool init(Game*, State**); | ||
| 23 | |||
| 24 | /// Shut down the plugin. | ||
| 25 | /// | ||
| 26 | /// This function is called before the plugin is unloaded. | ||
| 27 | /// | ||
| 28 | /// The plugin should perform any destruction needed, but not free the state | ||
| 29 | /// object; freeing the state object's memory is handled by the caller. | ||
| 30 | void shutdown(Game*, State*); | ||
| 33 | 31 | ||
| 34 | /// Function called the first time the plugin is loaded throughout the | 32 | /// Function called the first time the plugin is loaded throughout the |
| 35 | /// application's lifetime. Allows the plugin to do one-time initialization of | 33 | /// application's lifetime. This allows the plugin to do one-time initialization |
| 36 | /// the game state. | 34 | /// of the game state. |
| 37 | bool boot(State*, Game*); | 35 | bool boot(Game*, State*); |
| 38 | 36 | ||
| 39 | /// Update the plugin's and the game's state. | 37 | /// Update the plugin's and the game's state. |
| 40 | void update(State*, Game*, double t, double dt); | 38 | void update(Game*, State*, double t, double dt); |
| 41 | 39 | ||
| 42 | /// Optional plugin rendering hook. | 40 | /// Render hook. |
| 43 | void render(State*, const Game*); | 41 | void render(const Game*, const State*); |
| 42 | |||
| 43 | /// Called when the game's window is resized. | ||
| 44 | void resize(Game* game, State* state, int width, int height); | ||
| 44 | 45 | ||
| 45 | // Signatures for the plugin's exposed functions. | 46 | // Signatures for the plugin's exposed functions. |
| 46 | typedef void* (*plugin_init)(Game*); | 47 | typedef bool (*plugin_init)(Game*, State**); |
| 47 | typedef bool (*plugin_boot)(State*, Game*); | 48 | typedef bool (*plugin_shutdown)(Game*, State*); |
| 48 | typedef void (*plugin_update)(State*, Game*, double t, double dt); | 49 | typedef bool (*plugin_boot)(Game*, State*); |
| 49 | typedef void (*plugin_render)(State*, const Game*); | 50 | typedef void (*plugin_update)(Game*, State*, double t, double dt); |
| 51 | typedef void (*plugin_render)(const Game*, const State*); | ||
| 52 | typedef void (*plugin_resize)(Game* game, State* state, int width, int height); | ||
