summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-10-31 23:55:42 +0000
committeronelin <oscar@nelin.dk>2025-11-02 22:07:17 +0000
commitd38deeef3af2316a666f8fc0173940bd769b748e (patch)
tree6e30d4a9eea18daa5705c894f28cd99ff047e8f9 /src/core
parent6c077751982ea2c7bd2d9262b01b9f8602f80dc8 (diff)
Flatten project structure
This will make it easier to break up the code into smaller chunks again later. One would think doing this seems fun to me at this point.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/CMakeLists.txt18
-rw-r--r--src/core/include/engine/core/dltools.h23
-rw-r--r--src/core/include/engine/core/logging.h56
-rw-r--r--src/core/include/engine/core/memory.h31
-rw-r--r--src/core/include/engine/core/platform.h44
-rw-r--r--src/core/include/engine/core/state.h41
-rw-r--r--src/core/include/engine/core/types.h41
-rw-r--r--src/core/include/engine/engine.h57
-rw-r--r--src/core/src/dltools.c58
-rw-r--r--src/core/src/logging.c82
-rw-r--r--src/core/src/loop.c344
-rw-r--r--src/core/src/memory.c61
-rw-r--r--src/core/src/state.c251
13 files changed, 0 insertions, 1107 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
deleted file mode 100644
index a979cad..0000000
--- a/src/core/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-add_library(daw_core
- src/dltools.c
- src/logging.c
- src/loop.c
- src/memory.c
- src/state.c
- ${GLAD_HEADER}
- )
-
-#set_property(SOURCE src/loop.c APPEND PROPERTY OBJECT_DEPENDS ${GLAD_HEADER})
-
-target_compile_options(daw_core PUBLIC ${BUILD_OPTS})
-target_include_directories(daw_core PRIVATE ${DAW_INCLUDE_DIRS})
-target_link_libraries(daw_core PRIVATE cglm)
-
-target_compile_definitions(daw_core PUBLIC
- $<$<BOOL:${DAW_BUILD_HOTRELOAD}>:DAW_BUILD_HOTRELOAD>
-)
diff --git a/src/core/include/engine/core/dltools.h b/src/core/include/engine/core/dltools.h
deleted file mode 100644
index d9c74ee..0000000
--- a/src/core/include/engine/core/dltools.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef DLTOOLS_H
-#define DLTOOLS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-
-/* Utility functions for handling runtime linked shared libraries */
-bool dynamic_library_close(void* shared_library);
-void* dynamic_library_open(const char* library_path);
-void* dynamic_library_reload(void* shared_library, const char* library_path);
-
-/* Returns the address of symbol in the provided shared_library handle.
- * NULL on error*/
-void* dynamic_library_get_symbol(void* shared_library, const char* symbol);
-char* dynamic_library_get_error(void);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/include/engine/core/logging.h b/src/core/include/engine/core/logging.h
deleted file mode 100644
index cd55442..0000000
--- a/src/core/include/engine/core/logging.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef LOGGING_H
-#define LOGGING_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <math.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <engine/core/types.h>
-
-#if defined __linux__ || defined __APPLE__
-#define TERM_COLOR_RESET "\033[0m"
-#define TERM_COLOR_RED "\033[31m"
-#define TERM_COLOR_GREEN "\033[32m"
-#define TERM_COLOR_YELLOW "\033[33m"
-#define TERM_COLOR_BLUE "\033[34m"
-#define TERM_COLOR_PURPLE "\033[35m"
-#else
-#define TERM_COLOR_RESET
-#define TERM_COLOR_RED
-#define TERM_COLOR_GREEN
-#define TERM_COLOR_YELLOW
-#define TERM_COLOR_BLUE
-#define TERM_COLOR_PURPLE
-#endif
-
-#define STR(a) (#a)
-
-void _log(FILE* stream, const char* prefix, const char* fmt, va_list ap);
-
-void LOG(const char* fmt, ...);
-
-void INFO_(const char* fmt, ...);
-void INFO(const char* fmt, ...);
-
-#ifdef _DEBUG
-#define DEBUG(fmt, ...) __DEBUG(__FILE__, __LINE__, __func__, fmt, __VA_ARGS__)
-void __DEBUG(const char* file, const i32 line, const char* func,
- const char* fmt, ...);
-#else
-#define DEBUG(...)
-#endif
-
-void WARN(const char* fmt, ...);
-
-void ERROR(const char* fmt, ...);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/include/engine/core/memory.h b/src/core/include/engine/core/memory.h
deleted file mode 100644
index d04d58e..0000000
--- a/src/core/include/engine/core/memory.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef MEMORY_H
-#define MEMORY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <engine/core/types.h>
-
-typedef struct memory {
- void* data;
- usize size;
- usize pos;
- usize free;
-} memory;
-
-memory* memory_new(usize max_size);
-
-/* Returns a pointer to the allocated data */
-void* memory_allocate(memory* mem, usize size);
-
-memory memory_init(void* data, usize size);
-
-void memory_free(memory* mem, usize size);
-
-void memory_clear(memory* mem);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/include/engine/core/platform.h b/src/core/include/engine/core/platform.h
deleted file mode 100644
index de39f71..0000000
--- a/src/core/include/engine/core/platform.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef ENGINE_CORE_PLATFORM_H
-#define ENGINE_CORE_PLATFORM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <cglm/ivec2.h>
-
-#include <engine/core/types.h>
-#include <engine/core/memory.h>
-#include <engine/rendering/window.h>
-#include <engine/resources.h>
-
-#define NUM_GLOBAL_BINDINGS 1
-
-/* Defines the internally used state of the engine.
- * A single instance is created during `engine_init`, and used as a global
- * variable (yeah, im sorry). Due to this design flaw the engine as a whole is
- * not quite thread safe.
- */
-typedef struct Instance {
-
- Window* window;
- bool quit;
-
- u64 frame;
- u16 fps_target;
-
- /* TODO: Move input ctx/bindings to window */
- /* TODO: Move cam to window->renderer */
- Camera *cam;
-
- /* Global resources that live from engine_init to engine_free */
- Resources* resources;
-
- memory* mem;
-
-} Instance;
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/include/engine/core/state.h b/src/core/include/engine/core/state.h
deleted file mode 100644
index a6a5e84..0000000
--- a/src/core/include/engine/core/state.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef STATE_H
-#define STATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <engine/core/memory.h>
-
-typedef enum StateType {
- STATE_null,
-#define State(name) STATE_##name,
-#include <states/list_of_states.h>
-#undef State
- STATE_quit,
-} StateType;
-
-extern const char* StateTypeStr[];
-
-StateType (*State_updateFunc(StateType type))(f64, void*);
-
-void State_init(StateType type, memory* mem, void* arg);
-void* State_free(StateType type, memory* mem);
-StateType State_update(StateType type, f64 dt, memory* mem);
-
-/* Reloads shared object file associated with state */
-#ifdef DAW_BUILD_HOTRELOAD
-#include <engine/ctrl/input.h>
-bool State_reload(StateType type, i_ctx** ctx, usize ctx_len);
-bool state_refresh_input_ctx(void* lib, i_ctx** ctx, usize ctx_len);
-
-#else
-#define State_reload(_, _0, _1) true
-#define state_refresh_input_ctx(_0, _1, _2) true
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/include/engine/core/types.h b/src/core/include/engine/core/types.h
deleted file mode 100644
index a7d794d..0000000
--- a/src/core/include/engine/core/types.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef ENGINE_TYPES_H
-#define ENGINE_TYPES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-
-/* Signed */
-typedef int8_t i8;
-typedef int16_t i16;
-typedef int32_t i32;
-typedef int64_t i64;
-
-/* Unsigned */
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
-typedef uint64_t u64;
-
-/* floating points */
-typedef float f32;
-typedef double f64;
-
-/* sizes */
-#if __x86_64__ || __ppc64__ || _WIN64
-typedef u64 usize;
-typedef i64 isize;
-#else
-typedef u32 usize;
-typedef i32 isize;
-#endif
-
-typedef bool(predicate_t)(const void*);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/include/engine/engine.h b/src/core/include/engine/engine.h
deleted file mode 100644
index aa4eff6..0000000
--- a/src/core/include/engine/engine.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef ENGINE_ENGINE_H
-#define ENGINE_ENGINE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-
-/* TODO: Cleanup the includes, ideally this header file should only include all
- * "public-facing" headers.
- */
-
-#include <engine/core/types.h>
-#include <engine/core/logging.h>
-#include <engine/core/memory.h>
-#include <engine/core/state.h>
-#include <engine/ctrl/input.h>
-#include <engine/utils/stack.h>
-
-typedef struct {
- u32 texture_id;
- i32 x, y, w, h;
-} RenderUnit;
-
-#include <engine/rendering/window.h>
-#include <engine/core/platform.h>
-
-#include <cglm/ivec2.h>
-
-/* Essential functions */
-Instance* engine_init(const char* windowtitle, i32 windowWidth, i32 windowHeight,
- const u32 flags,
- const usize initial_memory);
-
-i32 engine_run(Instance* p, StateType initial_state, void* state_arg);
-
-void engine_stop(Instance* p);
-
-/* Utility functions */
-void engine_fps_max(Instance* p, u16 cap);
-
-void render_set_zoom(f32 new_zoom);
-void render_adjust_zoom(f32 diff);
-void render_add_unit(RenderUnit* u);
-
-/* move this */
-void delay(uint64_t ms);
-
-// file operations
-usize f_get_sz(FILE* f);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/core/src/dltools.c b/src/core/src/dltools.c
deleted file mode 100644
index d27c4ff..0000000
--- a/src/core/src/dltools.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <stdlib.h>
-#include <stdbool.h>
-
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-/* include winapi */
-#else
-#include <dlfcn.h>
-#endif
-
-#include <engine/core/dltools.h>
-#include <engine/core/logging.h>
-
-bool dynamic_library_close(void* shared_library) {
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
- return true;
-#else
- return dlclose(shared_library) == 0;
-#endif
-}
-
-void* dynamic_library_open(const char* library_path) {
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
- return NULL;
-#else
- return dlopen(library_path, RTLD_NOW);
-#endif
-}
-
-char* dynamic_library_get_error(void) {
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
- return "unsupported on windows";
-#else
- return dlerror();
-#endif
-}
-
-void* dynamic_library_reload(void* shared_library, const char* library_path) {
- void* library_address = NULL;
- if (!dynamic_library_close(shared_library)) {
- ERROR("Failed to close shared library: %s", dynamic_library_get_error());
- ERROR("Reloading dynamic library failed.");
- return library_address;
- }
- if ((library_address = dynamic_library_open(library_path)) == NULL) {
- ERROR("Failed to open shared library: %s", dynamic_library_get_error());
- ERROR("Reloading dynamic library %s failed.", library_path);
- }
- return library_address;
-}
-
-void* dynamic_library_get_symbol(void* restrict shared_library,
- const char* symbol) {
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
- return NULL;
-#else
- return dlsym(shared_library, symbol);
-#endif
-}
diff --git a/src/core/src/logging.c b/src/core/src/logging.c
deleted file mode 100644
index 94782ac..0000000
--- a/src/core/src/logging.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <engine/core/logging.h>
-#include <engine/core/types.h>
-#include <stdlib.h>
-
-char* itoa(i32 x) {
- const i32 size = (((i32)ceil(log10((f64)x))) + 1) * sizeof(char);
- char* retval = (char*)malloc(size);
- if (retval == NULL) {
- perror("Failed to allocate memory for itoa");
- exit(EXIT_FAILURE);
- }
- sprintf(retval, "%d", x);
- return retval;
-}
-
-void _log(FILE* stream, const char* prefix, const char* fmt, va_list ap) {
- if (stream == NULL) {
- fprintf(stderr, "_log got NULL in stream argument\n");
- exit(EXIT_FAILURE);
- }
- fputs(prefix, stream);
- vfprintf(stream, fmt, ap);
-}
-
-void LOG(const char* fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- _log(stdout, "[" TERM_COLOR_BLUE "LOG" TERM_COLOR_RESET "] ", fmt, ap);
- va_end(ap);
- puts("");
-}
-
-void INFO_(const char* fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- _log(stdout, "[" TERM_COLOR_GREEN "INFO" TERM_COLOR_RESET "] ", fmt, ap);
- va_end(ap);
-}
-
-void INFO(const char* fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- _log(stdout, "[" TERM_COLOR_GREEN "INFO" TERM_COLOR_RESET "] ", fmt, ap);
- va_end(ap);
- puts("");
-}
-
-void __DEBUG(const char* file, const i32 line, const char* func,
- const char* fmt, ...) {
- va_list ap;
-
- const usize prefix_len = 1024;
-
- char* prefix = malloc(sizeof(char) * 1024);
-
- snprintf(prefix, prefix_len,
- "[" TERM_COLOR_YELLOW "DEBUG" TERM_COLOR_RESET "] "
- "%s:%d <%s> ",
- file, line, func);
-
- va_start(ap, fmt);
- _log(stdout, prefix, fmt, ap);
- va_end(ap);
-
- free(prefix);
-}
-
-void WARN(const char* fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- _log(stderr, "[" TERM_COLOR_PURPLE "WARN" TERM_COLOR_RESET "] ", fmt, ap);
- va_end(ap);
- puts("");
-}
-
-void ERROR(const char* fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- _log(stderr, "[" TERM_COLOR_RED "ERROR" TERM_COLOR_RESET "] ", fmt, ap);
- va_end(ap);
- puts("");
-}
diff --git a/src/core/src/loop.c b/src/core/src/loop.c
deleted file mode 100644
index 4e9df36..0000000
--- a/src/core/src/loop.c
+++ /dev/null
@@ -1,344 +0,0 @@
-#include <time.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#include <cglm/ivec2.h>
-#include <cglm/cam.h>
-
-#define STB_IMAGE_IMPLEMENTATION
-#include <stb/stb_image.h>
-
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-/* include winapi */
-#include <Windows.h>
-#elif defined(__APPLE__)
-/* mac includes */
-#elif defined(__linux) || defined(__linux__) || defined(linux)
-
-#include <unistd.h>
-#include <sys/sysinfo.h>
-
-#endif
-
-#include <engine/configure.h>
-
-#include <engine/core/state.h>
-#include <engine/engine.h>
-#include <engine/utils/btree.h>
-#include <engine/utils/hashmap.h>
-#include <engine/utils/list.h>
-
-#include <engine/resources.h>
-
-#include <engine/rendering/window.h>
-#include <engine/rendering/rendering.h>
-#include <engine/rendering/platform_glfw.h>
-
-
-#define DEFAULT_NUM_PROCS 8
-
-Instance* GLOBAL_PLATFORM = NULL;
-
-static Camera default_camera = {
- .pos = {3, 0, 0},
- .dir = {1, 1, 1},
-};
-
-input_callback_t* callbacks[128];
-usize callbacks_len;
-
-i32 nproc(void) {
- return get_nprocs();
-}
-
-void delay( uint64_t us )
-{
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
- Sleep( ms );
-#else
- struct timespec ts = {
- .tv_sec = (i64)us / 1000000,
- .tv_nsec = ((i64)us * 1000) % 1000000000
- };
- struct timespec rem = {0,0};
- int err = 0;
- while((err = clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, &rem))) {
- switch (err) {
- case EINTR:
- WARN("clock_nanosleep didn't sleep full duration: interrupted.");
- break;
- case EINVAL:
- WARN("clock_nanosleep didn't sleep full duration: invalid argument.");
- break;
- case ENOTSUP:
- WARN("clock_nanosleep didn't sleep full duration: unsupported clock.");
- break;
- default:
- WARN("clock_nanosleep didn't sleep full duration!");
- break;
- }
- ts = rem;
- rem = (struct timespec){0,0};
- }
-#endif
-}
-
-i32 cmp_int(const void* a, const void* b) {
- const i32* x = a;
- const i32* y = b;
-
- return *x - *y;
-}
-
-/* Creates the window, initializes IO, Rendering, Fonts and engine-specific
- * resources. */
-Instance* engine_init(const char* windowtitle, i32 windowWidth, i32 windowHeight,
- const u32 flags,
- const usize initial_memory) {
-
- INFO("Engine version " ENGINE_VERSION);
-
-
-#if defined(__linux) || defined(__linux__) || defined(linux)
- {
- pid_t pid = getpid();
- INFO("Starting with pid %lu", pid);
- }
-#endif
- ivec2 windowsize = {windowWidth, windowHeight};
-
- Instance* p = (Instance*)calloc(1, sizeof(Instance));
- Window* w = (Window*)calloc(1, sizeof(Window));
-
- /* initialize resources */
- Resources* resources = calloc(1, sizeof(Resources));
- // TODO: Initialize them :)
-
- w = Window_new(windowtitle,
- WINDOW_FRAMEWORK_GLFW, WINDOW_RENDERER_OPENGL,
- (ivec2){windowsize[0], windowsize[1]}, flags);
-
- p->window = w;
- p->quit = false;
-
- p->resources = resources;
-
- p->frame = 0;
-#ifdef _DEBUG
- engine_fps_max(p, 30);
-#else
- engine_fps_max(p, 300);
-#endif
-
- p->mem = memory_new(initial_memory);
-
- p->cam = &default_camera;
-
- glm_ortho_default(45.f, p->cam->per);
-
- // TODO: Add global bindings
-
- INFO("Available cores: %d", nproc());
-
- GLOBAL_PLATFORM = p;
-
-#ifdef DAW_BUILD_HOTRELOAD
-
-#define State(name) \
- if (!State_reload(STATE_##name, p->window->bindings, p->window->bindings_len)) { \
- ERROR("Failed to reload shared object file for state %s", #name); \
- };
-
-#include <states/list_of_states.h>
-#undef State
-
-#endif
-
- return p;
-}
-
-i32 engine_run(Instance* p, StateType initial_state, void* state_arg) {
-
- if (p == NULL) {
- ERROR("Platform is uninitialized.\n");
- INFO("initialize with `engine_init`");
- return -1;
- }
-
- memory* mem = p->mem;
-
- StateType state = initial_state;
-
- {
- u64 state_init_time = get_time();
- State_init(state, mem, state_arg);
- INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state],
- (get_time() - state_init_time));
- }
-
- u64 frame_end = get_time();
-
- // Update ticks
- u64 ticks = 0;
-
- StateType (*update_func)(f64, void*) = State_updateFunc(state);
-
- u64 last_fps_measurement = frame_end;
- u64 last_fps_ticks = 0;
-
- /* The target frametime measured in μs */
- const u32 fps_cap = p->fps_target > 0 ? 1000000 / p->fps_target : 0;
-
- /* Main loop */
- do {
- /* frame_start is μs since engine was initialized */
- const u64 frame_start = get_time();
-
- /* dt measured in μs */
- const u64 dt = frame_start - frame_end;
-
- /* Delta is relative to FPS cap */
- //const f64 delta = (f64)dt / (f64)fps_cap;
-
- /* Events */
- Platform_GLFW.window_poll();
- i_flush_bindings(dt, callbacks_len, callbacks, mem->data);
-
- /* Update */
- StateType next_state;
- next_state = update_func(dt, (void*)(mem->data));
-
- if (next_state != STATE_null) {
- if (next_state == STATE_quit) break;
-
- drawcall_reset();
-
- void* retval = State_free(state, mem);
- memory_clear(mem);
-
- i_ctx_reset();
-
- // Reset camera to default camera
- p->cam = &default_camera;
-
- state = next_state;
- update_func = State_updateFunc(state);
- {
- u64 state_init_time = get_time();
- State_init(state, mem, retval);
- INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state],
- (get_time() - state_init_time));
- }
- } else {
-
- /* Render */
- const u64 rendertime_begin = get_time();
- render_begin(p->window);
- render_present(p->window);
- const u64 rendertime_dt = get_time() - rendertime_begin;
-
- /* Regulate FPS */
- frame_end = get_time();
- const i64 fps_diff = fps_cap - (i64)(frame_end - frame_start);
-
- if (fps_diff > 0) {
- delay((u64)fps_diff);
- }
-
- frame_end = frame_start;
-
- /* Print stats */
- const u64 dt_measurement = frame_end - last_fps_measurement;
-
- /* only make measurements once a second */
- if (dt_measurement > 1000000) {
-
- printf(" FPS: %.1f"
- "\tticks: %lu"
- "\tframetime: %lu.%03lums"
- "\trendertime: %lu.%03lums"
- "\n"
- , ((f64)(ticks - last_fps_ticks)) / ((f64)dt_measurement / 1000000.0)
- , ticks
- , dt / 1000 , dt % 1000
- , rendertime_dt / 1000 , rendertime_dt % 1000
- );
-
- last_fps_measurement = frame_end;
- last_fps_ticks = ticks;
- }
- }
-
- ticks++;
- } while(
- !Platform_GLFW.window_should_close(p->window)
- && state != STATE_quit
- );
-
- return 0;
-}
-
-void engine_stop(Instance* p) {
- if (p == NULL) return;
-
- //{ /* Deallocate resources */
- // struct Resources* r = (struct Resources*)p->data;
- // if (r != NULL) {
- // /* Destroy textures */
- // for (usize i = 0; i < r->textures_len; i++) {
- // if (r->textures[i] != NULL) {
- // r->textures[i] = NULL;
- // }
- // }
- // free(r->textures);
-
- // /* Destroy Fonts */
- // }
- //}
-
- Platform_GLFW.window_destroy(p->window);
- free(p->resources);
-}
-
-/* Set the maximum framerate */
-void engine_fps_max(Instance* p, u16 cap) {
- LOG("Setting max fps to %llu", cap);
- p->fps_target = cap;
-}
-
-usize f_get_sz(FILE* f) {
- if (f == NULL) {
- ERROR("File was null!");
- return 0;
- }
-
- const isize pos = ftell(f);
- if (pos == -1) {
- ERROR("Failed to determine file size (%d): %s", errno, strerror(errno));
- return 0;
- }
-
- const i32 err = fseek(f, 0, SEEK_END);
- if (err != 0) {
- if (err == ESPIPE) {
- ERROR("File is a pipe");
- } else {
- ERROR("Failed to determine file size!");
- }
- return 0;
- }
-
- const isize size = ftell(f);
-
- if (size == -1) {
- ERROR("Failed to determine file size (%d): %s", errno, strerror(errno));
- return 0;
- }
-
- // Reset the position to the position prior to calling f_get_sz
- fseek(f, pos, SEEK_SET);
-
- return (usize)size;
-}
diff --git a/src/core/src/memory.c b/src/core/src/memory.c
deleted file mode 100644
index 7a51a0d..0000000
--- a/src/core/src/memory.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <engine/core/logging.h>
-#include <engine/core/memory.h>
-
-memory* memory_new(usize max_size) {
- memory* m = malloc(sizeof(memory));
- m->data = malloc(max_size);
- m->size = max_size;
- m->pos = 0;
- m->free = max_size;
-
- memset(m->data, 0, max_size);
-
- return m;
-}
-
-/* Returns a pointer to the allocated data */
-void* memory_allocate(memory* mem, usize size) {
- void* data = NULL;
-
- if (mem->pos + size <= mem->size) {
- data = (void*)((usize)mem->data + mem->pos);
- mem->pos += size;
- mem->free -= size;
- } else {
- ERROR("Trying to allocate %lu in a %lu sized memory block", size,
- mem->size);
- ERROR("No more room!");
- exit(EXIT_FAILURE);
- }
-
- return data;
-}
-
-memory memory_init(void* data, usize size) {
- memory m = {0};
- m.data = data;
- m.size = size;
- m.free = 0;
- return m;
-}
-
-void memory_free(memory* mem, usize size) {
- if (size > mem->pos) {
- perror("Freeing too much memory!");
- exit(EXIT_FAILURE);
- } else {
- mem->pos -= size;
- mem->free += size;
- }
-}
-
-void memory_clear(memory* mem) {
- mem->pos = 0;
- mem->free = mem->size;
- /* Reset the memory? */
- memset(mem->data, 0, mem->size);
-}
diff --git a/src/core/src/state.c b/src/core/src/state.c
deleted file mode 100644
index a206cbb..0000000
--- a/src/core/src/state.c
+++ /dev/null
@@ -1,251 +0,0 @@
-#include <string.h>
-
-#include <engine/core/dltools.h>
-#include <engine/core/logging.h>
-#include <engine/core/state.h>
-#include <engine/ctrl/input.h>
-
-//typedef void state_init_t(void*,void*);
-//typedef void* (state_free_t(void*));
-typedef StateType state_update_t(f64, void*);
-
-const char* StateTypeStr[] = {
- "null",
-#define State(name) #name,
-#include <states/list_of_states.h>
-#undef State
- "quit",
-};
-
-// Setup API for states
-#define State(name) \
- typedef struct name##_state name##_state; \
- typedef void(state_##name##_init_t)(name##_state*,void*); \
- typedef void*(state_##name##_free_t)(name##_state*); \
- typedef StateType(state_##name##_update_t)(name##_state*);
-#include <states/list_of_states.h>
-#undef State
-
-#ifdef DAW_BUILD_HOTRELOAD
-
-// When hotreloading is enabled, we want to assign state function pointers
-// dynamically.
-#define State(name) \
- state_##name##_init_t* name##_init = NULL; \
- state_##name##_free_t* name##_free = NULL; \
- state_##name##_update_t* name##_update = NULL; \
- \
- void* libstate_##name = NULL; \
- const char* libstate_##name##_str = "lib" #name ".so";
-#else
-
-// Otherwise we just declare them.
-#define State(name) \
- extern state_##name##_init_t name##_init; \
- extern state_##name##_free_t name##_free; \
- extern state_##name##_update_t name##_update;
-#endif
-
-#include <states/list_of_states.h>
-#undef State
-
-#include <states/all_states.h>
-
-void State_init(StateType type, memory* mem, void* arg) {
- switch (type) {
-#define State(name) \
- case (STATE_##name): { \
- name##_init(memory_allocate(mem, sizeof(name##_state)), arg); \
- break; \
- }
-#include <states/list_of_states.h>
-#undef State
- case STATE_null:
- case STATE_quit:
- DEBUG("Got %s state.\n", StateTypeStr[type]);
- break;
- default:
- exit(EXIT_FAILURE);
- }
-}
-
-void* State_free(StateType type, memory* mem) {
- void* state_retval = NULL;
- switch (type) {
-#define State(name) \
- case (STATE_##name): { \
- state_retval = name##_free(mem->data); \
- break; \
- }
-#include <states/list_of_states.h>
-#undef State
- case STATE_null:
- case STATE_quit:
- DEBUG("Got %s state.\n", StateTypeStr[type]);
- break;
- default:
- exit(EXIT_FAILURE);
- }
- memory_clear(mem);
- return state_retval;
-}
-
-/* Returns the update function of a given state type */
-StateType (*State_updateFunc(StateType type))(f64, void*) {
- switch (type) {
-#ifdef DAW_BUILD_HOTRELOAD
-#define State(name) \
- case (STATE_##name): { \
- return (state_update_t*)name##_update; \
- break; \
- }
-#else
-#define State(name) \
- case (STATE_##name): { \
- return (state_update_t*)&name##_update; \
- break; \
- }
-#endif
-#include <states/list_of_states.h>
-#undef State
- case STATE_null:
- case STATE_quit:
- return NULL; // DEBUG("Got %s state.\n", StateTypeStr[type]);
- break;
- default:
- exit(EXIT_FAILURE);
- }
- return NULL;
-}
-
-StateType State_update(StateType type, f64 dt, memory* mem) {
- StateType next_state = STATE_null;
- switch (type) {
-#define State(name) \
- case (STATE_##name): { \
- next_state = name##_update(mem->data); \
- break; \
- }
-#include <states/list_of_states.h>
-#undef State
- case STATE_null:
- case STATE_quit:
- DEBUG("Got %s state.\n", StateTypeStr[type]);
- break;
- default:
- exit(EXIT_FAILURE);
- }
- return next_state;
-}
-
-#ifdef DAW_BUILD_HOTRELOAD
-bool State_reload(StateType type, i_ctx** ctx, usize ctx_len) {
- void* libptr = NULL;
-
- switch (type) {
-#define State(name) \
- case (STATE_##name): { \
- if (libstate_##name == NULL) { \
- libstate_##name = dynamic_library_open(libstate_##name##_str); \
- } else { \
- libstate_##name = \
- dynamic_library_reload(libstate_##name, libstate_##name##_str); \
- } \
- if (libstate_##name == NULL) { \
- ERROR("Failed loading shared object: %s (%s)", libstate_##name##_str, \
- dynamic_library_get_error()); \
- return false; \
- } \
- \
- name##_init = (state_##name##_init_t*)dynamic_library_get_symbol( \
- libstate_##name, STR(name##_init)); \
- name##_free = (state_##name##_free_t*)dynamic_library_get_symbol( \
- libstate_##name, STR(name##_free)); \
- name##_update = (state_##name##_update_t*)dynamic_library_get_symbol( \
- libstate_##name, STR(name##_update)); \
- libptr = libstate_##name; \
- break; \
- }
-#include <states/list_of_states.h>
-#undef State
- case STATE_null:
- case STATE_quit:
- ERROR("Invalid state");
- DEBUG("Got %s state.\n", StateTypeStr[type]);
- return false;
- default:
- exit(EXIT_FAILURE);
- }
- return state_refresh_input_ctx(libptr, ctx, ctx_len);
-}
-
-
-bool state_refresh_input_ctx(void* lib, i_ctx** ctx, usize ctx_len) {
- if (ctx == NULL) return true;
- if (ctx_len > 0 && ctx[0] == NULL) return false;
- if (lib == NULL) return false;
-
- for (usize c = 0; c < ctx_len; c++) {
- LOG("ctx[%d]->len = %d", c, ctx[c]->len);
- for (isize b = 0; b < ctx[c]->len; b++) {
- switch (ctx[c]->bindings[b].action.type) {
- case InputType_error:
- break;
- case InputType_action:
- if (strcmp("NULL", ctx[c]->bindings[b].action.action.callback_str) !=
- 0) {
-
- ctx[c]->bindings[b].action.action.callback =
- (input_callback_t*)dynamic_library_get_symbol(
- lib, ctx[c]->bindings[b].action.action.callback_str);
-
- if (ctx[c]->bindings[b].action.action.callback == NULL) {
- ERROR("Failed to get binding for %s: %s",
- ctx[c]->bindings[b].action.action.callback_str,
- dynamic_library_get_error());
- return false;
- }
- }
- break;
- case InputType_state:
- if (strcmp("NULL", ctx[c]->bindings[b].action.state.activate_str) !=
- 0) {
-
- ctx[c]->bindings[b].action.state.activate =
- (input_callback_t*)dynamic_library_get_symbol(
- lib, ctx[c]->bindings[b].action.state.activate_str);
-
- if (ctx[c]->bindings[b].action.state.activate == NULL) {
- ERROR("Failed to get binding for %s: %s",
- ctx[c]->bindings[b].action.state.activate_str,
- dynamic_library_get_error());
- return false;
- }
- }
-
- if (strcmp("NULL", ctx[c]->bindings[b].action.state.deactivate_str) !=
- 0) {
-
- ctx[c]->bindings[b].action.state.deactivate =
- (input_callback_t*)dynamic_library_get_symbol(
- lib, ctx[c]->bindings[b].action.state.deactivate_str);
-
- if (ctx[c]->bindings[b].action.state.deactivate == NULL) {
- ERROR("Failed to get binding for %s: %s",
- ctx[c]->bindings[b].action.state.deactivate_str,
- dynamic_library_get_error());
- return false;
- }
- }
- break;
- case InputType_range:
- default:
- break;
- }
- }
- }
-
- return true;
-}
-
-#endif