From ce6805f261116c83b46687b854d17c57dee5abbd Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 7 Nov 2020 23:03:03 +0100 Subject: [PATCH] fix vr controllers interfering with screen drawing --- data/layout.xml | 4 ++++ libs/openvr | 2 +- src/app.cpp | 1 + src/app.h | 1 + src/app_layout.cpp | 19 +++++++++++++++++++ src/app_vr.cpp | 14 ++++++++++---- 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/data/layout.xml b/data/layout.xml index b1015e3..0753c45 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -272,6 +272,10 @@ + + + + diff --git a/libs/openvr b/libs/openvr index 5aa6c5f..e3d3756 160000 --- a/libs/openvr +++ b/libs/openvr @@ -1 +1 @@ -Subproject commit 5aa6c5f0f6520c59c4dce124541ecc62604fd7a5 +Subproject commit e3d37563fd0405117f035c111346f60ca12625ba diff --git a/src/app.cpp b/src/app.cpp index 848426f..a54db64 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -472,6 +472,7 @@ void App::init() if (Settings::value_or("auto-timelapse", true)) rec_start(); + Settings::value("vr-controllers-enabled", vr_controllers_enabled); if (!check_license()) { diff --git a/src/app.h b/src/app.h index 8d3a90b..11624aa 100644 --- a/src/app.h +++ b/src/app.h @@ -132,6 +132,7 @@ public: std::string doc_filename; bool has_stylus = false; bool has_vr = false; + bool vr_controllers_enabled = true; float off_x = 0; float off_y = 0; float width; diff --git a/src/app_layout.cpp b/src/app_layout.cpp index 8840278..5470ed2 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -1004,6 +1004,25 @@ void App::init_menu_tools() }; } + if (auto vr_btn = popup_time->find("tools-vr-controllers")) + { + NodeCheckBox* cb = vr_btn->find("tools-vr-controllers-check"); + cb->set_value(vr_controllers_enabled); + + vr_btn->on_click = [this, vr_btn](Node* b) + { + NodeCheckBox* cb = vr_btn->find("tools-vr-controllers-check"); + cb->set_value(!cb->checked, true); + }; + + vr_btn->find("tools-vr-controllers-check")->on_value_changed = [this, main](Node* target, bool checked) + { + vr_controllers_enabled = checked; + Settings::set("vr-controllers-enabled", Serializer::Boolean(checked)); + Settings::save(); + }; + } + if (auto btn = popup_time->find("tools-timelapse")) { NodeCheckBox* cb = btn->find("tools-timelapse-check"); diff --git a/src/app_vr.cpp b/src/app_vr.cpp index e2240af..d97e21f 100644 --- a/src/app_vr.cpp +++ b/src/app_vr.cpp @@ -49,6 +49,8 @@ void App::vr_draw_ui() void App::vr_update(float dt) { + if (!vr_controllers_enabled) + return; canvas->m_canvas->m_cam_fov = 60; float tan_fov = glm::tan(glm::radians(canvas->m_canvas->m_cam_fov / 2.f)); glm::vec3 aspect = { (float)uirtt.getWidth() / (float)uirtt.getHeight(), 1.f, 1.f }; @@ -106,6 +108,8 @@ void App::vr_update(float dt) void App::vr_analog(const VRController& c, VRController::kButton b, VRController::kAction a, glm::vec2 force) { + if (!vr_controllers_enabled) + return; if (b == VRController::kButton::Trigger) { if (!down_controller && (ui_inside || ui_capture) && ui_visible) @@ -151,7 +155,9 @@ void App::vr_analog(const VRController& c, VRController::kButton b, VRController void App::vr_digital(const VRController& c, VRController::kButton b, VRController::kAction a, glm::vec2 axis) { - if ((b == VRController::kButton::A || b == VRController::kButton::Menu || b == VRController::kButton::Pad) + if (!vr_controllers_enabled) + return; + if ((b == VRController::kButton::A || b == VRController::kButton::Menu || b == VRController::kButton::Pad) && a == VRController::kAction::Press) { if (glm::length(axis) < 0.5f) @@ -400,7 +406,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat } // draw the cursor - if (ui_visible && ui_inside) + if (ui_visible /*&& ui_inside*/) { auto cur = (glm::vec2(cursor.x / width * zoom, 1.f - cursor.y / height * zoom) - 0.5f) * 2.f; auto mvp = proj * camera * @@ -418,7 +424,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat // draw the motion controller sphere - if (ui_visible && ui_inside) + if (vr_controllers_enabled && ui_visible && ui_inside) { auto mvp = proj * camera * vr_controllers[0].m_mat; ShaderManager::use(kShader::Color); @@ -429,7 +435,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat // draw the motion controller brush - if (!ui_visible || !ui_inside) + if (vr_controllers_enabled && (!ui_visible || !ui_inside)) { glm::vec3 cpos = vr_controllers[0].get_pos() - xyz(pose[3]); auto pos = glm::translate(glm::normalize(cpos) * 100.f);