Skip to content

QuarkXR Unity SDK Documentation

Krasi Nikolov edited this page Mar 31, 2021 · 9 revisions

The following guide is applicable for Unity Android projects that are meant to be deployed on Oculus Quest, Vive Focus Plus, PicoVR, and Android phones.


The QuarkXR Unity SDK gives you the ability to integrate desktop streaming into any Unity Android project. It can be used to stream your local Windows 10 desktop and also any remote desktop (any Cloud VM running Windows 10 or Windows Server 2016+). A later release will enable developers to also stream XR content rendered remotely. Support for streaming additional monitors is coming soon!


Before using the SDK, switch your project to Android Platform, if you haven’t already, then select Player Settings

Modify the following settigs

Auto Graphics API -> Disabled, Graphics APIs -> should include OpenGLES3, Multithreaded Rendering -> Enabled, Minimum API Level -> Android 7.1 'Nougat' (API level 25), Scripting Backend -> IL2CPP, Target Architectures -> ARM64 , Internet Access -> Require

QuarkXR Unity SDK

The main component of QuarkXR Unity SDK is QuarkXRUnityClientPlugin which can be found under \Sample Project\Assets\QuarkXRClientPlugin\Common\Plugins\Android. You can access its functionalities via three different APIs:

  • TextureAPI is an interface for accessing the texture which is streamed from a remote server to the QuarkXRUnityClientPlugin.
  • ConnectivityAPI provides QuarkXR lifecycle events and the ability to connect and disconnect from a QuarkVR server. Both LAN and WAN networks are supported.
  • RemoteUserInputAPI gives you the ability to send user input (mouse and keyboard) to the streamed desktop.

QuarkXR Unity SDK includes sample projects for the following platforms

TextureAPI can be assessed via QuarkXRTextureProvider.cs which can be found under \Sample Project\Assets\QuarkXRClientPlugin\Common\Scripts.

ConnectivityAPIand RemoteUserInputAPI can be accessed via QuarkXRClientPlugin.cs which also can be found under \Sample Project\Assets\QuarkXRClientPlugin\Common\Scripts.

Connecting to a QuarkXR Server

In the QuarkXRUnitySDK repository you will also find QuarkVRStandaloneInstaller.msi which installs the QuarkVR Server on a Windows 10 PC (64 bit only). Run the .msi file and follow the instructions. The default installation directory is “C:\Program Files\QuarkXR\Standalone\Server”. When you launch the QuarkVR Server, a grey dot appears in the notification area.

The dot turns green when a client is connected

QuarkVR Server have two different screen capture options - DXGI and WindowsGraphicsCapture (WGC) - you can use either of them by right-clicking on the QuarkVR Server notification icon. To be able to switch between them, please disconnect the client from the server. The default capture option is DXGI.

Each sample project can connect to the QuarkVR Server. Make sure that the client device (e.g. your Quest) is on the same network as the Server. Run the Client application, and it will automatically connect to the QuarkVR Server. If connection can’t be established, a “Waiting for Server” message will remain displayed on the Client.

NOTE: A QuarkXR License is required to connect to a Remote/Cloud instance. The included QuarkVR Server is for demo purposes only, and is restricted to the local network.


The Client only displays “Waiting for Server”.

Make sure the Server and Client are connected to the same network. The QuarkVR server adds all required firewall rules during installation. If the issue persists, try running the installer again, or temporarily disabling the firewall.

I have an NVIDIA/AMD GPU, but the QuarkXR Server displays an error.

Some laptops and all-in-one PCs that have an NVIDIA or AMD GPU would still use the integrated graphics by default. You need to make sure the discrete GPU is used instead. This is done through NVIDIA Control Panel or AMD Radeon Settings. Here's an example of how to configure this for NVIDIA cards:

NVIDIA Control Panel

I don’t see a mouse cursor.

Currently, only the WGC provider can render the mouse cursor. You can change capture options by right clicking the notification area icon, and selecting Providers->WGC. See the "Connecting to a QuarkXR Server" section.

Note: Changing providers requires disconnecting from the server, and connecting again to take effect.

I can’t click on the screen using the Quest controllers.

The Sample projects don’t include controller functionality. You can implement the RemoteUserInputAPI in your application to provide users with mouse and keyboard functionality. Refer to RemoteUserInputAPI documentation in “3. How to use the APIs/scripts”.

Changing the stream resolution.

The SDK currently only supports streaming FullHD resolution (1920 x 1080). An upcoming update will enable streaming of multiple monitors and changing the streaming resolution for each one.

Resizing or moving the screen in VR.

Each game object included in the prefabs can be resized and repositioned at runtime.