Skip to main content

XRLink

The XRLink plugin provides application-side communication with the XRLink Oculus application. It enables real-time streaming and receives headset position and velocity data to synchronize camera parameters and reduce latency.

info

This plugin is integrated into the Tellusim Executor for real-time XR streaming.

#include <render/xrlink/include/TellusimXRLink.h>

Example

// Create XRLink instance and connect to Oculus XRLink host
RenderXRLink render_link;
if(!render_link.create(device, window.getSurface())) return false;
if(!render_link.connect(LINK_HOST, LINK_PORT)) return false;

// EncoderWindow callback
window.setEncoderCallback([&](const uint8_t *data, size_t size, uint64_t frame) {
render_link.writeH264(window.getSurface(), data, size);
});

// Connect XRLink to Oculus headset
if(!render_link.isOpened()) render_link.connect(LINK_HOST, LINK_PORT);

// Update XRLink state and retrieve latest headset tracking info
render_link.update();

// Apply headset projection and view matrices to multiview camera
for(uint32_t i = 0; i < render_link.getNumFrames(); i++) {
camera_multiview.setProjection(i, render_link.getProjection(i, 0.01f));
camera_multiview.setModelview(i, render_link.getModelview(i) * window_transform * Matrix4x3f::rotateX(90.0f));
}

// Display the rendered frames
target.begin();
{
Command command = device.createCommand(target);
render_link.draw(command, render_frames, target.isFlipped() ^ render_system.isFlipped());
}
target.end();