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();