summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Kosarek <matthew@matthewkosarek.xyz>2023-09-24 16:23:43 -0400
committerMatthew Kosarek <matthew@matthewkosarek.xyz>2023-09-24 16:23:43 -0400
commitff3b7a7fa3f2ce994fb4aaaa9699c1c91fa07904 (patch)
treed62df3ff940c7976923d70e116e502c381f96b97
parent61cd8d99e6a3475eaf2bd28bc24892cf1aae0398 (diff)
Working shaders again
-rw-r--r--README.md15
-rw-r--r--themes/dist/output.js750
-rwxr-xr-xthemes/dist/output.wasmbin147381 -> 147546 bytes
-rw-r--r--themes/src/_shaders/sun.frag45
-rw-r--r--themes/src/shaders/sun_frag.cpp45
-rw-r--r--themes/src/spring/SpringTheme.cpp4
-rw-r--r--themes/src/tools/shader.js4
7 files changed, 415 insertions, 448 deletions
diff --git a/README.md b/README.md
index 23615f3..cc72eb9 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,18 @@ If you are on Github, this is a mirror of: https://git.matthewkosarek.xyz/matthe
## Running
With python installed, run `./run_dev.sh` and you should be good to go. Then navigate to `localhost:8080` in your browser.
+
+## Building Themes
+
+### Build the shaders
+```
+cd themes/src
+node tools/shaders.js
+```
+
+### Compile
+```
+cd themes
+./compile-commands.sh
+make
+```
diff --git a/themes/dist/output.js b/themes/dist/output.js
index 75522f9..66f945d 100644
--- a/themes/dist/output.js
+++ b/themes/dist/output.js
@@ -67,9 +67,9 @@ if (ENVIRONMENT_IS_NODE) {
var nodeVersion = process.versions.node;
var numericVersion = nodeVersion.split('.').slice(0, 3);
numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1);
- var minVersion = 101900;
- if (numericVersion < 101900) {
- throw new Error('This emscripten-generated code requires node v10.19.19.0 (detected v' + nodeVersion + ')');
+ var minVersion = 160000;
+ if (numericVersion < 160000) {
+ throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')');
}
// `require()` is no-op in an ESM module, use `createRequire()` to construct
@@ -112,7 +112,6 @@ readAsync = (filename, onload, onerror, binary = true) => {
else onload(binary ? data.buffer : data);
});
};
-
// end include: node_shell_read.js
if (!Module['thisProgram'] && process.argv.length > 1) {
thisProgram = process.argv[1].replace(/\\/g, '/');
@@ -131,16 +130,6 @@ readAsync = (filename, onload, onerror, binary = true) => {
}
});
- // Without this older versions of node (< v15) will log unhandled rejections
- // but return 0, which is not normally the desired behaviour. This is
- // not be needed with node v15 and about because it is now the default
- // behaviour:
- // See https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode
- var nodeMajor = process.versions.node.split(".")[0];
- if (nodeMajor < 15) {
- process.on('unhandledRejection', (reason) => { throw reason; });
- }
-
quit_ = (status, toThrow) => {
process.exitCode = status;
throw toThrow;
@@ -154,29 +143,31 @@ if (ENVIRONMENT_IS_SHELL) {
if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
if (typeof read != 'undefined') {
- read_ = (f) => {
- return read(f);
- };
+ read_ = read;
}
readBinary = (f) => {
- let data;
if (typeof readbuffer == 'function') {
return new Uint8Array(readbuffer(f));
}
- data = read(f, 'binary');
+ let data = read(f, 'binary');
assert(typeof data == 'object');
return data;
};
readAsync = (f, onload, onerror) => {
- setTimeout(() => onload(readBinary(f)), 0);
+ setTimeout(() => onload(readBinary(f)));
};
if (typeof clearTimeout == 'undefined') {
globalThis.clearTimeout = (id) => {};
}
+ if (typeof setTimeout == 'undefined') {
+ // spidermonkey lacks setTimeout but we use it above in readAsync.
+ globalThis.setTimeout = (f) => (typeof f == 'function') ? f() : abort();
+ }
+
if (typeof scriptArgs != 'undefined') {
arguments_ = scriptArgs;
} else if (typeof arguments != 'undefined') {
@@ -245,19 +236,19 @@ if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
{
// include: web_or_worker_shell_read.js
read_ = (url) => {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', url, false);
- xhr.send(null);
- return xhr.responseText;
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, false);
+ xhr.send(null);
+ return xhr.responseText;
}
if (ENVIRONMENT_IS_WORKER) {
readBinary = (url) => {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', url, false);
- xhr.responseType = 'arraybuffer';
- xhr.send(null);
- return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, false);
+ xhr.responseType = 'arraybuffer';
+ xhr.send(null);
+ return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));
};
}
@@ -317,6 +308,7 @@ assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was r
assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');
assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');
assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');
+legacyModuleProp('asm', 'wasmExports');
legacyModuleProp('read', 'read_');
legacyModuleProp('readAsync', 'readAsync');
legacyModuleProp('readBinary', 'readBinary');
@@ -352,6 +344,7 @@ if (typeof WebAssembly != 'object') {
// Wasm globals
var wasmMemory;
+var wasmExports;
//========================================
// Runtime essentials
@@ -422,7 +415,6 @@ assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use
// from the wasm module and this will be assigned once
// the exports are available.
var wasmTable;
-
// end include: runtime_init_table.js
// include: runtime_stack_check.js
// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
@@ -461,7 +453,6 @@ function checkStackCookie() {
abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
}
}
-
// end include: runtime_stack_check.js
// include: runtime_assertions.js
// Endianness check
@@ -558,7 +549,6 @@ assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_
assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
-
// end include: runtime_math.js
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
@@ -682,19 +672,19 @@ function abort(what) {
// end include: memoryprofiler.js
// show errors on likely calls to FS when it was not included
var FS = {
- error: function() {
+ error() {
abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM');
},
- init: function() { FS.error() },
- createDataFile: function() { FS.error() },
- createPreloadedFile: function() { FS.error() },
- createLazyFile: function() { FS.error() },
- open: function() { FS.error() },
- mkdev: function() { FS.error() },
- registerDevice: function() { FS.error() },
- analyzePath: function() { FS.error() },
-
- ErrnoError: function ErrnoError() { FS.error() },
+ init() { FS.error() },
+ createDataFile() { FS.error() },
+ createPreloadedFile() { FS.error() },
+ createLazyFile() { FS.error() },
+ open() { FS.error() },
+ mkdev() { FS.error() },
+ registerDevice() { FS.error() },
+ analyzePath() { FS.error() },
+
+ ErrnoError() { FS.error() },
};
Module['FS_createDataFile'] = FS.createDataFile;
Module['FS_createPreloadedFile'] = FS.createPreloadedFile;
@@ -713,21 +703,13 @@ function isDataURI(filename) {
function isFileURI(filename) {
return filename.startsWith('file://');
}
-
// end include: URIUtils.js
-/** @param {boolean=} fixedasm */
-function createExportWrapper(name, fixedasm) {
+function createExportWrapper(name) {
return function() {
- var displayName = name;
- var asm = fixedasm;
- if (!fixedasm) {
- asm = Module['asm'];
- }
- assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization');
- if (!asm[name]) {
- assert(asm[name], 'exported native function `' + displayName + '` not found');
- }
- return asm[name].apply(null, arguments);
+ assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`);
+ var f = wasmExports[name];
+ assert(f, `exported native function \`${name}\` not found`);
+ return f.apply(null, arguments);
};
}
@@ -739,19 +721,14 @@ var wasmBinaryFile;
wasmBinaryFile = locateFile(wasmBinaryFile);
}
-function getBinary(file) {
- try {
- if (file == wasmBinaryFile && wasmBinary) {
- return new Uint8Array(wasmBinary);
- }
- if (readBinary) {
- return readBinary(file);
- }
- throw "both async and sync fetching of the wasm failed";
+function getBinarySync(file) {
+ if (file == wasmBinaryFile && wasmBinary) {
+ return new Uint8Array(wasmBinary);
}
- catch (err) {
- abort(err);
+ if (readBinary) {
+ return readBinary(file);
}
+ throw "both async and sync fetching of the wasm failed";
}
function getBinaryPromise(binaryFile) {
@@ -760,7 +737,8 @@ function getBinaryPromise(binaryFile) {
// See https://github.com/github/fetch/pull/92#issuecomment-140665932
// Cordova or Electron apps are typically loaded from a file:// url.
// So use fetch if it is available and the url is not a file, otherwise fall back to XHR.
- if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
+ if (!wasmBinary
+ && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
if (typeof fetch == 'function'
&& !isFileURI(binaryFile)
) {
@@ -769,20 +747,18 @@ function getBinaryPromise(binaryFile) {
throw "failed to load wasm binary file at '" + binaryFile + "'";
}
return response['arrayBuffer']();
- }).catch(() => getBinary(binaryFile));
+ }).catch(() => getBinarySync(binaryFile));
}
- else {
- if (readAsync) {
- // fetch is not available or url is file => try XHR (readAsync uses XHR internally)
- return new Promise((resolve, reject) => {
- readAsync(binaryFile, (response) => resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))), reject)
- });
- }
+ else if (readAsync) {
+ // fetch is not available or url is file => try XHR (readAsync uses XHR internally)
+ return new Promise((resolve, reject) => {
+ readAsync(binaryFile, (response) => resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))), reject)
+ });
}
}
- // Otherwise, getBinary should be able to get it synchronously
- return Promise.resolve().then(() => getBinary(binaryFile));
+ // Otherwise, getBinarySync should be able to get it synchronously
+ return Promise.resolve().then(() => getBinarySync(binaryFile));
}
function instantiateArrayBuffer(binaryFile, imports, receiver) {
@@ -833,9 +809,8 @@ function instantiateAsync(binary, binaryFile, imports, callback) {
return instantiateArrayBuffer(binaryFile, imports, callback);
});
});
- } else {
- return instantiateArrayBuffer(binaryFile, imports, callback);
}
+ return instantiateArrayBuffer(binaryFile, imports, callback);
}
// Create the wasm instance.
@@ -853,9 +828,11 @@ function createWasm() {
function receiveInstance(instance, module) {
var exports = instance.exports;
- Module['asm'] = exports;
+ wasmExports = exports;
+
- wasmMemory = Module['asm']['memory'];
+ wasmMemory = wasmExports['memory'];
+
assert(wasmMemory, "memory not found in wasm exports");
// This assertion doesn't hold when emscripten is run in --post-link
// mode.
@@ -863,10 +840,11 @@ function createWasm() {
//assert(wasmMemory.buffer.byteLength === 16777216);
updateMemoryViews();
- wasmTable = Module['asm']['__indirect_function_table'];
+ wasmTable = wasmExports['__indirect_function_table'];
+
assert(wasmTable, "table not found in wasm exports");
- addOnInit(Module['asm']['__wasm_call_ctors']);
+ addOnInit(wasmExports['__wasm_call_ctors']);
removeRunDependency('wasm-instantiate');
return exports;
@@ -914,12 +892,14 @@ var tempDouble;
var tempI64;
// include: runtime_debug.js
-function legacyModuleProp(prop, newName) {
+function legacyModuleProp(prop, newName, incomming=true) {
if (!Object.getOwnPropertyDescriptor(Module, prop)) {
Object.defineProperty(Module, prop, {
configurable: true,
- get: function() {
- abort('Module.' + prop + ' has been replaced with plain ' + newName + ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)');
+ get() {
+ let extra = incomming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : '';
+ abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra);
+
}
});
}
@@ -927,7 +907,7 @@ function legacyModuleProp(prop, newName) {
function ignoredModuleProp(prop) {
if (Object.getOwnPropertyDescriptor(Module, prop)) {
- abort('`Module.' + prop + '` was supplied but `' + prop + '` not included in INCOMING_MODULE_JS_API');
+ abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`);
}
}
@@ -948,7 +928,7 @@ function missingGlobal(sym, msg) {
if (typeof globalThis !== 'undefined') {
Object.defineProperty(globalThis, sym, {
configurable: true,
- get: function() {
+ get() {
warnOnce('`' + sym + '` is not longer defined by emscripten. ' + msg);
return undefined;
}
@@ -962,7 +942,7 @@ function missingLibrarySymbol(sym) {
if (typeof globalThis !== 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) {
Object.defineProperty(globalThis, sym, {
configurable: true,
- get: function() {
+ get() {
// Can't `abort()` here because it would break code that does runtime
// checks. e.g. `if (typeof SDL === 'undefined')`.
var msg = '`' + sym + '` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line';
@@ -973,7 +953,7 @@ function missingLibrarySymbol(sym) {
if (!librarySymbol.startsWith('_')) {
librarySymbol = '$' + sym;
}
- msg += " (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE=" + librarySymbol + ")";
+ msg += " (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='" + librarySymbol + "')";
if (isExportedByForceFilesystem(sym)) {
msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
}
@@ -991,8 +971,8 @@ function unexportedRuntimeSymbol(sym) {
if (!Object.getOwnPropertyDescriptor(Module, sym)) {
Object.defineProperty(Module, sym, {
configurable: true,
- get: function() {
- var msg = "'" + sym + "' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";
+ get() {
+ var msg = "'" + sym + "' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)";
if (isExportedByForceFilesystem(sym)) {
msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
}
@@ -1008,11 +988,9 @@ function dbg(text) {
// logging to show up as warnings.
console.warn.apply(console, arguments);
}
-
// end include: runtime_debug.js
// === Body ===
-
// end include: preamble.js
/** @constructor */
@@ -1022,12 +1000,12 @@ function dbg(text) {
this.status = status;
}
- function callRuntimeCallbacks(callbacks) {
+ var callRuntimeCallbacks = (callbacks) => {
while (callbacks.length > 0) {
// Pass the module as the first argument.
callbacks.shift()(Module);
}
- }
+ };
/**
@@ -1049,10 +1027,12 @@ function dbg(text) {
}
}
- function ptrToString(ptr) {
+ var ptrToString = (ptr) => {
assert(typeof ptr === 'number');
+ // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.
+ ptr >>>= 0;
return '0x' + ptr.toString(16).padStart(8, '0');
- }
+ };
/**
@@ -1075,14 +1055,14 @@ function dbg(text) {
}
}
- function warnOnce(text) {
+ var warnOnce = (text) => {
if (!warnOnce.shown) warnOnce.shown = {};
if (!warnOnce.shown[text]) {
warnOnce.shown[text] = 1;
if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;
err(text);
}
- }
+ };
function __emscripten_fetch_free(id) {
if (Fetch.xhrs.has(id)) {
@@ -1095,26 +1075,31 @@ function dbg(text) {
}
}
- function readI53FromI64(ptr) {
- return HEAPU32[ptr>>2] + HEAP32[ptr+4>>2] * 4294967296;
- }
-
- function isLeapYear(year) {
+ var isLeapYear = (year) => {
return year%4 === 0 && (year%100 !== 0 || year%400 === 0);
- }
+ };
var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335];
var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334];
- function ydayFromDate(date) {
+ var ydayFromDate = (date) => {
var leap = isLeapYear(date.getFullYear());
var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE);
var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1
return yday;
+ };
+
+ function convertI32PairToI53Checked(lo, hi) {
+ assert(lo == (lo >>> 0) || lo == (lo|0)); // lo should either be a i32 or a u32
+ assert(hi === (hi|0)); // hi should be a i32
+ return ((hi + 0x200000) >>> 0 < 0x400001 - !!lo) ? (lo >>> 0) + hi * 4294967296 : NaN;
}
- function __localtime_js(time, tmPtr) {
- var date = new Date(readI53FromI64(time)*1000);
+ function __localtime_js(time_low, time_high,tmPtr) {
+ var time = convertI32PairToI53Checked(time_low, time_high);;
+
+
+ var date = new Date(time*1000);
HEAP32[((tmPtr)>>2)] = date.getSeconds();
HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes();
HEAP32[(((tmPtr)+(8))>>2)] = date.getHours();
@@ -1133,9 +1118,10 @@ function dbg(text) {
var winterOffset = start.getTimezoneOffset();
var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0;
HEAP32[(((tmPtr)+(32))>>2)] = dst;
- }
+ ;
+ }
- function lengthBytesUTF8(str) {
+ var lengthBytesUTF8 = (str) => {
var len = 0;
for (var i = 0; i < str.length; ++i) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
@@ -1154,9 +1140,9 @@ function dbg(text) {
}
}
return len;
- }
+ };
- function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
+ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
assert(typeof str === 'string');
// Parameter maxBytesToWrite is not optional. Negative values, 0, null,
// undefined and false each don't write out any bytes.
@@ -1202,19 +1188,19 @@ function dbg(text) {
// Null-terminate the pointer to the buffer.
heap[outIdx] = 0;
return outIdx - startIdx;
- }
- function stringToUTF8(str, outPtr, maxBytesToWrite) {
+ };
+ var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {
assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
- }
+ };
- function stringToNewUTF8(str) {
+ var stringToNewUTF8 = (str) => {
var size = lengthBytesUTF8(str) + 1;
var ret = _malloc(size);
if (ret) stringToUTF8(str, ret, size);
return ret;
- }
- function __tzset_js(timezone, daylight, tzname) {
+ };
+ var __tzset_js = (timezone, daylight, tzname) => {
// TODO: Use (malleable) environment variables instead of system settings.
var currentYear = new Date().getFullYear();
var winter = new Date(currentYear, 0, 1);
@@ -1252,34 +1238,39 @@ function dbg(text) {
HEAPU32[((tzname)>>2)] = summerNamePtr;
HEAPU32[(((tzname)+(4))>>2)] = winterNamePtr;
}
- }
+ };
- function _abort() {
+ var _abort = () => {
abort('native code called abort()');
- }
+ };
function _emscripten_date_now() {
return Date.now();
}
- function withStackSave(f) {
+ var withStackSave = (f) => {
var stack = stackSave();
var ret = f();
stackRestore(stack);
return ret;
- }
- var JSEvents = {inEventHandler:0,removeAllEventListeners:function() {
+ };
+ var JSEvents = {
+ inEventHandler:0,
+ removeAllEventListeners:function() {
for (var i = JSEvents.eventHandlers.length-1; i >= 0; --i) {
JSEvents._removeHandler(i);
}
JSEvents.eventHandlers = [];
JSEvents.deferredCalls = [];
- },registerRemoveEventListeners:function() {
+ },
+ registerRemoveEventListeners:function() {
if (!JSEvents.removeEventListenersRegistered) {
__ATEXIT__.push(JSEvents.removeAllEventListeners);
JSEvents.removeEventListenersRegistered = true;
}
- },deferredCalls:[],deferCall:function(targetFunction, precedence, argsList) {
+ },
+ deferredCalls:[],
+ deferCall:function(targetFunction, precedence, argsList) {
function arraysHaveEqualContent(arrA, arrB) {
if (arrA.length != arrB.length) return false;
@@ -1296,22 +1287,33 @@ function dbg(text) {
}
}
JSEvents.deferredCalls.push({
- targetFunction: targetFunction,
- precedence: precedence,
- argsList: argsList
+ targetFunction,
+ precedence,
+ argsList
});
JSEvents.deferredCalls.sort(function(x,y) { return x.precedence < y.precedence; });
- },removeDeferredCalls:function(targetFunction) {
+ },
+ removeDeferredCalls:function(targetFunction) {
for (var i = 0; i < JSEvents.deferredCalls.length; ++i) {
if (JSEvents.deferredCalls[i].targetFunction == targetFunction) {
JSEvents.deferredCalls.splice(i, 1);
--i;
}
}
- },canPerformEventHandlerRequests:function() {
+ },
+ canPerformEventHandlerRequests:function() {
+ if (navigator.userActivation) {
+ // Verify against transient activation status from UserActivation API
+ // whether it is possible to perform a request here without needing to defer. See
+ // https://developer.mozilla.org/en-US/docs/Web/Security/User_activation#transient_activation
+ // and https://caniuse.com/mdn-api_useractivation
+ // At the time of writing, Firefox does not support this API: https://bugzilla.mozilla.org/show_bug.cgi?id=1791079
+ return navigator.userActivation.isActive;
+ }
return JSEvents.inEventHandler && JSEvents.currentEventHandler.allowsDeferredCalls;
- },runDeferredCalls:function() {
+ },
+ runDeferredCalls:function() {
if (!JSEvents.canPerformEventHandlerRequests()) {
return;
}
@@ -1321,18 +1323,22 @@ function dbg(text) {
--i;
call.targetFunction.apply(null, call.argsList);
}
- },eventHandlers:[],removeAllHandlersOnTarget:function(target, eventTypeString) {
+ },
+ eventHandlers:[],
+ removeAllHandlersOnTarget:function(target, eventTypeString) {
for (var i = 0; i < JSEvents.eventHandlers.length; ++i) {
if (JSEvents.eventHandlers[i].target == target &&
(!eventTypeString || eventTypeString == JSEvents.eventHandlers[i].eventTypeString)) {
JSEvents._removeHandler(i--);
}
}
- },_removeHandler:function(i) {
+ },
+ _removeHandler:function(i) {
var h = JSEvents.eventHandlers[i];
h.target.removeEventListener(h.eventTypeString, h.eventListenerFunc, h.useCapture);
JSEvents.eventHandlers.splice(i, 1);
- },registerOrRemoveHandler:function(eventHandler) {
+ },
+ registerOrRemoveHandler:function(eventHandler) {
if (!eventHandler.target) {
err('registerOrRemoveHandler: the target element for event handler registration does not exist, when processing the following event handler registration:');
console.dir(eventHandler);
@@ -1366,18 +1372,21 @@ function dbg(text) {
}
}
return 0;
- },getNodeNameForTarget:function(target) {
+ },
+ getNodeNameForTarget:function(target) {
if (!target) return '';
if (target == window) return '#window';
if (target == screen) return '#screen';
return (target && target.nodeName) ? target.nodeName : '';
- },fullscreenEnabled:function() {
+ },
+ fullscreenEnabled:function() {
return document.fullscreenEnabled
// Safari 13.0.3 on macOS Catalina 10.15.1 still ships with prefixed webkitFullscreenEnabled.
// TODO: If Safari at some point ships with unprefixed version, update the version check above.
|| document.webkitFullscreenEnabled
;
- }};
+ },
+ };
var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined;
@@ -1390,7 +1399,7 @@ function dbg(text) {
* @param {number=} maxBytesToRead
* @return {string}
*/
- function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
+ var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => {
var endIdx = idx + maxBytesToRead;
var endPtr = idx;
// TextDecoder needs to know the byte length in advance, it doesn't stop on
@@ -1431,8 +1440,7 @@ function dbg(text) {
}
}
return str;
- }
-
+ };
/**
* Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the
@@ -1449,10 +1457,10 @@ function dbg(text) {
* JS JIT optimizations off, so it is worth to consider consistently using one
* @return {string}
*/
- function UTF8ToString(ptr, maxBytesToRead) {
+ var UTF8ToString = (ptr, maxBytesToRead) => {
assert(typeof ptr == 'number');
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
- }
+ };
function maybeCStringToJsString(cString) {
// "cString > 2" checks if the input is a number, and isn't of the special
// values we accept here, EMSCRIPTEN_EVENT_TARGET_* (which map to 0, 1, 2).
@@ -1486,13 +1494,10 @@ function dbg(text) {
return !ENVIRONMENT_IS_WORKER;
}
- function _emscripten_memcpy_big(dest, src, num) {
- HEAPU8.copyWithin(dest, src, src + num);
- }
+ var _emscripten_memcpy_big = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);
var wasmTableMirror = [];
-
- function getWasmTableEntry(funcPtr) {
+ var getWasmTableEntry = (funcPtr) => {
var func = wasmTableMirror[funcPtr];
if (!func) {
if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;
@@ -1500,7 +1505,7 @@ function dbg(text) {
}
assert(wasmTable.get(funcPtr) == func, "JavaScript-side Wasm function table mirror is out of date!");
return func;
- }
+ };
function _emscripten_request_animation_frame_loop(cb, userData) {
function tick(timeStamp) {
if (getWasmTableEntry(cb)(timeStamp, userData)) {
@@ -1510,15 +1515,14 @@ function dbg(text) {
return requestAnimationFrame(tick);
}
- function getHeapMax() {
+ var getHeapMax = () =>
// Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate
// full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side
// for any code that deals with heap sizes, which would require special
// casing all heap size related code to treat 0 specially.
- return 2147483648;
- }
+ 2147483648;
- function emscripten_realloc_buffer(size) {
+ var growMemory = (size) => {
var b = wasmMemory.buffer;
var pages = (size - b.byteLength + 65535) >>> 16;
try {
@@ -1527,14 +1531,15 @@ function dbg(text) {
updateMemoryViews();
return 1 /*success*/;
} catch(e) {
- err(`emscripten_realloc_buffer: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`);
+ err(`growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`);
}
// implicit 0 return to save code size (caller will cast "undefined" into 0
// anyhow)
- }
- function _emscripten_resize_heap(requestedSize) {
+ };
+ var _emscripten_resize_heap = (requestedSize) => {
var oldSize = HEAPU8.length;
- requestedSize = requestedSize >>> 0;
+ // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.
+ requestedSize >>>= 0;
// With multithreaded builds, races can happen (another thread might increase the size
// in between), so return a failure, and let the caller retry.
assert(requestedSize > oldSize);
@@ -1576,7 +1581,7 @@ function dbg(text) {
var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));
- var replacement = emscripten_realloc_buffer(newSize);
+ var replacement = growMemory(newSize);
if (replacement) {
return true;
@@ -1584,7 +1589,7 @@ function dbg(text) {
}
err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);
return false;
- }
+ };
function findCanvasEventTarget(target) { return findEventTarget(target); }
@@ -1640,12 +1645,12 @@ function dbg(text) {
};
var eventHandler = {
- target: target,
+ target,
allowsDeferredCalls: eventTypeString != 'mousemove' && eventTypeString != 'mouseenter' && eventTypeString != 'mouseleave', // Mouse move events do not allow fullscreen/pointer lock requests to be handled in them!
- eventTypeString: eventTypeString,
- callbackfunc: callbackfunc,
+ eventTypeString,
+ callbackfunc,
handlerFunc: mouseEventHandlerFunc,
- useCapture: useCapture
+ useCapture
};
return JSEvents.registerOrRemoveHandler(eventHandler);
}
@@ -1688,11 +1693,11 @@ function dbg(text) {
};
var eventHandler = {
- target: target,
- eventTypeString: eventTypeString,
- callbackfunc: callbackfunc,
+ target,
+ eventTypeString,
+ callbackfunc,
handlerFunc: uiEventHandlerFunc,
- useCapture: useCapture
+ useCapture
};
return JSEvents.registerOrRemoveHandler(eventHandler);
}
@@ -1702,32 +1707,37 @@ function dbg(text) {
+ function handleAllocatorInit() {
+ Object.assign(HandleAllocator.prototype, /** @lends {HandleAllocator.prototype} */ {
+ get(id) {
+ assert(this.allocated[id] !== undefined, `invalid handle: ${id}`);
+ return this.allocated[id];
+ },
+ has(id) {
+ return this.allocated[id] !== undefined;
+ },
+ allocate(handle) {
+ var id = this.freelist.pop() || this.allocated.length;
+ this.allocated[id] = handle;
+ return id;
+ },
+ free(id) {
+ assert(this.allocated[id] !== undefined);
+ // Set the slot to `undefined` rather than using `delete` here since
+ // apparently arrays with holes in them can be less efficient.
+ this.allocated[id] = undefined;
+ this.freelist.push(id);
+ }
+ });
+ }
/** @constructor */
function HandleAllocator() {
// Reserve slot 0 so that 0 is always an invalid handle
this.allocated = [undefined];
this.freelist = [];
- this.get = function(id) {
- assert(this.allocated[id] !== undefined, `invalid handle: ${id}`);
- return this.allocated[id];
- };
- this.has = function(id) {
- return this.allocated[id] !== undefined;
- };
- this.allocate = function(handle) {
- var id = this.freelist.pop() || this.allocated.length;
- this.allocated[id] = handle;
- return id;
- };
- this.free = function(id) {
- assert(this.allocated[id] !== undefined);
- // Set the slot to `undefined` rather than using `delete` here since
- // apparently arrays with holes in them can be less efficient.
- this.allocated[id] = undefined;
- this.freelist.push(id);
- };
}
- var Fetch = {openDatabase:function(dbname, dbversion, onsuccess, onerror) {
+ var Fetch = {
+ openDatabase:function(dbname, dbversion, onsuccess, onerror) {
try {
var openRequest = indexedDB.open(dbname, dbversion);
} catch (e) { return onerror(e); }
@@ -1741,7 +1751,8 @@ function dbg(text) {
};
openRequest.onsuccess = (event) => onsuccess(event.target.result);
openRequest.onerror = (error) => onerror(error);
- },init:function() {
+ },
+ init:function() {
Fetch.xhrs = new HandleAllocator();
var onsuccess = (db) => {
Fetch.dbInstance = db;
@@ -1755,7 +1766,8 @@ function dbg(text) {
addRunDependency('library_fetch_init');
Fetch.openDatabase('emscripten_filesystem', 1, onsuccess, onerror);
- }};
+ },
+ };
function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {
var url = HEAPU32[(((fetch)+(8))>>2)];
@@ -1918,7 +1930,7 @@ function dbg(text) {
}
}
- function handleException(e) {
+ var handleException = (e) => {
// Certain exception types we do not treat as errors since they are used for
// internal control flow.
// 1. ExitStatus, which is thrown by exit()
@@ -1934,29 +1946,33 @@ function dbg(text) {
}
}
quit_(1, e);
- }
+ };
- var SYSCALLS = {varargs:undefined,get:function() {
+ var SYSCALLS = {
+ varargs:undefined,
+ get() {
assert(SYSCALLS.varargs != undefined);
SYSCALLS.varargs += 4;
var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];
return ret;
- },getStr:function(ptr) {
+ },
+ getStr(ptr) {
var ret = UTF8ToString(ptr);
return ret;
- }};
- function _proc_exit(code) {
+ },
+ };
+ var _proc_exit = (code) => {
EXITSTATUS = code;
if (!keepRuntimeAlive()) {
if (Module['onExit']) Module['onExit'](code);
ABORT = true;
}
quit_(code, new ExitStatus(code));
- }
+ };
/** @suppress {duplicate } */
/** @param {boolean|number=} implicit */
- function exitJS(status, implicit) {
+ var exitJS = (status, implicit) => {
EXITSTATUS = status;
checkUnflushedContent();
@@ -1968,10 +1984,10 @@ function dbg(text) {
}
_proc_exit(status);
- }
+ };
var _exit = exitJS;
- function maybeExit() {
+ var maybeExit = () => {
if (!keepRuntimeAlive()) {
try {
_exit(EXITSTATUS);
@@ -1979,8 +1995,8 @@ function dbg(text) {
handleException(e);
}
}
- }
- function callUserCallback(func) {
+ };
+ var callUserCallback = (func) => {
if (ABORT) {
err('user callback triggered after runtime exited or application aborted. Ignoring.');
return;
@@ -1991,8 +2007,11 @@ function dbg(text) {
} catch (e) {
handleException(e);
}
- }
+ };
+ function readI53FromI64(ptr) {
+ return HEAPU32[ptr>>2] + HEAP32[ptr+4>>2] * 4294967296;
+ }
function readI53FromU64(ptr) {
return HEAPU32[ptr>>2] + HEAPU32[ptr+4>>2] * 4294967296;
@@ -2274,19 +2293,49 @@ function dbg(text) {
}
- var GL = {counter:1,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode) {
+ var GL = {
+ counter:1,
+ buffers:[],
+ mappedBuffers:{
+ },
+ programs:[],
+ framebuffers:[],
+ renderbuffers:[],
+ textures:[],
+ shaders:[],
+ vaos:[],
+ contexts:[],
+ offscreenCanvases:{
+ },
+ queries:[],
+ samplers:[],
+ transformFeedbacks:[],
+ syncs:[],
+ byteSizeByTypeRoot:5120,
+ byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],
+ stringCache:{
+ },
+ stringiCache:{
+ },
+ unpackAlignment:4,
+ recordError:function recordError(errorCode) {
if (!GL.lastError) {
GL.lastError = errorCode;
}
- },getNewId:function(table) {
+ },
+ getNewId:function(table) {
var ret = GL.counter++;
for (var i = table.length; i < ret; i++) {
table[i] = null;
}
return ret;
- },MAX_TEMP_BUFFER_SIZE:2097152,numTempVertexBuffersPerSize:64,log2ceilLookup:function(i) {
+ },
+ MAX_TEMP_BUFFER_SIZE:2097152,
+ numTempVertexBuffersPerSize:64,
+ log2ceilLookup:function(i) {
return 32 - Math.clz32(i === 0 ? 0 : i - 1);
- },generateTempBuffers:function(quads, context) {
+ },
+ generateTempBuffers:function(quads, context) {
var largestIndex = GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);
context.tempVertexBufferCounters1 = [];
context.tempVertexBufferCounters2 = [];
@@ -2335,7 +2384,8 @@ function dbg(text) {
context.GLctx.bufferData(0x8893 /*GL_ELEMENT_ARRAY_BUFFER*/, quadIndexes, 0x88E4 /*GL_STATIC_DRAW*/);
context.GLctx.bindBuffer(0x8893 /*GL_ELEMENT_ARRAY_BUFFER*/, null);
}
- },getTempVertexBuffer:function getTempVertexBuffer(sizeBytes) {
+ },
+ getTempVertexBuffer:function getTempVertexBuffer(sizeBytes) {
var idx = GL.log2ceilLookup(sizeBytes);
var ringbuffer = GL.currentContext.tempVertexBuffers1[idx];
var nextFreeBufferIndex = GL.currentContext.tempVertexBufferCounters1[idx];
@@ -2350,7 +2400,8 @@ function dbg(text) {
GLctx.bufferData(0x8892 /*GL_ARRAY_BUFFER*/, 1 << idx, 0x88E8 /*GL_DYNAMIC_DRAW*/);
GLctx.bindBuffer(0x8892 /*GL_ARRAY_BUFFER*/, prevVBO);
return ringbuffer[nextFreeBufferIndex];
- },getTempIndexBuffer:function getTempIndexBuffer(sizeBytes) {
+ },
+ getTempIndexBuffer:function getTempIndexBuffer(sizeBytes) {
var idx = GL.log2ceilLookup(sizeBytes);
var ibo = GL.currentContext.tempIndexBuffers[idx];
if (ibo) {
@@ -2362,7 +2413,8 @@ function dbg(text) {
GLctx.bufferData(0x8893 /*GL_ELEMENT_ARRAY_BUFFER*/, 1 << idx, 0x88E8 /*GL_DYNAMIC_DRAW*/);
GLctx.bindBuffer(0x8893 /*GL_ELEMENT_ARRAY_BUFFER*/, prevIBO);
return GL.currentContext.tempIndexBuffers[idx];
- },newRenderingFrameStarted:function newRenderingFrameStarted() {
+ },
+ newRenderingFrameStarted:function newRenderingFrameStarted() {
if (!GL.currentContext) {
return;
}
@@ -2376,20 +2428,24 @@ function dbg(text) {
for (var i = 0; i <= largestIndex; ++i) {
GL.currentContext.tempVertexBufferCounters1[i] = 0;
}
- },getSource:function(shader, count, string, length) {
+ },
+ getSource:function(shader, count, string, length) {
var source = '';
for (var i = 0; i < count; ++i) {
var len = length ? HEAP32[(((length)+(i*4))>>2)] : -1;
source += UTF8ToString(HEAP32[(((string)+(i*4))>>2)], len < 0 ? undefined : len);
}
return source;
- },calcBufLength:function calcBufLength(size, type, stride, count) {
+ },
+ calcBufLength:function calcBufLength(size, type, stride, count) {
if (stride > 0) {
return count * stride; // XXXvlad this is not exactly correct I don't think
}
var typeSize = GL.byteSizeByType[type - GL.byteSizeByTypeRoot];
return size * typeSize * count;
- },usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function preDrawHandleClientVertexAttribBindings(count) {
+ },
+ usedTempBuffers:[],
+ preDrawHandleClientVertexAttribBindings:function preDrawHandleClientVertexAttribBindings(count) {
GL.resetBufferBinding = false;
// TODO: initial pass to detect ranges we need to upload, might not need an upload per attrib
@@ -2407,11 +2463,13 @@ function dbg(text) {
HEAPU8.subarray(cb.ptr, cb.ptr + size));
cb.vertexAttribPointerAdaptor.call(GLctx, i, cb.size, cb.type, cb.normalized, cb.stride, 0);
}
- },postDrawHandleClientVertexAttribBindings:function postDrawHandleClientVertexAttribBindings() {
+ },
+ postDrawHandleClientVertexAttribBindings:function postDrawHandleClientVertexAttribBindings() {
if (GL.resetBufferBinding) {
GLctx.bindBuffer(0x8892 /*GL_ARRAY_BUFFER*/, GL.buffers[GLctx.currentArrayBufferBinding]);
}
- },createContext:function(/** @type {HTMLCanvasElement} */ canvas, webGLContextAttributes) {
+ },
+ createContext:function(/** @type {HTMLCanvasElement} */ canvas, webGLContextAttributes) {
// BUG: Workaround Safari WebGL issue: After successfully acquiring WebGL context on a canvas,
// calling .getContext() will always return that context independent of which 'webgl' or 'webgl2'
@@ -2442,12 +2500,13 @@ function dbg(text) {
var handle = GL.registerContext(ctx, webGLContextAttributes);
return handle;
- },registerContext:function(ctx, webGLContextAttributes) {
+ },
+ registerContext:function(ctx, webGLContextAttributes) {
// without pthreads a context is just an integer ID
var handle = GL.getNewId(GL.contexts);
var context = {
- handle: handle,
+ handle,
attributes: webGLContextAttributes,
version: webGLContextAttributes.majorVersion,
GLctx: ctx
@@ -2469,19 +2528,23 @@ function dbg(text) {
GL.generateTempBuffers(false, context);
return handle;
- },makeContextCurrent:function(contextHandle) {
+ },
+ makeContextCurrent:function(contextHandle) {
GL.currentContext = GL.contexts[contextHandle]; // Active Emscripten GL layer context object.
Module.ctx = GLctx = GL.currentContext && GL.currentContext.GLctx; // Active WebGL context object.
return !(contextHandle && !GLctx);
- },getContext:function(contextHandle) {
+ },
+ getContext:function(contextHandle) {
return GL.contexts[contextHandle];
- },deleteContext:function(contextHandle) {
+ },
+ deleteContext:function(contextHandle) {
if (GL.currentContext === GL.contexts[contextHandle]) GL.currentContext = null;
if (typeof JSEvents == 'object') JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas); // Release all JS event handlers on the DOM element that the GL context is associated with since the context is now deleted.
if (GL.contexts[contextHandle] && GL.contexts[contextHandle].GLctx.canvas) GL.contexts[contextHandle].GLctx.canvas.GLctxObject = undefined; // Make sure the canvas object no longer refers to the context object so there are no GC surprises.
GL.contexts[contextHandle] = null;
- },initExtensions:function(context) {
+ },
+ initExtensions:function(context) {
// If this function is called without a specific context object, init the extensions of the currently active context.
if (!context) context = GL.currentContext;
@@ -2526,7 +2589,8 @@ function dbg(text) {
GLctx.getExtension(ext);
}
});
- }};
+ },
+ };
var emscripten_webgl_power_preferences = ['default', 'low-power', 'high-performance'];
@@ -2592,26 +2656,22 @@ function dbg(text) {
return success ? 0 : -5;
}
- function _fd_close(fd) {
+ var _fd_close = (fd) => {
abort('fd_close called without SYSCALLS_REQUIRE_FILESYSTEM');
- }
+ };
- function convertI32PairToI53Checked(lo, hi) {
- assert(lo == (lo >>> 0) || lo == (lo|0)); // lo should either be a i32 or a u32
- assert(hi === (hi|0)); // hi should be a i32
- return ((hi + 0x200000) >>> 0 < 0x400001 - !!lo) ? (lo >>> 0) + hi * 4294967296 : NaN;
- }
-
-
+ function _fd_seek(fd,offset_low, offset_high,whence,newOffset) {
+ var offset = convertI32PairToI53Checked(offset_low, offset_high);;
- function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
+
return 70;
- }
+ ;
+ }
var printCharBuffers = [null,[],[]];
- function printChar(stream, curr) {
+ var printChar = (stream, curr) => {
var buffer = printCharBuffers[stream];
assert(buffer);
if (curr === 0 || curr === 10) {
@@ -2620,17 +2680,17 @@ function dbg(text) {
} else {
buffer.push(curr);
}
- }
+ };
- function flush_NO_FILESYSTEM() {
+ var flush_NO_FILESYSTEM = () => {
// flush anything remaining in the buffers during shutdown
_fflush(0);
if (printCharBuffers[1].length) printChar(1, 10);
if (printCharBuffers[2].length) printChar(2, 10);
- }
+ };
- function _fd_write(fd, iov, iovcnt, pnum) {
+ var _fd_write = (fd, iov, iovcnt, pnum) => {
// hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0
var num = 0;
for (var i = 0; i < iovcnt; i++) {
@@ -2644,7 +2704,7 @@ function dbg(text) {
}
HEAPU32[((pnum)>>2)] = num;
return 0;
- }
+ };
function _glAttachShader(program, shader) {
GLctx.attachShader(GL.programs[program], GL.shaders[shader]);
@@ -2954,9 +3014,7 @@ function dbg(text) {
}
/** @suppress {checkTypes} */
- function jstoi_q(str) {
- return parseInt(str);
- }
+ var jstoi_q = (str) => parseInt(str);
/** @noinline */
function webglGetLeftBracePos(name) {
@@ -3155,6 +3213,7 @@ function dbg(text) {
Fetch.init();;
+handleAllocatorInit();
var GLctx;;
var miniTempWebGLFloatBuffersStorage = new Float32Array(288);
for (/**@suppress{duplicate}*/var i = 0; i < 288; ++i) {
@@ -3165,115 +3224,92 @@ function checkIncomingModuleAPI() {
ignoredModuleProp('fetchSettings');
}
var wasmImports = {
- "_emscripten_fetch_free": __emscripten_fetch_free,
- "_localtime_js": __localtime_js,
- "_tzset_js": __tzset_js,
- "abort": _abort,
- "emscripten_date_now": _emscripten_date_now,
- "emscripten_get_element_css_size": _emscripten_get_element_css_size,
- "emscripten_is_main_browser_thread": _emscripten_is_main_browser_thread,
- "emscripten_memcpy_big": _emscripten_memcpy_big,
- "emscripten_request_animation_frame_loop": _emscripten_request_animation_frame_loop,
- "emscripten_resize_heap": _emscripten_resize_heap,
- "emscripten_set_canvas_element_size": _emscripten_set_canvas_element_size,
- "emscripten_set_click_callback_on_thread": _emscripten_set_click_callback_on_thread,
- "emscripten_set_resize_callback_on_thread": _emscripten_set_resize_callback_on_thread,
- "emscripten_start_fetch": _emscripten_start_fetch,
- "emscripten_webgl_create_context": _emscripten_webgl_create_context,
- "emscripten_webgl_init_context_attributes": _emscripten_webgl_init_context_attributes,
- "emscripten_webgl_make_context_current": _emscripten_webgl_make_context_current,
- "fd_close": _fd_close,
- "fd_seek": _fd_seek,
- "fd_write": _fd_write,
- "glAttachShader": _glAttachShader,
- "glBindBuffer": _glBindBuffer,
- "glBindVertexArray": _glBindVertexArray,
- "glBlendFunc": _glBlendFunc,
- "glBufferData": _glBufferData,
- "glBufferSubData": _glBufferSubData,
- "glClear": _glClear,
- "glClearColor": _glClearColor,
- "glClearDepth": _glClearDepth,
- "glCompileShader": _glCompileShader,
- "glCreateProgram": _glCreateProgram,
- "glCreateShader": _glCreateShader,
- "glDeleteBuffers": _glDeleteBuffers,
- "glDeleteProgram": _glDeleteProgram,
- "glDeleteShader": _glDeleteShader,
- "glDeleteVertexArrays": _glDeleteVertexArrays,
- "glDepthFunc": _glDepthFunc,
- "glDepthMask": _glDepthMask,
- "glDrawArrays": _glDrawArrays,
- "glDrawElements": _glDrawElements,
- "glEnable": _glEnable,
- "glEnableVertexAttribArray": _glEnableVertexAttribArray,
- "glGenBuffers": _glGenBuffers,
- "glGenVertexArrays": _glGenVertexArrays,
- "glGetAttribLocation": _glGetAttribLocation,
- "glGetProgramInfoLog": _glGetProgramInfoLog,
- "glGetProgramiv": _glGetProgramiv,
- "glGetShaderInfoLog": _glGetShaderInfoLog,
- "glGetShaderiv": _glGetShaderiv,
- "glGetUniformLocation": _glGetUniformLocation,
- "glLinkProgram": _glLinkProgram,
- "glShaderSource": _glShaderSource,
- "glUniformMatrix4fv": _glUniformMatrix4fv,
- "glUseProgram": _glUseProgram,
- "glVertexAttribDivisor": _glVertexAttribDivisor,
- "glVertexAttribPointer": _glVertexAttribPointer
+ _emscripten_fetch_free: __emscripten_fetch_free,
+ _localtime_js: __localtime_js,
+ _tzset_js: __tzset_js,
+ abort: _abort,
+ emscripten_date_now: _emscripten_date_now,
+ emscripten_get_element_css_size: _emscripten_get_element_css_size,
+ emscripten_is_main_browser_thread: _emscripten_is_main_browser_thread,
+ emscripten_memcpy_big: _emscripten_memcpy_big,
+ emscripten_request_animation_frame_loop: _emscripten_request_animation_frame_loop,
+ emscripten_resize_heap: _emscripten_resize_heap,
+ emscripten_set_canvas_element_size: _emscripten_set_canvas_element_size,
+ emscripten_set_click_callback_on_thread: _emscripten_set_click_callback_on_thread,
+ emscripten_set_resize_callback_on_thread: _emscripten_set_resize_callback_on_thread,
+ emscripten_start_fetch: _emscripten_start_fetch,
+ emscripten_webgl_create_context: _emscripten_webgl_create_context,
+ emscripten_webgl_init_context_attributes: _emscripten_webgl_init_context_attributes,
+ emscripten_webgl_make_context_current: _emscripten_webgl_make_context_current,
+ fd_close: _fd_close,
+ fd_seek: _fd_seek,
+ fd_write: _fd_write,
+ glAttachShader: _glAttachShader,
+ glBindBuffer: _glBindBuffer,
+ glBindVertexArray: _glBindVertexArray,
+ glBlendFunc: _glBlendFunc,
+ glBufferData: _glBufferData,
+ glBufferSubData: _glBufferSubData,
+ glClear: _glClear,
+ glClearColor: _glClearColor,
+ glClearDepth: _glClearDepth,
+ glCompileShader: _glCompileShader,
+ glCreateProgram: _glCreateProgram,
+ glCreateShader: _glCreateShader,
+ glDeleteBuffers: _glDeleteBuffers,
+ glDeleteProgram: _glDeleteProgram,
+ glDeleteShader: _glDeleteShader,
+ glDeleteVertexArrays: _glDeleteVertexArrays,
+ glDepthFunc: _glDepthFunc,
+ glDepthMask: _glDepthMask,
+ glDrawArrays: _glDrawArrays,
+ glDrawElements: _glDrawElements,
+ glEnable: _glEnable,
+ glEnableVertexAttribArray: _glEnableVertexAttribArray,
+ glGenBuffers: _glGenBuffers,
+ glGenVertexArrays: _glGenVertexArrays,
+ glGetAttribLocation: _glGetAttribLocation,
+ glGetProgramInfoLog: _glGetProgramInfoLog,
+ glGetProgramiv: _glGetProgramiv,
+ glGetShaderInfoLog: _glGetShaderInfoLog,
+ glGetShaderiv: _glGetShaderiv,
+ glGetUniformLocation: _glGetUniformLocation,
+ glLinkProgram: _glLinkProgram,
+ glShaderSource: _glShaderSource,
+ glUniformMatrix4fv: _glUniformMatrix4fv,
+ glUseProgram: _glUseProgram,
+ glVertexAttribDivisor: _glVertexAttribDivisor,
+ glVertexAttribPointer: _glVertexAttribPointer
};
var asm = createWasm();
-/** @type {function(...*):?} */
-var ___wasm_call_ctors = createExportWrapper("__wasm_call_ctors");
-/** @type {function(...*):?} */
-var _main = Module["_main"] = createExportWrapper("main");
-/** @type {function(...*):?} */
-var _free = createExportWrapper("free");
-/** @type {function(...*):?} */
-var _malloc = createExportWrapper("malloc");
-/** @type {function(...*):?} */
-var ___errno_location = createExportWrapper("__errno_location");
-/** @type {function(...*):?} */
-var _fflush = Module["_fflush"] = createExportWrapper("fflush");
-/** @type {function(...*):?} */
-var _emscripten_stack_init = function() {
- return (_emscripten_stack_init = Module["asm"]["emscripten_stack_init"]).apply(null, arguments);
-};
-
-/** @type {function(...*):?} */
-var _emscripten_stack_get_free = function() {
- return (_emscripten_stack_get_free = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments);
-};
-
-/** @type {function(...*):?} */
-var _emscripten_stack_get_base = function() {
- return (_emscripten_stack_get_base = Module["asm"]["emscripten_stack_get_base"]).apply(null, arguments);
-};
-
-/** @type {function(...*):?} */
-var _emscripten_stack_get_end = function() {
- return (_emscripten_stack_get_end = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments);
-};
-
-/** @type {function(...*):?} */
-var stackSave = createExportWrapper("stackSave");
-/** @type {function(...*):?} */
-var stackRestore = createExportWrapper("stackRestore");
-/** @type {function(...*):?} */
-var stackAlloc = createExportWrapper("stackAlloc");
-/** @type {function(...*):?} */
-var _emscripten_stack_get_current = function() {
- return (_emscripten_stack_get_current = Module["asm"]["emscripten_stack_get_current"]).apply(null, arguments);
-};
-
-/** @type {function(...*):?} */
-var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji");
+var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors');
+var _malloc = createExportWrapper('malloc');
+var _free = createExportWrapper('free');
+var _main = Module['_main'] = createExportWrapper('main');
+var ___errno_location = createExportWrapper('__errno_location');
+var _fflush = Module['_fflush'] = createExportWrapper('fflush');
+var setTempRet0 = createExportWrapper('setTempRet0');
+var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])();
+var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])();
+var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])();
+var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])();
+var stackSave = createExportWrapper('stackSave');
+var stackRestore = createExportWrapper('stackRestore');
+var stackAlloc = createExportWrapper('stackAlloc');
+var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();
+var dynCall_jiji = Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji');
// include: postamble.js
// === Auto-generated postamble setup entry stuff ===
var missingLibrarySymbols = [
+ 'writeI53ToI64Clamped',
+ 'writeI53ToI64Signaling',
+ 'writeI53ToU64Clamped',
+ 'writeI53ToU64Signaling',
+ 'convertI32PairToI53',
+ 'convertU32PairToI53',
'zeroMemory',
'arraySum',
'addDays',
@@ -3287,7 +3323,6 @@ var missingLibrarySymbols = [
'getHostByName',
'initRandomFill',
'randomFill',
- 'traverseStack',
'getCallstack',
'emscriptenLog',
'convertPCtoSourceLocation',
@@ -3311,12 +3346,6 @@ var missingLibrarySymbols = [
'STACK_ALIGN',
'POINTER_SIZE',
'ASSERTIONS',
- 'writeI53ToI64Clamped',
- 'writeI53ToI64Signaling',
- 'writeI53ToU64Clamped',
- 'writeI53ToU64Signaling',
- 'convertI32PairToI53',
- 'convertU32PairToI53',
'getCFunc',
'ccall',
'cwrap',
@@ -3398,12 +3427,14 @@ var missingLibrarySymbols = [
'idsToPromises',
'makePromiseCallback',
'ExceptionInfo',
+ 'findMatchingCatch',
'setMainLoop',
'getSocketFromFD',
'getSocketAddress',
'FS_createPreloadedFile',
'FS_modeStringToFlags',
'FS_getMode',
+ 'FS_stdin_getChar',
'_setNetworkCallback',
'heapObjectForWebGLType',
'heapAccessShiftForWebGLHeap',
@@ -3454,6 +3485,8 @@ var unexportedSymbols = [
'abort',
'keepRuntimeAlive',
'wasmMemory',
+ 'wasmTable',
+ 'wasmExports',
'stackAlloc',
'stackSave',
'stackRestore',
@@ -3461,10 +3494,14 @@ var unexportedSymbols = [
'setTempRet0',
'writeStackCookie',
'checkStackCookie',
+ 'writeI53ToI64',
+ 'readI53FromI64',
+ 'readI53FromU64',
+ 'convertI32PairToI53Checked',
'ptrToString',
'exitJS',
'getHeapMax',
- 'emscripten_realloc_buffer',
+ 'growMemory',
'ENV',
'MONTH_DAYS_REGULAR',
'MONTH_DAYS_LEAP',
@@ -3485,11 +3522,8 @@ var unexportedSymbols = [
'handleException',
'callUserCallback',
'maybeExit',
+ 'handleAllocatorInit',
'HandleAllocator',
- 'writeI53ToI64',
- 'readI53FromI64',
- 'readI53FromU64',
- 'convertI32PairToI53Checked',
'freeTableIndexes',
'functionsInTableMap',
'setValue',
@@ -3517,7 +3551,6 @@ var unexportedSymbols = [
'restoreOldWindowedStyle',
'ExitStatus',
'flush_NO_FILESYSTEM',
- 'dlopenMissingError',
'promiseMap',
'uncaughtExceptionCount',
'exceptionLast',
@@ -3526,6 +3559,7 @@ var unexportedSymbols = [
'wget',
'SYSCALLS',
'preloadPlugins',
+ 'FS_stdin_getChar_buffer',
'FS',
'MEMFS',
'TTY',
@@ -3679,7 +3713,7 @@ function checkUnflushedContent() {
out = oldOut;
err = oldErr;
if (has) {
- warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.');
+ warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.');
warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)');
}
}
diff --git a/themes/dist/output.wasm b/themes/dist/output.wasm
index 99901b9..c5c2a1a 100755
--- a/themes/dist/output.wasm
+++ b/themes/dist/output.wasm
Binary files differ
diff --git a/themes/src/_shaders/sun.frag b/themes/src/_shaders/sun.frag
index dabd7ea..8463e06 100644
--- a/themes/src/_shaders/sun.frag
+++ b/themes/src/_shaders/sun.frag
@@ -1,48 +1,5 @@
varying lowp vec4 VertexColor;
-#ifdef GL_ES
-precision mediump float;
-#endif
-
-uniform vec2 u_resolution;
-
-vec2 skew (vec2 st) {
- vec2 r = vec2(0.0);
- r.x = 1.1547*st.x;
- r.y = st.y+0.5*r.x;
- return r;
-}
-
-vec3 simplexGrid (vec2 st) {
- vec3 xyz = vec3(0.0);
-
- vec2 p = fract(skew(st));
- if (p.x > p.y) {
- xyz.xy = 1.0-vec2(p.x,p.y-p.x);
- xyz.z = p.y;
- } else {
- xyz.yz = 1.0-vec2(p.x-p.y,p.y);
- xyz.x = p.x;
- }
-
- return fract(xyz);
-}
-
void main() {
- vec2 st = gl_FragCoord.xy/u_resolution.xy;
- vec3 color = VertexColor.xyz
-
- // Scale the space to see the grid
- st *= 10.;
-
- // Show the 2D grid
- color.rg = fract(st);
-
- // Skew the 2D grid
- // color.rg = fract(skew(st));
-
- // Subdivide the grid into to equilateral triangles
- // color = simplexGrid(st);
-
- gl_FragColor = vec4(color,1.0);
+ gl_FragColor = VertexColor;
}
diff --git a/themes/src/shaders/sun_frag.cpp b/themes/src/shaders/sun_frag.cpp
index d5af4be..d1ea160 100644
--- a/themes/src/shaders/sun_frag.cpp
+++ b/themes/src/shaders/sun_frag.cpp
@@ -2,50 +2,7 @@
const char* shader_sun_frag = "varying lowp vec4 VertexColor; \n"
" \n"
-"#ifdef GL_ES \n"
-"precision mediump float; \n"
-"#endif \n"
-" \n"
-"uniform vec2 u_resolution; \n"
-" \n"
-"vec2 skew (vec2 st) { \n"
-" vec2 r = vec2(0.0); \n"
-" r.x = 1.1547*st.x; \n"
-" r.y = st.y+0.5*r.x; \n"
-" return r; \n"
-"} \n"
-" \n"
-"vec3 simplexGrid (vec2 st) { \n"
-" vec3 xyz = vec3(0.0); \n"
-" \n"
-" vec2 p = fract(skew(st)); \n"
-" if (p.x > p.y) { \n"
-" xyz.xy = 1.0-vec2(p.x,p.y-p.x); \n"
-" xyz.z = p.y; \n"
-" } else { \n"
-" xyz.yz = 1.0-vec2(p.x-p.y,p.y); \n"
-" xyz.x = p.x; \n"
-" } \n"
-" \n"
-" return fract(xyz); \n"
-"} \n"
-" \n"
"void main() { \n"
-" vec2 st = gl_FragCoord.xy/u_resolution.xy; \n"
-" vec3 color = VertexColor.xyz \n"
-" \n"
-" // Scale the space to see the grid \n"
-" st *= 10.; \n"
-" \n"
-" // Show the 2D grid \n"
-" color.rg = fract(st); \n"
-" \n"
-" // Skew the 2D grid \n"
-" // color.rg = fract(skew(st)); \n"
-" \n"
-" // Subdivide the grid into to equilateral triangles \n"
-" // color = simplexGrid(st); \n"
-" \n"
-" gl_FragColor = vec4(color,1.0); \n"
+" gl_FragColor = VertexColor; \n"
"} \n"
" \n";
diff --git a/themes/src/spring/SpringTheme.cpp b/themes/src/spring/SpringTheme.cpp
index abe8c6e..39b6bad 100644
--- a/themes/src/spring/SpringTheme.cpp
+++ b/themes/src/spring/SpringTheme.cpp
@@ -44,8 +44,8 @@ void SpringTheme::load(WebglContext* context) {
fetch_shader(
{
- "themes/src/shaders/renderer3d.vert",
- "themes/src/shaders/renderer3d.frag"
+ "themes/src/_shaders/renderer3d.vert",
+ "themes/src/_shaders/renderer3d.frag"
},
on_shaders_loader,
this
diff --git a/themes/src/tools/shader.js b/themes/src/tools/shader.js
index 54ba6e0..10889db 100644
--- a/themes/src/tools/shader.js
+++ b/themes/src/tools/shader.js
@@ -8,6 +8,10 @@ const fs = require('fs');
const directory = path.join(__dirname, "..", "_shaders");
const out_directory = path.join(__dirname, "..", "shaders");
+if (!fs.existsSync(out_directory)){
+ fs.mkdirSync(out_directory);
+}
+
const files = fs.readdirSync(directory);
files.forEach(file => {
const filePath = path.join(directory, file);