mirror of
https://github.com/mitch030504/Wiicompiled_VR_Frame.git
synced 2026-10-06 05:00:27 +02:00
SteamVR has no XR_FB_passthrough, so the Steam Frame build neither asks for it nor offers the setting: [vr] passthrough defaults to false there, and the F10/headset panel and the launcher hide the switch. The Frame keeps the Android defaults that suit it (render scale 0.8, foveation medium, the GX thread, object culling, performance level boost) and starts at 120 Hz (previous commit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
115 lines
6.0 KiB
C++
115 lines
6.0 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
#include "runtime_config.h"
|
|
#include <cstdlib>
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
static void Require(bool condition) {
|
|
if (!condition) std::abort();
|
|
}
|
|
|
|
static RuntimeUserConfig Parse(const std::string& text) {
|
|
std::istringstream input(text);
|
|
return RuntimeConfigFile::ParseConfig(input);
|
|
}
|
|
|
|
int main() {
|
|
for (std::string_view hand : {"left", "right", "off"}) {
|
|
Require(Parse("[vr]\ncockpit_item_hand = \"" + std::string(hand) + "\"\n")
|
|
.vrCockpitItemHand == std::string(hand));
|
|
}
|
|
Require(std::string_view(RuntimeConfigFile::kVrCockpitItemHandDefault) == "left");
|
|
Require(!Parse("[vr]\n").vrCockpitItemHand.has_value());
|
|
Require(!Parse("[vr]\ncockpit_item_hand = 1\n").vrCockpitItemHand.has_value());
|
|
Require(RuntimeConfigFile::kVrCockpitItemThrowDefault);
|
|
Require(Parse("[vr]\ncockpit_item_throw = false\n").vrCockpitItemThrow == false);
|
|
Require(Parse("[vr]\ncockpit_item_throw = true\n").vrCockpitItemThrow == true);
|
|
Require(!Parse("[vr]\n").vrCockpitItemThrow.has_value());
|
|
// [vr] placeholder_steering_wheel: the separate VR wheel or handlebar is opt-in.
|
|
Require(!RuntimeConfigFile::kVrPlaceholderSteeringWheelDefault);
|
|
Require(Parse("[vr]\nplaceholder_steering_wheel = true\n").vrPlaceholderSteeringWheel == true);
|
|
Require(Parse("[vr]\nplaceholder_steering_wheel = false\n").vrPlaceholderSteeringWheel == false);
|
|
Require(!Parse("[vr]\n").vrPlaceholderSteeringWheel.has_value());
|
|
// [vr] foveation: the Quest's foveated rendering level, index-matched to
|
|
// aurora_set_stereo_foveation.
|
|
for (std::string_view level : RuntimeConfigFile::kVrFoveationLevels) {
|
|
Require(Parse("[vr]\nfoveation = \"" + std::string(level) + "\"\n").vrFoveation == std::string(level));
|
|
}
|
|
Require(!Parse("[vr]\nfoveation = \"ultra\"\n").vrFoveation.has_value());
|
|
Require(!Parse("[vr]\nfoveation = 2\n").vrFoveation.has_value());
|
|
Require(!Parse("[vr]\n").vrFoveation.has_value());
|
|
#if defined(__ANDROID__)
|
|
Require(std::string_view(RuntimeConfigFile::kVrFoveationDefault) == "medium");
|
|
#else
|
|
Require(std::string_view(RuntimeConfigFile::kVrFoveationDefault) == "off");
|
|
#endif
|
|
Require(RuntimeConfigFile::VrFoveationLevelIndex("off") == 0);
|
|
Require(RuntimeConfigFile::VrFoveationLevelIndex("low") == 1);
|
|
Require(RuntimeConfigFile::VrFoveationLevelIndex("medium") == 2);
|
|
Require(RuntimeConfigFile::VrFoveationLevelIndex("high") == 3);
|
|
Require(RuntimeConfigFile::VrFoveationLevelIndex("ultra") == 0);
|
|
|
|
// [vr] refresh_rate: Hz asked of the runtime, 0 leaving its own. The Steam Frame
|
|
// starts at 120, twice the game's 60.
|
|
Require(Parse("[vr]\nrefresh_rate = 120\n").vrRefreshRate == 120u);
|
|
Require(Parse("[vr]\nrefresh_rate = 0\n").vrRefreshRate == 0u);
|
|
Require(Parse("[vr]\nrefresh_rate = 144\n").vrRefreshRate == 144u);
|
|
Require(!Parse("[vr]\nrefresh_rate = 30\n").vrRefreshRate.has_value());
|
|
Require(!Parse("[vr]\nrefresh_rate = 500\n").vrRefreshRate.has_value());
|
|
Require(!Parse("[vr]\nrefresh_rate = -1\n").vrRefreshRate.has_value());
|
|
Require(!Parse("[vr]\nrefresh_rate = \"120\"\n").vrRefreshRate.has_value());
|
|
Require(!Parse("[vr]\n").vrRefreshRate.has_value());
|
|
#if defined(MKW_HEADSET_STEAM_FRAME)
|
|
Require(RuntimeConfigFile::kVrRefreshRateDefault == 120u);
|
|
Require(std::string_view(MKW_VR_REFRESH_RATE_DEFAULT_TEXT) == "120");
|
|
#else
|
|
Require(RuntimeConfigFile::kVrRefreshRateDefault == 0u);
|
|
Require(std::string_view(MKW_VR_REFRESH_RATE_DEFAULT_TEXT) == "0");
|
|
#endif
|
|
|
|
// [vr] passthrough: Horizon OS's room view, which the Steam Frame build does not offer.
|
|
Require(Parse("[vr]\npassthrough = false\n").vrPassthrough == false);
|
|
Require(!Parse("[vr]\n").vrPassthrough.has_value());
|
|
#if defined(MKW_HEADSET_STEAM_FRAME)
|
|
Require(!RuntimeConfigFile::kVrPassthroughDefault);
|
|
#else
|
|
Require(RuntimeConfigFile::kVrPassthroughDefault);
|
|
#endif
|
|
|
|
// [vr] hand_tracking: the cockpit hands follow the headset's hand tracking.
|
|
Require(Parse("[vr]\nhand_tracking = true\n").vrHandTracking == true);
|
|
Require(Parse("[vr]\nhand_tracking = false\n").vrHandTracking == false);
|
|
Require(!Parse("[vr]\n").vrHandTracking.has_value());
|
|
Require(!Parse("[vr]\nhand_tracking = 1\n").vrHandTracking.has_value());
|
|
Require(!RuntimeConfigFile::kVrHandTrackingDefault);
|
|
|
|
// [vr] object_culling: false draws what the game camera culls. The PC
|
|
// defaults to that; the Quest keeps the game's culling.
|
|
Require(Parse("[vr]\nobject_culling = true\n").vrObjectCulling == true);
|
|
Require(Parse("[vr]\nobject_culling = false\n").vrObjectCulling == false);
|
|
Require(!Parse("[vr]\n").vrObjectCulling.has_value());
|
|
Require(!Parse("[vr]\nobject_culling = 0\n").vrObjectCulling.has_value());
|
|
#if defined(__ANDROID__)
|
|
Require(RuntimeConfigFile::kVrObjectCullingDefault);
|
|
Require(std::string_view(MKW_VR_OBJECT_CULLING_DEFAULT_TOML) == "true");
|
|
#else
|
|
Require(!RuntimeConfigFile::kVrObjectCullingDefault);
|
|
Require(std::string_view(MKW_VR_OBJECT_CULLING_DEFAULT_TOML) == "false");
|
|
#endif
|
|
|
|
// [vr] immersive_window and flat_screen: one race view in two keys, Flat
|
|
// Screen mode winning, so a file that predates the window reads as before.
|
|
using RuntimeConfigFile::VrRaceView;
|
|
using RuntimeConfigFile::VrRaceViewOf;
|
|
Require(Parse("[vr]\nimmersive_window = true\n").vrImmersiveWindow == true);
|
|
Require(!Parse("[vr]\n").vrImmersiveWindow.has_value());
|
|
Require(VrRaceViewOf(Parse("[vr]\n")) == VrRaceView::Immersive);
|
|
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = false\n")) == VrRaceView::Immersive);
|
|
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = true\n")) == VrRaceView::FlatScreen);
|
|
Require(VrRaceViewOf(Parse("[vr]\nimmersive_window = true\n")) == VrRaceView::ImmersiveWindow);
|
|
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = true\nimmersive_window = true\n")) == VrRaceView::FlatScreen);
|
|
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = false\nimmersive_window = false\n")) == VrRaceView::Immersive);
|
|
return 0;
|
|
}
|