From 7712735f0e0a04a531588ebaab2f54f1ff8204ba Mon Sep 17 00:00:00 2001 From: outfrost Date: Sat, 27 Jun 2020 04:24:03 +0200 Subject: [PATCH] Extract some configuration into EngineConfig --- src/engine/engine.c | 20 ++++++++++++++++---- src/engine/engine.h | 15 ++++++++++++++- src/engine/string.c | 16 ++++++++++++++++ src/engine/string.h | 1 + src/main.c | 7 ++++++- 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/engine/engine.c b/src/engine/engine.c index 1715533..aba8cd2 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -21,7 +21,7 @@ static void onGlfwError(int error, const char* description); -void init() { +void init(EngineConfig config) { if (window) { logError("init called more than once"); return; @@ -41,7 +41,12 @@ void init() { // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); // glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5); - window = glfwCreateWindow(1280, 720, "shadowclad", NULL, NULL); + window = glfwCreateWindow(config.windowWidth, + config.windowHeight, + config.windowTitle.cstr, + NULL, + NULL); + if (!window) { logError("Window or context creation failed"); glfwTerminate(); @@ -60,8 +65,8 @@ void init() { exit(EXIT_LIB_FAIL); } - logInfo("Setting swap interval to 1"); - glfwSwapInterval(1); + logInfo("Setting swap interval to %d", config.swapInterval); + glfwSwapInterval(config.swapInterval); int width, height; glfwGetFramebufferSize(window, &width, &height); @@ -99,6 +104,13 @@ void terminate() { glfwTerminate(); } +EngineConfig defaultConfig() { + return (EngineConfig) { .windowWidth = 800, + .windowHeight = 600, + .windowTitle = newString(NULL), + .swapInterval = 1 }; +} + static void onGlfwError(int error, const char* description) { logError("GLFW error: %s", description); } diff --git a/src/engine/engine.h b/src/engine/engine.h index f1ff102..1fdcb01 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -1,8 +1,21 @@ #ifndef ENGINE_ENGINE_H_ #define ENGINE_ENGINE_H_ -void init(); +#include "string.h" + +typedef struct EngineConfig EngineConfig; + +struct EngineConfig { + int windowWidth; + int windowHeight; + String windowTitle; + int swapInterval; +}; + +void init(EngineConfig); void run(void (*updateFn) (float)); void terminate(); +EngineConfig defaultConfig(); + #endif // ENGINE_ENGINE_H_ diff --git a/src/engine/string.c b/src/engine/string.c index 05c93cc..04ad0db 100644 --- a/src/engine/string.c +++ b/src/engine/string.c @@ -2,6 +2,22 @@ #include +String newString(const char* s) { + size_t len = 0u; + char* cstr; + if (s) { + len = strlen(s); + cstr = memcpy(malloc((len + 1) * sizeof(char)), + s, + len * sizeof(char)); + } + else { + cstr = malloc(1 * sizeof(char)); + } + cstr[len] = '\0'; + return (String) { .length = len, .cstr = cstr }; +} + String stringFromAiString(const struct aiString aistr) { char* cstr = memcpy(malloc((aistr.length + 1) * sizeof(char)), aistr.data, diff --git a/src/engine/string.h b/src/engine/string.h index edd6508..92409c3 100644 --- a/src/engine/string.h +++ b/src/engine/string.h @@ -10,6 +10,7 @@ struct String { char* cstr; }; +String newString(const char* s); String stringFromAiString(const struct aiString aistr); void dropString(String str); diff --git a/src/main.c b/src/main.c index 167d3b4..6cd21f0 100644 --- a/src/main.c +++ b/src/main.c @@ -3,8 +3,13 @@ #include "game/game.h" int main(/*int argc, char** argv*/) { + EngineConfig cfg = { .windowWidth = 1280, + .windowHeight = 720, + .windowTitle = newString("shadowclad"), + .swapInterval = 1 }; + // Engine startup - init(); + init(cfg); initGame(); -- 2.44.0