LibretroRT & RetriX
LibretroRT is a framework to enable porting of Libretro cores to WinRT components.
This should enable creating native UWP emulator front ends using high the high quality open source Libretro cores available.
Supported systems
Libretro core used in parentheses
- NES (FCEUMM)
- SNES (Snex9x)
- Game Boy (Ganbatte)
- Game Boy Advance (Visual Boy Advance)
- DS (Melon DS)
- SG1000 (Genesis Plus GX)
- Master System (Genesis Plus GX)
- Game Gear (Genesis Plus GX)
- Mega Drive (Genesis Plus GX)
- PlayStation (Genesis Plus GX)
- Neo Geo (Final Burn Alpha)
- Neo Geo Pocket (BeetleNGP)
- Wonderswan (BeetleWSwan)
- PC Engine (BeetlePCEFast)
- PC-FX (Beetle PCFX)
- PlayStation (BeetlePSX)
- Arcade (Final Burn Alpha)
Demo
Click image to play video
Original demo video here
How to use
Check the wiki
Want to support RetriX's development?
Consider donating via Patreon. Thank you in advance :)
Installing
- Check the releases section for the latest binary build
- Download and double click on the .appxbundle file, follow the instructions
Building from source
The project makes extensive use of Git submodules, to include Libretro cores code, which means some extra care needs to be taken when cloning.
- Do a recursive clone (add
--recursive
aftergit clone
). Or just clone from Team Explorer in Visual Studio - Select either x86, x64 or ARM as the architecture,
Any CPU
won't work, then your preferred build config (Debug/Release) - Select
Retrix.UWP
as the startup project in Visual Studio to run from there with debugger attached - Right click on the Retrix.UWP node in solution explorer, select Store->Create app packages and follow the wizard to create your own .appx binaries
Design goals
- Full compliance with UWP sandboxing
- Having cores render to SwapChain panels, allowing XAML and DirectX interop and front ends to use native UWP controls for the UI
- Support Windows 10 on all platforms (Desktop, Mobile, Xbox, VR) and architectures (x86, x64, ARM)
- Allow packaging and distribution via NuGet for a great development experience
Project aim
- Creating a UWP Libretro front end for a better experience (proper DPI scaling, native look and feel, fullscreen as borderless window, integration with Windows's modern audio pipeline)
- Increasing safety by having emulation code run sandboxed
- Create a meaningful use case for UWP sideloading on Windows, since Microsoft has decided to ban emulators from the store
Current state
- Created a framework to speed up porting of software rendering based Libretro cores to WinRT components
- Ported GenesisPlusGX, Snes9x, FCEUMM, Nestopia (doesn't work well, using FCEUMM instead), VBAM, Ganbatte, BeetlePSX, Beetle PCEFast, Beetle PCFX, Final Burn Alpha, MelonDS
- Created audio player WinRT components to interop between Libretro's audio rendering interface and Windows 10's AudioGraph API
- Created input manager WinRT component to interop between Libretro's input polling interface and Windows 10's Gamepad APIs
- Created Win2D/Angle based video renderer. Supports software based Libretro cores.
- Created RetriX, a native XAML based Libretro front end, with an UI optimized for mouse, touch as well as gamepad interaction: it scales from phones to tablets, traditional PC form factors as well as the Xbox One.
- Implemented a way to virtualize file system access from within cores: allows opening zipped games and those made up of multiple files
- Added support for some CD based game systems: Mega CD and PlayStation
- Created signed appx packages with a valid Authenticode certificate to make installation as easy as traditional desktop apps
- Completed Xbox UI: RetriX can now be fully used with only a gamepad as input device
Roadmap
- Expand framework to allow porting of OpenGL based cores to WinRT using Angle while still allowing front ends to be written in languages other than C++
- Port more Libretro cores
- Split LibretroRT (Libretro core ports to UWP) from RetriX, distribute the former via Nuget package, the latter via direct appx downlad in addition to source availability