Commit Graph
30 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 d491fc90cf Secondary outputs, and --game-window on Mac to show the game in a second window
The ScreenManager keeps a list of secondary outputs, each with its own
swapchain, recreated after a lost device. Platform code adds, resizes and
removes them from any thread through Native_AddOutput() and friends, which
take effect at the start of the next frame.

Each frame, every output is drawn by the topmost screen that claims it
(Screen::renderOutput). EmuScreen claims Game outputs: it presents the
game there, laid out for that output, and leaves it out of the backbuffer,
where the touch controls and the menus stay. Not in non-buffered mode,
which draws straight into the backbuffer.

--game-window opens such an output on Mac, with Metal. It's a smoke test
for multiple swapchains, and a stand-in for an AirPlay display.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 18:42:53 +02:00
Henrik RydgårdandClaude Opus 5.5 cdf9d38dca iOS: Feed the gyroscope into tilt input
Same as Android: rotation rates go to NativeGyroscope, and SYSPROP_HAS_GYRO shows the "Use gyroscope" option.

Accelerometer data is now scaled from g to m/s^2, like Android's. Tilt normalizes it, but the gyro fusion only trusts the accelerometer when it reads about 9.81, so in g it would never correct drift.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 14:00:33 +02:00
Henrik RydgårdandClaude Opus 5.5 f84e63f753 Tilt: Steady the tilt input with the gyroscope where there is one
Tilt used the raw accelerometer as the gravity vector, which jitters with
sensor noise and jumps when the device is shaken. Now, when gyro data is
coming in, a complementary filter integrates the gyro rates and only pulls
the result toward the accelerometer with a 0.5 s time constant, trusting
the accelerometer less the further it reads from 1g. The fused vector goes
through the same ProcessTilt path, so calibration and sensitivity work as
before. Without a gyro, nothing changes.

The fusion lives in TiltEventProcessor behind NativeGyroscope(), so other
sources (DualSense) can feed it too. Android registers TYPE_GYROSCOPE next
to the accelerometer. A "Use gyroscope" checkbox (on by default, per game)
appears in tilt setup once gyro data has been seen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 10:45:37 +02:00
Henrik Rydgård 5eb4772644 Minor EmuThread refactor 2026-08-05 00:15:56 +02:00
Henrik Rydgård 7f218acc53 Change the GraphicsContext interface to be more consistent 2026-07-26 10:22:00 +02:00
Henrik Rydgård 85f8715660 Break the circular dependency caused by putting EmuThread in core using an interface 2026-07-24 15:31:42 +02:00
Henrik Rydgård a59637975a Call the new command line parser from all backends 2026-07-20 12:02:07 +02:00
Henrik Rydgård 02e9deb232 Fix some input behavior that got lost in the previous commits. 2026-06-24 21:48:44 +02:00
david.schkalee d477afa9b2 Android: add achievements host override receiver 2026-06-01 01:44:04 +02:00
Henrik Rydgård 0502d79c99 Remove the return value from NativeMix, correct mixing with other channel numbers than 2 2025-06-18 23:48:00 +02:00
Henrik Rydgård 61d6c95f0c More refactoring. Add the AudioBackend interface 2025-06-16 21:55:32 +02:00
Henrik Rydgård 990b74cc17 More audio refactoring 2025-06-16 18:48:53 +02:00
Henrik Rydgård 91360fee9b Have Native_UpdateScreenScale use the new g_display.Recalculate() 2025-02-20 15:47:02 -06:00
Henrik Rydgård 080798b5dd Move out two more functions from Core.cpp. Clean up Windows includes 2024-12-08 12:12:02 +01:00
Henrik Rydgård 2b8414b437 Move irrelevant code out of Core.cpp 2024-12-02 13:26:41 +01:00
Henrik Rydgård 9699be2110 RetroAchievements: Cleanup better on login failure 2024-09-26 01:09:56 +02:00
Henrik Rydgård 5763ec1b88 Move NativeQueryConfig into app-android.cpp 2023-12-12 09:56:33 +01:00
Henrik Rydgård db4993bfdc Implement full support for mouse input on Android
The smoothing algorithm changed a bit now that I centralized that logic
in a way that can work with all backends.
2023-12-10 09:52:19 +01:00
Henrik Rydgård c28dc9e4f2 Pass in accelerometer readings using NativeAccelerometer instead of NativeAxis 2023-09-27 11:34:31 +02:00
Henrik Rydgård cd79d120d8 Don't log warnings on missing RA login secret. Also don't even check unless a username has been set. 2023-09-06 10:34:32 +02:00
Henrik Rydgård 80a99a67d9 Control: Change internal interfaces to batch-process input axis updates
These naturally come in bunches on many platforms like Android, so lay
some groundwork to also handle them in bunches to minimize locking in
the future.

Linux buildfix
2023-08-31 11:55:53 +02:00
Henrik Rydgård bcae36d8cb Merge NativeUpdate and NativeRender, we always call them together. 2023-08-07 22:50:57 +02:00
Henrik Rydgård 84fffec4f3 Switch all NativeMessageReceived to System_PostUIMessage 2023-07-06 17:26:02 +02:00
Henrik Rydgård 87846c5fcb Add simple facility for storing secret in app-private storage on Android (other platforms not so good) 2023-06-26 10:01:42 +02:00
Henrik Rydgård a5fdf3d05b Add samplerate argument to NativeMix 2023-03-24 14:48:53 +01:00
Henrik Rydgård de064e210e Replace the inputbox queue with a more generic RequestManager. 2023-03-22 12:41:11 +01:00
Henrik Rydgård 07114c6aaf Remove return value from axis functions in API 2023-01-10 10:12:37 +01:00
Henrik Rydgård fdfc4cbe40 Android: Remove return value from touch event functions 2023-01-10 10:12:33 +01:00
Henrik Rydgård 3be1ff6ce4 Get the new setup flow going, with a confirmation dialog etc.
Moving the folder while already installed still crashes.
2021-08-04 23:22:43 +02:00
Henrik Rydgård f01ba6dc84 Move NativeApp.h to Common/System, split into NativeApp.h and System.h
Buildfix
2020-10-04 11:42:16 +02:00