Commit Graph
300 Commits
Author SHA1 Message Date
simplysanatoriandClaude Opus 5.5 47611ce317 frame/DEV.md, mockrun.sh
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:55:47 -04:00
simplysanatoriandClaude Opus 5.5 99843d4659 Linux: SDL without XScrnSaver, OpenXR loader with its vendored jsoncpp
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:54:29 -04:00
simplysanatoriandClaude Opus 5.5 0e796d933c Linux build wiring: OpenXR on by default, pinned Vulkan headers and static OpenXR loader, patched Dawn package, ELF blob assembly, relocated shard manifest, kartframe binary name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:46:20 -04:00
simplysanatoriandClaude Opus 5.5 e00242a3b6 Desktop Linux OpenXR: reuse the PC shared-device Vulkan bridge
Build aurora's Vulkan interop on Linux with the patched Dawn linked statically, extend the Vulkan OpenXR backend guards to desktop Linux, and route openxr_integration to it with XR_KHR_vulkan_enable2 and timespec display-time conversion. Re-applied from the earlier native Linux commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:43:03 -04:00
simplysanatoriandClaude Opus 5.5 dddd530d79 frame/tools: copies of xrmock, xrprobe, vrtiming, session-report, privacy-check, golden, imgdiff, ccache/vvl build scripts
Adapted only for paths here: xrmock build.sh headers, privacy-check root, KartFrame lock and ccache dir.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:42:52 -04:00
simplysanatoriandClaude Opus 5.5 578b9f94f2 frame/build-dawn.sh: patched static Dawn for linux-aarch64
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:41:30 -04:00
simplysanatoriandClaude Opus 5.5 446ddad8d0 README: rewrite for Steam Frame owners
Requirements, install, first run, updating, the full controller layout as
the code implements it, settings and script variables, known problems,
troubleshooting, logs and how to report a problem, building, credits. The AI
statement is shorter. CONTRIBUTING.md points bug reports at the right README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 04:12:42 -04:00
simplysanatoriandClaude Opus 5.5 daa9457b5e Privacy audit; log collector that masks personal data
steam-frame/collect-logs.sh gathers the Lepton, wrapper, game and build logs
plus Config.toml into one archive and masks IP and MAC addresses, UUIDs, host
names, Wi-Fi names, serial numbers, Steam IDs, email addresses, tokens and
certificate blocks. Lepton's log carries the Frame's kernel log, which lists
hardware serial numbers. steam-frame/PRIVACY_AUDIT.md records what was
checked and the commands that repeat the check. A build.sh comment no longer
names an unrelated project.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 04:12:42 -04:00
simplysanatoriandClaude Opus 5.5 742811e5ef Steam Frame controller models on by default, simplified to Touch Plus size
frame-controller-models.py now runs a QEM edge-collapse simplifier on each
hand (about 4,000 triangles, seams, boundaries and moving parts kept), so the
menus stay at 90 Hz; install.sh converts them unless WCF_FRAME_MODELS=0.
README: change 9, and the known issue about Quest controllers removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
v1.3.1-frame.3
2026-10-08 14:55:14 -04:00
simplysanatoriandClaude Opus 5.5 8287058a20 Optional Steam Frame controller models; README for the grip change
frame-controller-models.py converts the Frame controller render models SteamVR
keeps on every Frame into the game's WCC1 controller format (grip space, baked
AO texture, nine animated controls, tutorial landmarks), and the launch wrapper
puts them in place of the Touch Plus files. They looked right in the headset
but cost too much: ~7x the vertices, re-animated on the CPU each frame, and the
menus fell to 45-60 fps. install.sh therefore only converts them with
WCF_FRAME_MODELS=1. README documents that and change 8 (grips hold the wheel in
the cockpit).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
2026-10-08 13:14:13 -04:00
simplysanatoriandClaude Opus 5.5 ba0d21a1df Frame layout: grips hold the wheel in the cockpit, the right bumper drifts
With hand steering on, a grip squeeze in the first-person cockpit both grabbed
the wheel and drifted. Grips now drift only outside the cockpit (or with hand
steering off); the right bumper drifts everywhere. The SteamVR binding no
longer sends a grip click to frame_drift, and the seed config turns hand
steering back on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
2026-10-08 12:22:29 -04:00
simplysanatoriandClaude Opus 5.5 004f33aa0d README: release path confirmed on the headset; item box, controller models and grips as found
The second release built and ran on the Frame from a clean start. The item box
change does not hide the empty box; the menus show Quest Touch models because
Lepton gets no SteamVR render models; grips do not grab the wheel because hand
steering is off on purpose for this layout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
v1.3.1-frame.2
2026-10-08 12:14:08 -04:00
simplysanatoriandClaude Fable 5.1 45d71a37df Build the kit objects with NDK r29 and reject new C++ imports
The first release's objects were compiled with NDK r30, whose libc++ headers
emit std::__hash_memory; the kit's r29 libc++ has no such symbol and the
on-device link failed. Use HomuHomu833's r29 build on arm64 (Google's r29 on
x86_64) and fail the build when an object imports a mangled symbol the kit's
original does not.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
2026-10-08 11:53:54 -04:00
simplysanatoriandClaude Fable 5.1 cfa6aa1ded Ignore __pycache__
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
2026-10-08 11:39:19 -04:00
simplysanatoriandClaude Fable 5.1 ed7c28f37c Launch wrapper: start the game only when the built game matches this APK's kit
Lepton keeps the app's private data across an APK update, so a game built
against upstream's kit survives; the app refuses it as stale and the wrapper
used to start the game activity anyway (black screen). Compare game.json's
kitFingerprint with the APK's kit.json and leave the launcher up otherwise.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
2026-10-08 11:39:11 -04:00
simplysanatoriandClaude Fable 5.1 556b030212 README for the Steam Frame fork; upstream's README kept as README.upstream.md
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
v1.3.1-frame.1
2026-10-08 11:24:16 -04:00
simplysanatoriandClaude Fable 5.1 c82699bcd8 Steam Frame: build the APK from Frame-patched kit objects, install and launch scripts
steam-frame/build.sh compiles the two runtime unity groups holding the patched
openxr_input.cpp / openxr_integration.cpp and Aurora's gfx/common.cpp with a
self-contained Android NDK, checks their exported symbols against the kit in the
upstream v1.3.1 Quest APK, and make-apk.py puts them into that APK's game kit with
a new kit fingerprint, the classes.dex clipboard fix (dexpatch.py), zipalign-style
alignment and a v2 signature made with openssl. The headset then builds the game
from the player's own disc against the Frame kit, as upstream designed.

install.sh adds the Lepton shortcut through Steam's client API and writes the
SteamVR binding and per-app settings; wiicompiled-launch.sh seeds Config.toml and
starts the game activity once a game exists, since the 2D launcher never shows in
the headset. build-deps/ carries the third-party headers the three units include.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7dBRsvawKKn1F9gf68SYv
2026-10-08 11:24:16 -04:00
simplysanatoriandClaude Opus 5.5 0b74555865 Aurora: skip virtual-screen HUD draws wholly outside the game's scissor (item roulette)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:06:00 -04:00
simplysanatoriandClaude Opus 5.5 97e4bf5855 Android: always draw menus into the eyes; quality 0 = plain background
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:06:00 -04:00
simplysanatoriandClaude Opus 5.5 7243a8b7d0 Latch the Frame layout for the session
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:06:00 -04:00
simplysanatoriandClaude Opus 5.5 690f1cfdfb Steam Frame controller layout: hand-independent item/look back/drift/start/back/D-pad actions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:06:00 -04:00
simplysanatoriandClaude Opus 5.5 85a23dd773 Android: enable VR frame interpolation (stereo replay) with a CLOCK_MONOTONIC fallback for Lepton/SteamVR
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:06:00 -04:00
heurazy 177f8b3c60 Release v1.3.1 with OpenXR stability and Quest controller fallback 2026-10-02 18:14:14 +02:00
heurazy f08ee58f43 Credit iChris4 for native wheel topology and node fixes 2026-10-01 22:55:22 +02:00
heurazy 14132027ea Release v1.3 with calibrated character body IK and cockpit fitting 2026-10-01 22:17:57 +02:00
Heurazy bf103ffce6 Update README to remove Wheel Wizard and stability details
Removed details about Wheel Wizard integration and stability improvements from the README.
2026-09-28 19:27:46 +02:00
heurazy cda7807d85 Mark completed original roadmap items done 2026-09-28 19:26:01 +02:00
heurazy 263995d818 Restore original roadmap verbatim 2026-09-28 19:22:14 +02:00
heurazy 63ef500e0e Restore original VR port roadmap with current status 2026-09-28 19:20:31 +02:00
heurazy c2b2500948 Prepare Wiicompiled VR PLUS 1.2 Windows and Quest release 2026-09-28 19:03:26 +02:00
heurazy 1eeab4ae50 Document Wiicompiled VR PLUS features and roadmap 2026-09-27 16:16:35 +02:00
heurazy 3e96d5c661 Integrate VR port features and Quest standalone support
Add migrated controls, onboarding, spatial menus, controller profiles and launcher packaging. Fix VR overlay rendering and tracking, add textured animated Touch Plus models, and disable frame interpolation on Quest.
2026-09-27 15:56:28 +02:00
heurazy bb1b897c49 Port safe first-person vehicle motion and repair VR integration 2026-09-25 19:35:25 +02:00
heurazy f9fc1b7126 Port VR culling and local project updates 2026-09-25 18:54:24 +02:00
heurazy e98f15b760 Fix VR panel blackouts during race transitions 2026-09-25 18:29:58 +02:00
heurazy cc7faf021a Fix VR output orientation and WheelWizard launch diagnostics 2026-09-25 18:24:09 +02:00
heurazy 2bf51320b5 Avoid periodic USB wheel discovery stalls 2026-09-25 18:16:06 +02:00
heurazy 208a26849d Fix VR course object culling and native dispatch generation 2026-09-25 18:07:52 +02:00
heurazy c60b020deb Add English VR installer and portable Wheel Wizard bundle 2026-09-25 17:56:04 +02:00
heurazy 1cfedb90e4 Enable OpenXR for new VR installs 2026-09-25 17:55:15 +02:00
iChris4andClaude Opus 5.5 c990c595f0 Render only the window in the Quest's immersive window
- The pacing thread aims each immersive window eye through the window itself (AimEyesThroughWindow):
  it keeps its position but looks square-on at the window's plane through an off-axis frustum just
  around it, so the eye image is the window, at the display's pixel density (about 680x380 per eye
  at render_scale 0.8 instead of 1344x1408), with a two-pixel border the mask leaves transparent.
  The frame's views carry that pose and field of view to the projection layer.
- vulkan_interop.cpp copies an eye smaller than its AHardwareBuffer into the buffer's corner, and
  the Quest layer's imageRect is the rendered part of the swapchain image.
- These eyes are not foveated: their field of view follows the head, which would rebuild the
  density map every frame.
- Quest only (kWindowShapedEyesSupported); the PC backends copy whole eyes and keep masking them.
  debug.wiicompiled.window_eyes 0 renders them whole and masked again for A/B timing.
- Quest 3, paused Retro Rewind race, render_scale 1.0: Immersive window runs the GPU at level 1
  (456 MHz, app GPU 11.0 ms, eyes 8.4 ms) where Immersive needs level 3 (599-640 MHz, 13.4 ms,
  10.3 ms), about 42% fewer GPU cycles. No edge artifacts, image as sharp. Docs: OPENXR.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 22:29:28 +02:00
iChris4 1cf9389d69 feat: added immersive window support for VR race views
- Introduced a new configuration option for immersive window mode in runtime_config.h.
- Updated the parsing and setting functions to handle the immersive window state.
- Modified the OpenXR backend to support rendering with the immersive window, blending the race view with the surrounding environment.
- Enhanced the settings overlay to allow users to select between immersive, immersive window, and flat screen race views.
- Implemented GPU rendering logic for the immersive window mask, ensuring correct visual output in various rendering paths.
- Added tests to validate the immersive window functionality and its interaction with existing race view settings.
2026-09-24 21:28:17 +02:00
iChris4andClaude Opus 5.5 1969dda0bf Documented foveation's tile artifacts on fine animated textures
- The Quest's GPU applies the fragment density per screen tile and samples textures at a coarser
  level inside reduced-rate tiles, so fine animated detail such as Retro Rewind's swamp goo shows
  square tile edges at the periphery.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 20:05:39 +02:00
iChris4andClaude Opus 5.5 6deda797d1 Documented foveation on SNES Ghost Valley 2
- Retro Rewind's SNES Ghost Valley 2 at render_scale 1.0, GPU-bound at about 40 FPS: merging the
  eye passes lifts it from 38.9 to 41.5 FPS (app GPU 23.3 to 21.7 ms), and no foveation level
  raises the frame rate further.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 19:55:46 +02:00
iChris4andClaude Opus 5.5 11084d13d9 Documented the Quest foveation measurements
- Luigi Circuit Grand Prix start on a Quest 3, same-session A/B through the debug properties:
  one render pass per eye saves 12% of eye GPU time at render_scale 0.8 and 8% at 1.3.
- Foveation is neutral at 0.8 (eyes are geometry and full-resolution tile-store bound) and saves
  8/14/22% at Low/Medium/High at 1.3, so it stays off by default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 19:25:07 +02:00
iChris4andClaude Opus 5.5 cc653272c8 Added foveated rendering for the Quest
- Eyes render under a VK_EXT_fragment_density_map: full rate around each eye's forward direction,
  2x2 then 4x4 pixel blocks towards the edges ([vr] foveation = off|low|medium|high, default off).
  XR_FB_foveation cannot help here: the runtime's maps only shape passes drawing into its
  swapchain, and the eyes reach it through a copy.
- aurora-main/patches/dawn/aurora_fdm.inc: Dawn enables the extension only on request and for
  dynamic rendering, flags every render pipeline, and chains an immutable RG8 map into any pass
  whose first color attachment is a view bound to one (ABI: include/aurora/dawn_fdm_abi.h).
- android/Build-QuestDawn.ps1 builds the pinned Dawn revision with those patches for arm64
  (dawn-build CI flags, protobuf off) into a cached package; Build-Quest.ps1 links it
  (-StockDawn opts out) and AuroraDawnProvider.cmake enables the ABI from its manifest.
- lib/gfx/foveation.hpp generates the maps (32 px per texel, densities 255/127/63); an eye is
  foveated only when single_pass_eyes draws it in one render pass. Menus never are.
- Live level from the headset panel's VR tab and the launcher; the launch decides whether the
  device has maps. debug.wiicompiled.foveation and debug.wiicompiled.fdm for A/B.
- Tests: Foveation cases in gx_fifo_tests, mkw_vr_config_tests. Docs: OPENXR.md, quest-port.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 19:03:17 +02:00
iChris4andClaude Opus 5.5 ceeeba0332 Replay each VR eye in one render pass
- Added eye_pass_plan.hpp: an eye keeps drawing in the render pass it has open across the frame's
  GX copies (only the mono render performs them), skips passes a later clear of the whole color and
  depth erases, and splits only for a clear of color alone or depth alone.
- render_stereo_eye follows that plan; the cockpit fallback is drawn inside the last pass instead of
  a render pass of its own that loaded the eye back.
- The stencil is now cleared where the eye actually starts, so a cockpit mask drawn in an erased pass
  can no longer punch holes in the HUD.
- [vr] single_pass_eyes (default on, live from F10) and debug.wiicompiled.eye_passes 0/1 on the Quest
  switch back to one render pass per recorded pass for A/B timing.
- Each new plan shape is logged once ("Eye replay plan: ...").
- Tests: EyePassPlan cases in gx_fifo_tests; stereo_multiplayer_smoke and stereo_frame_worker_smoke
  pass on D3D12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 18:18:08 +02:00
iChris4 13311ea626 Added Quest friend management features
- Added `ic_question_tip.xml` and `ic_success_tip.xml` vector drawables for UI icons.
- Created layout files for friend-related dialogs: `dialog_add_friend.xml` and `dialog_friend_code.xml`.
- Implemented `item_friend.xml` for displaying individual friend cards in the friends list.
- Developed `page_friends.xml` for the main friends page layout, including empty state handling.
- Added unit tests in `RksysFriendsTest.kt` to validate friend management logic and interactions.
- Introduced `SidebarStatusTest.kt` to ensure proper status reading and SVG path parsing.
2026-09-24 17:04:18 +02:00
iChris4 775d9f89d8 Added Quest leaderboard podium
- Added PlayerRow.kt to bind player data for leaderboard and rooms.
- Introduced PodiumCard.kt for podium animations and display of player rankings.
- Created drawable resources for podium backgrounds, badges, and particles.
- Developed layout files for leaderboard header and podium cards.
- Implemented LeaderboardTest to validate leaderboard functionality and player ranking logic.
2026-09-24 15:13:23 +02:00
iChris4 18781f2c88 Added Rooms in Quest Launcher
- Created dialog_player_profile.xml for displaying player profiles with loading and error states.
- Added item_player.xml for individual player items in lists, showing Mii, name, friend code, and VR.
- Introduced item_room.xml for room items, displaying game mode, ID, and player count.
- Developed page_room_details.xml for detailed room information, including player actions.
- Implemented page_rooms.xml for the main rooms page layout, featuring search functionality and room listings.
- Added view_vr_history.xml for visualizing player's VR history over time.
- Created LiveRoomsTest.kt to validate room and player functionalities, including leaderboard integration and search capabilities.
2026-09-24 14:33:14 +02:00