Overview
This release introduces experimental support for external display rendering in melonDS-android, allowing users to offload either the top or bottom screen of the emulated Nintendo DS system to a secondary screen connected via HDMI, USB-C, or other display interfaces.
The changes in this release are:
Shared OpenGL Texture Pipeline
Instead of relying on static framebuffer copies (e.g., via screenshotBuffer), the external screen now reuses the existing OpenGL texture pipeline used by the internal display. This ensures consistency in resolution scaling, performance, and frame delivery.
Dynamic Resolution Handling
The external screen rendering adapts to the configured resolution scaling (e.g., 1x, 2x, 4x) by directly accessing the internal GL textures. This eliminates previous issues such as visible artifacts, tearing, or resolution mismatches.
Codebase Isolation
The native library (melonDS-android-lib) remains unchanged in this branch. All modifications are scoped to the Android front-end, ensuring modularity and compatibility with upstream core changes.
Known Limitations
-
Rendering on external displays assumes a 1:1 frame delivery cycle with the internal rendering thread. Future improvements may introduce frame decoupling or asynchronous redraw.
-
Multi-layout switching at runtime may require further testing across various device vendors.