Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e5aea31
fix recenter behavior
ykeara May 18, 2026
bba6a2b
temp fix issues
ykeara Jun 5, 2026
06c9eee
increment version to dev
ykeara Jun 5, 2026
e5710e6
Fix autosave profile initialization, fix openxr movement up/down, all…
ykeara Jul 9, 2026
72b0c06
adjusted logging to reduce spam
ykeara Jul 9, 2026
347bd12
removed unused variable
ykeara Jul 9, 2026
8a0cd47
added delay to openxr space drag to improve performance and stop ovr …
ykeara Aug 3, 2026
63414a2
add logging for debugging issues
ykeara Aug 3, 2026
feb2f53
improved log verbage
ykeara Aug 3, 2026
8bf2505
fix wrong fn call error
ykeara Aug 3, 2026
17033f8
typemismatch error fix
ykeara Aug 3, 2026
3a39d87
add default frame bindings
ykeara Aug 5, 2026
b869eef
openXR space drag skip frames increased 3->5, performance still not g…
ykeara Aug 6, 2026
172e971
remove chaperone universe checking completely, we shouldn't need any …
ykeara Aug 6, 2026
b6c31c3
fix compiler warnings
ykeara Aug 6, 2026
62096ab
update version string to rel
ykeara Aug 19, 2026
4da1871
fix chaperone moving on recenter, fix log spam
ykeara Aug 20, 2026
3333dd5
increment version and back to dev
ykeara Aug 20, 2026
4bd1381
clarify log
ykeara Aug 20, 2026
774da99
change to release
ykeara Aug 27, 2026
d4ed72b
fix openxr space drag issues
ykeara Aug 31, 2026
bc91dd8
remove commented code around openxr
ykeara Aug 31, 2026
3af5d6f
increment version
ykeara Aug 31, 2026
33be102
change how desktop mode displays from URL to steam setting window
ykeara Aug 31, 2026
b9eee62
updated openvr to 2.15.6
ykeara Aug 31, 2026
b3fa3de
increment version
ykeara Sep 3, 2026
7db97a0
Merge branch 'master' into recenterfix
ykeara Sep 3, 2026
d0f1bbf
moved openxr fix to seated mode
ykeara Sep 4, 2026
2a0ebed
removed calibration state log calls, as without context they aren't p…
ykeara Sep 4, 2026
c967732
increment version 5.8.16
ykeara Sep 4, 2026
0274076
remove uncessary logging
ykeara Sep 7, 2026
9eeb578
switch keyboard over to instant input instead of buffered
ykeara Sep 7, 2026
3b5c65b
Fix Edge Cases around keyboard submit, remove permissive compile options
ykeara Sep 7, 2026
d25cd81
increment version
ykeara Sep 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build_scripts/compile_version_string.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.8.13-release
5.8.17-release
2 changes: 1 addition & 1 deletion build_scripts/qt/compilers/msvc.pri
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ warnings_as_errors {
QMAKE_CXXFLAGS += /GL

# Force standards-conformance
QMAKE_CXXFLAGS += /permissive-
# QMAKE_CXXFLAGS += /permissive-
39 changes: 35 additions & 4 deletions src/overlaycontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1235,17 +1235,39 @@ void OverlayController::mainEventLoop()
LOG( DEBUG ) << "Dashboard deactivated";
m_dashboardVisible = false;
settings::saveChangedSettings();
if(0UL != m_lastTextUID){
submitLastTextField(m_lastTextUID);
m_lastTextUID = 0;
}
}
break;

case vr::VREvent_KeyboardDone:
case vr::VREvent_HideKeyboard:
{
char keyboardBuffer[1024];
vr::VROverlay()->GetKeyboardText( keyboardBuffer, 1024 );
if(0UL != m_lastTextUID){
submitLastTextField(m_lastTextUID);
m_lastTextUID = 0;
}
}
break;

case vr::VREvent_KeyboardCharInput:
{
char keyboardBuffer[64];
vr::VROverlay()->GetKeyboardText( keyboardBuffer, 64 );
emit keyBoardInputSignal( QString( keyboardBuffer ),
static_cast<unsigned long>(
vrEvent.data.keyboard.uUserValue ) );
m_lastTextUID = static_cast<unsigned long>(vrEvent.data.keyboard.uUserValue);
}
// case vr::VREvent_KeyboardDone:
// {
// char keyboardBuffer[1024];
// vr::VROverlay()->GetKeyboardText( keyboardBuffer, 1024 );
// emit keyBoardInputSignal( QString( keyboardBuffer ),
// static_cast<unsigned long>(
// vrEvent.data.keyboard.uUserValue ) );
// }
break;

case vr::VREvent_SeatedZeroPoseReset:
Expand Down Expand Up @@ -1572,11 +1594,20 @@ const vr::VROverlayHandle_t& OverlayController::overlayThumbnailHandle()
void OverlayController::showKeyboard( QString existingText,
unsigned long userValue )
{
// vr::VROverlay()->ShowKeyboardForOverlay(
// m_ulOverlayHandle,
// vr::k_EGamepadTextInputModeNormal,
// vr::k_EGamepadTextInputLineModeSingleLine,
// 0,
// "Advanced Settings Overlay",
// 1024,
// existingText.toStdString().c_str(),
// userValue );
vr::VROverlay()->ShowKeyboardForOverlay(
m_ulOverlayHandle,
vr::k_EGamepadTextInputModeNormal,
vr::k_EGamepadTextInputLineModeSingleLine,
0,
vr::KeyboardFlag_Modal+vr::KeyboardFlag_Minimal+vr::KeyboardFlag_HideDoneKey,
"Advanced Settings Overlay",
1024,
existingText.toStdString().c_str(),
Expand Down
3 changes: 2 additions & 1 deletion src/overlaycontroller.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#pragma once

#include <openvr.h>
#include <QtCore/QtCore>
// because of incompatibilities with QtOpenGL and GLEW we need to cherry pick
Expand Down Expand Up @@ -131,6 +130,7 @@ class OverlayController : public QObject
QString m_updateMessage = "";
QString m_optionalMessage = "";
QString m_versionCheckText = "";
unsigned long m_lastTextUID = 0;

QUrl m_runtimePathUrl;

Expand Down Expand Up @@ -293,6 +293,7 @@ public slots:
void autoApplyChaperoneEnabledChanged( bool value );
void soundVolumeChanged( double value );
void desktopModeToggleChanged( bool value );
void submitLastTextField(unsigned long value = 0);
};

} // namespace advsettings
53 changes: 48 additions & 5 deletions src/res/qml/common/MyTextField.qml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import ovras.advsettings 1.0
TextField {
property int keyBoardUID: 0
property string savedText: ""
property bool active: false
id: myTextField
color: "#d9dbe0"
text: ""
Expand All @@ -18,19 +19,25 @@ TextField {
}
onClicked: {
myTextField.forceActiveFocus()
active = true;
}
}
onActiveFocusChanged: {
if (activeFocus) {
active = true;
if (!OverlayController.desktopMode) {
OverlayController.showKeyboard(text, keyBoardUID)
} else {
savedText = text
}
//savedText = text
}
//When box loses focus apply changes
else{
myTextField.onInputEvent(text)
active = false;
}
}
onEditingFinished: {
if (OverlayController.desktopMode && savedText !== text) {
if(OverlayController.desktopMode){
myTextField.onInputEvent(text)
}
}
Expand All @@ -39,11 +46,47 @@ TextField {
}
Connections {
target: OverlayController

onSubmitLastTextField:{
//value here is UID
if(value == 0){
active = false;
return;
}

if(value == keyBoardUID && active == true){
myTextField.onInputEvent(text)
active = false;
}
}

onKeyBoardInputSignal: {
if (userValue == keyBoardUID) {
if (myTextField.text !== input) {
myTextField.onInputEvent(input)
if(input == '\b'){
myTextField.text = text.slice(0,-1)
return
}
else if(input == '\e'){
myTextField.text = text.slice(0,cursorPosition)+text.slice(cursorposition+1)
return;
}
//Execute input
else if(input == '\n'){
if(!OverlayController.desktopMode){
//myTextField.onInputEvent(input)
myTextField.focus = false;
}
return;
}
else if(input=='\r'){
return;
}
else{
myTextField.text = text + input;
}
//if (myTextField.text !== input) {
// myTextField.onInputEvent(input)
//}
}
}
}
Expand Down
48 changes: 17 additions & 31 deletions src/tabcontrollers/MoveCenterTabController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,11 @@ void MoveCenterTabController::setTrackingUniverse( int value, bool notify )
if ( m_trackingUniverse != value )
{
vr::VRChaperoneSetup()->HideWorkingSetPreview();
if ( !m_roomSetupModeDetected && value == vr::TrackingUniverseStanding )
{
reset();
}
//TODO verify
// if ( !m_roomSetupModeDetected && value == vr::TrackingUniverseStanding )
// {
// reset();
// }

m_trackingUniverse = value;
if ( notify )
Expand Down Expand Up @@ -914,20 +915,15 @@ void MoveCenterTabController::incomingZeroReset()
// aspects) IN mixed tracking environments I get this issue, the check if
// there is an error and apply autosaved profile is hopefully a workaround

//This should catch OpenXR games, and helps prevent a loop on zero resets.
if(m_trackingUniverse==vr::TrackingUniverseRawAndUncalibrated){
return;
}

auto calState = vr::VRChaperone()->GetCalibrationState();
LOG( INFO ) << "Calibration State on Recenter is: " << calState;
//Any Logging should be handled after openXR check to avoid spam;
//auto calState = vr::VRChaperone()->GetCalibrationState();
//LOG( INFO ) << "Calibration State on Recenter is: " << calState;

//TODO 8/3/2026 SteamFrame May Need special handling, will discuss With Valve currently
//reset zero pose seems to move floor level as well as our changes, requiring 2 resets to set at correct level
//or we could potentially not apply our offset during this process
float offset[3] = { 0, 0, 0 };
offset[1] = -m_offsetY;
//TODO set universe center and seated recenter as 0 for this part
vr::VRChaperoneSetup()->RevertWorkingCopy();
vr::VRChaperoneSetup()->GetWorkingStandingZeroPoseToRawTrackingPose(
&m_universeCenterForReset );
Expand All @@ -939,12 +935,14 @@ void MoveCenterTabController::incomingZeroReset()
return;
}

//TODO 9/4/26 This needs to be looked at This moves the chaperone, and seems to do same thing as
//zerooffsets....
void MoveCenterTabController::reset()
{
// DO NOT attempt to apply autosaved profile on reset, as it is triggered by
// the apply chaperone profile Side effects are bad!
auto calState = vr::VRChaperone()->GetCalibrationState();
LOG( INFO ) << "Calibration State on Reset is: " << calState;
//auto calState = vr::VRChaperone()->GetCalibrationState();
//LOG( INFO ) << "Calibration State on Reset is: " << calState;

if ( !m_chaperoneBasisAcquired )
{
Expand Down Expand Up @@ -1146,7 +1144,7 @@ void MoveCenterTabController::zeroOffsets()
m_roomSetupModeDetected = false;
}

LOG( INFO ) << "SUCCESS: Chaperone Data Updated and Offsets zeroed out";
//LOG( INFO ) << "SUCCESS: Chaperone Data Updated and Offsets zeroed out";
}

void MoveCenterTabController::sendSeatedRecenter()
Expand Down Expand Up @@ -1893,8 +1891,9 @@ void MoveCenterTabController::resetOffsets( bool resetOffsetsJustPressed )
emit offsetZChanged( m_offsetZ );
emit rotationChanged( m_rotation );
updateSpace( true );
auto calState = vr::VRChaperone()->GetCalibrationState();
LOG( INFO ) << "Calibration State on Reset Offsets is: " << calState;

//auto calState = vr::VRChaperone()->GetCalibrationState();
//LOG( INFO ) << "Calibration State on Reset Offsets is: " << calState;

// if ( calState > 199 && m_initComplete )
// {
Expand Down Expand Up @@ -2623,7 +2622,7 @@ void MoveCenterTabController::updateSpace( bool forceUpdate )
}

// keep the seated origin synced with offsets if in seated mode
if ( m_trackingUniverse == vr::TrackingUniverseSeated )
if ( m_trackingUniverse == vr::TrackingUniverseSeated || m_trackingUniverse == vr::TrackingUniverseRawAndUncalibrated )
{
vr::HmdMatrix34_t offsetSeatedCenter;

Expand Down Expand Up @@ -2708,19 +2707,6 @@ void MoveCenterTabController::updateSpace( bool forceUpdate )
vr::VRChaperoneSetup()->SetWorkingStandingZeroPoseToRawTrackingPose(
&offsetUniverseCenter );

//openxr
//In OpenXR titles commitworkingcopy essentially causes zero resets, this is too much work, and causes lag
//As such we will update every third frame for OpenXR titles, this should be reasonably responsive.
//We may have to re-visit or make user adjustable
if(m_trackingUniverse==vr::TrackingUniverseRawAndUncalibrated){
m_openXRSkip++;
if(m_openXRSkip % 5==0){
vr::VRChaperoneSetup()->CommitWorkingCopy(
vr::EChaperoneConfigFile_Live );
m_openXRSkip = 0;
}
}
//This is what actually throws you into the "working set" instead of live.
vr::VRChaperoneSetup()->ShowWorkingSetPreview();

if ( m_collisionBoundsCountForReset > 0 )
Expand Down
7 changes: 3 additions & 4 deletions src/tabcontrollers/SteamVRTabController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -507,14 +507,13 @@ void SteamVRTabController::launchBindingUI()
LOG( ERROR )
<< "failed to get input handle? is your right controller on?";
}
bool desktopShow = false;
if ( parent->isDesktopMode() )
{
QDesktopServices::openUrl(
QUrl( "http://127.0.0.1:27062/dashboard/controllerbinding.html" ) );
return;
desktopShow = true;
}
auto error = vr::VRInput()->OpenBindingUI(
application_strings::applicationKey, actionHandle, inputHandle, false );
application_strings::applicationKey, actionHandle, inputHandle, desktopShow );
if ( error != vr::VRInputError_None )
{
LOG( ERROR ) << "Input Error: " << error;
Expand Down
24 changes: 18 additions & 6 deletions third-party/openvr/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,25 @@
OpenVR SDK
---

OpenVR is an API and runtime that allows access to VR hardware from multiple
vendors without requiring that applications have specific knowledge of the
hardware they are targeting. This repository is an SDK that contains the API
and samples. The runtime is under SteamVR in Tools on Steam.
OpenVR is an API and runtime that allows access to VR hardware from multiple
vendors without requiring that applications have specific knowledge of the
hardware they are targeting. This repository is an SDK that contains the API
and samples. The runtime is under SteamVR in Tools on Steam.

### Documentation

Documentation for the API is available on the [Github Wiki](https://github.com/ValveSoftware/openvr/wiki/API-Documentation)
#### Application API

More information on OpenVR and SteamVR can be found on http://steamvr.com
Documentation for the Application API is available on
the [GitHub Wiki](https://github.com/ValveSoftware/openvr/wiki/API-Documentation).

#### Driver API

Current documentation for the Driver API can be found in [docs/Driver_API_Documentation.md](docs/).

* Old driver API documentation can still be found on
the [GitHub Wiki](https://github.com/ValveSoftware/openvr/wiki/Driver-Documentation).

### About

More information on OpenVR and SteamVR can be found on https://steamvr.com
Binary file modified third-party/openvr/bin/linux32/libopenvr_api.so
Binary file not shown.
Binary file modified third-party/openvr/bin/linux32/libopenvr_api.so.dbg
Binary file not shown.
Binary file modified third-party/openvr/bin/linux64/libopenvr_api.so
Binary file not shown.
Binary file modified third-party/openvr/bin/linux64/libopenvr_api.so.dbg
Binary file not shown.
Binary file modified third-party/openvr/bin/win32/openvr_api.dll
Binary file not shown.
Binary file modified third-party/openvr/bin/win32/openvr_api.pdb
Binary file not shown.
Binary file modified third-party/openvr/bin/win64/openvr_api.dll
Binary file not shown.
Binary file modified third-party/openvr/bin/win64/openvr_api.pdb
Binary file not shown.
Loading