aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/camera.cpp5
-rw-r--r--src/main.cpp15
-rw-r--r--src/window.cpp19
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) {