-
Notifications
You must be signed in to change notification settings - Fork 140
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[HTML] Added web page to showcase WebGL support.
- Main index.html file merely redirects to docu/WebPage folder. - Added simple web page showcasing two working WebGL examples: Animation and Fonts.
- Loading branch information
1 parent
4a280e7
commit 844db91
Showing
12 changed files
with
3,153 additions
and
0 deletions.
There are no files selected for viewing
2,652 changes: 2,652 additions & 0 deletions
2,652
docu/WebPage/Example_Animation/Example_Animation.data
Large diffs are not rendered by default.
Oops, something went wrong.
179 changes: 179 additions & 0 deletions
179
docu/WebPage/Example_Animation/Example_Animation.data.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,179 @@ | ||
|
||
var Module = typeof Module !== 'undefined' ? Module : {}; | ||
|
||
if (!Module.expectedDataFileDownloads) { | ||
Module.expectedDataFileDownloads = 0; | ||
} | ||
|
||
Module.expectedDataFileDownloads++; | ||
(function() { | ||
// Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context. | ||
if (Module['ENVIRONMENT_IS_PTHREAD'] || Module['$ww']) return; | ||
var loadPackage = function(metadata) { | ||
|
||
var PACKAGE_PATH = ''; | ||
if (typeof window === 'object') { | ||
PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/'); | ||
} else if (typeof process === 'undefined' && typeof location !== 'undefined') { | ||
// web worker | ||
PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/'); | ||
} | ||
var PACKAGE_NAME = 'Example_Animation.data'; | ||
var REMOTE_PACKAGE_BASE = 'Example_Animation.data'; | ||
if (typeof Module['locateFilePackage'] === 'function' && !Module['locateFile']) { | ||
Module['locateFile'] = Module['locateFilePackage']; | ||
err('warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)'); | ||
} | ||
var REMOTE_PACKAGE_NAME = Module['locateFile'] ? Module['locateFile'](REMOTE_PACKAGE_BASE, '') : REMOTE_PACKAGE_BASE; | ||
var REMOTE_PACKAGE_SIZE = metadata['remote_package_size']; | ||
|
||
function fetchRemotePackage(packageName, packageSize, callback, errback) { | ||
if (typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string') { | ||
require('fs').readFile(packageName, function(err, contents) { | ||
if (err) { | ||
errback(err); | ||
} else { | ||
callback(contents.buffer); | ||
} | ||
}); | ||
return; | ||
} | ||
var xhr = new XMLHttpRequest(); | ||
xhr.open('GET', packageName, true); | ||
xhr.responseType = 'arraybuffer'; | ||
xhr.onprogress = function(event) { | ||
var url = packageName; | ||
var size = packageSize; | ||
if (event.total) size = event.total; | ||
if (event.loaded) { | ||
if (!xhr.addedTotal) { | ||
xhr.addedTotal = true; | ||
if (!Module.dataFileDownloads) Module.dataFileDownloads = {}; | ||
Module.dataFileDownloads[url] = { | ||
loaded: event.loaded, | ||
total: size | ||
}; | ||
} else { | ||
Module.dataFileDownloads[url].loaded = event.loaded; | ||
} | ||
var total = 0; | ||
var loaded = 0; | ||
var num = 0; | ||
for (var download in Module.dataFileDownloads) { | ||
var data = Module.dataFileDownloads[download]; | ||
total += data.total; | ||
loaded += data.loaded; | ||
num++; | ||
} | ||
total = Math.ceil(total * Module.expectedDataFileDownloads/num); | ||
if (Module['setStatus']) Module['setStatus'](`Downloading data... (${loaded}/${total})`); | ||
} else if (!Module.dataFileDownloads) { | ||
if (Module['setStatus']) Module['setStatus']('Downloading data...'); | ||
} | ||
}; | ||
xhr.onerror = function(event) { | ||
throw new Error("NetworkError for: " + packageName); | ||
} | ||
xhr.onload = function(event) { | ||
if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 | ||
var packageData = xhr.response; | ||
callback(packageData); | ||
} else { | ||
throw new Error(xhr.statusText + " : " + xhr.responseURL); | ||
} | ||
}; | ||
xhr.send(null); | ||
}; | ||
|
||
function handleError(error) { | ||
console.error('package error:', error); | ||
}; | ||
|
||
var fetchedCallback = null; | ||
var fetched = Module['getPreloadedPackage'] ? Module['getPreloadedPackage'](REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE) : null; | ||
|
||
if (!fetched) fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, function(data) { | ||
if (fetchedCallback) { | ||
fetchedCallback(data); | ||
fetchedCallback = null; | ||
} else { | ||
fetched = data; | ||
} | ||
}, handleError); | ||
|
||
function runWithFS() { | ||
|
||
function assert(check, msg) { | ||
if (!check) throw msg + new Error().stack; | ||
} | ||
Module['FS_createPath']("/", "assets", true, true); | ||
|
||
/** @constructor */ | ||
function DataRequest(start, end, audio) { | ||
this.start = start; | ||
this.end = end; | ||
this.audio = audio; | ||
} | ||
DataRequest.prototype = { | ||
requests: {}, | ||
open: function(mode, name) { | ||
this.name = name; | ||
this.requests[name] = this; | ||
Module['addRunDependency'](`fp ${this.name}`); | ||
}, | ||
send: function() {}, | ||
onload: function() { | ||
var byteArray = this.byteArray.subarray(this.start, this.end); | ||
this.finish(byteArray); | ||
}, | ||
finish: function(byteArray) { | ||
var that = this; | ||
// canOwn this data in the filesystem, it is a slide into the heap that will never change | ||
Module['FS_createDataFile'](this.name, null, byteArray, true, true, true); | ||
Module['removeRunDependency'](`fp ${that.name}`); | ||
this.requests[this.name] = null; | ||
} | ||
}; | ||
|
||
var files = metadata['files']; | ||
for (var i = 0; i < files.length; ++i) { | ||
new DataRequest(files[i]['start'], files[i]['end'], files[i]['audio'] || 0).open('GET', files[i]['filename']); | ||
} | ||
|
||
function processPackageData(arrayBuffer) { | ||
assert(arrayBuffer, 'Loading data file failed.'); | ||
assert(arrayBuffer.constructor.name === ArrayBuffer.name, 'bad input to processPackageData'); | ||
var byteArray = new Uint8Array(arrayBuffer); | ||
var curr; | ||
// Reuse the bytearray from the XHR as the source for file reads. | ||
DataRequest.prototype.byteArray = byteArray; | ||
var files = metadata['files']; | ||
for (var i = 0; i < files.length; ++i) { | ||
DataRequest.prototype.requests[files[i].filename].onload(); | ||
} Module['removeRunDependency']('datafile_Example_Animation.data'); | ||
|
||
}; | ||
Module['addRunDependency']('datafile_Example_Animation.data'); | ||
|
||
if (!Module.preloadResults) Module.preloadResults = {}; | ||
|
||
Module.preloadResults[PACKAGE_NAME] = {fromCache: false}; | ||
if (fetched) { | ||
processPackageData(fetched); | ||
fetched = null; | ||
} else { | ||
fetchedCallback = processPackageData; | ||
} | ||
|
||
} | ||
if (Module['calledRun']) { | ||
runWithFS(); | ||
} else { | ||
if (!Module['preRun']) Module['preRun'] = []; | ||
Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it | ||
} | ||
|
||
} | ||
loadPackage({"files": [{"filename": "/assets/Example.450core.frag", "start": 0, "end": 1247}, {"filename": "/assets/Example.450core.vert", "start": 1247, "end": 1962}, {"filename": "/assets/Example.frag", "start": 1962, "end": 3059}, {"filename": "/assets/Example.vert", "start": 3059, "end": 3630}, {"filename": "/assets/IcoSphere.obj", "start": 3630, "end": 20796}, {"filename": "/assets/PenroseStairs-Bottom.obj", "start": 20796, "end": 30108}, {"filename": "/assets/PenroseStairs-Top.obj", "start": 30108, "end": 39182}, {"filename": "/assets/TilesGray512.jpg", "start": 39182, "end": 253540}], "remote_package_size": 253540}); | ||
|
||
})(); |
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<!DOCTYPE html> | ||
<html lang="en-US"> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> | ||
<title>LLGL - Animation</title> | ||
<style> | ||
h1 { | ||
font-family: Arial, Helvetica, sans-serif; | ||
} | ||
canvas { | ||
display: block; | ||
padding: 0; | ||
margin: auto; | ||
width: 70%; | ||
} | ||
</style> | ||
</head> | ||
<body> | ||
<!-- Create canvas that C++ code will draw into --> | ||
<div style="text-align: center;"> | ||
<h1>WebGL Example with LLGL</h1> | ||
<canvas id="canvas" oncontextmenu="event.preventDefault()" width="800" height="600"></canvas> | ||
</div> | ||
|
||
<!-- Define module to allow C++ code to access the canvas element --> | ||
<script type="text/javascript"> | ||
var Module = { | ||
print: function() { | ||
var e = document.getElementById("output"); | ||
return e && (e.value = ""), (...t) => { | ||
var n = t.join(" "); | ||
console.log(n), e && (e.value += n + "\n", e.scrollTop = e.scrollHeight) | ||
} | ||
}(), | ||
canvas: (() => { | ||
var e = document.getElementById("canvas"); | ||
return e.addEventListener("webglcontextlost", (e => { | ||
alert("WebGL context lost. You will need to reload the page."), e.preventDefault() | ||
}), !1), e | ||
})() | ||
}; | ||
</script> | ||
|
||
<!-- Add JavaScript glue code generated by Emscripten --> | ||
<script src=Example_Animation.data.js></script> | ||
<script src=Example_Animation.js></script> | ||
</body> | ||
</html> |
Binary file not shown.
Oops, something went wrong.