# pkellyuk/vrx architecture

> Architecture diagram of the GitHub repository pkellyuk/vrx, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pkellyuk/vrx
- Repository: https://github.com/pkellyuk/vrx

## Overview

VRX is a Windows desktop application for viewing captured games or other windows as stereo screens in VR. The main path is choosing or automatically attaching to a window, configuring a profile, starting the renderer, and viewing its output through OpenXR. The README also documents controller-operated settings, browser, keyboard and snapshot panels. The renderer’s capture, depth, and presentation details are described at a product level; the sampled source is primarily the desktop application, so those internal engine stages are grouped at the available renderer path.

Main entry points: [`desktop/VRX.Desktop/MainWindow.xaml.cs`](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/MainWindow.xaml.cs) (Desktop app), [`desktop/VRX.Desktop/EngineSession.cs`](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/EngineSession.cs) (Engine session), [`desktop/VRX.Desktop/ControllerMenu.cs`](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ControllerMenu.cs) (Controller menu), [`desktop/VRX.Desktop/ChooserWindow.xaml.cs`](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ChooserWindow.xaml.cs) (Window chooser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop control"]
  node_mainwindow["Desktop app<br/>[MainWindow.xaml.cs]"]
  node_chooser["Window chooser"]
  node_autoattach["Auto attach<br/>[AutoAttach.cs]"]
  node_runningapps["Running apps<br/>[RunningApps.cs]"]
  node_screensources["Screen sources<br/>[ScreenSources.cs]"]
  node_placement["Window placement<br/>[WindowPlacement.cs]"]
end

subgraph group_session["Session setup"]
  node_profile[("Profiles<br/>[Profile.cs]")]
  node_engine_session["Engine session<br/>[EngineSession.cs]"]
  node_gpu["GPU selection<br/>[Gpus.cs]"]
end

subgraph group_renderer["VR rendering"]
  node_renderer["XR renderer<br/>[xrapp5.cpp]"]
end

subgraph group_panels["Floating panels"]
  node_controller_menu["Controller menu<br/>[ControllerMenu.cs]"]
  node_panel_contract["Panel interface<br/>[IFloatingPanel.cs]"]
  node_browser["Browser panel<br/>[FloatingBrowser.cs]"]
  node_keyboard["Keyboard panel"]
  node_predictor["Swipe predictor<br/>[SwipePredictor.cs]"]
  node_snapshot["Snapshot panel"]
end

node_user(("Player"))
node_game["Game or window"]
node_xr["OpenXR runtime"]

node_user -->|"configures"| node_mainwindow
node_mainwindow -->|"chooses window"| node_chooser
node_mainwindow -->|"monitors foreground"| node_autoattach
node_mainwindow -->|"lists apps"| node_runningapps
node_chooser -->|"lists apps"| node_runningapps
node_chooser -->|"lists displays"| node_screensources
node_chooser -->|"positions window"| node_placement
node_mainwindow -->|"selects display"| node_screensources
node_mainwindow -->|"edits settings"| node_profile
node_mainwindow -->|"starts session"| node_engine_session
node_engine_session -->|"reads settings"| node_profile
node_engine_session -->|"validates process"| node_runningapps
node_engine_session -->|"validates display"| node_screensources
node_gpu -->|"queries engine"| node_engine_session
node_engine_session -->|"launches renderer"| node_renderer
node_game -.->|"captures window"| node_renderer
node_renderer -.->|"presents stereo view"| node_xr
node_user -.->|"uses controllers"| node_controller_menu
node_controller_menu -->|"manages panels"| node_panel_contract
node_controller_menu -->|"opens browser"| node_browser
node_controller_menu -->|"opens keyboard"| node_keyboard
node_controller_menu -->|"captures snapshot"| node_snapshot
node_keyboard -->|"predicts words"| node_predictor
node_keyboard -->|"edits browser text"| node_browser

click node_mainwindow "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/MainWindow.xaml.cs"
click node_chooser "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ChooserWindow.xaml.cs"
click node_autoattach "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/AutoAttach.cs"
click node_runningapps "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/RunningApps.cs"
click node_screensources "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ScreenSources.cs"
click node_placement "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/WindowPlacement.cs"
click node_profile "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/Profile.cs"
click node_engine_session "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/EngineSession.cs"
click node_gpu "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/Gpus.cs"
click node_renderer "https://github.com/pkellyuk/vrx/blob/main/bench/native/openxr/xrapp5.cpp"
click node_controller_menu "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ControllerMenu.cs"
click node_panel_contract "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/IFloatingPanel.cs"
click node_browser "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/FloatingBrowser.cs"
click node_keyboard "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/FloatingKeyboard.cs"
click node_predictor "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/SwipePredictor.cs"
click node_snapshot "https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/FloatingSnapshot.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_mainwindow,node_chooser,node_autoattach,node_runningapps,node_screensources,node_placement toneBlue
class node_profile,node_engine_session,node_gpu toneAmber
class node_renderer toneMint
class node_controller_menu,node_panel_contract,node_browser,node_keyboard,node_predictor,node_snapshot toneRose
class node_user,node_game,node_xr toneIndigo
```

## Components

### Desktop control

- [Desktop app](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/MainWindow.xaml.cs): `desktop/VRX.Desktop/MainWindow.xaml.cs`
- [Window chooser](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ChooserWindow.xaml.cs): `desktop/VRX.Desktop/ChooserWindow.xaml.cs`
- [Auto attach](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/AutoAttach.cs): `desktop/VRX.Desktop/AutoAttach.cs`
- [Running apps](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/RunningApps.cs): `desktop/VRX.Desktop/RunningApps.cs`
- [Screen sources](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ScreenSources.cs): `desktop/VRX.Desktop/ScreenSources.cs`
- [Window placement](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/WindowPlacement.cs): `desktop/VRX.Desktop/WindowPlacement.cs`

### Session setup

- [Profiles](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/Profile.cs): `desktop/VRX.Desktop/Profile.cs`
- [Engine session](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/EngineSession.cs): `desktop/VRX.Desktop/EngineSession.cs`
- [GPU selection](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/Gpus.cs): `desktop/VRX.Desktop/Gpus.cs`

### VR rendering

- [XR renderer](https://github.com/pkellyuk/vrx/blob/main/bench/native/openxr/xrapp5.cpp): `bench/native/openxr/xrapp5.cpp`

### Floating panels

- [Controller menu](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/ControllerMenu.cs): `desktop/VRX.Desktop/ControllerMenu.cs`
- [Panel interface](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/IFloatingPanel.cs): `desktop/VRX.Desktop/IFloatingPanel.cs`
- [Browser panel](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/FloatingBrowser.cs): `desktop/VRX.Desktop/FloatingBrowser.cs`
- [Keyboard panel](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/FloatingKeyboard.cs): `desktop/VRX.Desktop/FloatingKeyboard.cs`
- [Swipe predictor](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/SwipePredictor.cs): `desktop/VRX.Desktop/SwipePredictor.cs`
- [Snapshot panel](https://github.com/pkellyuk/vrx/blob/main/desktop/VRX.Desktop/FloatingSnapshot.cs): `desktop/VRX.Desktop/FloatingSnapshot.cs`

### Other components

- **Player**
- **Game or window**
- **OpenXR runtime**

## Connections

- Player → Desktop app: configures (evidence: `README.md`)
- Desktop app → Window chooser: chooses window (evidence: `README.md`)
- Desktop app → Auto attach: monitors foreground (evidence: `desktop/VRX.Desktop/MainWindow.xaml.cs`)
- Desktop app → Running apps: lists apps (evidence: `desktop/VRX.Desktop/MainWindow.xaml.cs`)
- Window chooser → Running apps: lists apps (evidence: `desktop/VRX.Desktop/ChooserWindow.xaml.cs`)
- Window chooser → Screen sources: lists displays (evidence: `desktop/VRX.Desktop/ChooserWindow.xaml.cs`)
- Window chooser → Window placement: positions window (evidence: `desktop/VRX.Desktop/ChooserWindow.xaml.cs`)
- Desktop app → Screen sources: selects display (evidence: `desktop/VRX.Desktop/MainWindow.xaml.cs`)
- Desktop app → Profiles: edits settings (evidence: `desktop/VRX.Desktop/MainWindow.xaml.cs`)
- Desktop app → Engine session: starts session (evidence: `desktop/VRX.Desktop/MainWindow.xaml.cs`)
- Engine session → Profiles: reads settings (evidence: `desktop/VRX.Desktop/EngineSession.cs`)
- Engine session → Running apps: validates process (evidence: `desktop/VRX.Desktop/EngineSession.cs`)
- Engine session → Screen sources: validates display (evidence: `desktop/VRX.Desktop/EngineSession.cs`)
- GPU selection → Engine session: queries engine (evidence: `desktop/VRX.Desktop/Gpus.cs`)
- Engine session → XR renderer: launches renderer (evidence: `desktop/VRX.Desktop/EngineSession.cs`)
- Game or window → XR renderer: captures window (evidence: `README.md`)
- XR renderer → OpenXR runtime: presents stereo view (evidence: `README.md`)
- Player → Controller menu: uses controllers (evidence: `README.md`)
- Controller menu → Panel interface: manages panels (evidence: `desktop/VRX.Desktop/ControllerMenu.cs`)
- Controller menu → Browser panel: opens browser (evidence: `desktop/VRX.Desktop/ControllerMenu.cs`)
- Controller menu → Keyboard panel: opens keyboard (evidence: `desktop/VRX.Desktop/ControllerMenu.cs`)
- Controller menu → Snapshot panel: captures snapshot (evidence: `desktop/VRX.Desktop/ControllerMenu.cs`)
- Keyboard panel → Swipe predictor: predicts words (evidence: `desktop/VRX.Desktop/FloatingKeyboard.cs`)
- Keyboard panel → Browser panel: edits browser text (evidence: `desktop/VRX.Desktop/ControllerMenu.cs`)
