Skip to content

DisplayXR v2.9.1

Choose a tag to compare

@github-actions github-actions released this 30 Jul 13:42
· 106 commits to main since this release

[2.9.1] - 2026-07-30

Added

  • DisplayXRProvider.TryGetViewerEyes(out left, out right) / TryGetViewerHead(out head) — the world-space (Unity coords) positions of the two eyes the provider is rendering with this frame, from the render-ready xrLocateViews poses. This is the supported way for an app to read the tracked viewer position for head-coupled effects (billboards, lean-to-zoom, parallax UI). A missing native plugin is latched once rather than throwing per frame.

Fixed

  • Face Viewer (Billboard) sample never tracked the viewer's head (#236). It derived the head from Camera.GetStereoViewMatrix(Left/Right), which returns the same (mono) matrix for both eyes in provider mode: Unity's C#-side stereo matrix cache is only written by Camera.SetStereoViewMatrix(), which the plugin no longer calls — per-eye poses reach Unity through the native frame desc (deviceAnchorToEyePose) and are consumed inside Unity's render loop, never round-tripped back into the C# camera. The sample's coincident-eyes guard therefore tripped every frame and the billboard silently fell back to the camera transform, on every pipeline and graphics API. FaceViewer.TryGetViewerHead(cam, out head) now forwards to DisplayXRProvider.TryGetViewerHead (signature preserved for v2.8.3 source compatibility; cam is unused). The sample README documents the correct APIs and why GetStereoViewMatrix is the wrong tool here.