Port of Libretro and cores to WinRT component
C# C Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
BeetleNGP.LibRetriX Pinvoke Jan 26, 2018
BeetleNGP Refactoring Jan 31, 2018
BeetlePCEFast.LibRetriX Pinvoke Jan 26, 2018
BeetlePCEFast Refactoring Jan 31, 2018
BeetlePCFX.LibRetriX Pinvoke Jan 26, 2018
BeetlePCFX Refactoring Jan 31, 2018
BeetlePSX.LibRetriX Pinvoke Jan 26, 2018
BeetlePSX Refactoring Jan 31, 2018
BeetleSaturn.LibRetriX Pinvoke Jan 26, 2018
BeetleSaturn Pinvoke Jan 26, 2018
BeetleWswan.LibRetriX Pinvoke Jan 26, 2018
BeetleWswan Refactoring Jan 31, 2018
FBAlpha.LibRetriX Pinvoke Jan 26, 2018
FBAlpha Refactoring Jan 31, 2018
FCEUMM.LibRetriX Pinvoke Jan 26, 2018
FCEUMM Refactoring Jan 31, 2018
GPGX.LibRetriX Cross platform prep May 14, 2018
GPGX Refactoring Jan 31, 2018
Gambatte.LibRetriX Cross platform prep May 14, 2018
Gambatte Support for core selection based on file type Jan 8, 2018
LibRetriX Cross platform prep May 14, 2018
MelonDS.LibRetriX Cross platform prep May 14, 2018
MelonDS Submodule updates Dec 24, 2017
Nestopia.LibRetriX Cross platform prep May 14, 2018
Nestopia Refactoring Jan 31, 2018
ParallelN64.LibRetriX Cross platform prep May 14, 2018
ParallelN64 Refactoring Jan 31, 2018
RetriX.Shared.Test Cross platform prep May 14, 2018
RetriX.Shared Cross platform prep May 14, 2018
RetriX.UWP.Unsafe Cross platform prep May 14, 2018
RetriX.UWP Cross platform prep May 14, 2018
Retrix.UWP.Native Cross platform prep May 14, 2018
Snes9X.LibRetriX Cross platform prep May 14, 2018
Snes9X Refactoring Jan 31, 2018
VBAM.LibRetriX Cross platform prep May 14, 2018
VBAM Submodule updates Dec 24, 2017
Yabause.LibRetriX Cross platform prep May 14, 2018
Yabause Refactoring Jan 31, 2018
.gitattributes Refactoring Aug 2, 2017
.gitignore Pinvoke Jan 26, 2018
.gitmodules Support for core selection based on file type Jan 8, 2018
AppXTimeStamper.ps1 Refactoring Aug 2, 2017
LibretroRT.sln Refactoring Jan 31, 2018
LibretroRTLogo.png Refactoring Aug 2, 2017
License.txt Refactoring Aug 2, 2017
readme.md Final Burn Alpha Sep 7, 2017

readme.md

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

Youtube link

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

  1. Check the releases section for the latest binary build
  2. 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.

  1. Do a recursive clone (add --recursive after git clone). Or just clone from Team Explorer in Visual Studio
  2. Select either x86, x64 or ARM as the architecture, Any CPU won't work, then your preferred build config (Debug/Release)
  3. Select Retrix.UWP as the startup project in Visual Studio to run from there with debugger attached
  4. 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