Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • X xrdesktop
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 31
    • Issues 31
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • xrdesktopxrdesktop
  • xrdesktop
  • Wiki
  • openxr

openxr · Changes

Page history
Create openxr authored Mar 24, 2020 by Christoph Haag's avatar Christoph Haag
Hide whitespace changes
Inline Side-by-side
openxr.md 0 → 100644
View page @ 133556b3
# Status
xrdesktop 0.14 supports the scene mode on OpenXR, but not the overlay mode.
The just released `XR_EXTX_overlay` extension for OpenXR can be used to render content on top of another OpenXR application, at this time support for this extension is not implemented in xrdesktop.
xrdesktop 0.14 ships with simplified default bindings for the Khronos Simple Controller, and full default bindings for the Valve Index Controllers.
With xrdesktop 0.14, adding additional default bindings requires adding a json file to xrdesktop's resource build, as well as recompiling the `xrdesktop` library. OpenXR runtimes may offer a binding UI to support more controllers without requiring default bindings.
# xrdesktop on the Monado OpenXR runtime
At this time the only viable OpenXR runtime for Linux is Collabora's "Monado" runtime.
The best way to try out xrdesktop on Monado is by using a Valve Index and the `experimental/libsurvive-controllers-wip` branch from Monado (Future plans include mainlining this branch to master, and creating a native lighthouse driver for Monado).
## Monado with Valve Index support via libsurvive
Make sure your `gxr` build has been compiled with support. Use `xrd-settings` to ensure sure that `openxr` is the default API , or run `gsettings set org.xrdesktop default-api openxr`. Alternatively the environment variable `GXR_API=openxr` forces `gxr` to use openxr instead of xrdesktops default API setting.
Make sure to read the [notes about the libsurvive branch in the readme](https://gitlab.freedesktop.org/monado/monado/-/tree/experimental/libsurvive-controllers-wip/#about-the-libsurvive-branch) about the basics of using libsurvive.
```
git clone --recursive https://gitlab.freedesktop.org/monado/monado.git -b experimental/libsurvive-controllers-wip
cd monado
mkdir build
cd build
cmake ..
make -j$(nproc)
```
xrdesktop can now be used on OpenXR with the environment variable `XR_RUNTIME_JSON=/path/to/monado/build/openxr_monado-dev.json`, for example
XR_RUNTIME_JSON=/path/to/monado/build/openxr_monado-dev.json /path/to/xrdesktop/build/examples/client
or
XR_RUNTIME_JSON=/path/to/monado/build/openxr_monado-dev.json kwin_x11 --replace
Note that at this time Monado does not have an out-of-process compositor that runs independently of OpenXR applications. The compositor (and entire runtime) is only startet once xrdesktop is enabled, and quits once xrdesktop is disabled.
# OpenXR bindings json format
At this time the OpenXR specification requires actions and bindings to be created and communicated to runtimes programmatically. This means there is no established file format to store bindings in.
xrdesktop opts to store OpenXR bindings in a format heavily inspired by OpenVR bindings.
## actions.json
This format very closely follows OpenVR's `actions.json` manifest. To add default bindings for a new controller, one `default_binding` entry has to be added:
{
"controller_type": "foo",
"binding_url": "bindings_foo.json"
}
## bindings_foo.json
This format has two main differences to OpenVR's bindings manifests:
* A new top level field `"interaction_profile": "/interaction_profiles/foo_vendor/foo_controller"`
* The inputs have no `mode` entry
OpenVR - like input component names are translated to OpenXR specified input suffixes by `gxr` (gxr-manifest.c). The non-trivial mappings are:
* `pull` -> `/value`
* `position` -> ` `
Examples:
The snippet
{
"path": "/user/hand/right/input/trigger",
"inputs": {
"pull": {
"output": "/actions/wm/in/grab_window"
}
}
maps the input `/user/hand/right/input/trigger/value` to the action `/actions/wm/in/grab_window`.
And the snippet
{
"path": "/user/hand/right/input/thumbstick",
"inputs": {
"position": {
"output": "/actions/wm/in/push_pull_scale"
}
}
},
maps the input `/user/hand/right/input/thumbstick` to the action `/actions/wm/in/push_pull_scale`, since OpenXR specifies that the thumbstick path without the `/x` or `/y` suffix binds the position as `Vector2F`.
## About the format
The intention of this format is to make it similar to OpenVR manifests and be easily transferable. However this format is not set in stone. It might be changed or abandoned in the future. Future directions could be either a simple homegrown format that directly maps an OpenXR input path from an interaction profile to an action name, or OpenXR could gain an extension that defines a manifest format to be loaded by runtimes.
\ No newline at end of file
Clone repository
  • CI Repository
  • CI
  • Contact
  • Default controller bindings
  • GSettings Schema Troubleshooting
  • Google Summer of Code 2020 Ideas
  • Google Summer of Code 2021 Ideas
  • Google Summer of Code 2022 Ideas
  • Google Summer of Code 2023 Ideas
  • Installation from source
  • Home
  • howto
  • known issues
  • openxr
  • xrdesktop 0.13.0 release notes
View All Pages