At long last, it's here: the first release to work on Android, the first release with an app picker UI, the first release with (very limited) UIKit support, and much more!
This release required a lot of effort, and not just from me! I want to especially thank @ciciplusplus, who dared to try to port touchHLE to Android and somehow succeeded. I also want to thank @KiritoDv and @LennyKappa, who also made big contributions to this release.
Thank you all for your continued patience and support. I hope you enjoy!
~ hikari
[Update 2023-09-01: When the release was tagged and uploaded yesterday, two changelog entries were mistakenly in the v0.1.2 section rather than v0.2.0. The copies of the changelog below and in the release zip files have now been corrected. Additionally, the OPTIONS_HELP.txt
file was mistakenly absent from the Android release zip file, but it has now been added.]
Compatibility:
-
API support improvements:
- Various small contributions. (@hikari-no-yume, @KiritoDv, @ciciplusplus, @TylerJaacks, @LennyKappa)
- PVRTC and paletted texture compression is now supported. (@hikari-no-yume)
- Some key pieces of UIKit and Core Animation are now implemented: layer and view hierarchy, layer and view drawing, layer compositing, touch input hit testing,
UIImageView
,UILabel
,UIControl
, andUIButton
. Previously, touchHLE could only support apps that draw everything with OpenGL ES, which is only common for games. This lays the groundwork for supporting games that rely on UIKit, and possibly some non-game apps. (@hikari-no-yume) - Threads can now sleep, join other threads, and block on mutexes. (@LennyKappa, @hikari-no-yume)
-
New supported apps:
- Fastlane Street Racing (@hikari-no-yume)
- Mystery Mania (@KiritoDv)
- Wolfenstein 3D (@ciciplusplus; version 1.0 only)
- Many old apps by Donut Games (@ciciplusplus)
Quality and performance:
- Overlapping characters in text now render correctly. (@Xertes0)
- touchHLE now avoids polling for events more often than 120Hz. Previously, it would sometimes poll many times more often than that, which could be very bad for performance. This change improves performance in basically all apps, though the effects on the supported apps from previous releases are fairly subtle. (@hikari-no-yume)
- The macOS-only memory leak of up to 0.4MB/s seems to have been fixed! (@hikari-no-yume)
- App icons are now displayed with rounded corners, even if the PNG file contains a square image. This is more accurate to what iPhone OS does. (@hikari-no-yume)
- The memory allocator is a lot faster now. (@hikari-no-yume)
New platform support:
- touchHLE is now available for Android. Only AArch64 devices are supported. (@ciciplusplus, @hikari-no-yume)
Usability:
- touchHLE now supports real accelerometer input on devices with a built-in accelerometer, such as phones and tablets. This is only used if no game controller is connected. (@hikari-no-yume)
- The options help text is now available as a file (
OPTIONS_HELP.txt
), so you don't have to use the command line to get a list of options. (@hikari-no-yume) - The new
--fullscreen
option lets you display an app in fullscreen rather than in a window. This is independent of the internal resolution/scale hack and supports both upscaling and downscaling. (@hikari-no-yume) - touchHLE now has a built-in app picker with a pretty icon grid. Specifying an app on the command line bypasses it. (@hikari-no-yume)
- The new
--button-to-touch=
option lets you map a button on your game controller to a point on the touch screen. touchHLE also now includes default button mappings for some games. (@hikari-no-yume) - The new
--print-fps
option lets you monitor the framerate from the console. (@hikari-no-yume)
Other:
-
To assist with debugging and development, touchHLE now has a primitive implementation of the GDB Remote Serial Protocol. GDB can connect to touchHLE over TCP and set software breakpoints, inspect memory and registers, step or continue execution, etc. This replaces the old
--breakpoint=
option, which is now removed. (@hikari-no-yume) -
The version of SDL2 used by touchHLE has been updated to 2.26.4. (@hikari-no-yume)
-
Building on common Linux systems should now work without problems, and you can use dynamic linking for SDL2 and OpenAL if you prefer. Note that we are not providing release binaries. (@GeffDev)
-
Some major changes have been made to how touchHLE interacts with graphics drivers:
- touchHLE can now use a native OpenGL ES 1.1 driver where available, rather than translating to OpenGL 2.1. This is configurable with the new
--gles1=
option. (@hikari-no-yume) - The code for presenting rendered frames to the screen has been rewritten for compatibility with OpenGL ES 1.1. (@hikari-no-yume)
- The splash screen is now drawn with OpenGL ES 1.1, either natively or via translation to OpenGL 2.1, rather than with OpenGL 3.2. (@hikari-no-yume)
Theoretically, none of these changes should affect how touchHLE behaves for ordinary users in supported apps, but graphics drivers are inscrutable and frequently buggy beasts, so it's hard to be certain. As if to demonstrate this, these changes somehow fixed the mysterious macOS-only memory leak.
- touchHLE can now use a native OpenGL ES 1.1 driver where available, rather than translating to OpenGL 2.1. This is configurable with the new
-
The new
--headless
option lets you run touchHLE with no graphical output and no input whatsoever. This is only useful for command-line apps. (@hikari-no-yume)