Kohi Game Engine
platform.h
Go to the documentation of this file.
1 
14 #pragma once
15 
16 #include "defines.h"
17 #include "input_types.h"
18 #include "logger.h"
19 
21 
22 typedef struct platform_system_config {
24  const char* application_name;
26 
27 typedef struct dynamic_library_function {
28  const char* name;
29  void* pfn;
31 
32 typedef struct dynamic_library {
33  const char* name;
34  const char* filename;
38 
39  // darray
42 
43 typedef enum platform_error_code {
50 
51 struct platform_state;
52 
56 typedef struct kwindow_config {
61  const char* title;
62  const char* name;
64 
65 struct kwindow_platform_state;
67 
71 typedef struct kwindow {
73  const char* name;
75  const char* title;
76 
81 
87 
92 
94  struct kwindow_platform_state* platform_state;
95 
99 
100 typedef enum ksystem_info_flags {
106 
108 
109 typedef enum kcpu_feature_flags {
121 
123 
124 #define KMAX_STORAGE_DEVICES 32
125 #define KMAX_PATH_LEN 256
126 
127 typedef enum kdrive_type {
136 
138  switch (type) {
139  default:
140  case KDRIVE_TYPE_UNKNOWN:
142  return "KDRIVE_TYPE_UNKNOWN";
144  return "KDRIVE_TYPE_REMOVABLE";
145  case KDRIVE_TYPE_FIXED:
146  return "KDRIVE_TYPE_FIXED";
147  case KDRIVE_TYPE_REMOTE:
148  return "KDRIVE_TYPE_REMOTE";
149  case KDRIVE_TYPE_CDROM:
150  return "KDRIVE_TYPE_CDROM";
151  case KDRIVE_TYPE_RAMDISK:
152  return "KDRIVE_TYPE_RAMDISK";
153  }
154 }
155 
156 typedef struct kstorage_info {
164 
165 typedef struct ksystem_info {
166  char cpu_name[128];
170  char cpu_arch[10];
171 
174  u32 ram_speed_mhz; // 0 if unknown
175 
176  char os_name[64];
177  char os_version[64];
178  char os_build[64];
179  char kernel_version[256];
180  char distro[64]; // linux only
181 
183 
185 
189 
195 
196 typedef struct kclipboard_context {
200  const void* content;
202 
203 typedef void (*platform_filewatcher_file_deleted_callback)(u32 watcher_id, void* context);
204 typedef void (*platform_filewatcher_file_written_callback)(u32 watcher_id, const char* file_path, b8 is_binary, void* context);
205 typedef void (*platform_window_closed_callback)(const struct kwindow* window);
206 typedef void (*platform_window_resized_callback)(const struct kwindow* window);
207 typedef void (*platform_process_key)(keys key, b8 pressed, b8 is_repeat);
208 typedef void (*platform_process_mouse_button)(mouse_buttons button, b8 pressed);
209 typedef void (*platform_process_mouse_move)(i16 x, i16 y);
210 typedef void (*platform_process_mouse_wheel)(i8 z_delta);
212 
223 KAPI b8 platform_system_startup(u64* memory_requirement, struct platform_state* state, platform_system_config* config);
224 
231 
240 KAPI b8 platform_window_create(const kwindow_config* config, struct kwindow* window, b8 show_immediately);
241 
247 KAPI void platform_window_destroy(struct kwindow* window);
248 
256 
265 
273 KAPI const char* platform_window_title_get(const struct kwindow* window);
274 
282 KAPI b8 platform_window_title_set(struct kwindow* window, const char* title);
283 
291 
299 KAPI void* platform_allocate(u64 size, b8 aligned);
300 
307 KAPI void platform_free(void* block, b8 aligned);
308 
316 KAPI void* platform_zero_memory(void* block, u64 size);
317 
326 KAPI void* platform_copy_memory(void* dest, const void* source, u64 size);
327 
336 KAPI void* platform_set_memory(void* dest, i32 value, u64 size);
337 
346 KAPI void platform_console_write(struct platform_state* platform, log_level level, const char* message);
347 
354 
363 
370 
379 KAPI void platform_get_handle_info(u64* out_size, void* memory);
380 
387 
396 
404 
413 
418 
423 
432 KAPI platform_error_code platform_copy_file(const char* source, const char* dest, b8 overwrite_if_exists);
433 
440 
447 
455 
462 
469 
476 
483 
497  const char* file_path,
498  b8 is_binary,
499  platform_filewatcher_file_written_callback watcher_written_callback,
500  void* watcher_written_context,
501  platform_filewatcher_file_deleted_callback watcher_deleted_callback,
502  void* watcher_deleted_context,
503  u32* out_watch_id);
511 
516 
518 
519 // Used for pasting into the application.
521 
522 // Used for copying from the application.
523 KAPI void platform_clipboard_content_set(kwindow* window, kclipboard_content_type type, u32 size, void* content);
This file contains global type definitions which are used throughout the entire engine and applicatio...
#define KAPI
Import/export qualifier.
Definition: defines.h:209
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:27
signed char i8
Signed 8-bit integer.
Definition: defines.h:35
_Bool b8
8-bit boolean type
Definition: defines.h:60
float f32
32-bit floating point number
Definition: defines.h:49
double f64
64-bit floating point number
Definition: defines.h:52
signed int i32
Signed 32-bit integer.
Definition: defines.h:41
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:24
#define KINLINE
Inline qualifier.
Definition: defines.h:256
signed short i16
Signed 16-bit integer.
Definition: defines.h:38
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
keys
Represents available keyboard keys.
Definition: input_types.h:21
mouse_buttons
Represents available mouse buttons.
Definition: input_types.h:8
This file contains structures and logic pertaining to the logging system.
log_level
Represents levels of logging.
Definition: logger.h:33
KAPI i32 platform_get_processor_count(void)
Obtains the number of logical processor cores.
KAPI void platform_window_destroy(struct kwindow *window)
Destroys the given window.
void(* platform_process_mouse_wheel)(i8 z_delta)
Definition: platform.h:210
KAPI void platform_system_shutdown(struct platform_state *state)
Shuts down the platform layer.
u64 kunix_time_ns
Definition: platform.h:20
void(* platform_filewatcher_file_deleted_callback)(u32 watcher_id, void *context)
Definition: platform.h:203
KAPI kunix_time_ns platform_get_file_mtime(const char *path)
Returns the last-modified timestamp in unix time, or 0 if the file is not found.
KAPI b8 platform_window_create(const kwindow_config *config, struct kwindow *window, b8 show_immediately)
Creates a new window from the given config and optionally opens it immediately.
KAPI void platform_console_write(struct platform_state *platform, log_level level, const char *message)
Performs platform-specific printing to the console of the given message and log level.
KAPI b8 platform_window_show(struct kwindow *window)
Shows the given window. Has no effect if the window is already shown.
KAPI b8 platform_window_title_set(struct kwindow *window, const char *title)
Sets the given window's title, if it exists.
kdrive_type
Definition: platform.h:127
@ KDRIVE_TYPE_RAMDISK
Definition: platform.h:134
@ KDRIVE_TYPE_NO_ROOT_DIR
Definition: platform.h:129
@ KDRIVE_TYPE_FIXED
Definition: platform.h:131
@ KDRIVE_TYPE_REMOVABLE
Definition: platform.h:130
@ KDRIVE_TYPE_CDROM
Definition: platform.h:133
@ KDRIVE_TYPE_UNKNOWN
Definition: platform.h:128
@ KDRIVE_TYPE_REMOTE
Definition: platform.h:132
KINLINE const char * kdrive_type_to_string(kdrive_type type)
Definition: platform.h:137
KAPI f64 platform_get_absolute_time(void)
Gets the absolute time since the application started.
KAPI void platform_clipboard_content_set(kwindow *window, kclipboard_content_type type, u32 size, void *content)
ksystem_info_flags
Definition: platform.h:100
@ KSYSTEM_INFO_FLAGS_IS_VITRUALIZED_BIT
Definition: platform.h:103
@ KSYSTEM_INFO_FLAGS_IS_64_BIT_BIT
Definition: platform.h:102
@ KSYSTEM_INFO_FLAGS_NONE
Definition: platform.h:101
@ KSYSTEM_INFO_FLAGS_DEBUGGER_ATTACHED_BIT
Definition: platform.h:104
kclipboard_content_type
Definition: platform.h:190
@ KCLIPBOARD_CONTENT_TYPE_STRING
Definition: platform.h:191
@ KCLIPBOARD_CONTENT_TYPE_IMAGE
Definition: platform.h:192
@ KCLIPBOARD_CONTENT_TYPE_BINARY
Definition: platform.h:193
KAPI void platform_register_process_mouse_wheel_callback(platform_process_mouse_wheel callback)
Registers the system-level handler for a mouse wheel being scrolled.
KAPI const char * platform_window_title_get(const struct kwindow *window)
Obtains the window title from the given window, if it exists. NOTE: Returns a constant copy of the st...
KAPI b8 platform_system_startup(u64 *memory_requirement, struct platform_state *state, platform_system_config *config)
Performs startup routines within the platform layer. Should be called twice, once to obtain the memor...
struct dynamic_library_function dynamic_library_function
u32 kcpu_feature_flag_bits
Definition: platform.h:122
struct dynamic_library dynamic_library
KAPI void platform_register_window_closed_callback(platform_window_closed_callback callback)
Registers the system-level handler for a window being closed.
KAPI void platform_register_process_mouse_move_callback(platform_process_mouse_move callback)
Registers the system-level handler for a mouse being moved.
#define KMAX_STORAGE_DEVICES
Definition: platform.h:124
platform_error_code
Definition: platform.h:43
@ PLATFORM_ERROR_SUCCESS
Definition: platform.h:44
@ PLATFORM_ERROR_FILE_EXISTS
Definition: platform.h:48
@ PLATFORM_ERROR_UNKNOWN
Definition: platform.h:45
@ PLATFORM_ERROR_FILE_LOCKED
Definition: platform.h:47
@ PLATFORM_ERROR_FILE_NOT_FOUND
Definition: platform.h:46
u32 ksystem_info_flag_bits
Definition: platform.h:107
struct platform_system_config platform_system_config
KAPI platform_error_code platform_copy_file(const char *source, const char *dest, b8 overwrite_if_exists)
Copies file at source to destination, optionally overwriting.
struct kclipboard_context kclipboard_context
KAPI void platform_register_window_resized_callback(platform_window_resized_callback callback)
Registers the system-level handler for a window being resized.
struct kstorage_info kstorage_info
KAPI void platform_request_clipboard_content(kwindow *window)
void(* platform_process_mouse_button)(mouse_buttons button, b8 pressed)
Definition: platform.h:208
KAPI void * platform_zero_memory(void *block, u64 size)
Performs platform-specific zeroing out of the given block of memory.
void(* platform_window_closed_callback)(const struct kwindow *window)
Definition: platform.h:205
KAPI void platform_sleep(u64 ms)
Sleep on the thread for the provided milliseconds. This blocks the main thread. Should only be used f...
KAPI void * platform_allocate(u64 size, b8 aligned)
Performs platform-specific memory allocation of the given size.
kcpu_feature_flags
Definition: platform.h:109
@ KCPU_FEATURE_FLAG_SSE3_BIT
Definition: platform.h:113
@ KCPU_FEATURE_FLAG_SSSE3_BIT
Definition: platform.h:114
@ KCPU_FEATURE_FLAG_AVX_BIT
Definition: platform.h:117
@ KCPU_FEATURE_FLAG_SSE_BIT
Definition: platform.h:111
@ KCPU_FEATURE_FLAG_SSE42_BIT
Definition: platform.h:116
@ KCPU_FEATURE_FLAG_NEON_BIT
Definition: platform.h:119
@ KCPU_FEATURE_FLAGS_NONE
Definition: platform.h:110
@ KCPU_FEATURE_FLAG_SSE41_BIT
Definition: platform.h:115
@ KCPU_FEATURE_FLAG_AVX2_BIT
Definition: platform.h:118
@ KCPU_FEATURE_FLAG_SSE2_BIT
Definition: platform.h:112
KAPI b8 platform_dynamic_library_load(const char *name, dynamic_library *out_library)
Loads a dynamic library.
void(* platform_window_resized_callback)(const struct kwindow *window)
Definition: platform.h:206
KAPI const char * platform_dynamic_library_extension(void)
Returns the file extension for the current platform.
KAPI void platform_register_process_key(platform_process_key callback)
Registers the system-level handler for a keyboard key being pressed.
KAPI void * platform_dynamic_library_load_function(const char *name, dynamic_library *library)
Loads an exported function of the given name from the provided loaded library.
KAPI b8 platform_watch_file(const char *file_path, b8 is_binary, platform_filewatcher_file_written_callback watcher_written_callback, void *watcher_written_context, platform_filewatcher_file_deleted_callback watcher_deleted_callback, void *watcher_deleted_context, u32 *out_watch_id)
Watch a file at the given path.
struct ksystem_info ksystem_info
KAPI b8 platform_unwatch_file(u32 watch_id)
Stops watching the file with the given watch identifier.
KAPI void platform_register_clipboard_paste_callback(platform_clipboard_on_paste_callback callback)
Registers the system-level handler for content being ready to paste from the clipboard.
struct kwindow kwindow
Represents a window in the application.
#define KMAX_PATH_LEN
Definition: platform.h:125
KAPI b8 platform_system_info_collect(ksystem_info *out_info)
KAPI void * platform_set_memory(void *dest, i32 value, u64 size)
Sets the bytes of memory to the given value.
KAPI void platform_register_process_mouse_button_callback(platform_process_mouse_button callback)
Registers the system-level handler for a mouse button being pressed.
KAPI const char * platform_dynamic_library_prefix(void)
Returns a file prefix for libraries for the current platform.
KAPI b8 platform_pump_messages(void)
Performs any platform-specific message pumping that is required for windowing, etc.
void(* platform_filewatcher_file_written_callback)(u32 watcher_id, const char *file_path, b8 is_binary, void *context)
Definition: platform.h:204
KAPI void platform_get_handle_info(u64 *out_size, void *memory)
Obtains the required memory amount for platform-specific handle data, and optionally obtains a copy o...
void(* platform_process_mouse_move)(i16 x, i16 y)
Definition: platform.h:209
void(* platform_clipboard_on_paste_callback)(kclipboard_context context)
Definition: platform.h:211
KAPI b8 platform_dynamic_library_unload(dynamic_library *library)
Unloads the given dynamic library.
KAPI void * platform_copy_memory(void *dest, const void *source, u64 size)
Copies the bytes of memory in source to dest, of the given size.
KAPI b8 platform_window_hide(struct kwindow *window)
Hides the given window. Has no effect if the window is already hidden. Note that this does not destro...
KAPI void platform_free(void *block, b8 aligned)
Frees the given block of memory.
void(* platform_process_key)(keys key, b8 pressed, b8 is_repeat)
Definition: platform.h:207
struct kwindow_config kwindow_config
A configuration structure used to create new windows.
KAPI f32 platform_device_pixel_ratio(const struct kwindow *window)
Returns the device pixel ratio of the supplied window.
Definition: platform.h:27
void * pfn
Definition: platform.h:29
const char * name
Definition: platform.h:28
Definition: platform.h:32
dynamic_library_function * functions
Definition: platform.h:40
const char * filename
Definition: platform.h:34
const char * name
Definition: platform.h:33
void * internal_data
Definition: platform.h:36
u64 internal_data_size
Definition: platform.h:35
u32 watch_id
Definition: platform.h:37
Definition: platform.h:196
kwindow * requesting_window
Definition: platform.h:198
kclipboard_content_type content_type
Definition: platform.h:197
const void * content
Definition: platform.h:200
u64 size
Definition: platform.h:199
Definition: platform.h:156
b8 is_ssd
Definition: platform.h:162
u64 free_bytes
Definition: platform.h:160
char name[KMAX_PATH_LEN]
Definition: platform.h:157
char mount_point[KMAX_PATH_LEN]
Definition: platform.h:158
kdrive_type type
Definition: platform.h:161
u64 total_bytes
Definition: platform.h:159
Definition: platform.h:165
u64 ram_available_bytes
Definition: platform.h:173
u32 logical_cores
Definition: platform.h:168
char cpu_name[128]
Definition: platform.h:166
u32 ram_speed_mhz
Definition: platform.h:174
char os_build[64]
Definition: platform.h:178
char distro[64]
Definition: platform.h:180
u32 cpu_mhz
Definition: platform.h:167
char cpu_arch[10]
Definition: platform.h:170
u32 storage_count
Definition: platform.h:187
u32 physical_cores
Definition: platform.h:169
ksystem_info_flag_bits flags
Definition: platform.h:182
char kernel_version[256]
Definition: platform.h:179
kstorage_info storage[KMAX_STORAGE_DEVICES]
Definition: platform.h:186
u64 ram_total_bytes
Definition: platform.h:172
char os_version[64]
Definition: platform.h:177
kcpu_feature_flag_bits features
Definition: platform.h:184
char os_name[64]
Definition: platform.h:176
A configuration structure used to create new windows.
Definition: platform.h:56
i32 position_y
Definition: platform.h:58
const char * title
Definition: platform.h:61
u32 width
Definition: platform.h:59
const char * name
Definition: platform.h:62
u32 height
Definition: platform.h:60
i32 position_x
Definition: platform.h:57
The internal state of a window for the renderer frontend.
Definition: renderer_types.h:236
Represents a window in the application.
Definition: platform.h:71
f32 device_pixel_ratio
Represents the pixel density of this window. Should only ever be read from, as the platform layer is ...
Definition: platform.h:86
u16 height
The height of the window in pixels.
Definition: platform.h:80
u16 width
The width of the window in pixels.
Definition: platform.h:78
u16 frames_since_resize
Indicates the number of frames that have passed since the last resize event.
Definition: platform.h:91
const char * title
The title of the window.
Definition: platform.h:75
struct kwindow_renderer_state * renderer_state
Holds renderer-specific data.
Definition: platform.h:97
const char * name
The internal name of the window.
Definition: platform.h:73
b8 resizing
Indicates if this window is currently being resized.
Definition: platform.h:89
struct kwindow_platform_state * platform_state
Holds platform-specific data.
Definition: platform.h:94
Definition: platform.h:22
const char * application_name
application_name The name of the application.
Definition: platform.h:24