Skip to content

offload_rendering_client

Summary

offload_rendering_client receives encoded frames from the network, and uses a mix of NPPI and FFMPEG, or NVDEC to decode the frames before updating the buffer pool. Setting the environment variable ILLIXR_USE_DEPTH_IMAGES to a non-zero value indicates that depth images are being received, and should thus also be decoded.

When the client is an Android device with its own OpenXR runtime (e.g., Quest 3) you can enable overscanning to allow the onboard timewarp to produce complete images for display. To enable this feature set the ILLIXR_OVERSCAN environment variable in main.cpp to the scale factor you want to use. Testing has found a value of 1.1 works well for the Quest 3. You will also need to supply the same environment variable and value on the server side.

Note that there is a known color shift issue (to be fixed), where the decoded frame's colors are slightly different from the original frame (likely due to the many conversions between YUV and RGBA).

Please refer to the README in the network backends for setting the server and client IP address and port number.

Android Builds

If you are using an Android device for the offload rendering client, you must use NVENC encoding on the server. See the server documentation page for details. The Android decoder supports AV1 and HEVC formats, which must also match the encoder settings in the server. The encoder is chosen by setting the appropriate CMake arguments in app/build.gradle in the externalNativeBuild section. The Android code has been tested on a Quest 3 headset and may contain some code that is device specific.