diff --git a/src/renderer.cpp b/src/renderer.cpp index b047ebf..dfff7d4 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -163,3 +163,9 @@ void cleanup_renderer(Renderer *renderer) { cleanup_frame_buffer(&renderer->frame_buffer); } +void handle_key_events(Renderer *renderer, s32 key, s32 scancode, s32 action, s32 mods) { + if (glfwGetKey(renderer->render_data.glfw_window, GLFW_KEY_SPACE) == GLFW_PRESS) { + renderer->render_data.use_alt_shader = !renderer->render_data.use_alt_shader; + } +} + diff --git a/src/renderer.h b/src/renderer.h index 85d98c9..5c79877 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -35,4 +35,4 @@ void set_renderer_size(Renderer *renderer, u32 width, u32 height); void draw_renderer(Renderer *renderer); void upload_renderer_data(Renderer *renderer, Mesh *vertex_data); void cleanup_renderer(Renderer *renderer); - +void handle_key_events(Renderer *renderer, s32 key, s32 scancode, s32 action, s32 mods); diff --git a/src/window.cpp b/src/window.cpp index a330580..994a84d 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -40,11 +40,18 @@ bool init_window(Window *window, u32 width, u32 height, string title) { log(1, "%s: Renderer initialized\n", __FUNCTION__); - glfwSetWindowUserPointer(window->glfw_window, window); + glfwSetWindowUserPointer(window->glfw_window, window->renderer); + + glfwSetWindowSizeCallback(window->glfw_window, [](GLFWwindow *glfw_window, s32 width, s32 height) { + Renderer* renderer = static_cast(glfwGetWindowUserPointer(glfw_window)); + set_renderer_size(renderer, width, height); + }); + + glfwSetKeyCallback(window->glfw_window, [](GLFWwindow *glfw_window, s32 key, s32 scancode, s32 action, s32 mods) { + Renderer* renderer = static_cast(glfwGetWindowUserPointer(glfw_window)); + handle_key_events(renderer, key, scancode, action, mods); + }); - glfwSetWindowSizeCallback(window->glfw_window, handle_window_resize_events); - glfwSetWindowCloseCallback(window->glfw_window, handle_close); - glfwSetKeyCallback(window->glfw_window, handle_key_events); // Have to disable so ImGui will accept mouse events // glfwSetCursorPosCallback(window->glfw_window, handle_mouse_position_events); // glfwSetMouseButtonCallback(window->glfw_window, handle_mouse_button_events); @@ -76,19 +83,6 @@ void cleanup(Window *window) { glfwTerminate(); } -void handle_close(GLFWwindow *gl_window) { - Window *window = static_cast(glfwGetWindowUserPointer(gl_window)); - log(1, "%s: Window got close event... bye!\n", __FUNCTION__); -} - -void handle_key_events(GLFWwindow *gl_window, s32 key, s32 scancode, s32 action, s32 mods) { - Window *window = static_cast(glfwGetWindowUserPointer(gl_window)); - - if (glfwGetKey(window->glfw_window, GLFW_KEY_SPACE) == GLFW_PRESS) { - window->renderer->render_data.use_alt_shader = !window->renderer->render_data.use_alt_shader; - } -} - void handle_mouse_position_events(GLFWwindow *gl_window, f64 x_pos, f64 y_pos) { Window *window = static_cast(glfwGetWindowUserPointer(gl_window)); log(1, "%s: Mouse is at position %lf/%lf\n", __FUNCTION__, x_pos, y_pos); diff --git a/src/window.h b/src/window.h index 9f974e4..5089c51 100644 --- a/src/window.h +++ b/src/window.h @@ -13,7 +13,6 @@ bool init_window(Window *window, u32 width, u32 height, string title); void main_loop(Window *window); void cleanup(Window *window); void handle_close(GLFWwindow *gl_window); -void handle_key_events(GLFWwindow *gl_window, s32 key, s32 scancode, s32 action, s32 mods); void handle_mouse_position_events(GLFWwindow *gl_window, f64 x_pos, f64 y_pos); void handle_mouse_button_events(GLFWwindow *gl_window, s32 button, s32 action, s32 mods); void handle_window_resize_events(GLFWwindow *gl_window, s32 width, s32 height);