-void init() {
+void init(EngineConfig config) {
if (window) {
logError("init called more than once");
return;
// 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();
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);
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);
}
#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_
#include <stdlib.h>
+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,
#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();