Skip to content

Add optional side-by-side phone VR mode#1581

Open
EmpRider wants to merge 11 commits into
moonlight-stream:masterfrom
EmpRider:contrib/sbs-vr-mode-official
Open

Add optional side-by-side phone VR mode#1581
EmpRider wants to merge 11 commits into
moonlight-stream:masterfrom
EmpRider:contrib/sbs-vr-mode-official

Conversation

@EmpRider

@EmpRider EmpRider commented Jul 2, 2026

Copy link
Copy Markdown

Summary

This PR adds an optional side-by-side phone-VR streaming mode to Moonlight Android.

The feature is disabled by default. When enabled in Streaming Settings, stream launches are routed through a dedicated GameVr activity that renders the normal decoded Moonlight stream into an OpenGL external texture and duplicates it into left/right side-by-side views for phone-VR headset testing.

What this adds

  • New optional Enable SBS VR mode setting.
  • New dedicated SBS streaming activity: GameVr.
  • New OpenGL TextureView renderer path for MediaCodec output.
  • Mono side-by-side rendering: the same decoded stream is shown in both eyes.
  • Optional lens-style distortion controls.
  • Optional wrap/clipping behavior.
  • Single-view debug mode for troubleshooting.
  • SDR-only handling for the SBS path for now.

Important behavior

This is not true stereoscopic rendering. It duplicates the same Moonlight video stream into both left and right eye views. The intent is to support simple phone-VR viewer use cases without changing the host stream format.

Validation performed on fork

  • Confirmed the SBS settings appear in Streaming Settings.
  • Confirmed enabling SBS mode routes streaming through the SBS activity.
  • Confirmed disabling SBS VR single view debug shows duplicated left/right SBS output.
  • Confirmed a release build from the fork produced a downloadable APK.

Known limitations

  • No head tracking.
  • No true stereo source rendering.
  • HDR is disabled for SBS mode until the extra GL pass is validated for HDR/EGL colorspace handling.
  • Touch/mouse behavior may need additional tuning.
  • This has been tested as an experimental phone-VR mode, not as a complete VR implementation.

Notes for maintainers

This PR is submitted as an experimental optional feature. I am happy to adjust naming, UI placement, defaults, or split this into smaller PRs if preferred.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant