Cemu for Android External Screen Support
⚠️ Disclaimer
External screen support is currently experimental and intended as a proof of concept.
There are known bugs and limitations, and stability is not guaranteed.
This feature will be gradually improved in future versions, with the goal of delivering a more polished dual-screen experience on Android.
Tested and verified on the Ayaneo Pocket DS for external display functionality.
Changes in this version
Add support for rendering GamePad to external display
- Allows toggling the GamePad screen to an external display.
- Introduces a
PadPresentation
usingDisplayManager
andDisplayListener
. - Lifecycle-aware handling of connected/disconnected displays.
- Side menu updated with a checkbox to toggle external display mode.
- Updates to
NativeEmulation.cpp
to manage pad surface lifecycle and native window state.
Add DisplayUtils and setPadRotatedLeft JNI
- Introduces
DisplayUtils.kt
to centralize screen-related logic. - Adds
setPadRotatedLeft()
JNI to handle GamePad screen rotation explicitly.
Refactor screen rotation and add screen swapping feature
- Adds a new
swap_screens
boolean to flip the main and GamePad displays. - Updates UI, touch input, and renderer logic accordingly.
- Adds screen swap checkbox to side menu.
Add WindowManager flags to prevent focus and touch modal in EmulationActivity
- Ensures external display windows do not steal focus or input from the main display.
Fix screen swap touch controls
- Corrects touch logic for both main and external GamePad views when screens are swapped.
- Canvas touch listeners now respect the swapped state for accurate interaction.
Tested on
- Ayaneo Pocket DS
- Pocket ACE + Retroid Dual Screen Add-on.
🙏 Special Thanks
Huge thanks to @retrogamecorps for his testing efforts in making this version possible.