Added Basic WASM Utilities

pull/217/merge
Javidx9 4 years ago committed by GitHub
parent 61d0e06766
commit 74ec5500f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 77
      WASM/basic_template.html
  2. 108
      WASM/pge2wasm.bat
  3. BIN
      WASM/readme.md

@ -0,0 +1,77 @@
<!doctype html>
<html lang="en-us">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Emscripten-Generated Code</title>
<style>
html,body { width: 100%; height: 100%; }
body { font-family: arial; margin: 0; padding: 0; background: #000; }
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten_border { border: none; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; background-color: black; }
</style>
</head>
<body>
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" tabindex=-1></canvas>
<script type='text/javascript'>
var Module = {
preRun: [],
postRun: [],
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
};
</script>
<script async type="text/javascript" src="./pge.js"></script>
<script type="text/javascript">
Module.canvas.addEventListener("resize", (e) => {
var viewWidth = e.detail.width;
var viewHeight = e.detail.width / Module._olc_WindowAspectRatio;
if(viewHeight > e.detail.height)
{
viewHeight = e.detail.height;
viewWidth = e.detail.height * Module._olc_WindowAspectRatio;
}
// update dom attributes
Module.canvas.setAttribute("width", viewWidth);
Module.canvas.setAttribute("height", viewHeight);
var top = (e.detail.height - viewHeight) / 2;
var left = (e.detail.width - viewWidth) / 2;
// update styles
Module.canvas.style.position = "fixed";
Module.canvas.style.top = top.toString() + "px";
Module.canvas.style.left = left.toString() + "px";
Module.canvas.style.width = "";
Module.canvas.style.height = "";
// trigger PGE update
Module._olc_PGE_UpdateWindowSize(viewWidth, viewHeight);
// ensure canvas has focus
Module.canvas.focus();
e.preventDefault();
});
</script>
</body>
</html>

@ -0,0 +1,108 @@
@echo off
:: Convenience Utility to build projects using olc::PixelGameEngine, using
:: Emscripten, producing WASM based output.
::
:: OneLoneCoder.com 2021 - Released under OLC-3 license
::
:: v1.00: Initial Release
setlocal enabledelayedexpansion enableextensions
:: Customize here ===========================================
:: Location of Emscripten SDK
set EMSDK="e:\pge_ems\emsdk\"
:: Location of olc::PixelGameEngine header file
set OLCPGE=".\"
set OLCPGE="e:\pge_dev\olcPixelGameEngine_dev\Deploy"
:: ==========================================================
set WORKINGDIR=%CD%
if not exist %EMSDK% (
echo Error: No Emscripten SDK folder found!
goto :fail
)
if not exist %OLCPGE% (
echo Error: Invalid PGE Location!
goto :fail
)
if "%1"=="build" goto :build
if "%1"=="run" goto :run
if "%1"=="clean" goto :clean
goto :error
:build
:: Configure path variables
cd %EMSDK%
call emsdk_env.bat
:: Create working folder
cd %WORKINGDIR%
if not exist ".\WASM" (
echo Creating .\WASM output folder
mkdir ".\WASM"
)
:: Grab all cpp files if no specific file is given
if "%~2"=="" goto :graball
set CPP=%~2
goto :embuild
:graball
echo Gathering *.cpp files from
echo %CD%
set CPP=
for %%x in (%CD%\*.cpp) do set CPP=!CPP! %%x
set CPP=%CPP:~1%
:embuild
echo %CPP%
if exist "./assets" (
echo Starting Build with assets...
call em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 %CPP% -o .\WASM\pge.html -I %OLCPGE% --preload-file .\assets
) else (
echo Starting Build without assets...
call em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 %CPP% -o .\WASM\pge.html -I %OLCPGE%
)
echo Build Completed
goto :success
:run
:: Configure path variables
cd %EMSDK%
call emsdk_env.bat
cd %WORKINGDIR%
emrun .\WASM\pge.html
goto :success
:clean
if exist ".\WASM" (
rmdir /s /q .\WASM
)
goto :success
:error
echo Error: Incorrect Input
goto :fail
:success
echo Exit With Success
goto :leave
:fail
echo Exit with Failure
goto :leave
:leave
exit

Binary file not shown.
Loading…
Cancel
Save