From 74d2c71c531bd0848f6943e043a8cecc1d7ebea9 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Fri, 7 Apr 2023 13:26:42 +0200 Subject: [PATCH] cleanup --- src/app.cpp | 27 ++++++++++++++++----------- src/app.h | 3 ++- src/panel.cpp | 18 +++++------------- src/panel.h | 1 + 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/app.cpp b/src/app.cpp index b437ddb..144252a 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -5,7 +5,7 @@ App::App() { - _tracking_origin = vr::ETrackingUniverseOrigin::TrackingUniverseStanding; + _tracking_origin = vr::TrackingUniverseStanding; InitOVR(); InitX11(); @@ -36,8 +36,9 @@ void App::InitX11() void App::InitOVR() { vr::EVRInitError init_err; - vr_sys = vr::VR_Init(&init_err, vr::EVRApplicationType::VRApplication_Background); - if (init_err == vr::EVRInitError::VRInitError_Init_NoServerForBackgroundApp) + // would normally be using VRApplication_Overlay, but Background allows it to quit if steamvr is not running, instead of opening steamvr. + vr_sys = vr::VR_Init(&init_err, vr::VRApplication_Background); + if (init_err == vr::VRInitError_Init_NoServerForBackgroundApp) { printf("SteamVR is not running\n"); exit(1); @@ -55,7 +56,7 @@ void App::InitGLFW() { assert(glfwInit() == true); glfwWindowHint(GLFW_VISIBLE, false); - // TODO this is creating a 1x1 window, should it be bigger? + // creating a 1x1 window, since it is hidden anyway _gl_window = glfwCreateWindow(1, 1, "Overlay", nullptr, nullptr); assert(_gl_window != nullptr); glfwMakeContextCurrent(_gl_window); @@ -70,6 +71,14 @@ void App::Update() } } +std::vector App::GetControllers() +{ + static const auto max_len = 64; + TrackerID controllers[max_len]; + int controller_count = vr_sys->GetSortedTrackedDeviceIndicesOfClass(vr::TrackedDeviceClass_Controller, controllers, max_len); + return std::vector(controllers, controllers + controller_count); +} + glm::mat4 App::GetTrackerPose(TrackerID tracker) { vr::VRControllerState_t state; @@ -83,19 +92,15 @@ glm::mat4 App::GetTrackerPose(TrackerID tracker) return ConvertMat(tracked_pose.mDeviceToAbsoluteTracking); } -bool App::IsGrabActive(vr::TrackedDeviceIndex_t controller) +bool App::IsGrabActive(TrackerID controller) { vr::VRControllerState_t state; auto get_state_err = vr_sys->GetControllerState(controller, &state, sizeof(vr::VRControllerState_t)); if (get_state_err == false) - { - printf("Error getting controller state: %d\n", get_state_err); return false; - } - // printf("got state\n"); - auto trigger_mask = vr::ButtonMaskFromId(vr::EVRButtonId::k_EButton_SteamVR_Trigger); - auto b_mask = vr::ButtonMaskFromId(vr::EVRButtonId::k_EButton_IndexController_B); + auto trigger_mask = vr::ButtonMaskFromId(vr::k_EButton_SteamVR_Trigger); + auto b_mask = vr::ButtonMaskFromId(vr::k_EButton_IndexController_B); auto mask = trigger_mask | b_mask; return (state.ulButtonPressed & mask) == mask; } diff --git a/src/app.h b/src/app.h index c3dc926..10cd469 100644 --- a/src/app.h +++ b/src/app.h @@ -17,8 +17,9 @@ class App ~App(); void Update(); + std::vector GetControllers(); glm::mat4 GetTrackerPose(TrackerID tracker); - bool IsGrabActive(vr::TrackedDeviceIndex_t controller); + bool IsGrabActive(TrackerID controller); CursorPos GetCursorPosition(); Display *_xdisplay; diff --git a/src/panel.cpp b/src/panel.cpp index e95a683..8e93e51 100644 --- a/src/panel.cpp +++ b/src/panel.cpp @@ -20,8 +20,8 @@ Panel::Panel(App *app, int index, int x, int y, int width, int height) glGenTextures(1, &_gl_texture); glBindTexture(GL_TEXTURE_2D, _gl_texture); - _texture.eColorSpace = vr::EColorSpace::ColorSpace_Auto; - _texture.eType = vr::ETextureType::TextureType_OpenGL; + _texture.eColorSpace = vr::ColorSpace_Auto; + _texture.eType = vr::TextureType_OpenGL; _texture.handle = (void *)(uintptr_t)_gl_texture; // create overlay @@ -37,7 +37,6 @@ Panel::Panel(App *app, int index, int x, int y, int width, int height) // (flipping uv on y axis because opengl and xorg are opposite) vr::VRTextureBounds_t bounds{0, 1, 1, 0}; _app->vr_overlay->SetOverlayTextureBounds(_id, &bounds); - _app->vr_overlay->SetOverlayTransformAbsolute(_id, _app->_tracking_origin, &DEFAULT_POSE); } } @@ -49,23 +48,16 @@ void Panel::Update() if (!_is_held) { - vr::TrackedDeviceIndex_t controllers[8]; - auto controller_count = _app->vr_sys->GetSortedTrackedDeviceIndicesOfClass(vr::ETrackedDeviceClass::TrackedDeviceClass_Controller, controllers, 8); - - for (unsigned int i = 0; i < controller_count; i++) + for (auto controller : _app->GetControllers()) { - auto controller = controllers[i]; - vr::HmdMatrix34_t overlay_pose; vr::ETrackingUniverseOrigin tracking_universe; _app->vr_overlay->GetOverlayTransformAbsolute(_id, &tracking_universe, &overlay_pose); - auto controller_pose = _app->GetTrackerPose(controller); - auto controller_pos = glm::vec3(controller_pose[3]); - auto overlay_pos = glm::vec3(ConvertMat(overlay_pose)[3]); + auto controller_pos = GetPos(_app->GetTrackerPose(controller)); + auto overlay_pos = GetPos(ConvertMat(overlay_pose)); bool close_enough = glm::length(overlay_pos - controller_pos) < 1.0f; - // close_enough = true; if (close_enough && _app->IsGrabActive(controller)) { diff --git a/src/panel.h b/src/panel.h index e2becd8..65c3e4f 100644 --- a/src/panel.h +++ b/src/panel.h @@ -3,6 +3,7 @@ #include const vr::HmdMatrix34_t DEFAULT_POSE = {{{1, 0, 0, 0}, {0, 1, 0, 1}, {0, 0, 1, 0}}}; + class App; class Panel