How crementif/botw-bettervr works
BetterVR is a Windows VR mod for Breath of the Wild running inside Cemu. The user launches it alongside Cemu, starts the game, and the mod intercepts Cemu’s Vulkan output and routes it through Vulkan–D3D12 interop for OpenXR stereo presentation. In parallel, OpenXR controller input drives game hooks for roomscale movement, hands, weapons, and gestures; an in-game menu exposes settings and controls. The README documents these capabilities, but several implementation files were not sampled, so uncertain internal call paths are omitted.
Main entry points: cemu_hooks.h Cemu hooks · renderer.cpp Frame renderer · main.cpp Launcher · openxr.cpp OpenXR session
Components 23
Launch
- Launcher
launcher/main.cpp - Launch support
launcher/launcher_common.h
VR Runtime
- Vulkan layer
src/hooking/layer.cpp - VR manager
src/instance.h - OpenXR session
src/rendering/openxr.cpp - Controller bindings
src/utils/controller_bindings.h - Frame renderer
src/rendering/renderer.cpp - Vulkan interop
src/rendering/vulkan.cpp - D3D12 renderer
src/rendering/d3d12.cpp - Render utilities
src/utils/render_utils.h
Game Hooks
- Cemu hooks
src/hooking/cemu_hooks.h - Roomscale control
src/hooking/entity_controller.cpp - Camera control
src/hooking/camera.cpp - Weapon handling
src/hooking/weapon.cpp - Bow handling
src/hooking/bow.cpp - Hands and arms
src/hooking/skeleton.cpp - Gameplay controls
src/hooking/controls.cpp
Interface
- Settings model
src/utils/mod_settings.h - In-game menu
src/hooking/imgui_menus.cpp - Debug drawing
src/utils/debug_draw.cpp
Other components
- Player
- Cemu
- OpenXR headset
Connections 22
- Player → Launcher: launches
- Launcher → Cemu: starts alongside
- Cemu → Vulkan layer: enables layer
- Vulkan layer → Frame renderer: intercepts frames
- Frame renderer → OpenXR headset: presents stereo
- Frame renderer → D3D12 renderer: uses interop
- D3D12 renderer → OpenXR headset: submits frames
- OpenXR headset → OpenXR session: provides tracking
- OpenXR session → Gameplay controls: supplies input
- Gameplay controls → Cemu hooks: drives gameplay
- Cemu hooks → Roomscale control: supports roomscale
src/hooking/entity_controller.cpp - Cemu hooks → Camera control: supports camera modes
src/hooking/camera.cpp - Cemu hooks → Weapon handling: supports wielding
- Cemu hooks → Bow handling: supports bow use
src/hooking/bow.cpp - Cemu hooks → Hands and arms: supports hands
- Player → In-game menu: opens controls
- In-game menu → Settings model: edits settings
src/hooking/imgui_menus.cpp - Roomscale control → Debug drawing: draws diagnostics
src/hooking/entity_controller.cpp - OpenXR session → Controller bindings: uses bindings
- Launcher → Launch support: uses launch support
launcher/main.cpp - Frame renderer → Vulkan interop: captures Vulkan images
- Frame renderer → Render utilities: uses render helpers
src/rendering/renderer.cpp