mirror of
https://github.com/Toastconcern/FrameStudio.git
synced 2026-10-29 04:02:56 +01:00
Frame Home as the real SteamVR environment on a PC (Windows too), not a home app
On the Steam Frame a layer inside SteamVR's compositor draws the home where it would draw Aurora, so the home is the environment itself: at boot, during game loads, behind the Steam menu, with the controllers and passthrough, and it steps aside for a game the instant it opens. On a PC this was faked with SteamVR's home-app slot and a flat 360 photo in the gaps, which launched and handed off like an app and showed a picture, not the live home. This does it properly on any PC that runs SteamVR, the Frame's way: - Windows: the compositor is Direct3D 11, so the layer is a proxy d3d11.dll beside the compositor (layer/ frame_home_layer_d3d11.cpp, built from the .def that forwards every other export to the real d3d11.dll, kept as fh_d3d11real.dll). It wraps the compositor's device, finds Aurora's draws by their shader bytecode and draws the home over the sky, leaving the floor and stars off; everything else passes straight through. Pure pass-through in any process that isn't vrcompositor. - The home's frames cross from Frame Home (Vulkan) to the compositor (D3D11): the layer owns kSlots shared textures and hands Frame Home their NT handles over a named pipe; Frame Home imports them (VK_KHR_external_memory_win32) and renders into them. No cross-API lock — a slot is published only once the GPU has finished it and the four rotate, as on Linux. The shared State stays Frame Home's. - The Environments panel runs frame-home --system and keeps it alive (one at a time, a pid file across panel restarts), the same systemEnv path as the Frame. The installer places/removes the proxy and marks the layer with a root/layer folder, in place of the old home-app registration and background pictures. - Safe like the Vulkan layer: no home, or one stale over half a second, and the compositor draws Aurora as usual; the layer turns itself off after two unhealthy compositor starts, and root/layer/off turns it off by hand. Linux keeps its Vulkan layer (unchanged). Verified without a headset on the null driver: the proxy loads and wraps the compositor without crashing, recognises Aurora's shaders, and the frame hand-over completes (Frame Home connects, imports the textures, renders). The compositor only draws the environment while presenting to a headset, so the final on-headset image is the one step the null driver can't exercise. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
283e19f87c
commit
d22cc04cb3
14 files changed
+1156
-117
No files matched your search
+28
-14
@@ -1,8 +1,10 @@
|
||||
# Frame Home on a PC (SteamVR)
|
||||
|
||||
Frame Home also runs on a PC with SteamVR: the same renderer, homes and settings as on the Steam Frame, as SteamVR's
|
||||
environment whenever no game is open. The **Environments** panel in the Steam menu switches homes, as on the headset.
|
||||
It works with any headset SteamVR drives, including a Steam Frame streaming from the PC.
|
||||
Frame Home also runs on a PC with SteamVR, exactly the way it runs on the Steam Frame: a small layer inside SteamVR's
|
||||
compositor draws your home where it would draw Aurora, so your home *is* the SteamVR environment — it shows at boot,
|
||||
during game loads and behind the Steam menu, with the controllers and passthrough, never a separate app that launches
|
||||
and hands off. The **Environments** panel in the Steam menu switches homes, as on the headset. It works with any
|
||||
headset SteamVR drives, including a Steam Frame streaming from the PC.
|
||||
|
||||
On a PC, Frame Home shows the environments in Frame Studio's **My Environments** (`Documents\Frame Studio\Environments`):
|
||||
save something in Studio and it's in VR straight away. Bundles (`.fbundle`) dropped there are unpacked by the panel.
|
||||
@@ -26,16 +28,24 @@ and takes effect when SteamVR starts.
|
||||
|
||||
## How it works
|
||||
|
||||
**Windows.** Frame Home becomes SteamVR's *home app*: SteamVR starts it whenever no game is open, and brings it back
|
||||
when a game quits. For the moments before it draws (SteamVR starting, a game closing) SteamVR shows its classic
|
||||
environment instead of Aurora, with its background set to a 360-degree picture of your current home taken from its
|
||||
spawn. So you see your home, not Aurora. The panel makes a new picture whenever you switch homes.
|
||||
Both platforms work the Steam Frame's way: a layer inside SteamVR's compositor draws your home in Aurora's place, and
|
||||
`frame-home --system` (which the Environments panel starts and keeps running) renders it. Because the swap happens
|
||||
inside the compositor, your home shows wherever Aurora would — at boot, during game loads, behind the Steam menu,
|
||||
with the controllers and passthrough — and steps aside for a game the instant it opens, coming back when it quits.
|
||||
|
||||
**Linux.** Exactly the Steam Frame's way: a small Vulkan layer in SteamVR's compositor draws Frame Home in Aurora's
|
||||
place, and `frame-home --system` renders it. (Linux PCs are supported but haven't been tested on a desktop yet.)
|
||||
**Windows.** SteamVR's compositor is Direct3D 11, so the layer is a proxy `d3d11.dll` placed beside the compositor
|
||||
(`SteamVR\bin\win64`). It wraps the compositor's device, finds Aurora's own draws by their shader bytecode and draws
|
||||
the home over them; every other Direct3D call passes straight through to the real `d3d11.dll`, kept beside it as
|
||||
`fh_d3d11real.dll`. Frame Home renders in Vulkan and shares each frame to the compositor as a Direct3D 11 texture.
|
||||
|
||||
The installer saves the SteamVR settings it changes (`enableHomeApp`, `environmentMode`, `background` and its
|
||||
projection) and puts them back exactly when you remove Frame Home.
|
||||
**Linux.** The same, as a Vulkan layer in the compositor (`layer/frame_home_layer.cpp`), since the Linux compositor
|
||||
is Vulkan. (Linux PCs are supported but haven't been tested on a desktop yet.)
|
||||
|
||||
If the layer ever can't draw the home — Frame Home isn't running, or has stopped for more than half a second — the
|
||||
compositor draws Aurora as usual, so Frame Home stopping or crashing never blanks the headset. The layer turns itself
|
||||
off if the compositor starts twice without a healthy frame, and `%LOCALAPPDATA%\Frame Home\layer\off` turns it off by
|
||||
hand. The installer saves the SteamVR settings it changes (`enableHomeApp`, `environmentMode`) and puts them back,
|
||||
and removing the two files from `SteamVR\bin\win64` takes the layer off entirely.
|
||||
|
||||
## Files
|
||||
|
||||
@@ -44,15 +54,19 @@ projection) and puts them back exactly when you remove Frame Home.
|
||||
| `%LOCALAPPDATA%\Frame Home\bin` | `frame-home.exe`, `frame-switcher.exe` |
|
||||
| `%LOCALAPPDATA%\Frame Home\current` | the environment shown |
|
||||
| `%LOCALAPPDATA%\Frame Home\settings.json` | Frame Home's settings (the panel's Settings page) |
|
||||
| `%LOCALAPPDATA%\Frame Home\logs` | logs |
|
||||
| `%LOCALAPPDATA%\Frame Home\background` | the picture SteamVR shows while Frame Home starts |
|
||||
| `%LOCALAPPDATA%\Frame Home\logs` | logs (`frame-home.log` the renderer, `frame-layer.log` the compositor layer) |
|
||||
| `%LOCALAPPDATA%\Frame Home\layer` | the layer's off switch and crash guard; its folder marks the layer installed |
|
||||
| `Documents\Frame Studio\Environments` | the environments |
|
||||
| `SteamVR\bin\win64\d3d11.dll`, `fh_d3d11real.dll` | the compositor layer and the real Direct3D 11 beside it |
|
||||
|
||||
On Linux everything is in `~/frame-home`, as on the headset.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Aurora still shows after installing:** SteamVR was running with its settings window open; restart SteamVR.
|
||||
- **Aurora still shows after installing:** the layer loads when the compositor starts, so restart SteamVR (or your
|
||||
headset) once after installing. If it still shows, see `frame-layer.log`.
|
||||
- **Nothing in the Steam menu:** the panel starts with SteamVR. In SteamVR's settings, **Startup / Shutdown > Choose
|
||||
Startup Overlay Apps** should list **Environments** switched on.
|
||||
- **Black world:** Frame Home needs a GPU with Vulkan 1.2. Its log is `%LOCALAPPDATA%\Frame Home\logs\frame-home.log`.
|
||||
- **Turn it off without uninstalling:** make a file `%LOCALAPPDATA%\Frame Home\layer\off` (the layer checks every
|
||||
second and draws Aurora); delete it to turn the home back on.
|
||||
Reference in new issue
Block a user