diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/camera.cpp | 5 | ||||
| -rw-r--r-- | src/main.cpp | 15 | ||||
| -rw-r--r-- | src/window.cpp | 19 |
3 files changed, 29 insertions, 10 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index 54c847d..ff09e20 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -36,3 +36,8 @@ void camera::set_aspect_ratio(float aspect_ratio) { first_pixel = position - horizontal / 2.0 - vertical / 2.0 + focus_distance * forward; } + +void camera::move(vec3 v) { + position += v; + first_pixel = position - horizontal / 2.0 - vertical / 2.0 + focus_distance * forward; +} diff --git a/src/main.cpp b/src/main.cpp index a2134bd..fb6319e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,7 +44,7 @@ int main() { // Image dimensions const float aspect_ratio = 16.0 / 9.0; // const float aspect_ratio = 1; - const uint32_t width = 1920; + const uint32_t width = 400; const uint32_t height = width / aspect_ratio; window wnd { width , height }; @@ -72,7 +72,18 @@ int main() { break; } case EVENT_TYPES::KEY_PRESS: { - std::cerr << (uint8_t)event.keycode << std::endl; + switch((uint8_t)event.keycode) { + case('w'): { + renderer.mapped_data->cam.move(renderer.mapped_data->cam.forward * 0.1); + break; + } + case('s'): { + renderer.mapped_data->cam.move(-renderer.mapped_data->cam.forward * 0.1); + break; + } + default: + std::cerr << (uint8_t)event.keycode << std::endl; + } } default: { } diff --git a/src/window.cpp b/src/window.cpp index 8a68612..34427ce 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -58,6 +58,16 @@ window::window(uint32_t width, uint32_t height) xcb_map_window(connection, win); xcb_flush(connection); + uint8_t first_xkb_event; + auto ret = xkb_x11_setup_xkb_extension(connection, + XKB_X11_MIN_MAJOR_XKB_VERSION, + XKB_X11_MIN_MINOR_XKB_VERSION, + XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, + NULL, NULL, NULL, NULL); + if (!ret) { + std::cerr << "Couldn't setup XKB extension" << std::endl; + } + xkb_ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS); if (!xkb_ctx) { @@ -105,6 +115,7 @@ void window::poll_events() { break; } + case XCB_KEY_RELEASE: case XCB_KEY_PRESS: { auto key_press_event = (xcb_key_press_event_t*)event; auto keysym = xkb_state_key_get_one_sym(keyboard_state, key_press_event->detail); @@ -117,14 +128,6 @@ void window::poll_events() { events.push_back(new_event); break; } - case XCB_KEY_RELEASE: { - auto key_press_event = (xcb_key_release_event_t*)event; - events.push_back({ - .keycode = key_press_event->detail, - .type = EVENT_TYPES::KEY_RELEASE - }); - break; - } case XCB_CLIENT_MESSAGE: { auto client_message_event = (xcb_client_message_event_t*)event; if (client_message_event->data.data32[0] == win_delete_atom) { |
