EliteG19s VR Overlay Guide

This guide explains how to set up and use the VR overlay system in EliteG19s, which works with both SteamVR and OpenXR VR platforms. The overlay appears as a floating window in your VR headset, allowing you to view and interact with the app's screens without removing your headset.

Table of Contents

Overview

The VR overlay system renders the EliteG19s interface as a floating quad (flat panel) inside your VR headset. You can:

Supported VR Platforms

SteamVR

EliteG19s uses the OpenVR SDK to render overlays in SteamVR. This works with:

Note: Some older VR runtimes may have limited overlay support. Ensure SteamVR is up-to-date.

OpenXR

EliteG19s 4.3+ includes native OpenXR overlay support via a native API layer (EliteG19s-OpenXR.dll). This works with:

Advantages of OpenXR:

The OpenXR API layer is automatically installed with EliteG19s and registers itself when VR overlay is enabled.

Enabling the VR Overlay

Via Settings Menu

  1. Open EliteG19s Settings
  2. Navigate to Display & Lighting > VR Overlay
  3. Click Enable VR Overlay
  4. Select your preferred VR platform (SteamVR or OpenXR)
  5. Adjust opacity (lower = more transparent) if desired
  6. Click Apply

The overlay should appear in your headset. If it doesn't, verify that:

Via Settings Wizard (First Time Setup)

  1. Start EliteG19s while holding Shift to open the Settings Wizard
  2. Navigate to the Display & Lighting page
  3. Enable VR Overlay and select your platform
  4. Complete the wizard

Controller Input and Toolbar

Button Actions

Your VR controller buttons work as follows:

Button Action
Trigger Left-click (activate buttons, scroll selections)
Grip Right-click (open menu, go back)
Thumbstick / D-Pad Navigate menus (up/down/left/right)
Face Buttons (A/B/X/Y) Context-dependent shortcuts

Pointing at the Overlay

Toolbar Controls

When you move your controller below the overlay, the toolbar appears with positioning and adjustment controls:

Control Action
Move Position the overlay in space
Rotate Change the angle (yaw/pitch/roll)
Resize Adjust the overlay width in meters
Reset Return to default position
Distance Move the overlay toward/away from you
Monitor Mode Toggle desktop mirror mode

To use a toolbar button:

  1. Move your controller into the toolbar area (below the overlay)
  2. Point at the button you want
  3. Press Trigger to activate
  4. While active, use your controller position to adjust (e.g., move backward to increase distance)
  5. Press Trigger again to save and deactivate

Monitor Mode Toggle

The toolbar also includes a Monitor Mode button (toggle icon). Pressing this temporarily enlarges the overlay to fill more of your view and increases the resolution, making it easier to read small text or interact with dense menus without taking off your headset.

Positioning Your Overlay

Default Position

The default overlay position is:

You can adjust this position using the toolbar or by editing options.json.

Fine Tuning with the Toolbar

  1. Move your controller below the overlay to show the toolbar
  2. Select Move mode
  3. Move your controller to reposition the overlay
  4. Press Trigger to confirm

Repeat for Rotate, Distance, or Resize adjustments.

Rotation Control

The toolbar provides three rotation axes:

Per-Ship Overlay Positioning

EliteG19s automatically saves your overlay position per ship. This means:

How It Works

When you adjust the overlay position while flying a ship, EliteG19s saves that transform to the ship's identity. The next time you fly the same ship, the overlay appears in that saved position automatically.

Per-ship positions are stored in: %AppData%\EliteG19s\memory.json under the OverlayTransforms dictionary, keyed by ship type or ID.

Resetting a Ship's Position

To reset a specific ship back to the default position:

  1. Edit %AppData%\EliteG19s\memory.json
  2. Find the OverlayTransforms section
  3. Delete the entry for that ship (e.g., delete "Anaconda")
  4. Save the file and restart EliteG19s

The next time you fly that ship, it will use the global default position.

Main Menu Position

When you're in the main menu (not flying), the overlay uses the default position. Once you board a ship, it switches to that ship's saved position.

Monitor Mode (Desktop Mirror)

Monitor Mode temporarily switches the overlay to a larger, higher-resolution view that fills more of your headset display. This is useful for:

Enabling Monitor Mode

Via Toolbar:

  1. Move your controller below the overlay
  2. Press the Monitor Mode button (toggle icon)

Via Menu:

  1. Open the overlay menu
  2. Navigate to Display > Monitor Mode
  3. Toggle on

Via Keyboard: If not in VR, press M to toggle monitor mode on the desktop.

Monitor Mode Resolution

By default, Monitor Mode uses 1920×1080 resolution. You can adjust this in options.json:

{
  "DisplayOptions": {
    "SteamVRDisplay": {
      "MonitorModeWidth": 1920,
      "MonitorModeHeight": 1080,
      "MonitorModeWidthMeters": 2.0,
      "MonitorModeDistanceMeters": 1.5
    }
  }
}

Higher resolutions provide crisper text but increase GPU load.

VR-Only Overlay Mode

New in version 4.3! VR-Only mode hides the desktop window and shows the overlay only in VR. This is useful for:

Enabling VR-Only Mode

  1. Open Settings > Display & Lighting > VR Overlay
  2. Enable VR-Only Mode
  3. The desktop window will be hidden when you enter VR

Note: You can still alt-tab to bring the desktop window back if needed.

Haptic Feedback

New in version 4.3! When using OpenXR, your VR controllers provide haptic (vibration) feedback in response to in-game events:

Haptic feedback is automatic and works out of the box with OpenXR. If your controllers support haptic feedback, you'll feel these sensations during gameplay.

Note: Haptic feedback requires an OpenXR runtime and controllers with haptic actuators. SteamVR haptic feedback support is limited.

Macro Bindings with VR Controllers

New in version 4.3! You can now bind VR controller buttons and gestures to macros for hands-free automation while in VR.

Available Controller Buttons for Macro Binding

Button Macro Binding
Left Trigger Macro trigger
Left Grip Macro trigger
Left Thumbstick Up/Down/Left/Right
Right Trigger Macro trigger
Right Grip Macro trigger
Right Thumbstick Up/Down/Left/Right
Face Buttons A, B (Xbox), X, Y (PlayStation) — depending on your controller
D-Pad Directions Up, Down, Left, Right

Creating a VR Controller Macro

  1. Open Settings > Macros (or hold Shift at startup)
  2. Click Create Macro or Edit Macro
  3. In Step 1 (Name & Trigger):
  4. Continue with Step 2 to add action steps
  5. Complete and save the macro

Example: Docking Request via VR

Create a macro triggered by pressing Right Grip:

  1. Step 1: Trigger = Right OpenXR Controller Grip
  2. Step 2: Add action steps:

Now whenever you grip your right controller, the app will request docking and confirm automatically!

Configuration Files

options.json — SteamVR/OpenXR Settings

VR overlay settings are stored in %AppData%\EliteG19s\options.json under DisplayOptions → SteamVRDisplay:

{
  "DisplayOptions": {
    "SteamVRDisplay": {
      "IsEnabled": true,
      "Width": 640,
      "Height": 480,
      "Opacity": 1.0,
      "MonitorModeWidth": 1920,
      "MonitorModeHeight": 1080,
      "MonitorModeWidthMeters": 2.0,
      "MonitorModeDistanceMeters": 1.5,
      "DefaultTransform": {
        "IsEnabled": true,
        "WidthMeters": 1.5,
        "Position": {
          "X": 0.0,
          "Y": 1.5,
          "Z": -2.0
        },
        "Rotation": {
          "X": 0.0,
          "Y": 0.0,
          "Z": 0.0
        }
      }
    }
  }
}

Configuration Options:

Option Type Description
IsEnabled bool Enable/disable VR overlay
Width int Render target width in pixels
Height int Render target height in pixels
Opacity float Background opacity (0.0 - 1.0)
MonitorModeWidth int Resolution when in monitor mode
MonitorModeHeight int Height for monitor mode
MonitorModeWidthMeters float Virtual width in meters (monitor mode)
MonitorModeDistanceMeters float Distance from viewer in meters
DefaultTransform.WidthMeters float Overlay width in virtual space (meters)
DefaultTransform.Position object X, Y, Z position in meters
DefaultTransform.Rotation object Yaw, Pitch, Roll rotation in degrees

Notes:

memory.json — Per-Ship Transforms

Per-ship overlay positions are stored in %AppData%\EliteG19s\memory.json under OverlayTransforms:

{
  "OverlayTransforms": {
    "Anaconda": {
      "IsEnabled": true,
      "WidthMeters": 1.2,
      "Position": {
        "X": -0.5,
        "Y": 1.4,
        "Z": -2.2
      },
      "Rotation": {
        "X": 0.0,
        "Y": 5.0,
        "Z": 0.0
      }
    },
    "Sidewinder": {
      "IsEnabled": true,
      "WidthMeters": 1.5,
      "Position": {
        "X": 0.0,
        "Y": 1.5,
        "Z": -2.0
      },
      "Rotation": {
        "X": 0.0,
        "Y": 0.0,
        "Z": 0.0
      }
    }
  }
}

Each ship type has its own transform entry. If a ship is not listed, the global DefaultTransform from options.json is used.

Troubleshooting

Overlay doesn't appear in VR

Check:

  1. VR headset is connected — Your headset must be plugged in and recognized by Windows
  2. VR runtime is running:
  3. Overlay is enabled — Check DisplayOptions.SteamVRDisplay.IsEnabled in options.json
  4. Restart the app — Close and reopen EliteG19s after enabling VR

OpenXR specific:

Overlay is blurry or text is too small

Solution: Increase the render resolution:

  1. In options.json, increase Width and Height:
    "Width": 1024,
    "Height": 768
    
  2. Or increase the virtual width, which makes the overlay larger in space:
    "DefaultTransform": {
      "WidthMeters": 2.0
    }
    

Higher values = sharper UI but more GPU load. Start with 1024×768 and increase if your system can handle it.

Overlay position resets after restarting

Cause: Per-ship transforms are not being saved.

Check:

  1. Ensure memory.json is writable (not read-only)
  2. Verify the app has write permission to %AppData%\EliteG19s\
  3. Try restarting the app after positioning

If the problem persists, you can manually edit memory.json to add a ship transform (see memory.json section above).

Controller input not working

For SteamVR:

For OpenXR:

Haptic feedback not working (OpenXR)

Check:

  1. Your controller supports haptic feedback (most modern controllers do)
  2. You're using OpenXR (not SteamVR)
  3. The app is running with VR overlay enabled

Haptic feedback is automatic; if it's still not working, it may be a hardware limitation.

Performance drops when VR overlay is enabled

Solutions:

  1. Reduce render resolution:

    "Width": 512,
    "Height": 384
    
  2. Lower VR target FPS — Some systems are GPU-limited

  3. Use Monitor Mode sparingly — Monitor Mode uses higher resolution and is less efficient

  4. Update your graphics drivers — Newer drivers often improve VR performance

Overlay tracking feels jittery or disconnected

For SteamVR:

For OpenXR:

Can I use VR overlay with non-Elite games?

The overlay is designed specifically for Elite Dangerous. Overlay support in other games depends on whether the game supports OpenVR (SteamVR) or OpenXR overlays. Some games may not support overlays at all.


For more help: Check the app log file at %AppData%\EliteG19s\log.txt for detailed error messages, or consult the main EliteG19s manual.