From e152c72a04ae22cf23f018d2f433ce8fcf2ed431 Mon Sep 17 00:00:00 2001 From: BodgeMaster <> Date: Mon, 9 Jan 2023 20:41:42 +0100 Subject: [PATCH] fossvg (client): Create window --- README.md | 1 + scripts/build.sh | 2 +- src/fossvg.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c62b51f..bea76d2 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Build dependencies: - bash - a C++ 20 compiler +- GLFW with headers Setup dependencies: diff --git a/scripts/build.sh b/scripts/build.sh index a5d13f8..c0fff03 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -63,7 +63,7 @@ COMPILE_COMMANDS=( "$CXX_WITH_FLAGS src/tools/arraydump.cpp -I./include -Lbin/lib -l:file.so -l:cli.so -o bin/tools/arraydump" "$CXX_WITH_FLAGS src/tools/baseconvert.cpp -I./include -Lbin/lib -l:cli.so -o bin/tools/baseconvert" "$CXX_WITH_FLAGS -pthread src/tools/hexnet.cpp -I./include -Lbin/lib -l:cli.so -l:libsockpp.so -o bin/tools/hexnet" - "$CXX_WITH_FLAGS src/fossvg.cpp -I./include -Lbin/lib -l:cli.so -o bin/fossvg" + "$CXX_WITH_FLAGS src/fossvg.cpp -I./include -Lbin/lib -l:cli.so -lglfw -o bin/fossvg" "$CXX_WITH_FLAGS src/fossvgd.cpp -I./include -Lbin/lib -l:cli.so -o bin/fossvgd" ) for command in ${!COMPILE_COMMANDS[@]}; do diff --git a/src/fossvg.cpp b/src/fossvg.cpp index c2df751..8380b8c 100644 --- a/src/fossvg.cpp +++ b/src/fossvg.cpp @@ -18,6 +18,10 @@ #include #include +#include +#include + +#include #include "./lib/cli.hpp" @@ -25,6 +29,27 @@ #define EXIT_RUNTIME 1 #define EXIT_USAGE 2 +//TODO: check the TODO above glfwInit() in void main() +// #### Callbacks ############################################################## +void cursorPositionCallback(GLFWwindow* window, double x, double y) { +} + +void keyCallback(GLFWwindow* window, int32_t key, int32_t scancode, int32_t action, int32_t mods) { +} + +void textInputCallback(GLFWwindow* window, uint32_t codepoint) { +} + +void cursorEnterLeaveCallback(GLFWwindow* window, int32_t entered) { +} + +void mouseButtonCallback(GLFWwindow* window, int32_t button, int32_t action, int32_t mods) { +} + +void scrollCallback(GLFWwindow* window, double x, double y) { +} +// #### End Callbacks ########################################################## + int main(int argc, char* argv[]) { std::vector flags; flags.push_back(CLI::Flag('h', "help", "print help and exit")); @@ -63,5 +88,50 @@ int main(int argc, char* argv[]) { return EXIT_USAGE; } + + // TODO: Find a better place for this + // Ideally, the window management and rendering portion of FOSS-VG should + // live in a library so it can be easily reloaded/restarted for things like + // switching from/to fullscreen. For now, I am going to put it here because + // I want to get it going before making it pretty. + { + if (!glfwInit()) { + return EXIT_RUNTIME; + } + + //TODO: allow to set startup window size using CLI options + uint32_t windowWidth = 1366; + uint32_t windowHeight = 768; + //TODO: add a version macro + // (for example Git commit hash passed on the compiler command line) + std::string windowTitle = "FOSS-VG"; + + // Apparently, this also allows to set things like whether the window is full-screen + GLFWwindow* window = glfwCreateWindow(windowWidth, windowHeight, windowTitle.c_str(), nullptr, nullptr); + + if (window == nullptr) { + return EXIT_RUNTIME; + } + + // What dis do? It was in a tutorial. + glfwMakeContextCurrent(window); + + glfwSetCursorPosCallback(window, cursorPositionCallback); + glfwSetKeyCallback(window, keyCallback); + glfwSetCharCallback(window, textInputCallback); + glfwSetCursorEnterCallback(window, cursorEnterLeaveCallback); + glfwSetMouseButtonCallback(window, mouseButtonCallback); + glfwSetScrollCallback(window, scrollCallback); + + while (!glfwWindowShouldClose(window)) { + + glfwSwapBuffers(window); + + glfwPollEvents(); + } + + glfwTerminate(); + } + return EXIT_SUCCESS; }