#ifndef TWN_ENGINE_CONTEXT_C_H #define TWN_ENGINE_CONTEXT_C_H #include "twn_context.h" #include "twn_textures_c.h" #include "twn_audio_c.h" #include "twn_engine_api.h" #include "rendering/twn_rendering_c.h" #include #include #include #include typedef struct EngineContext { /* user code facing context */ Context game; /* the program's actual argc and argv */ int argc; char **argv; /* configuration */ toml_table_t *config_table; int64_t base_render_width; int64_t base_render_height; int64_t ticks_per_second; int64_t keybind_slots; int64_t texture_atlas_size; int64_t font_texture_size; int64_t font_oversampling; TextureFilter font_filtering; /* rendering */ Primitive2D *render_queue_2d; MeshBatchItem *uncolored_mesh_batches; TextCache text_cache; TextureCache texture_cache; /* audio */ AudioChannelItem *audio_channels; SDL_AudioDeviceID audio_device; int audio_stream_frequency; SDL_AudioFormat audio_stream_format; uint8_t audio_stream_channel_count; /* main loop machinery */ int64_t clocks_per_second; int64_t prev_frame_time; int64_t desired_frametime; /* how long one tick should be */ int64_t frame_accumulator; int64_t delta_averager_residual; int64_t time_averager[4]; SDL_GLContext *gl_context; SDL_Window *window; uint32_t window_id; bool resync_flag; bool was_successful; } EngineContext; TWN_API extern EngineContext ctx; #endif