mirror of
https://github.com/libretro/RetroArch.git
synced 2025-04-02 10:51:52 -04:00
* workerized RA * Workerized (non-async) web player, using OPFS This patch eliminates the need for asyncify and uses modern filesystem APIs instead of the deprecated, unmaintained BrowserFS. This is a WIP patch because it won't fully work until these two Emscripten PRs land and are released: https://github.com/emscripten-core/emscripten/pull/23518 https://github.com/emscripten-core/emscripten/pull/23021 The former fixes an offscreen canvas context recreation bug, and the latter adds an equivalent to BrowserFS's XHR filesystem (but without the hazardous running-XHR-on-the-main-thread problem). The biggest issue is that local storage of users who were using the old version of the webplayer will be gone when they switch to the new webplayer. I don't have a good story for converting the old BrowserFS IDBFS contents into the new OPFS filesystem (the move is worth doing because OPFS supports seeking and reading only bits of a file, and because BrowserFS is dead). I've kept around the old libretro webplayer under pkg/emscripten/libretro-classic, and with these make flags you can build a non-workerized RA that uses asyncify to sleep as before: make -f Makefile.emscripten libretro=$CORE HAVE_WORKER=0 HAVE_WASMFS=0 PTHREAD=0 HAVE_AL=1 I also moved the default directory for core content on emscripten to not be a subdirectory of the local filesystem mount, because it's confusing to have a subdirectory that's lazily fetched and not mirrored to the local storage. I think it won't impact existing users of the classic web player because they already have a retroarch.cfg in place. * Get fetchfs working without manifest support * makefile fixes * fix scaling, remove zip dependency * Support asset/cheats/etc downloaders for emscripten - Add http transfer support for emscripten - At the task_http level, not the net_http level --- so no netplay or webdav. - Change default paths to be more like other platforms - Gives us smaller bundles and a faster boot time - Had to work around a task queue bug on Emscripten - I made the smallest possible change to do it, but it may be better to fix in rthread.c * Load an emscripten file_packager package on first run If no ozone assets are present, load a libretro_minimal package created using Emscripten's built-in file packager. * updated readme, removed indexer from wasmfs libretro-web * Put back zip dependency, load asset bundle into opfs on first run * fix upload path * Remove unused function * easy testing setup for two multithreaded conditions 1. make PROXY_TO_PTHREAD=1 (slower) 2. make PROXY_TO_PTHREAD=0 (bad audio, because doesn't sleep in openal.c) * Remove condition on sleep in openal also make input_driver check existence of drv->axis, drv->button before calling them. * Fix resizing under EGL * Don't force config file path on emscripten * Add time.h include to netplay, default HAVE_NETPLAYDISCOVERY to 0 * Remove nearly all proxied joypad calls under emscripten * Fix file uploads under firefox * Fix safari API uses, but Safari still hangs in OPFS filesystem mount I think this can be fixed by moving the backend creation off the main thread. * Move filesystem init into emscripten C entry point * Setup filesystems off of main thread * re-set default player to async Also improve Safari compatibility under proxy-to-pthread condition * Safari upload file fixes * Remove some excess prints * Fix typo
83 lines
5.2 KiB
HTML
83 lines
5.2 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>RetroArch Web Player</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<!-- Bootstrap core CSS -->
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.3/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
|
<!-- Font Awesome -->
|
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.0/css/font-awesome.min.css">
|
|
<!-- Material Design Bootstrap -->
|
|
<link href="//cdnjs.cloudflare.com/ajax/libs/mdbootstrap/4.1.1/css/mdb.min.css" rel="stylesheet">
|
|
<link href="libretro.css" rel="stylesheet" type="text/css">
|
|
<link rel="shortcut icon" href="https://web.libretro.com/media/retroarch.ico" />
|
|
</head>
|
|
<body>
|
|
<!--Navbar-->
|
|
<nav class="navbar navbar-dark bg-primary">
|
|
<div class="container">
|
|
<!--navbar content-->
|
|
<div class="navbar-toggleable-xs">
|
|
<!--Links-->
|
|
<ul class="nav navbar-nav">
|
|
<div class="dropdown">
|
|
<li class="nav-item dropdown">
|
|
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Core Selection</button>
|
|
<div class="dropdown-menu dropdown-primary" aria-labelledby="dropdownMenu1" data-dropdown-in="fadeIn" data-dropdown-out="fadeOut" id="core-selector">
|
|
<a class="dropdown-item" href="." data-core="chailove">ChaiLove</a>
|
|
<a class="dropdown-item" href="." data-core="fceumm">FCEUmm</a>
|
|
<a class="dropdown-item" href="." data-core="gambatte">Gambatte</a>
|
|
<a class="dropdown-item" href="." data-core="genesis_plus_gx">Genesis Plus GX</a>
|
|
<a class="dropdown-item" href="." data-core="lutro">Lutro</a>
|
|
<a class="dropdown-item" href="." data-core="nestopia">Nestopia (NES)</a>
|
|
<a class="dropdown-item" href="." data-core="snes9x">Snes9x (SNES)</a>
|
|
<a class="dropdown-item" href="." data-core="snes9x2010">Snes9x 2010 (SNES)</a>
|
|
<a class="dropdown-item" href="." data-core="theodore">Theodore (Thomson TO8/TO9)</a>
|
|
<a class="dropdown-item" href="." data-core="vba_next">VBA Next (Gameboy Advance)</a>
|
|
</div>
|
|
<button class="btn btn-primary disabled" id="btnRun" disabled>
|
|
<span class="fa fa-spinner fa-spin" id="icnRun"></span> Run
|
|
</button>
|
|
<button class="btn btn-primary disabled" id="btnAdd" disabled>
|
|
<span class="fa fa-plus" id="icnAdd"></span> Add Content
|
|
</button>
|
|
<input style="display: none" type="file" id="btnRom" name="upload" multiple />
|
|
<button class="btn btn-primary tooltip-enable" id="btnClean" title="Cleanup storage">
|
|
<span class="fa fa-trash-o" id="icnClean"></span> <span class="sr-only">Cleanup</span>
|
|
</button>
|
|
<button class="btn btn-primary disabled tooltip-enable" id="btnMenu" title="Menu toggle" disabled>
|
|
<span class="fa fa-bars" id="icnMenu"></span> <span class="sr-only">Menu</span>
|
|
</button>
|
|
<button class="btn btn-primary disabled tooltip-enable" id="btnFullscreen" title="Fullscreen" disabled>
|
|
<span class="fa fa-desktop" id="icnFullscreen"></span> <span class="sr-only">Fullscreen</span>
|
|
</button>
|
|
</li>
|
|
</div>
|
|
</ul>
|
|
</div>
|
|
<!--/.navbar content-->
|
|
</div>
|
|
</nav>
|
|
<div class="bg-inverse webplayer-container">
|
|
<div class="container">
|
|
<div class="webplayer_border text-xs-center" id="canvas_div">
|
|
<canvas class="webplayer" id="canvas" tabindex="1" oncontextmenu="event.preventDefault()" style="display: none"></canvas>
|
|
<img class="webplayer-preview img-fluid" src="media/canvas.png" width="960" height="720" alt="RetroArch Logo">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="//code.jquery.com/jquery-3.1.0.min.js"></script>
|
|
<script src="//rawgit.com/jeresig/jquery.hotkeys/master/jquery.hotkeys.js"></script>
|
|
<script src="//cdnjs.cloudflare.com/ajax/libs/tether/1.3.4/js/tether.min.js"></script>
|
|
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.3/js/bootstrap.min.js"></script>
|
|
<script src="analytics.js"></script>
|
|
<!--script src="//wzrd.in/standalone/browserfs@0.6.1"></script-->
|
|
<script src="browserfs.min.js"></script>
|
|
<script src="libretro.js"></script>
|
|
<div align="center">
|
|
<a href="https://www.patreon.com/libretro">
|
|
<img src="https://patreon_public_assets.s3.amazonaws.com/sized/becomeAPatronBanner.png" alt="Become a patron" width="350" height="116"></a>
|
|
</div>
|
|
</body>
|
|
</html>
|