HandmadeHero/project/platform/platform_engine_api.hpp

49 lines
1.4 KiB
C++
Raw Normal View History

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