A cross-platform OpenXR capabilities explorer and runtime switcher with a CLI and GUI.

Overview

OpenXR Explorer

Screenshot of OpenXR Explorer OpenXR Explorer is a handy debug tool for OpenXR developers. It allows for easy switching between OpenXR runtimes, shows lists of the runtime's supported extensions, and allows for inspection of common properties and enumerations, with direct links to relevant parts of the OpenXR specification!

Download

Get the latest pre-compiled binaries over in the releases tab!

Features

Runtime Switching

Runtime switching

If you hop between runtimes often, whether it be for testing, experimenting, or whatever else, you know it can be a bit painful! OpenXR Explorer adds a simple dropdown to manage this, with a configurable list of runtimes for those with in-development runtimes, or non-standard install directories. Permission elevation is requested via a separate switching application, so OpenXR Explorer itself doesn't need admin!

And speaking of a separate application, that application is xrsetruntime, and is easily accessible via command line for those with a CLI workflow! Try xrsetruntime -WMR from an elevated console.

Runtime Information

Runtime information and docs

It can be handy to know what to expect when requesting data from OpenXR! This tool shows all the common lists and enumerations, and provides quick links to the relevant section of the OpenXR specification for additional details. This is a great way to quickly see differences between runtimes, or plan out your own OpenXR applications!

Command Line Interface

Command line example

Just about everything you see in the GUI is also available in text format when used from the command line! If you provide the openxr-explorer application with function or type names as arguments, it'll just dump the results as text to the console instead of launching the GUI. Who needs this? I don't know! I sure didn't, but I hope someone else does :)

Building

If you just want to use it, see the Releases tab! If you want to build it or modify it, then OpenXR Explorer uses cmake. Note that this repository uses git submodules, so make sure that's all downloaded!

Windows

From the root directory:

mkdir build
cd build
cmake ..
cmake --build . --config Release
cd Release
openxr-explorer.exe

Linux

Coming soon... OpenXR Explorer was built with Linux support in mind, but it still needs a bit of work yet.

Contributing

OpenXR is a living API, and there's new extensions coming out all the time! If you think there's something OpenXR Explorer should be displaying, then heck yeah I'll take a pull request! The application is architected to easily allow for additional information. All you need to do is add a new display_table_t to the xr_tables list, and you're good to go! See openxr_info.cpp for reference.

Relevant Stuff

If you're learning OpenXR, check out this introductory tutorial I also wrote!

If you're just interested in building OpenXR based applications, consider StereoKit, a cross-platform Mixed Reality Engine for C# and C++ that I also wrote! It just might save you some time :)

Comments
  • Thankyou for this tool, please could advise on XR_ERROR_RUNTIME_FAILURE

    Thankyou for this tool, please could advise on XR_ERROR_RUNTIME_FAILURE

    After a fresh Windows 11 install and WMR App install I see the following message xrCreateSession error XR_ERROR_RUNTIME_FAILURE, is there an explanation or further debug I can look at. Screenshot 2022-01-07 180929 Regard Richard

    opened by evanswillo 8
  • cmake install installs OpenXR SDK

    cmake install installs OpenXR SDK

    Because the OpenXR submodule has its own install target it gets installed too when installing openxr explorer

    On Linux that's

    • /usr/include/openxr/openxr.h
    • /usr/include/openxr/openxr_platform.h
    • /usr/include/openxr/openxr_platform_defines.h
    • /usr/include/openxr/openxr_reflection.h
    • /usr/lib/cmake/openxr/OpenXRConfig.cmake
    • /usr/lib/cmake/openxr/OpenXRConfigVersion.cmake
    • /usr/lib/cmake/openxr/OpenXRTargets-release.cmake
    • /usr/lib/cmake/openxr/OpenXRTargets.cmake
    • /usr/lib/libopenxr_loader.so
    • /usr/lib/libopenxr_loader.so.1
    • /usr/lib/libopenxr_loader.so.1.0.17
    • /usr/lib/pkgconfig/openxr.pc
    • /usr/share/doc/openxr/LICENSE
    opened by ChristophHaag 3
  • Add build validation via GitHub Actions

    Add build validation via GitHub Actions

    Adds support for building, packing, and publishing artifacts in both PRs and on merges. For the most part, I used a combination of the commands in the README and buildrelease.bat, with some minor changes to the cmake pattern. I also found a dependency I needed to install for Linux that wasn't in the README, so I added it.

    A successful test run can be found at https://github.com/keveleigh/openxr-explorer/actions/runs/2481916369 (since it looks like this PR won't run it, since it's not my repo, which makes sense!!)

    image

    opened by keveleigh 1
  • Fix chaining issue in openxr_load_properties()

    Fix chaining issue in openxr_load_properties()

    Looking through this chain, it seems like it converges on .foveated_varjo from two directions:

    1. The normal chain from .system down, ending with a link from .foveated_varjo to .color_space_fb
    2. A chain from the bottom of this list, from .space_warp_fb up through to .foveated_varjo

    .space_warp_fb doesn't appear to be chained to anything, so, as far as I can tell, this chain seems like it won't be passed into the xrGetSystemProperties call.

    Please let me know if I'm reading this wrong or missing something! I don't have a headset with me that might resolve any of these, so I'm currently unable to test the actual resolution. I should be able to test on Tuesday though!

    opened by keveleigh 1
  • openxr-explorer and xrsetruntime uses different runtimes.txt path

    openxr-explorer and xrsetruntime uses different runtimes.txt path

    Openxr-explorer saves and loads the runtimes from runtimes.txt xrsetruntime loads the runtimes from xr_runtimes.txt This is a problem when I try to switch between runtimes, because xrsetruntime is reading a different txt file and fails to set the runtime path.

    opened by piterayo 0
  • Missing icone file that path is provided in .RC file

    Missing icone file that path is provided in .RC file

    hello, recompiling the project, it fails on not finding ""C:\Data\Repositories\openxr-explorer\src\openxrexplorer\oxr-explorer-icon.ico" indicated in the project file : openxr-explorer\src\openxrexplorer\resource.rc

    i changed to another (external ico file) and it works, but maybe you'd prefer to provided your own icon and fix the absolute path to this ICO file.

    opened by skons35 0
  • Window is closing instantly

    Window is closing instantly

    Hi! I followed the instruction sets for Windows 10 (x64):

    mkdir build
    cd build
    cmake ..
    cmake --build . --config Release --parallel 8
    cd Release
    openxr-explorer.exe
    

    However, the openxr-explorer.exe command opening the window, and instantly closing.

    opened by bipul-mohanto 0
  • Runtime enumeration has been added to the OpenXR specification

    Runtime enumeration has been added to the OpenXR specification

    This specification has not yet been implemented in any runtime, but it is expected to be supported in the future.

    https://github.com/KhronosGroup/OpenXR-SDK-Source/blob/master/specification/loader/runtime.adoc#runtime-enumeration

    opened by shiena 3
  • cli always segfaults on linux

    cli always segfaults on linux

    gui works fine, but when giving an argument to invoke the cli, there is always a segfault

    gdb -q --args build/openxr-explorer help
    Reading symbols from build/openxr-explorer...
    (gdb) r
    Starting program: /home/haagch-collabora/openxr-explorer-git/src/openxr-explorer/build/openxr-explorer help
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    
    Program received signal SIGSEGV, Segmentation fault.
    0x00007ffff7bd42ca in glXCreateContext () from /usr/lib/libGLX.so.0
    (gdb) bt
    #0  0x00007ffff7bd42ca in glXCreateContext () from /usr/lib/libGLX.so.0
    #1  0x00005555555cd2bf in gl_init_glx () at /home/haagch-collabora/openxr-explorer-git/src/openxr-explorer/src/openxrexplorer/imgui/sk_gpu.h:2503
    #2  0x00005555555cd409 in skg_init ([email protected]=0x555555607184 "OpenXR Explorer", [email protected]=0x0) at /home/haagch-collabora/openxr-explorer-git/src/openxr-explorer/src/openxrexplorer/imgui/sk_gpu.h:2549
    #3  0x000055555556372d in app_cli (arg_count=2, args=0x7fffffffd978) at /home/haagch-collabora/openxr-explorer-git/src/openxr-explorer/src/openxrexplorer/app_cli.cpp:31
    #4  0x000055555555a559 in app_args (arg_count=<optimized out>, args=<optimized out>) at /home/haagch-collabora/openxr-explorer-git/src/openxr-explorer/src/openxrexplorer/main.cpp:35
    #5  0x000055555555a38a in main (arg_count=<optimized out>, args=<optimized out>) at /home/haagch-collabora/openxr-explorer-git/src/openxr-explorer/src/openxrexplorer/imgui/imgui_skg.cpp:41
    
    opened by ChristophHaag 1
Releases(v1.4)
  • v1.4(Oct 24, 2022)

    A couple small improvements! This update no longer creates an XrSession by default, and instead requires the user to check a box before gathering data from a session. Also gates data based on initialization status. This also adds some light refinement to the theming to make it a bit easier on the eyes!

    Changelog

    • Display active runtime above runtime selector.
    • Added a checkbox for gathering data that relies on XrSession.
    • Added pre-emptive error messages for functions that relied on XrInstance, XrSystemId, or XrSession when those handles had failed to initialize.
    • Visual theme improvements.

    Installing

    Installation is simple, it's just a pair of executables in a folder! Put 'em someplace you'll remember where they are, and they'll run just fine wherever you put them.

    Alternatively if you're building from source, you can install via cmake on Linux. See the main readme for instructions.

    Source code(tar.gz)
    Source code(zip)
    openxr-explorer-linux-x64.zip(565.98 KB)
    openxr-explorer-win-x64.zip(379.48 KB)
  • v1.3(Oct 19, 2022)

    This update brings OpenXR Explorer up-to-date with the latest version of the OpenXR loader, v1.0.25! It's a small update, but just keeps things up to latest :)

    Changelog

    • Added tables for:
      • XrSystemSpatialEntityPropertiesFB
      • xrEnumeratePerformanceMetricsCounterPathsMETA
    • Fixed xrsetruntime using the wrong filename for runtime path overrides. #12

    Installing

    Installation is simple, it's just a pair of executables in a folder! Put 'em someplace you'll remember where they are, and they'll run just fine wherever you put them.

    Alternatively if you're building from source, you can install via cmake on Linux. See the main readme for instructions.

    Source code(tar.gz)
    Source code(zip)
    openxr-explorer-linux-x64.zip(565.49 KB)
    openxr-explorer-win-x64.zip(378.46 KB)
  • v1.2.1(Mar 15, 2022)

  • v1.2(Mar 10, 2022)

    This update brings OpenXR Explorer up-to-date with the latest version of the OpenXR loader, v1.0.22!

    Changelog

    • Added tables for:
      • XrSystemFacialTrackingPropertiesHTC
      • XrSystemKeyboardTrackingPropertiesFB
      • XrSystemMarkerTrackingPropertiesVARJO
      • XrSystemPassthroughPropertiesFB
      • XrSystemRenderModelPropertiesFB
      • XrSystemSpaceWarpPropertiesFB
      • xrEnumerateReprojectionModesMSFT
      • xrEnumerateSceneComputeFeaturesMSFT
      • xrEnumerateDisplayRefreshRatesFB
      • xrEnumerateViveTrackerPathsHTCX
      • xrEnumerateRenderModelPathsFB
    • Sorted tables by vendor, then alphabetically.

    Installing

    Installation is simple, it's just a pair of executables in a folder! Put 'em someplace you'll remember where they are, and they'll run just fine wherever you put them.

    Alternatively if you're building from source, you can install via cmake on Linux. See the main readme for instructions.

    Source code(tar.gz)
    Source code(zip)
    openxr-explorer-linux-x64.zip(565.03 KB)
    openxr-explorer-win-x64.zip(374.34 KB)
  • v1.1(Jun 25, 2021)

    Among other things, this update brings Linux support! I'm somewhat new to Linux, so if OpenXR Explorer is not behaving like a 'normal' Linux application, or missing paths due to distro differences, please file an issue and let me know, or make a PR. Tested on Ubuntu 20.

    Changelog

    • Added tables for:
      • XrSystemFoveatedRenderingPropertiesVARJO
      • XrSystemColorSpacePropertiesFB
      • xrEnumerateColorSpacesFB.
    • Added ViveOpenXR runtime manifest path, thanks to @Ybalrid !
    • Linux support.
    • Windows app has an icon now. Nicer for pinning :)
    • When launched as a GUI app on Windows, the console window now hides itself.
    • The default runtime list is now built-in to the executable, with the runtime text file behaving as an override for existing values. This allows the application to find common paths without any additional supporting files.

    Installing

    Installation is simple, it's just a pair of executables in a folder! Put 'em someplace you'll remember where they are, and they'll run just fine wherever you put them.

    Alternatively if you're building from source, you can install via cmake on Linux. See the main readme for instructions.

    Source code(tar.gz)
    Source code(zip)
    openxr-explorer-linux-x64.zip(559.95 KB)
    openxr-explorer-win-x64.zip(368.20 KB)
  • v1.0(Jun 13, 2021)

Owner
Nick Klingensmith
Creative coder: procedural content, game development tools and VR/AR/MR!
Nick Klingensmith
Orbit, the Open Runtime Binary Instrumentation Tool, is a standalone C/C++ profiler for Windows and Linux

Orbit, the Open Runtime Binary Instrumentation Tool, is a standalone C/C++ profiler for Windows and Linux. Its main purpose is to help developers visualize the execution flow of a complex application.

Google 3k Dec 30, 2022
A cross-platform protocol library to communicate with iOS devices

libimobiledevice A library to communicate with services on iOS devices using native protocols. Features libimobiledevice is a cross-platform software

libimobiledevice 5.4k Dec 30, 2022
LibOS is a modern C++17 library that makes OS-specific features cross-platform.

LibOS is a modern C++17 library that makes OS-specific features cross-platform. Ever tried to get Windows version after Windows 8? Or to send ke

Gavrilikhin Daniil 27 Sep 13, 2022
WAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers.

WAFer WAFer is a C language-based ultra-light scalable server-side web applications framework. Think node.js for C programmers. Because it's written i

Riolet Corporation 693 Dec 6, 2022
Platform independent Near Field Communication (NFC) library

*- * Free/Libre Near Field Communication (NFC) library * * Libnfc historical contributors: * Copyright (C) 2009 Roel Verdult * Copyright (C) 2009

null 1.4k Jan 5, 2023
PRK is a keyboard firmware platform in PicoRuby

PRK is a keyboard firmware written and configured in PicoRuby which is an alternative mruby implementation targeting on one-chip microcontroller.

PicoRuby 393 Jan 1, 2023
CommonMark parsing and rendering library and program in C

cmark cmark is the C reference implementation of CommonMark, a rationalized version of Markdown syntax with a spec. (For the JavaScript reference impl

CommonMark 1.4k Jan 4, 2023
libcurses and dependencies taken from netbsd and brought into a portable shape (at least to musl or glibc)

netbsd-libcurses portable edition this is a port of netbsd's curses library for usage on Linux systems (tested and developed on sabotage linux, based

null 124 Nov 7, 2022
Sqrt OS is a simulation of an OS scheduler and memory manager using different scheduling algorithms including Highest Priority First (non-preemptive), Shortest Remaining Time Next, and Round Robin.

A CPU scheduler determines an order for the execution of its scheduled processes; it decides which process will run according to a certain data structure that keeps track of the processes in the system and their status. A process, upon creation, has one of the three states: Running, Ready, Blocked (doing I/O, using other resources than CPU or waiting on unavailable resource).

Abdallah Hemdan 18 Apr 15, 2022
The lightweight and modern Map SDK for Android and iOS

Open Mobile Maps The lightweight and modern Map SDK for Android (6.0+) and iOS (10+) openmobilemaps.io Getting started Readme Android Readme iOS Featu

Open Mobile Maps 95 Dec 23, 2022
Indexes points and lines and generates map tiles to display them

Datamaps This is a tool for indexing large lists of geographic points or lines and dynamically generating map tiles from the index for display. Depend

Eric Fischer 329 Dec 6, 2022
A LKM rootkit targeting 4.x and 5.x kernel versions which opens a backdoor that can be used to spawn a reverse shell to a remote host and more.

Umbra Umbra (/ˈʌmbrə/) is an experimental LKM rootkit for kernels 4.x and 5.x (up to 5.7) which opens a network backdoor that spawns reverse shells to

Marcos S. Bajo 93 Dec 10, 2022
Simple and lightweight pathname parser for C. This module helps to parse dirname, basename, filename and file extension .

Path Module For C File name and extension parsing functionality are removed because it's difficult to distinguish between a hidden dir (ex: .git) and

Prajwal Chapagain 3 Feb 25, 2022
Compile and execute C "scripts" in one go!

c "There isn't much that's special about C. That's one of the reasons why it's fast." I love C for its raw speed (although it does have its drawbacks)

Ryan Jacobs 2k Dec 26, 2022
A shebang-friendly script for "interpreting" single C99, C11, and C++ files, including rcfile support.

c99sh Basic Idea Control Files Shebang Tricks C++ C11 Credits Basic Idea A shebang-friendly script for "interpreting" single C99, C11, and C++ files,

Rhys Ulerich 100 Dec 3, 2022
A tool for use with clang to analyze #includes in C and C++ source files

Include What You Use For more in-depth documentation, see docs. Instructions for Users "Include what you use" means this: for every symbol (type, func

null 3.2k Jan 4, 2023
SMACK Software Verifier and Verification Toolchain

SMACK is both a modular software verification toolchain and a self-contained software verifier. It can be used to verify the assertions in its input p

null 393 Dec 10, 2022
CommonMark spec, with reference implementations in C and JavaScript

CommonMark CommonMark is a rationalized version of Markdown syntax, with a spec and BSD-licensed reference implementations in C and JavaScript. Try it

CommonMark 4.7k Jan 1, 2023
A C library for parsing/normalizing street addresses around the world. Powered by statistical NLP and open geo data.

libpostal: international street address NLP libpostal is a C library for parsing/normalizing street addresses around the world using statistical NLP a

openvenues 3.6k Dec 27, 2022