Factor out key handling out of the window and into the renderer
This commit is contained in:
parent
0123bb5527
commit
f4328b0b6e
@ -163,3 +163,9 @@ void cleanup_renderer(Renderer *renderer) {
|
|||||||
cleanup_frame_buffer(&renderer->frame_buffer);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -35,4 +35,4 @@ void set_renderer_size(Renderer *renderer, u32 width, u32 height);
|
|||||||
void draw_renderer(Renderer *renderer);
|
void draw_renderer(Renderer *renderer);
|
||||||
void upload_renderer_data(Renderer *renderer, Mesh *vertex_data);
|
void upload_renderer_data(Renderer *renderer, Mesh *vertex_data);
|
||||||
void cleanup_renderer(Renderer *renderer);
|
void cleanup_renderer(Renderer *renderer);
|
||||||
|
void handle_key_events(Renderer *renderer, s32 key, s32 scancode, s32 action, s32 mods);
|
||||||
|
|||||||
@ -40,11 +40,18 @@ bool init_window(Window *window, u32 width, u32 height, string title) {
|
|||||||
|
|
||||||
log(1, "%s: Renderer initialized\n", __FUNCTION__);
|
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<Renderer*>(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<Renderer*>(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
|
// Have to disable so ImGui will accept mouse events
|
||||||
// glfwSetCursorPosCallback(window->glfw_window, handle_mouse_position_events);
|
// glfwSetCursorPosCallback(window->glfw_window, handle_mouse_position_events);
|
||||||
// glfwSetMouseButtonCallback(window->glfw_window, handle_mouse_button_events);
|
// glfwSetMouseButtonCallback(window->glfw_window, handle_mouse_button_events);
|
||||||
@ -76,19 +83,6 @@ void cleanup(Window *window) {
|
|||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_close(GLFWwindow *gl_window) {
|
|
||||||
Window *window = static_cast<Window *>(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<Window *>(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) {
|
void handle_mouse_position_events(GLFWwindow *gl_window, f64 x_pos, f64 y_pos) {
|
||||||
Window *window = static_cast<Window *>(glfwGetWindowUserPointer(gl_window));
|
Window *window = static_cast<Window *>(glfwGetWindowUserPointer(gl_window));
|
||||||
log(1, "%s: Mouse is at position %lf/%lf\n", __FUNCTION__, x_pos, y_pos);
|
log(1, "%s: Mouse is at position %lf/%lf\n", __FUNCTION__, x_pos, y_pos);
|
||||||
|
|||||||
@ -13,7 +13,6 @@ bool init_window(Window *window, u32 width, u32 height, string title);
|
|||||||
void main_loop(Window *window);
|
void main_loop(Window *window);
|
||||||
void cleanup(Window *window);
|
void cleanup(Window *window);
|
||||||
void handle_close(GLFWwindow *gl_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_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_mouse_button_events(GLFWwindow *gl_window, s32 button, s32 action, s32 mods);
|
||||||
void handle_window_resize_events(GLFWwindow *gl_window, s32 width, s32 height);
|
void handle_window_resize_events(GLFWwindow *gl_window, s32 width, s32 height);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user