Steam or Oculus OpenXR?

I’m looking to integrate VR into an existing engine to run on PC, supporting Oculus Rift, Quest 2 (with air link), Valve Index and perhaps others.
Which OpenXR implementation should I pick, Steam or Oculus?

You don’t have to choose, you can test with both. Both are conformant OpenXR runtimes, and you can write OpenXR software that runs on both without any modifications.

Ok, so if I understand it, to release a VR app to Steam and Oculus, I need 2 versions, one that links with Steam OpenXR and one that links with Oculus OpenXR.
But the API is the same for both which is what makes development easier.
Did I get that right?

No, the point of OpenXR is that you only need one version.

You can think of OpenXR like with Vulkan. If your application uses Vulkan you use the Vulkan loader and Vulkan headers from Khronos. When running the application, the Vulkan loader will dynamically find and load a vendor specific implementation, i.e. the nvidia/amd/… Vulkan driver without you having to care about any specific vendor when making your application.

In the same way if your application uses OpenXR, you use the OpenXR loader and OpenXR headers from Khronos and when running the application the OpenXR loader will find and load oculus home/steamvr/…

Only OpenXR on android (specifically the Oculus Quest natively without link) is a special case because the official loader for android is not ready just yet.

Gotcha, so someone with a PC with steamVR or Oculus installed will already have the steamVR or Oculus specific stuff that my OpenXR app will find. No need to include those with my app?

Correct. All you need to include is the OpenXR loader, which does the work of finding those runtimes whether SteamVR, Oculus, Windows MR, HTC VIVE Cosmos, Varjo, etc.

You’ll need to include the loader in your app, either building from source from here: GitHub - KhronosGroup/OpenXR-SDK: Generated headers and sources for OpenXR loader. or using a binary artifact from Releases · KhronosGroup/OpenXR-SDK · GitHub (nuget package) or Releases · KhronosGroup/OpenXR-SDK-Source · GitHub (zipped binaries with CMake config files)

1 Like