townengine/src/twn_engine_context_c.h
2024-10-01 12:48:42 +03:00

68 lines
1.5 KiB
C

#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 <SDL2/SDL.h>
#include <toml.h>
#include <stdbool.h>
#include <stdint.h>
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