summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt40
-rw-r--r--src/core/src/loop.c4
-rw-r--r--src/ctrl/CMakeLists.txt2
-rw-r--r--src/ctrl/src/input.c3
-rw-r--r--src/rendering/CMakeLists.txt7
-rw-r--r--src/rendering/include/engine/rendering/rendering.h3
-rw-r--r--src/rendering/include/engine/rendering/window.h4
-rw-r--r--src/rendering/src/window.c12
-rw-r--r--src/resources/CMakeLists.txt2
9 files changed, 60 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fb9659d..96d25e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -108,18 +108,46 @@ else()
endif()
## Packages
-set(GLFW_USE_WAYLAND ON)
-find_package(glfw3 3.3 REQUIRED)
+set(GLFW_BUILD_WAYLAND ON)
+find_package(glfw3 3.4)
find_package(OpenGL REQUIRED)
+
+set(BUILD_PACKAGES cglm stb)
+
+if(NOT glfw3_FOUND)
+ message(STATUS "Local GLFW3 installation not found, will be downloaded and built")
+
+ set(GLFW3_PREFIX ${CMAKE_BINARY_DIR}/glfw3)
+ set(GLFW3_INCLUDE_DIR ${GLFW3_PREFIX}/include)
+ set(GLFW3_LIBRARY ${GLFW3_PREFIX}/lib/libglfw3.a)
+
+ # Build only the library
+ set(GLFW_BUILD_DOCS OFF CACHE BOOL "")
+ set(GLFW_BUILD_TESTS OFF CACHE BOOL "")
+ set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "")
+
+ # Download and build
+ FetchContent_Declare(glfw3
+ GIT_REPOSITORY "https://github.com/glfw/glfw.git"
+ GIT_TAG 3.4
+ )
+
+ # Set glfw specific include directory to the downloaded one
+ set(GLFW_INCLUDE_DIR "${CMAKE_BINARY_DIR}/glfw3-src/include")
+
+ list(APPEND BUILD_PACKAGES glfw3)
+endif()
+
FetchContent_Declare(cglm
- GIT_REPOSITORY https://github.com/recp/cglm.git
+ GIT_REPOSITORY "https://github.com/recp/cglm.git"
GIT_TAG v0.9.6
)
FetchContent_Declare(stb
- GIT_REPOSITORY https://github.com/nothings/stb.git
+ GIT_REPOSITORY "https://github.com/nothings/stb.git"
GIT_TAG master
- )
-FetchContent_MakeAvailable(cglm stb)
+)
+
+FetchContent_MakeAvailable("${BUILD_PACKAGES}")
## Glad
# TODO: make sure the glad command is run before building
diff --git a/src/core/src/loop.c b/src/core/src/loop.c
index 73131d5..cff8d64 100644
--- a/src/core/src/loop.c
+++ b/src/core/src/loop.c
@@ -319,7 +319,7 @@ i32 engine_run(Platform* p, StateType initial_state, void* state_arg) {
//const f64 delta = (f64)dt / (f64)fps_cap;
/* Events */
- glfwPollEvents();
+ window_poll_events();
i_flush_bindings(dt, callbacks_len, callbacks, mem->data);
/* Update */
@@ -389,7 +389,7 @@ i32 engine_run(Platform* p, StateType initial_state, void* state_arg) {
ticks++;
} while(
- !glfwWindowShouldClose(p->window->window)
+ !window_should_close(p->window)
&& state != STATE_quit
);
diff --git a/src/ctrl/CMakeLists.txt b/src/ctrl/CMakeLists.txt
index a8525b0..1fcbfb6 100644
--- a/src/ctrl/CMakeLists.txt
+++ b/src/ctrl/CMakeLists.txt
@@ -7,5 +7,5 @@ add_library(daw_ctrl
)
target_compile_options(daw_ctrl PUBLIC ${BUILD_OPTS})
-target_include_directories(daw_ctrl PRIVATE ${DAW_INCLUDE_DIRS})
+target_include_directories(daw_ctrl PRIVATE ${DAW_INCLUDE_DIRS} ${GLFW_INCLUDE_DIR})
target_link_libraries(daw_ctrl PRIVATE cglm glfw)
diff --git a/src/ctrl/src/input.c b/src/ctrl/src/input.c
index 5a08543..844fd2c 100644
--- a/src/ctrl/src/input.c
+++ b/src/ctrl/src/input.c
@@ -1,6 +1,9 @@
#include <errno.h>
#include <string.h>
+#undef GLFW_INCLUDE_NONE
+#include <GLFW/glfw3.h>
+
#include <engine/core/dltools.h>
#include <engine/core/logging.h>
#include <engine/core/platform.h>
diff --git a/src/rendering/CMakeLists.txt b/src/rendering/CMakeLists.txt
index 237f147..a00f3b1 100644
--- a/src/rendering/CMakeLists.txt
+++ b/src/rendering/CMakeLists.txt
@@ -22,9 +22,12 @@ set_property(SOURCE src/window.c APPEND PROPERTY OBJECT_DEPENDS ${GLAD_HEADER})
set_property(SOURCE src/rendering.c APPEND PROPERTY OBJECT_DEPENDS ${GLAD_HEADER})
target_compile_options(daw_rendering PUBLIC ${BUILD_OPTS})
-target_include_directories(daw_rendering PRIVATE ${DAW_INCLUDE_DIRS})
+target_include_directories(daw_rendering PRIVATE
+ ${DAW_INCLUDE_DIRS}
+ ${GLFW_INCLUDE_DIR}
+)
target_link_libraries(daw_rendering PRIVATE
OpenGL::GL
cglm
glfw
- )
+)
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h
index 7120182..d338778 100644
--- a/src/rendering/include/engine/rendering/rendering.h
+++ b/src/rendering/include/engine/rendering/rendering.h
@@ -9,9 +9,6 @@ extern "C" {
#include <engine/utils/vector.h>
#include <engine/rendering/window.h>
-#define GLFW_INCLUDE_NONE
-#include <GLFW/glfw3.h>
-
#include <cglm/cglm.h>
/* Definitions */
diff --git a/src/rendering/include/engine/rendering/window.h b/src/rendering/include/engine/rendering/window.h
index e5d3528..c902cad 100644
--- a/src/rendering/include/engine/rendering/window.h
+++ b/src/rendering/include/engine/rendering/window.h
@@ -9,7 +9,7 @@ extern "C" {
#include <cglm/cglm.h>
#ifndef ENGINE_RENDERING_WINDOW_H_EXCLUDE_EXTERNS
-extern void* window_poll_events;
+extern void (*window_poll_events)(void);
extern u64 (*get_time)(void);
#endif
@@ -41,6 +41,8 @@ Window* init_window_glfw(const char* windowtitle, ivec2 windowsize, const u32 fl
void destroy_window(Window* w);
void window_resize(Window* window, int width, int height);
+bool window_should_close(Window* w);
+
// Renderer intializer(s)
void init_render_opengl(Window* w, const u32 flags);
diff --git a/src/rendering/src/window.c b/src/rendering/src/window.c
index a5e7db6..9f5e861 100644
--- a/src/rendering/src/window.c
+++ b/src/rendering/src/window.c
@@ -21,7 +21,7 @@
extern Platform* GLOBAL_PLATFORM;
-void *window_poll_events = NULL;
+void (*window_poll_events)(void) = NULL;
/* wrapper to get time in ms */
u64 (*get_time)(void) = NULL;
@@ -279,3 +279,13 @@ void get_mousepos(double *x, double *y) {
}
}
+
+bool window_should_close(Window* w) {
+ switch(w->framework) {
+ case WINDOW_FRAMEWORK_GLFW:
+ return glfwWindowShouldClose(w->window);
+ break;
+ default:
+ return false;
+ }
+}
diff --git a/src/resources/CMakeLists.txt b/src/resources/CMakeLists.txt
index 9934cc1..00e2cbc 100644
--- a/src/resources/CMakeLists.txt
+++ b/src/resources/CMakeLists.txt
@@ -14,7 +14,7 @@ add_library(daw_resources
)
target_compile_options(daw_resources PUBLIC ${BUILD_OPTS})
-target_include_directories(daw_resources PRIVATE ${DAW_INCLUDE_DIRS})
+target_include_directories(daw_resources PRIVATE ${DAW_INCLUDE_DIRS} stb)
target_link_libraries(daw_resources PRIVATE
assimp
cglm