2023-09-23 18:03:33 -07:00
|
|
|
/*
|
|
|
|
This represents the API only accessible to the platform layer to fullfill for the engine layer.
|
|
|
|
*/
|
|
|
|
#pragma once
|
2023-09-26 14:26:35 -07:00
|
|
|
#include "engine/engine.hpp"
|
|
|
|
|
|
|
|
#ifndef Engine_API
|
|
|
|
# define Engine_API
|
|
|
|
#endif
|
2023-09-23 18:03:33 -07:00
|
|
|
|
|
|
|
NS_ENGINE_BEGIN
|
|
|
|
|
2023-09-26 14:26:35 -07:00
|
|
|
using OnModuleRelaodFn = void( Memory* memory, platform::ModuleAPI* platform_api );
|
|
|
|
using StartupFn = void( Memory* memory, platform::ModuleAPI* platform_api );
|
|
|
|
using ShutdownFn = void( Memory* memory, platform::ModuleAPI* platform_api );
|
2023-09-23 18:03:33 -07:00
|
|
|
|
|
|
|
// Needs a contextual reference to four things:
|
2023-09-24 19:37:05 -07:00
|
|
|
// Timing, Input, Bitmap Buffer
|
2023-09-26 14:26:35 -07:00
|
|
|
using UpdateAndRenderFn = void ( InputState* input, OffscreenBuffer* back_buffer, Memory* memory, platform::ModuleAPI* platform_api );
|
2023-09-24 19:37:05 -07:00
|
|
|
|
|
|
|
// Audio timing is complicated, processing samples must be done at a different period from the rest of the engine's usual update.
|
|
|
|
// IMPORTANT: This has very tight timing, and cannot be more than a millisecond in execution.
|
|
|
|
// TODO(Ed) : Reduce timing pressure on performance by measuring it or pinging its time.
|
2023-09-26 14:26:35 -07:00
|
|
|
using UpdateAudioFn = void ( AudioBuffer* audio_buffer, Memory* memory, platform::ModuleAPI* platform_api );
|
|
|
|
|
|
|
|
struct ModuleAPI
|
|
|
|
{
|
|
|
|
enum : u32
|
|
|
|
{
|
|
|
|
Sym_OnModuleReload,
|
|
|
|
Sym_Startup,
|
|
|
|
Sym_Shutdown,
|
|
|
|
Sym_UpdateAndRender,
|
|
|
|
Sym_UpdateAudio,
|
|
|
|
};
|
|
|
|
|
|
|
|
OnModuleRelaodFn* on_module_reload;
|
|
|
|
StartupFn* startup;
|
|
|
|
ShutdownFn* shutdown;
|
|
|
|
|
|
|
|
UpdateAndRenderFn* update_and_render;
|
|
|
|
UpdateAudioFn* update_audio;
|
|
|
|
|
|
|
|
b32 IsValid;
|
|
|
|
char _PAD_[4];
|
|
|
|
};
|
2023-09-23 18:03:33 -07:00
|
|
|
|
|
|
|
NS_ENGINE_END
|