README: status, new Steam Frame facts (Steam's generated app manifest,
OpenVR library, display and font metrics) and open points. PROGRESS:
partial results of T1, T2 and T4, and what is open next.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On the Steam Frame, the fixed 1200x800 layout lost about its bottom
quarter. Measured with --snapshot: fonts and DPI are as intended, but
the controls ran in the Material style. The qt6 branch changed
mainwidget.qml's "import QtQuick.Controls" into
"import QtQuick.Controls.Material", which fixes Material for all
controls and even overrides QT_QUICK_CONTROLS_STYLE. Material's insets
and padding make the navigation buttons 65 px tall instead of 45 px
(Fusion) or 49 px (Basic, Qt 5's default style renamed); nothing in the
file uses Material.
mainwidget.qml imports QtQuick.Controls again, and main.cpp sets Fusion
explicitly, so the sizes are the same on every platform instead of
depending on Qt 6's per-platform default. With Basic the last navigation
button is still cut off on the Frame; with Fusion everything fits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On the Steam Frame, the fixed 1200x800 QML layout overflows: about the
bottom quarter is cut off and the navigation icons overlap their text.
Forcing 96 DPI and switching the Quick Controls style didn't help, so the
cause has to be measured rather than guessed.
- SetWidget() logs the application font (family, pt, px), what 20 pt
(MyText) is in px, the screen's DPI and the device pixel ratio.
- --snapshot <file> writes the rendered overlay (RenderBackend::readback)
as PNG at most once per second while it is visible. A time interval,
because OVRAS only renders when the scene changes. Written to a
temporary file and renamed, so readers never see a partial file.
- run.sh passes arguments after the graphics API to the program.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On master, easylogging's Debug level was disabled unless OVRAS was built
with debugSymbolsAndLogs (ENABLE_DEBUG_LOGGING). The qt6 branch switched
to qDebug() and lost that: debugLoggingEnabled was left unused, and all
debug output reached the log. On the Steam Frame it filled with
"updateAllPulseData done." about every 11 ms, as the audio tab reads the
microphone's mute state on every tick.
setUpLogging() now disables debug output through a logging filter rule.
QT_LOGGING_RULES="*.debug=true" takes precedence and turns it on again
for troubleshooting without a rebuild.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Steam writes every VR app the user owns into its generated
steamapps.vrmanifest, installed or not. Whoever owns OVRAS on Steam
therefore always has steam.overlay.1009850 registered, as a steam:// URL
without a working directory, and --force-install-manifest failed with
"Could not find working directory of already installed application:
VRApplicationError_PropertyNotSet" (found on the Steam Frame).
Such an entry has no manifest file to remove, so OVRAS now leaves it
alone and adds its own manifest. Whether SteamVR accepts a second
manifest for the key, and which entry it then uses, is not documented:
logApplicationEntry() logs what SteamVR reports for the key after
installing, so a test on the Frame shows it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On the Steam Frame, VR_Init failed with "Installation path could not be
located": the SDK's lib/linuxarm64/libopenvr_api.so (2.15.6) reads the VR
path registry from the fixed path /data/work/openvrpaths.vrpath instead
of ~/.config/openvr. The SDK's bin/linuxarm64 library of the same version
uses ~/.config/openvr; the vrdashboard template ships it and was verified
on the Frame. It is added as a new file (third-party/openvr had no
bin/linuxarm64, and "bin" is gitignored, hence force-added), and aarch64
builds link against and ship it. x86_64 and Windows are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first deploy to the Steam Frame aborted in install.sh: OVRAS creates
its QApplication before it handles --force-install-manifest, and Qt's
default platform plugin (xcb) aborts when there is no display, as over
SSH. Registering and unregistering draw nothing, so the generated
install.sh and uninstall.sh now run them with QT_QPA_PLATFORM=offscreen.
The normal start keeps DISPLAY=:0, as rendering needs a real context.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- docs/steamframe/README.md: entry point with status, branches/remotes, setup,
commands, Steam Frame facts, open points.
- CLAUDE.md: working rules and code conventions (fork-only).
- docs/steamframe/OVRAS-FEATURES.md: OVRAS's features, how they are
implemented, issues found while reading.
- PROGRESS.md: status and wrap-up.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CMake build had the version hard-coded as 5.7.4, while the qmake build
read it from compile_version_string.txt (5.8.17-release). The stale number
also made the version check report an update. As in the qmake build, the
full string becomes APPLICATION_VERSION and its numeric part the project
version.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- build_scripts/steamframe/: Debian trixie (Qt 6.8) containers for the
aarch64 cross build, native build and tests; toolchain; scripts to build,
test (Vulkan validation layers), package (system Qt, ~3 MB) and deploy over
SSH. Adapted from the vrdashboard template.
- test/render/: render test for the OpenGL and Vulkan backends, driven like
OverlayController (option OVRAS_BUILD_TESTS).
- RPATH only $ORIGIN, without the build machine's link directories.
- Ignore dist/.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- manifest.vrmanifest: binary_path_linux and binary_path_linux_arm. The
Steam Frame's SteamVR reads only binary_path_linux_arm.
- handleManifests(): connect as Utility app first (works without a running
SteamVR, e.g. from the Windows installer); if SteamVR refuses Utility apps,
as on the Steam Frame, connect as Background app. Fail right away on other
errors instead of going through initializeOpenVR()'s retry loop.
- main(): check --graphics-api before connecting to OpenVR, so a wrong value
fails right away.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the QRhi rendering in OverlayController (private Qt API) with the
render backends of the vrdashboard template (src/render/), which use public
Qt API only (QQuickRenderTarget::fromOpenGLTexture / fromVulkanImage). The
binary then runs on another Qt 6 patch release, e.g. the Steam Frame's system
Qt.
The Vulkan backend also does what SteamVR requires and the QRhi path lacked:
the required instance/device extensions and the HMD's GPU (via
openvr_init::renderInterop()), VK_FORMAT_R8G8B8A8_UNORM, and the transition to
TRANSFER_SRC_OPTIMAL after each frame.
- New option --graphics-api opengl|vulkan (default opengl, no fallback).
- Shutdown() calls VR_Shutdown before the render target and Qt's device go
(crash on the Steam Frame with Vulkan otherwise); it runs only once.
- Mouse y is flipped on every platform: SteamVR reports it in GL convention.
- Render delay 5 -> 16 ms (about 60 fps).
- GuiPrivate is no longer needed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CMake option OVRAS_STEAM_FRAME. It is evaluated only in
src/utils/platform_capabilities.h, which turns it into named capability
constants and platform defaults.
- Where the chaperone can't be committed (Steam Frame: it shifts the play
area), MoveCenterTabController no longer commits the working copy at start-up
or when applying reset data, and doesn't create the init autosave profile.
Skips are logged once.
- In "vsync disabled" mode the pump timer now runs directly at the custom tick
rate instead of firing every 1 ms and counting. The Frame defaults to this
mode at 11 ms (~90 Hz).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Remove Core5Compat (unused, not part of the Steam Frame's system Qt).
- Request GuiPrivate explicitly (required since Qt 6.10 for QRhi); temporary
until rendering moves to public API.
- Compile QML to bytecode only: C++ generated from QML uses private Qt API
that only matches the exact Qt version it was built with.
- Pick the OpenVR library per architecture (linux64, linuxarm64, win64) for
linking and for the copy next to the binary; RPATH $ORIGIN.
- Link libXtst, needed by input_sender_X11.cpp.
- Include d3d11.h and handle QRhi::D3D11 only on Windows.
- Replace leftover easylogging LOG(INFO) calls with qInfo().
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Internal fork based on upstream's qt6 branch (2d4db7e). Goal: OVRAS runs
natively on the Steam Frame (SteamOS, aarch64) with a minimal change set
against qt6 and only public Qt API.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* fix recenter behavior
* temp fix issues
* increment version to dev
* Fix autosave profile initialization, fix openxr movement up/down, allow using space fix in openxr state
* adjusted logging to reduce spam
* removed unused variable
* added delay to openxr space drag to improve performance and stop ovr api calls
* add logging for debugging issues
* improved log verbage
* fix wrong fn call error
* typemismatch error fix
* add default frame bindings
* openXR space drag skip frames increased 3->5, performance still not great
* remove chaperone universe checking completely, we shouldn't need any features
* fix compiler warnings
* update version string to rel
* fix chaperone moving on recenter, fix log spam
* increment version and back to dev
* clarify log
* change to release
* fix openxr space drag issues
* remove commented code around openxr
* increment version
* change how desktop mode displays from URL to steam setting window
* updated openvr to 2.15.6
* increment version
* moved openxr fix to seated mode
* removed calibration state log calls, as without context they aren't particularly useful
* increment version 5.8.16
* remove uncessary logging
* switch keyboard over to instant input instead of buffered
* Fix Edge Cases around keyboard submit, remove permissive compile options
* increment version
* fix recenter behavior
* temp fix issues
* increment version to dev
* Fix autosave profile initialization, fix openxr movement up/down, allow using space fix in openxr state
* adjusted logging to reduce spam
* removed unused variable
* added delay to openxr space drag to improve performance and stop ovr api calls
* add logging for debugging issues
* improved log verbage
* fix wrong fn call error
* typemismatch error fix
* add default frame bindings
* openXR space drag skip frames increased 3->5, performance still not great
* remove chaperone universe checking completely, we shouldn't need any features
* fix compiler warnings
* update version string to rel
* fix chaperone moving on recenter, fix log spam
* increment version and back to dev
* clarify log
* change to release
* update qt6 upgrade progress
* add flawed addition for QRenderTarget and link needed libs
* update to better logging format
* move many assets and qml files into qrc
* get rid of deprecation messages
* remove additional deprecation notices
* make Qt6 finally render on desktop with some progress on vr
* initialize QRhi with QQuickRenderControl
* use default values to stop SegFaults
* fix compilation on windows
* add windows files for aiding in running exe
* fix formatting of testing qt.conf
* first attempt on using textures instead of files in AudioTabController
* Fix public/private access issue
* use getter instead of directly accessing class members
* use QImage as a base to set overlay textures
* use native logging
* add more QImage Overlays
* implement faulty vulkan implementation
---------
Co-authored-by: ykeara <ykeara1@gmail.com>
* update qt6 upgrade progress
* add flawed addition for QRenderTarget and link needed libs
* update to better logging format
* move many assets and qml files into qrc
* get rid of deprecation messages
* remove additional deprecation notices
* make Qt6 finally render on desktop with some progress on vr
* initialize QRhi with QQuickRenderControl
* use default values to stop SegFaults
* fix compilation on windows
* add windows files for aiding in running exe
* fix formatting of testing qt.conf
* first attempt on using textures instead of files in AudioTabController
* Fix public/private access issue
---------
Co-authored-by: RTUnreal <unreal@rtinf.net>
* change fix floor re-center to just be standard recenter
* add some error handling around calibration state, force chaperone to live state on 0 offset
* fix commit
* Changed fix floor functions to operate off of move center controller
* add cur offset to center rebased to move center tab controller
* update version number
* fix initialization issue for universe center
* add check to re-initialize if calibration state is not yet set i.e. lighthouse sleep
* increment version number, slight change for specifically 200 error
* remove commented code
* fix conversion error warning
* add delay if interface not found
* adjust initialization behavior
* pushed for debugging reasons for concerned parties
* comment out simple recenter
* remove old style motion, some minor optimizations
* optimize default case check
* optimized default condition
* change manifest install behavior to trigger on desktop mode as well
* add desktop mode binding launch
* add tracker overlay option to utils
* commit to check status
* attempt to fix native LH issues with chaperone when exiting
* add desktop mode toggle and some cleanup
* remove adjust chaperone
* remove clang format from ci, increment version, cleanup
* update circle ci
* fix conversion warning
* add F13-19 to keyboard parser
* add additional logging around failure to initialize
* add unsaved changes
* update version 5.8.1
* fix some collisions in enum declaration
* add controller powers on steamvr, and no HMD to steamvr tab, increment version
* slightly alter drag movement, fix qml issue
* code cleanup
* fix logspam/attempt to delete non existant overlays
* increment version 5.8.3
* add zero-offset to true as potential edge case fix
* remove dead code in qml
* fix both brightness sliders to be uniform .05 minimum via set, and .2 minimum via slider
* attempt to fix recenter, and fix floor
* further space drag/recenter improvements
* get rid of old code
* increment version 5.8.6
* remove old commented code settings page
* update documentation
* re-add mistakenly removed line
* attempt at fixing reset etc. etc.
* incrment verison
* fix brightness slider min at 3 or 20 depending if slide or direct input add error recovery from bad cal state on recenter and reset offsets
* update version 5.8.8
* fix room-setup bug on startup if using auto apply chaperone
* incrmenet version 5.8.9
* add delay if interface not found
* adjust initialization behavior
* pushed for debugging reasons for concerned parties
* comment out simple recenter
* remove old style motion, some minor optimizations
* optimize default case check
* optimized default condition
* change manifest install behavior to trigger on desktop mode as well
* add desktop mode binding launch
* add tracker overlay option to utils
* commit to check status
* attempt to fix native LH issues with chaperone when exiting
* add desktop mode toggle and some cleanup
* remove adjust chaperone
* remove clang format from ci, increment version, cleanup
* update circle ci
* fix conversion warning
* add F13-19 to keyboard parser
* add additional logging around failure to initialize
* add unsaved changes
* update version 5.8.1
* fix some collisions in enum declaration
* add controller powers on steamvr, and no HMD to steamvr tab, increment version
* slightly alter drag movement, fix qml issue
* code cleanup
* fix logspam/attempt to delete non existant overlays
* increment version 5.8.3
* add zero-offset to true as potential edge case fix
* remove dead code in qml
* fix both brightness sliders to be uniform .05 minimum via set, and .2 minimum via slider
* attempt to fix recenter, and fix floor
* further space drag/recenter improvements
* get rid of old code
* increment version 5.8.6
* remove old commented code settings page
* update documentation
* re-add mistakenly removed line
* attempt at fixing reset etc. etc.
* incrment verison
* fix brightness slider min at 3 or 20 depending if slide or direct input add error recovery from bad cal state on recenter and reset offsets
* update version 5.8.8
* fix room-setup bug on startup if using auto apply chaperone
* incrmenet version 5.8.9
* add delay if interface not found
* adjust initialization behavior
* pushed for debugging reasons for concerned parties
* comment out simple recenter
* remove old style motion, some minor optimizations
* optimize default case check
* optimized default condition
* change manifest install behavior to trigger on desktop mode as well
* add desktop mode binding launch
* add tracker overlay option to utils
* commit to check status
* attempt to fix native LH issues with chaperone when exiting
* add desktop mode toggle and some cleanup
* remove adjust chaperone
* remove clang format from ci, increment version, cleanup
* update circle ci
* fix conversion warning
* add F13-19 to keyboard parser
* add additional logging around failure to initialize
* add unsaved changes
* update version 5.8.1
* fix some collisions in enum declaration
* add controller powers on steamvr, and no HMD to steamvr tab, increment version
* slightly alter drag movement, fix qml issue
* code cleanup
* fix logspam/attempt to delete non existant overlays
* increment version 5.8.3
* add zero-offset to true as potential edge case fix
* remove dead code in qml
* fix both brightness sliders to be uniform .05 minimum via set, and .2 minimum via slider
* attempt to fix recenter, and fix floor
* further space drag/recenter improvements
* get rid of old code
* increment version 5.8.6
* remove old commented code settings page
* update documentation
* re-add mistakenly removed line
* add delay if interface not found
* adjust initialization behavior
* pushed for debugging reasons for concerned parties
* comment out simple recenter
* remove old style motion, some minor optimizations
* optimize default case check
* optimized default condition
* change manifest install behavior to trigger on desktop mode as well
* add desktop mode binding launch
* add tracker overlay option to utils
* commit to check status
* attempt to fix native LH issues with chaperone when exiting
* add desktop mode toggle and some cleanup
* remove adjust chaperone
* remove clang format from ci, increment version, cleanup
* update circle ci
* fix conversion warning
* add F13-19 to keyboard parser
* add additional logging around failure to initialize
* add unsaved changes
* update version 5.8.1
* fix some collisions in enum declaration
* add controller powers on steamvr, and no HMD to steamvr tab, increment version
* slightly alter drag movement, fix qml issue
* code cleanup
* fix logspam/attempt to delete non existant overlays
* increment version 5.8.3
* update openvr 1.26.7
* ignore chaperone play area error, as it should not effect chaperone, and it frequently occurs with some meta to pcvr configurations
* replace old seated origin call with new reset zero pose call
* change zero offsets to new command
* adjust camera settings to new version of openvr 1.27
* fix save error
* increment version 5.7.4
* Option to fade out chaperone when HMD goes below a configured height
Useful for setups in which you have a seat just outside your VR space,
or like to sit in the middle of your space for any amount of time. Will
fade out the boundaries to 0% opacity over 5 seconds, 5 seconds after
you sit down. Standing back up to the configured height will make them
pop back in immediately.
Can be found under Chaperone -> Additional Settings.
* Update format.sh to require clang-format v10
* Use fade distance instead of opacity, opacity inconsistently applied
* Bugfixes (#624)
* stop crashing on HMD Init Errors, as well as bypass force quit on all steamvr Init Errors
* add qtc clang to gitignore
* add app volume adjustment
* adjust app volume placement in menu
* fix type error
* Revert 1.26.3 chaperone adjust changes
* fix setting bug increment version
---------
Co-authored-by: Chelsea Jaggi <feilen1000@gmail.com>
* fix chaperone move behavior for 1.26.x of open/steamvr fix a ui error with a warning on old app and external chaperone
---------
Co-authored-by: Chelsea Jaggi <feilen1000@gmail.com>
* Option to fade out chaperone when HMD goes below a configured height
Useful for setups in which you have a seat just outside your VR space,
or like to sit in the middle of your space for any amount of time. Will
fade out the boundaries to 0% opacity over 5 seconds, 5 seconds after
you sit down. Standing back up to the configured height will make them
pop back in immediately.
Can be found under Chaperone -> Additional Settings.
* Update format.sh to require clang-format v10
* Use fade distance instead of opacity, opacity inconsistently applied
* Bugfixes (#624)
* stop crashing on HMD Init Errors, as well as bypass force quit on all steamvr Init Errors
* add qtc clang to gitignore
* add app volume adjustment
* adjust app volume placement in menu
* fix type error
* update version string, prevent us from exiting when interface reported bad
---------
Co-authored-by: Chelsea Jaggi <feilen1000@gmail.com>
* Option to fade out chaperone when HMD goes below a configured height
Useful for setups in which you have a seat just outside your VR space,
or like to sit in the middle of your space for any amount of time. Will
fade out the boundaries to 0% opacity over 5 seconds, 5 seconds after
you sit down. Standing back up to the configured height will make them
pop back in immediately.
Can be found under Chaperone -> Additional Settings.
* Update format.sh to require clang-format v10
* Use fade distance instead of opacity, opacity inconsistently applied
* Bugfixes (#624)
* stop crashing on HMD Init Errors, as well as bypass force quit on all steamvr Init Errors
* add qtc clang to gitignore
* add app volume adjustment
* adjust app volume placement in menu
* fix type error
* increment version
* fix version number
---------
Co-authored-by: ykeara <ykeara1@gmail.com>
* add nlhomann json header
* add get scene app fn
* add get current binding and related logic
* add save binding file to settings folder
* apply binding fn added fixed uid bug
* add button logic to QML, add enable Bind Setting
* add finding logic for all custom bind
* fix minor qml issues
* fix get controllername bug, fix bug with save bind
* fix regex issue
* change webrequest for selectconfig
* change to properly urlify path to send
* fix race condition web requests
* change steamvr tab qml formatting
* change color scheme
* change colors of icons to text color
* change bind qml better for better ux
* add possible workaround for space drag issues
* add deact color to pushbutton
* increment version
* adjust button size in movecenter
* move nlhomann json
* fix PKGBUILD to include missing dependency (#606) (#613)
It turns out qt5-websockets needs to be included for a successful build.
Co-authored-by: James R <71466513+ColdIce1605@users.noreply.github.com>
* fix warning
* improved logging messages around perapp bindings
* improve getsceneappID logging
* add HMD based controller Finding
* improve logging controller name
* change logging around initial chaperone calibration
* increment version
* improve logging/error handling around sceneappid failures
* added fallback for getting scene app by pid
* update version string
* update documentation
Co-authored-by: James R <71466513+ColdIce1605@users.noreply.github.com>
* add Select Dongle Pairing, fix clipping on long SN names (quest)
* remove test log, add ws log, add pair protection non steamvr
* add missing install commands for new qt modules
* remove bad package
* add auto apply chaperone option, remove old seated/uncal/openxr fixes in favor of always on
* adjust battery overlay for tundras
* fix tundra tracker bat indicator positioning, remove offset page restrictions from non-standing universe, make pairing more responsive and display brief instructions
* add Drag Multiplier
* update documentation
* change version to release
* update readme
* fix format issues readme
* update readme with setting description
* change uid to prevent collision
* changed rounding for grav fling to 2 decimals to be consistand with other values on drag page
* Revert "Add dedicated image for CircleCI builds"
This reverts commit 44a5d3eed0.
With how little we use the Docker hub features it does not make sense to
have external dependencies on it.
* Add `qt512websockets` to CI build
This is necessary for Ykeara's feature branch.
This change includes a fix for changes in naming for an option called "Disable Automatic Crash Recovery of Chaperone Config" that was changed in the application to "Enable..." likely due to OVRAS updates.
Missing options were added with a TBA placeholder for the details. I do not know the technical details of these options, and therefore advise to replace the TBA with something before merging to main.
* Crash Recovery Defaults to Off, add option to use space drag w/ uncalibrated playspace
* increment version 5.3.3
* Feat/apply offsets binding (#576)
* add apply offsets steamvr input
* add new binding to Readme
Co-authored-by: TheMrGong <gongora656@gmail.com>
* increment version 5.4.0
* added LH Console Interface class, WIP TX/RX list via lh console
* switch over to property based dongle information
* add ovr system wrapper
* add use of parameter to avoid warning as error
* openXR fix, and Change Display State of Chaperone Disabled
* update text
* format files
* clang 9.0.0 format
* add documentation update
* remove windows header include
* remove filesystem header
* fix uncal motion switching issue
Co-authored-by: TheMrGong <gongora656@gmail.com>