From 594fbcfcce3a55736a4a4e34fee66fc529e034b1 Mon Sep 17 00:00:00 2001 From: LEGALISE_PIRACY Date: Tue, 30 Jan 2024 03:09:45 +0000 Subject: [PATCH] Delete terri/Terri-Fried.js --- terri/Terri-Fried.js | 8668 ------------------------------------------ 1 file changed, 8668 deletions(-) delete mode 100644 terri/Terri-Fried.js diff --git a/terri/Terri-Fried.js b/terri/Terri-Fried.js deleted file mode 100644 index 1b870db1..00000000 --- a/terri/Terri-Fried.js +++ /dev/null @@ -1,8668 +0,0 @@ -var Module = typeof Module !== "undefined" ? Module : {}; -if (!Module.expectedDataFileDownloads) { - Module.expectedDataFileDownloads = 0; - Module.finishedDataFileDownloads = 0 -} -Module.expectedDataFileDownloads++; -(function() { - 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 location !== "undefined") { - PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf("/")) + "/") - } else { - throw "using preloaded data can only be done on a web page or in a web worker" - } - var PACKAGE_NAME = "Terri-Fried.data"; - var REMOTE_PACKAGE_BASE = "Terri-Fried.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"]; - var PACKAGE_UUID = metadata["package_uuid"]; - - function fetchRemotePackage(packageName, packageSize, callback, errback) { - 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) { - 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"]("/", "resources", true, true); - - 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; - 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"]).open("GET", files[i]["filename"]) - } - - function processPackageData(arrayBuffer) { - Module.finishedDataFileDownloads++; - assert(arrayBuffer, "Loading data file failed."); - assert(arrayBuffer instanceof ArrayBuffer, "bad input to processPackageData"); - var byteArray = new Uint8Array(arrayBuffer); - var ptr = Module["getMemory"](byteArray.length); - Module["HEAPU8"].set(byteArray, ptr); - DataRequest.prototype.byteArray = Module["HEAPU8"].subarray(ptr, ptr + byteArray.length); - var files = metadata["files"]; - for (var i = 0; i < files.length; ++i) { - DataRequest.prototype.requests[files[i].filename].onload() - } - Module["removeRunDependency"]("datafile_Terri-Fried.data") - } - Module["addRunDependency"]("datafile_Terri-Fried.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) - } - }; - loadPackage({ - "files": [{ - "filename": "/resources/click.wav", - "start": 0, - "end": 29196, - "audio": 1 - }, { - "filename": "/resources/coin.png", - "start": 29196, - "end": 30104, - "audio": 0 - }, { - "filename": "/resources/coin.wav", - "start": 30104, - "end": 61860, - "audio": 1 - }, { - "filename": "/resources/die.wav", - "start": 61860, - "end": 87922, - "audio": 1 - }, { - "filename": "/resources/egg.png", - "start": 87922, - "end": 88955, - "audio": 0 - }, { - "filename": "/resources/font.otf", - "start": 88955, - "end": 131659, - "audio": 0 - }, { - "filename": "/resources/launch.wav", - "start": 131659, - "end": 146785, - "audio": 1 - }, { - "filename": "/resources/lava.png", - "start": 146785, - "end": 161412, - "audio": 0 - }, { - "filename": "/resources/logo.png", - "start": 161412, - "end": 180888, - "audio": 0 - }, { - "filename": "/resources/platform.png", - "start": 180888, - "end": 181734, - "audio": 0 - }, { - "filename": "/resources/scorebox.png", - "start": 181734, - "end": 182371, - "audio": 0 - }, { - "filename": "/resources/select.wav", - "start": 182371, - "end": 187217, - "audio": 1 - }, { - "filename": "/resources/splash.wav", - "start": 187217, - "end": 212285, - "audio": 1 - }, { - "filename": "/resources/splash_egg.png", - "start": 212285, - "end": 213620, - "audio": 0 - }], - "remote_package_size": 213620, - "package_uuid": "e48677e8-0217-43ce-9328-8dc5d265e2eb" - }) -})(); -var moduleOverrides = {}; -var key; -for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key] - } -} -var arguments_ = []; -var thisProgram = "./this.program"; -var quit_ = function(status, toThrow) { - throw toThrow -}; -var ENVIRONMENT_IS_WEB = false; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; -ENVIRONMENT_IS_WEB = typeof window === "object"; -ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; -ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; -ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; -var scriptDirectory = ""; - -function locateFile(path) { - if (Module["locateFile"]) { - return Module["locateFile"](path, scriptDirectory) - } - return scriptDirectory + path -} -var read_, readAsync, readBinary, setWindowTitle; -var nodeFS; -var nodePath; -if (ENVIRONMENT_IS_NODE) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = require("path").dirname(scriptDirectory) + "/" - } else { - scriptDirectory = __dirname + "/" - } - read_ = function shell_read(filename, binary) { - if (!nodeFS) nodeFS = require("fs"); - if (!nodePath) nodePath = require("path"); - filename = nodePath["normalize"](filename); - return nodeFS["readFileSync"](filename, binary ? null : "utf8") - }; - readBinary = function readBinary(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret) - } - assert(ret.buffer); - return ret - }; - if (process["argv"].length > 1) { - thisProgram = process["argv"][1].replace(/\\/g, "/") - } - arguments_ = process["argv"].slice(2); - if (typeof module !== "undefined") { - module["exports"] = Module - } - process["on"]("uncaughtException", function(ex) { - if (!(ex instanceof ExitStatus)) { - throw ex - } - }); - process["on"]("unhandledRejection", abort); - quit_ = function(status) { - process["exit"](status) - }; - Module["inspect"] = function() { - return "[Emscripten Module object]" - } -} else if (ENVIRONMENT_IS_SHELL) { - if (typeof read != "undefined") { - read_ = function shell_read(f) { - return read(f) - } - } - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === "function") { - return new Uint8Array(readbuffer(f)) - } - data = read(f, "binary"); - assert(typeof data === "object"); - return data - }; - if (typeof scriptArgs != "undefined") { - arguments_ = scriptArgs - } else if (typeof arguments != "undefined") { - arguments_ = arguments - } - if (typeof quit === "function") { - quit_ = function(status) { - quit(status) - } - } - if (typeof print !== "undefined") { - if (typeof console === "undefined") console = {}; - console.log = print; - console.warn = console.error = typeof printErr !== "undefined" ? printErr : print - } -} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = self.location.href - } else if (document.currentScript) { - scriptDirectory = document.currentScript.src - } - if (scriptDirectory.indexOf("blob:") !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1) - } else { - scriptDirectory = "" - } { - read_ = function shell_read(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = function readBinary(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response) - } - } - readAsync = function readAsync(url, onload, onerror) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return - } - onerror() - }; - xhr.onerror = onerror; - xhr.send(null) - } - } - setWindowTitle = function(title) { - document.title = title - } -} else {} -var out = Module["print"] || console.log.bind(console); -var err = Module["printErr"] || console.warn.bind(console); -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key] - } -} -moduleOverrides = null; -if (Module["arguments"]) arguments_ = Module["arguments"]; -if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; -if (Module["quit"]) quit_ = Module["quit"]; - -function dynamicAlloc(size) { - var ret = HEAP32[DYNAMICTOP_PTR >> 2]; - var end = ret + size + 15 & -16; - HEAP32[DYNAMICTOP_PTR >> 2] = end; - return ret -} - -function getNativeTypeSize(type) { - switch (type) { - case "i1": - case "i8": - return 1; - case "i16": - return 2; - case "i32": - return 4; - case "i64": - return 8; - case "float": - return 4; - case "double": - return 8; - default: { - if (type[type.length - 1] === "*") { - return 4 - } else if (type[0] === "i") { - var bits = Number(type.substr(1)); - assert(bits % 8 === 0, "getNativeTypeSize invalid bits " + bits + ", type " + type); - return bits / 8 - } else { - return 0 - } - } - } -} - -function warnOnce(text) { - if (!warnOnce.shown) warnOnce.shown = {}; - if (!warnOnce.shown[text]) { - warnOnce.shown[text] = 1; - err(text) - } -} -var asm2wasmImports = { - "f64-rem": function(x, y) { - return x % y - }, - "debugger": function() {} -}; -var functionPointers = new Array(0); -var wasmBinary; -if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; -var noExitRuntime; -if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"]; -if (typeof WebAssembly !== "object") { - err("no native wasm support detected") -} - -function setValue(ptr, value, type, noSafe) { - type = type || "i8"; - if (type.charAt(type.length - 1) === "*") type = "i32"; - switch (type) { - case "i1": - HEAP8[ptr >> 0] = value; - break; - case "i8": - HEAP8[ptr >> 0] = value; - break; - case "i16": - HEAP16[ptr >> 1] = value; - break; - case "i32": - HEAP32[ptr >> 2] = value; - break; - case "i64": - tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1]; - break; - case "float": - HEAPF32[ptr >> 2] = value; - break; - case "double": - HEAPF64[ptr >> 3] = value; - break; - default: - abort("invalid type for setValue: " + type) - } -} -var wasmMemory; -var wasmTable = new WebAssembly.Table({ - "initial": 356, - "maximum": 356, - "element": "anyfunc" -}); -var ABORT = false; -var EXITSTATUS = 0; - -function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text) - } -} - -function getCFunc(ident) { - var func = Module["_" + ident]; - assert(func, "Cannot call unknown function " + ident + ", make sure it is exported"); - return func -} - -function ccall(ident, returnType, argTypes, args, opts) { - var toC = { - "string": function(str) { - var ret = 0; - if (str !== null && str !== undefined && str !== 0) { - var len = (str.length << 2) + 1; - ret = stackAlloc(len); - stringToUTF8(str, ret, len) - } - return ret - }, - "array": function(arr) { - var ret = stackAlloc(arr.length); - writeArrayToMemory(arr, ret); - return ret - } - }; - - function convertReturnValue(ret) { - if (returnType === "string") return UTF8ToString(ret); - if (returnType === "boolean") return Boolean(ret); - return ret - } - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) stack = stackSave(); - cArgs[i] = converter(args[i]) - } else { - cArgs[i] = args[i] - } - } - } - var ret = func.apply(null, cArgs); - ret = convertReturnValue(ret); - if (stack !== 0) stackRestore(stack); - return ret -} -var ALLOC_NORMAL = 0; -var ALLOC_NONE = 3; - -function allocate(slab, types, allocator, ptr) { - var zeroinit, size; - if (typeof slab === "number") { - zeroinit = true; - size = slab - } else { - zeroinit = false; - size = slab.length - } - var singleType = typeof types === "string" ? types : null; - var ret; - if (allocator == ALLOC_NONE) { - ret = ptr - } else { - ret = [_malloc, stackAlloc, dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length)) - } - if (zeroinit) { - var stop; - ptr = ret; - assert((ret & 3) == 0); - stop = ret + (size & ~3); - for (; ptr < stop; ptr += 4) { - HEAP32[ptr >> 2] = 0 - } - stop = ret + size; - while (ptr < stop) { - HEAP8[ptr++ >> 0] = 0 - } - return ret - } - if (singleType === "i8") { - if (slab.subarray || slab.slice) { - HEAPU8.set(slab, ret) - } else { - HEAPU8.set(new Uint8Array(slab), ret) - } - return ret - } - var i = 0, - type, typeSize, previousType; - while (i < size) { - var curr = slab[i]; - type = singleType || types[i]; - if (type === 0) { - i++; - continue - } - if (type == "i64") type = "i32"; - setValue(ret + i, curr, type); - if (previousType !== type) { - typeSize = getNativeTypeSize(type); - previousType = type - } - i += typeSize - } - return ret -} - -function getMemory(size) { - if (!runtimeInitialized) return dynamicAlloc(size); - return _malloc(size) -} -var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; - -function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)) - } else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2 - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63 - } - if (u0 < 65536) { - str += String.fromCharCode(u0) - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) - } - } - } - return str -} - -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" -} - -function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023 - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63 - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } - } - heap[outIdx] = 0; - return outIdx - startIdx -} - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) -} - -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) ++len; - else if (u <= 2047) len += 2; - else if (u <= 65535) len += 3; - else len += 4 - } - return len -} -var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined; - -function allocateUTF8OnStack(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = stackAlloc(size); - stringToUTF8Array(str, HEAP8, ret, size); - return ret -} - -function writeArrayToMemory(array, buffer) { - HEAP8.set(array, buffer) -} -var WASM_PAGE_SIZE = 65536; -var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - -function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module["HEAP8"] = HEAP8 = new Int8Array(buf); - Module["HEAP16"] = HEAP16 = new Int16Array(buf); - Module["HEAP32"] = HEAP32 = new Int32Array(buf); - Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); - Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); - Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); - Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); - Module["HEAPF64"] = HEAPF64 = new Float64Array(buf) -} -var DYNAMIC_BASE = 5329456, - DYNAMICTOP_PTR = 86384; -var INITIAL_INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; -if (Module["wasmMemory"]) { - wasmMemory = Module["wasmMemory"] -} else { - wasmMemory = new WebAssembly.Memory({ - "initial": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE, - "maximum": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE - }) -} -if (wasmMemory) { - buffer = wasmMemory.buffer -} -INITIAL_INITIAL_MEMORY = buffer.byteLength; -updateGlobalBufferAndViews(buffer); -HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE; - -function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == "function") { - callback(Module); - continue - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === undefined) { - Module["dynCall_v"](func) - } else { - Module["dynCall_vi"](func, callback.arg) - } - } else { - func(callback.arg === undefined ? null : callback.arg) - } - } -} -var __ATPRERUN__ = []; -var __ATINIT__ = []; -var __ATMAIN__ = []; -var __ATEXIT__ = []; -var __ATPOSTRUN__ = []; -var runtimeInitialized = false; -var runtimeExited = false; - -function preRun() { - if (Module["preRun"]) { - if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]; - while (Module["preRun"].length) { - addOnPreRun(Module["preRun"].shift()) - } - } - callRuntimeCallbacks(__ATPRERUN__) -} - -function initRuntime() { - runtimeInitialized = true; - if (!Module["noFSInit"] && !FS.init.initialized) FS.init(); - TTY.init(); - callRuntimeCallbacks(__ATINIT__) -} - -function preMain() { - FS.ignorePermissions = false; - callRuntimeCallbacks(__ATMAIN__) -} - -function exitRuntime() { - runtimeExited = true -} - -function postRun() { - if (Module["postRun"]) { - if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]; - while (Module["postRun"].length) { - addOnPostRun(Module["postRun"].shift()) - } - } - callRuntimeCallbacks(__ATPOSTRUN__) -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb) -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb) -} -var Math_abs = Math.abs; -var Math_ceil = Math.ceil; -var Math_floor = Math.floor; -var Math_min = Math.min; -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; - -function getUniqueRunDependency(id) { - return id -} - -function addRunDependency(id) { - runDependencies++; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies) - } -} - -function removeRunDependency(id) { - runDependencies--; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies) - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback() - } - } -} -Module["preloadedImages"] = {}; -Module["preloadedAudios"] = {}; - -function abort(what) { - if (Module["onAbort"]) { - Module["onAbort"](what) - } - what += ""; - out(what); - err(what); - ABORT = true; - EXITSTATUS = 1; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - throw new WebAssembly.RuntimeError(what) -} - -function hasPrefix(str, prefix) { - return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0 -} -var dataURIPrefix = "data:application/octet-stream;base64,"; - -function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix) -} -var fileURIPrefix = "file://"; - -function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix) -} -var wasmBinaryFile = "Terri-Fried.wasm"; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile) -} - -function getBinary() { - try { - if (wasmBinary) { - return new Uint8Array(wasmBinary) - } - if (readBinary) { - return readBinary(wasmBinaryFile) - } else { - throw "both async and sync fetching of the wasm failed" - } - } catch (err) { - abort(err) - } -} - -function getBinaryPromise() { - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { - return fetch(wasmBinaryFile, { - credentials: "same-origin" - }).then(function(response) { - if (!response["ok"]) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" - } - return response["arrayBuffer"]() - }).catch(function() { - return getBinary() - }) - } - return new Promise(function(resolve, reject) { - resolve(getBinary()) - }) -} - -function createWasm() { - var info = { - "env": asmLibraryArg, - "wasi_snapshot_preview1": asmLibraryArg, - "global": { - "NaN": NaN, - Infinity: Infinity - }, - "global.Math": Math, - "asm2wasm": asm2wasmImports - }; - - function receiveInstance(instance, module) { - var exports = instance.exports; - Module["asm"] = exports; - removeRunDependency("wasm-instantiate") - } - addRunDependency("wasm-instantiate"); - - function receiveInstantiatedSource(output) { - receiveInstance(output["instance"]) - } - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info) - }).then(receiver, function(reason) { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason) - }) - } - - function instantiateAsync() { - if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch === "function") { - fetch(wasmBinaryFile, { - credentials: "same-origin" - }).then(function(response) { - var result = WebAssembly.instantiateStreaming(response, info); - return result.then(receiveInstantiatedSource, function(reason) { - err("wasm streaming compile failed: " + reason); - err("falling back to ArrayBuffer instantiation"); - instantiateArrayBuffer(receiveInstantiatedSource) - }) - }) - } else { - return instantiateArrayBuffer(receiveInstantiatedSource) - } - } - if (Module["instantiateWasm"]) { - try { - var exports = Module["instantiateWasm"](info, receiveInstance); - return exports - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false - } - } - instantiateAsync(); - return {} -} -Module["asm"] = createWasm; -var tempDouble; -var tempI64; -var ASM_CONSTS = [function($0) { - if ((window.AudioContext || window.webkitAudioContext) === undefined) { - return 0 - } - if (typeof miniaudio === "undefined") { - miniaudio = {}; - miniaudio.devices = []; - miniaudio.track_device = function(device) { - for (var iDevice = 0; iDevice < miniaudio.devices.length; ++iDevice) { - if (miniaudio.devices[iDevice] == null) { - miniaudio.devices[iDevice] = device; - return iDevice - } - } - miniaudio.devices.push(device); - return miniaudio.devices.length - 1 - }; - miniaudio.untrack_device_by_index = function(deviceIndex) { - miniaudio.devices[deviceIndex] = null; - while (miniaudio.devices.length > 0) { - if (miniaudio.devices[miniaudio.devices.length - 1] == null) { - miniaudio.devices.pop() - } else { - break - } - } - }; - miniaudio.untrack_device = function(device) { - for (var iDevice = 0; iDevice < miniaudio.devices.length; ++iDevice) { - if (miniaudio.devices[iDevice] == device) { - return miniaudio.untrack_device_by_index(iDevice) - } - } - }; - miniaudio.get_device_by_index = function(deviceIndex) { - return miniaudio.devices[deviceIndex] - } - } - return 1 -}, function($0) { - try { - var temp = new(window.AudioContext || window.webkitAudioContext); - var sampleRate = temp.sampleRate; - temp.close(); - return sampleRate - } catch (e) { - return 0 - } -}, function($0) { - miniaudio.get_device_by_index($0).webaudio.resume() -}, function($0) { - miniaudio.get_device_by_index($0).webaudio.suspend() -}, function($0, $1) { - var device = miniaudio.get_device_by_index($0); - if (device.scriptNode !== undefined) { - device.scriptNode.onaudioprocess = function(e) {}; - device.scriptNode.disconnect(); - device.scriptNode = undefined - } - if (device.streamNode !== undefined) { - device.streamNode.disconnect(); - device.streamNode = undefined - } - device.webaudio.close(); - device.webaudio = undefined; - if (device.intermediaryBuffer !== undefined) { - Module._free(device.intermediaryBuffer); - device.intermediaryBuffer = undefined; - device.intermediaryBufferView = undefined; - device.intermediaryBufferSizeInBytes = undefined - } - miniaudio.untrack_device_by_index($0) -}, function($0, $1, $2, $3, $4) { - var channels = $0; - var sampleRate = $1; - var bufferSize = $2; - var isCapture = $3; - var pDevice = $4; - if (typeof miniaudio === "undefined") { - return -1 - } - var device = {}; - device.webaudio = new(window.AudioContext || window.webkitAudioContext)({ - sampleRate: sampleRate - }); - device.webaudio.suspend(); - device.intermediaryBufferSizeInBytes = channels * bufferSize * 4; - device.intermediaryBuffer = Module._malloc(device.intermediaryBufferSizeInBytes); - device.intermediaryBufferView = new Float32Array(Module.HEAPF32.buffer, device.intermediaryBuffer, device.intermediaryBufferSizeInBytes); - device.scriptNode = device.webaudio.createScriptProcessor(bufferSize, channels, channels); - if (isCapture) { - device.scriptNode.onaudioprocess = function(e) { - if (device.intermediaryBuffer === undefined) { - return - } - for (var iChannel = 0; iChannel < e.outputBuffer.numberOfChannels; ++iChannel) { - e.outputBuffer.getChannelData(iChannel).fill(0) - } - var sendSilence = false; - if (device.streamNode === undefined) { - sendSilence = true - } - if (e.inputBuffer.numberOfChannels != channels) { - console.log("Capture: Channel count mismatch. " + e.inputBufer.numberOfChannels + " != " + channels + ". Sending silence."); - sendSilence = true - } - var totalFramesProcessed = 0; - while (totalFramesProcessed < e.inputBuffer.length) { - var framesRemaining = e.inputBuffer.length - totalFramesProcessed; - var framesToProcess = framesRemaining; - if (framesToProcess > device.intermediaryBufferSizeInBytes / channels / 4) { - framesToProcess = device.intermediaryBufferSizeInBytes / channels / 4 - } - if (sendSilence) { - device.intermediaryBufferView.fill(0) - } else { - for (var iFrame = 0; iFrame < framesToProcess; ++iFrame) { - for (var iChannel = 0; iChannel < e.inputBuffer.numberOfChannels; ++iChannel) { - device.intermediaryBufferView[iFrame * channels + iChannel] = e.inputBuffer.getChannelData(iChannel)[totalFramesProcessed + iFrame] - } - } - } - ccall("ma_device_process_pcm_frames_capture__webaudio", "undefined", ["number", "number", "number"], [pDevice, framesToProcess, device.intermediaryBuffer]); - totalFramesProcessed += framesToProcess - } - }; - navigator.mediaDevices.getUserMedia({ - audio: true, - video: false - }).then(function(stream) { - device.streamNode = device.webaudio.createMediaStreamSource(stream); - device.streamNode.connect(device.scriptNode); - device.scriptNode.connect(device.webaudio.destination) - }).catch(function(error) { - device.scriptNode.connect(device.webaudio.destination) - }) - } else { - device.scriptNode.onaudioprocess = function(e) { - if (device.intermediaryBuffer === undefined) { - return - } - var outputSilence = false; - if (e.outputBuffer.numberOfChannels != channels) { - console.log("Playback: Channel count mismatch. " + e.outputBufer.numberOfChannels + " != " + channels + ". Outputting silence."); - outputSilence = true; - return - } - var totalFramesProcessed = 0; - while (totalFramesProcessed < e.outputBuffer.length) { - var framesRemaining = e.outputBuffer.length - totalFramesProcessed; - var framesToProcess = framesRemaining; - if (framesToProcess > device.intermediaryBufferSizeInBytes / channels / 4) { - framesToProcess = device.intermediaryBufferSizeInBytes / channels / 4 - } - ccall("ma_device_process_pcm_frames_playback__webaudio", "undefined", ["number", "number", "number"], [pDevice, framesToProcess, device.intermediaryBuffer]); - if (outputSilence) { - for (var iChannel = 0; iChannel < e.outputBuffer.numberOfChannels; ++iChannel) { - e.outputBuffer.getChannelData(iChannel).fill(0) - } - } else { - for (var iChannel = 0; iChannel < e.outputBuffer.numberOfChannels; ++iChannel) { - for (var iFrame = 0; iFrame < framesToProcess; ++iFrame) { - e.outputBuffer.getChannelData(iChannel)[totalFramesProcessed + iFrame] = device.intermediaryBufferView[iFrame * channels + iChannel] - } - } - } - totalFramesProcessed += framesToProcess - } - }; - device.scriptNode.connect(device.webaudio.destination) - } - return miniaudio.track_device(device) -}, function($0) { - return miniaudio.get_device_by_index($0).webaudio.sampleRate -}, function($0) { - return navigator.mediaDevices !== undefined && navigator.mediaDevices.getUserMedia !== undefined -}]; - -function _emscripten_asm_const_ii(code, a0) { - return ASM_CONSTS[code](a0) -} - -function _emscripten_asm_const_iiiiii(code, a0, a1, a2, a3, a4) { - return ASM_CONSTS[code](a0, a1, a2, a3, a4) -} - -function _emscripten_asm_const_iii(code, a0, a1) { - return ASM_CONSTS[code](a0, a1) -} -__ATINIT__.push({ - func: function() { - __GLOBAL__sub_I_main_cpp() - } -}); - -function demangle(func) { - return func -} - -function demangleAll(text) { - var regex = /\b__Z[\w\d_]+/g; - return text.replace(regex, function(x) { - var y = demangle(x); - return x === y ? x : y + " [" + x + "]" - }) -} - -function jsStackTrace() { - var err = new Error; - if (!err.stack) { - try { - throw new Error - } catch (e) { - err = e - } - if (!err.stack) { - return "(no stack trace available)" - } - } - return err.stack.toString() -} - -function stackTrace() { - var js = jsStackTrace(); - if (Module["extraStackTrace"]) js += "\n" + Module["extraStackTrace"](); - return demangleAll(js) -} - -function ___assert_fail(condition, filename, line, func) { - abort("Assertion failed: " + UTF8ToString(condition) + ", at: " + [filename ? UTF8ToString(filename) : "unknown filename", line, func ? UTF8ToString(func) : "unknown function"]) -} - -function setErrNo(value) { - HEAP32[___errno_location() >> 2] = value; - return value -} -var PATH = { - splitPath: function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1) - }, - normalizeArray: function(parts, allowAboveRoot) { - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === ".") { - parts.splice(i, 1) - } else if (last === "..") { - parts.splice(i, 1); - up++ - } else if (up) { - parts.splice(i, 1); - up-- - } - } - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift("..") - } - } - return parts - }, - normalize: function(path) { - var isAbsolute = path.charAt(0) === "/", - trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), !isAbsolute).join("/"); - if (!path && !isAbsolute) { - path = "." - } - if (path && trailingSlash) { - path += "/" - } - return (isAbsolute ? "/" : "") + path - }, - dirname: function(path) { - var result = PATH.splitPath(path), - root = result[0], - dir = result[1]; - if (!root && !dir) { - return "." - } - if (dir) { - dir = dir.substr(0, dir.length - 1) - } - return root + dir - }, - basename: function(path) { - if (path === "/") return "/"; - var lastSlash = path.lastIndexOf("/"); - if (lastSlash === -1) return path; - return path.substr(lastSlash + 1) - }, - extname: function(path) { - return PATH.splitPath(path)[3] - }, - join: function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join("/")) - }, - join2: function(l, r) { - return PATH.normalize(l + "/" + r) - } -}; -var PATH_FS = { - resolve: function() { - var resolvedPath = "", - resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); - if (typeof path !== "string") { - throw new TypeError("Arguments to path.resolve must be strings") - } else if (!path) { - return "" - } - resolvedPath = path + "/" + resolvedPath; - resolvedAbsolute = path.charAt(0) === "/" - } - resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function(p) { - return !!p - }), !resolvedAbsolute).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "." - }, - relative: function(from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== "") break - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== "") break - } - if (start > end) return []; - return arr.slice(start, end - start + 1) - } - var fromParts = trim(from.split("/")); - var toParts = trim(to.split("/")); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push("..") - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join("/") - } -}; -var TTY = { - ttys: [], - init: function() {}, - shutdown: function() {}, - register: function(dev, ops) { - TTY.ttys[dev] = { - input: [], - output: [], - ops: ops - }; - FS.registerDevice(dev, TTY.stream_ops) - }, - stream_ops: { - open: function(stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(43) - } - stream.tty = tty; - stream.seekable = false - }, - close: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - flush: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - read: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(60) - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty) - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(60) - } - try { - for (var i = 0; i < length; i++) { - stream.tty.ops.put_char(stream.tty, buffer[offset + i]) - } - } catch (e) { - throw new FS.ErrnoError(29) - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }, - default_tty_ops: { - get_char: function(tty) { - if (!tty.input.length) { - var result = null; - if (ENVIRONMENT_IS_NODE) { - var BUFSIZE = 256; - var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); - var bytesRead = 0; - try { - bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null) - } catch (e) { - if (e.toString().indexOf("EOF") != -1) bytesRead = 0; - else throw e - } - if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString("utf-8") - } else { - result = null - } - } else if (typeof window != "undefined" && typeof window.prompt == "function") { - result = window.prompt("Input: "); - if (result !== null) { - result += "\n" - } - } else if (typeof readline == "function") { - result = readline(); - if (result !== null) { - result += "\n" - } - } - if (!result) { - return null - } - tty.input = intArrayFromString(result, true) - } - return tty.input.shift() - }, - put_char: function(tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - }, - default_tty1_ops: { - put_char: function(tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - } -}; -var MEMFS = { - ops_table: null, - mount: function(mount) { - return MEMFS.createNode(null, "/", 16384 | 511, 0) - }, - createNode: function(parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - throw new FS.ErrnoError(63) - } - if (!MEMFS.ops_table) { - MEMFS.ops_table = { - dir: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - lookup: MEMFS.node_ops.lookup, - mknod: MEMFS.node_ops.mknod, - rename: MEMFS.node_ops.rename, - unlink: MEMFS.node_ops.unlink, - rmdir: MEMFS.node_ops.rmdir, - readdir: MEMFS.node_ops.readdir, - symlink: MEMFS.node_ops.symlink - }, - stream: { - llseek: MEMFS.stream_ops.llseek - } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap, - msync: MEMFS.stream_ops.msync - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - } - } - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {} - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; - node.contents = null - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream - } - node.timestamp = Date.now(); - if (parent) { - parent.contents[name] = node - } - return node - }, - getFileDataAsRegularArray: function(node) { - if (node.contents && node.contents.subarray) { - var arr = []; - for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); - return arr - } - return node.contents - }, - getFileDataAsTypedArray: function(node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); - return new Uint8Array(node.contents) - }, - expandFileStorage: function(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) return; - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); - return - }, - resizeFileStorage: function(node, newSize) { - if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; - node.usedBytes = 0; - return - } - if (!node.contents || node.contents.subarray) { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); - if (oldContents) { - node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) - } - node.usedBytes = newSize; - return - } - if (!node.contents) node.contents = []; - if (node.contents.length > newSize) node.contents.length = newSize; - else - while (node.contents.length < newSize) node.contents.push(0); - node.usedBytes = newSize - }, - node_ops: { - getattr: function(node) { - var attr = {}; - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096 - } else if (FS.isFile(node.mode)) { - attr.size = node.usedBytes - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length - } else { - attr.size = 0 - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr - }, - setattr: function(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp - } - if (attr.size !== undefined) { - MEMFS.resizeFileStorage(node, attr.size) - } - }, - lookup: function(parent, name) { - throw FS.genericErrors[44] - }, - mknod: function(parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev) - }, - rename: function(old_node, new_dir, new_name) { - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55) - } - } - } - delete old_node.parent.contents[old_node.name]; - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - old_node.parent = new_dir - }, - unlink: function(parent, name) { - delete parent.contents[name] - }, - rmdir: function(parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(55) - } - delete parent.contents[name] - }, - readdir: function(node) { - var entries = [".", ".."]; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue - } - entries.push(key) - } - return entries - }, - symlink: function(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); - node.link = oldpath; - return node - }, - readlink: function(node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(28) - } - return node.link - } - }, - stream_ops: { - read: function(stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) return 0; - var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) { - buffer.set(contents.subarray(position, position + size), offset) - } else { - for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] - } - return size - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (!length) return 0; - var node = stream.node; - node.timestamp = Date.now(); - if (buffer.subarray && (!node.contents || node.contents.subarray)) { - if (canOwn) { - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length - } else if (node.usedBytes === 0 && position === 0) { - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length - } else if (position + length <= node.usedBytes) { - node.contents.set(buffer.subarray(offset, offset + length), position); - return length - } - } - MEMFS.expandFileStorage(node, position + length); - if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); - else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer[offset + i] - } - } - node.usedBytes = Math.max(node.usedBytes, position + length); - return length - }, - llseek: function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.usedBytes - } - } - if (position < 0) { - throw new FS.ErrnoError(28) - } - return position - }, - allocate: function(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) - }, - mmap: function(stream, buffer, offset, length, position, prot, flags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - var ptr; - var allocated; - var contents = stream.node.contents; - if (!(flags & 2) && contents.buffer === buffer.buffer) { - allocated = false; - ptr = contents.byteOffset - } else { - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length) - } else { - contents = Array.prototype.slice.call(contents, position, position + length) - } - } - allocated = true; - var fromHeap = buffer.buffer == HEAP8.buffer; - ptr = _malloc(length); - if (!ptr) { - throw new FS.ErrnoError(48) - }(fromHeap ? HEAP8 : buffer).set(contents, ptr) - } - return { - ptr: ptr, - allocated: allocated - } - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (mmapFlags & 2) { - return 0 - } - var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); - return 0 - } - } -}; -var FS = { - root: null, - mounts: [], - devices: {}, - streams: [], - nextInode: 1, - nameTable: null, - currentPath: "/", - initialized: false, - ignorePermissions: true, - trackingDelegate: {}, - tracking: { - openFlags: { - READ: 1, - WRITE: 2 - } - }, - ErrnoError: null, - genericErrors: {}, - filesystems: null, - syncFSRequests: 0, - handleFSError: function(e) { - if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace(); - return setErrNo(e.errno) - }, - lookupPath: function(path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - if (!path) return { - path: "", - node: null - }; - var defaults = { - follow_mount: true, - recurse_count: 0 - }; - for (var key in defaults) { - if (opts[key] === undefined) { - opts[key] = defaults[key] - } - } - if (opts.recurse_count > 8) { - throw new FS.ErrnoError(32) - } - var parts = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), false); - var current = FS.root; - var current_path = "/"; - for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; - if (islast && opts.parent) { - break - } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - if (FS.isMountpoint(current)) { - if (!islast || islast && opts.follow_mount) { - current = current.mounted.root - } - } - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { - recurse_count: opts.recurse_count - }); - current = lookup.node; - if (count++ > 40) { - throw new FS.ErrnoError(32) - } - } - } - } - return { - path: current_path, - node: current - } - }, - getPath: function(node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path - } - path = path ? node.name + "/" + path : node.name; - node = node.parent - } - }, - hashName: function(parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) { - hash = (hash << 5) - hash + name.charCodeAt(i) | 0 - } - return (parentid + hash >>> 0) % FS.nameTable.length - }, - hashAddNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node - }, - hashRemoveNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break - } - current = current.name_next - } - } - }, - lookupNode: function(parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) { - throw new FS.ErrnoError(errCode, parent) - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node - } - } - return FS.lookup(parent, name) - }, - createNode: function(parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - FS.hashAddNode(node); - return node - }, - destroyNode: function(node) { - FS.hashRemoveNode(node) - }, - isRoot: function(node) { - return node === node.parent - }, - isMountpoint: function(node) { - return !!node.mounted - }, - isFile: function(mode) { - return (mode & 61440) === 32768 - }, - isDir: function(mode) { - return (mode & 61440) === 16384 - }, - isLink: function(mode) { - return (mode & 61440) === 40960 - }, - isChrdev: function(mode) { - return (mode & 61440) === 8192 - }, - isBlkdev: function(mode) { - return (mode & 61440) === 24576 - }, - isFIFO: function(mode) { - return (mode & 61440) === 4096 - }, - isSocket: function(mode) { - return (mode & 49152) === 49152 - }, - flagModes: { - "r": 0, - "rs": 1052672, - "r+": 2, - "w": 577, - "wx": 705, - "xw": 705, - "w+": 578, - "wx+": 706, - "xw+": 706, - "a": 1089, - "ax": 1217, - "xa": 1217, - "a+": 1090, - "ax+": 1218, - "xa+": 1218 - }, - modeStringToFlags: function(str) { - var flags = FS.flagModes[str]; - if (typeof flags === "undefined") { - throw new Error("Unknown file open mode: " + str) - } - return flags - }, - flagsToPermissionString: function(flag) { - var perms = ["r", "w", "rw"][flag & 3]; - if (flag & 512) { - perms += "w" - } - return perms - }, - nodePermissions: function(node, perms) { - if (FS.ignorePermissions) { - return 0 - } - if (perms.indexOf("r") !== -1 && !(node.mode & 292)) { - return 2 - } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) { - return 2 - } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) { - return 2 - } - return 0 - }, - mayLookup: function(dir) { - var errCode = FS.nodePermissions(dir, "x"); - if (errCode) return errCode; - if (!dir.node_ops.lookup) return 2; - return 0 - }, - mayCreate: function(dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20 - } catch (e) {} - return FS.nodePermissions(dir, "wx") - }, - mayDelete: function(dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name) - } catch (e) { - return e.errno - } - var errCode = FS.nodePermissions(dir, "wx"); - if (errCode) { - return errCode - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return 54 - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return 10 - } - } else { - if (FS.isDir(node.mode)) { - return 31 - } - } - return 0 - }, - mayOpen: function(node, flags) { - if (!node) { - return 44 - } - if (FS.isLink(node.mode)) { - return 32 - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { - return 31 - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) - }, - MAX_OPEN_FDS: 4096, - nextfd: function(fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd - } - } - throw new FS.ErrnoError(33) - }, - getStream: function(fd) { - return FS.streams[fd] - }, - createStream: function(stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function() {}; - FS.FSStream.prototype = { - object: { - get: function() { - return this.node - }, - set: function(val) { - this.node = val - } - }, - isRead: { - get: function() { - return (this.flags & 2097155) !== 1 - } - }, - isWrite: { - get: function() { - return (this.flags & 2097155) !== 0 - } - }, - isAppend: { - get: function() { - return this.flags & 1024 - } - } - } - } - var newStream = new FS.FSStream; - for (var p in stream) { - newStream[p] = stream[p] - } - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream - }, - closeStream: function(fd) { - FS.streams[fd] = null - }, - chrdev_stream_ops: { - open: function(stream) { - var device = FS.getDevice(stream.node.rdev); - stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - }, - llseek: function() { - throw new FS.ErrnoError(70) - } - }, - major: function(dev) { - return dev >> 8 - }, - minor: function(dev) { - return dev & 255 - }, - makedev: function(ma, mi) { - return ma << 8 | mi - }, - registerDevice: function(dev, ops) { - FS.devices[dev] = { - stream_ops: ops - } - }, - getDevice: function(dev) { - return FS.devices[dev] - }, - getMounts: function(mount) { - var mounts = []; - var check = [mount]; - while (check.length) { - var m = check.pop(); - mounts.push(m); - check.push.apply(check, m.mounts) - } - return mounts - }, - syncfs: function(populate, callback) { - if (typeof populate === "function") { - callback = populate; - populate = false - } - FS.syncFSRequests++; - if (FS.syncFSRequests > 1) { - err("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work") - } - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - - function doCallback(errCode) { - FS.syncFSRequests--; - return callback(errCode) - } - - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode) - } - return - } - if (++completed >= mounts.length) { - doCallback(null) - } - } - mounts.forEach(function(mount) { - if (!mount.type.syncfs) { - return done(null) - } - mount.type.syncfs(mount, populate, done) - }) - }, - mount: function(type, opts, mountpoint) { - var root = mountpoint === "/"; - var pseudo = !mountpoint; - var node; - if (root && FS.root) { - throw new FS.ErrnoError(10) - } else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - mountpoint = lookup.path; - node = lookup.node; - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - if (!FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - } - var mount = { - type: type, - opts: opts, - mountpoint: mountpoint, - mounts: [] - }; - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - if (root) { - FS.root = mountRoot - } else if (node) { - node.mounted = mount; - if (node.mount) { - node.mount.mounts.push(mount) - } - } - return mountRoot - }, - unmount: function(mountpoint) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - if (!FS.isMountpoint(lookup.node)) { - throw new FS.ErrnoError(28) - } - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach(function(hash) { - var current = FS.nameTable[hash]; - while (current) { - var next = current.name_next; - if (mounts.indexOf(current.mount) !== -1) { - FS.destroyNode(current) - } - current = next - } - }); - node.mounted = null; - var idx = node.mount.mounts.indexOf(mount); - node.mount.mounts.splice(idx, 1) - }, - lookup: function(parent, name) { - return parent.node_ops.lookup(parent, name) - }, - mknod: function(path, mode, dev) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === "." || name === "..") { - throw new FS.ErrnoError(28) - } - var errCode = FS.mayCreate(parent, name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.mknod(parent, name, mode, dev) - }, - create: function(path, mode) { - mode = mode !== undefined ? mode : 438; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0) - }, - mkdir: function(path, mode) { - mode = mode !== undefined ? mode : 511; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0) - }, - mkdirTree: function(path, mode) { - var dirs = path.split("/"); - var d = ""; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += "/" + dirs[i]; - try { - FS.mkdir(d, mode) - } catch (e) { - if (e.errno != 20) throw e - } - } - }, - mkdev: function(path, mode, dev) { - if (typeof dev === "undefined") { - dev = mode; - mode = 438 - } - mode |= 8192; - return FS.mknod(path, mode, dev) - }, - symlink: function(oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) { - throw new FS.ErrnoError(44) - } - var lookup = FS.lookupPath(newpath, { - parent: true - }); - var parent = lookup.node; - if (!parent) { - throw new FS.ErrnoError(44) - } - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.symlink(parent, newname, oldpath) - }, - rename: function(old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - var lookup, old_dir, new_dir; - try { - lookup = FS.lookupPath(old_path, { - parent: true - }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { - parent: true - }); - new_dir = lookup.node - } catch (e) { - throw new FS.ErrnoError(10) - } - if (!old_dir || !new_dir) throw new FS.ErrnoError(44); - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(75) - } - var old_node = FS.lookupNode(old_dir, old_name); - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(28) - } - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(55) - } - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (old_node === new_node) { - return - } - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { - throw new FS.ErrnoError(10) - } - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - try { - if (FS.trackingDelegate["willMovePath"]) { - FS.trackingDelegate["willMovePath"](old_path, new_path) - } - } catch (e) { - err("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name) - } catch (e) { - throw e - } finally { - FS.hashAddNode(old_node) - } - try { - if (FS.trackingDelegate["onMovePath"]) FS.trackingDelegate["onMovePath"](old_path, new_path) - } catch (e) { - err("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - }, - rmdir: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate["willDeletePath"]) { - FS.trackingDelegate["willDeletePath"](path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54) - } - return node.node_ops.readdir(node) - }, - unlink: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate["willDeletePath"]) { - FS.trackingDelegate["willDeletePath"](path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readlink: function(path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) { - throw new FS.ErrnoError(44) - } - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(28) - } - return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) - }, - stat: function(path, dontFollow) { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44) - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63) - } - return node.node_ops.getattr(node) - }, - lstat: function(path) { - return FS.stat(path, true) - }, - chmod: function(path, mode, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - mode: mode & 4095 | node.mode & ~4095, - timestamp: Date.now() - }) - }, - lchmod: function(path, mode) { - FS.chmod(path, mode, true) - }, - fchmod: function(fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chmod(stream.node, mode) - }, - chown: function(path, uid, gid, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - timestamp: Date.now() - }) - }, - lchown: function(path, uid, gid) { - FS.chown(path, uid, gid, true) - }, - fchown: function(fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chown(stream.node, uid, gid) - }, - truncate: function(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28) - } - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(31) - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(28) - } - var errCode = FS.nodePermissions(node, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - node.node_ops.setattr(node, { - size: len, - timestamp: Date.now() - }) - }, - ftruncate: function(fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(28) - } - FS.truncate(stream.node, len) - }, - utime: function(path, atime, mtime) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) - }) - }, - open: function(path, flags, mode, fd_start, fd_end) { - if (path === "") { - throw new FS.ErrnoError(44) - } - flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === "undefined" ? 438 : mode; - if (flags & 64) { - mode = mode & 4095 | 32768 - } else { - mode = 0 - } - var node; - if (typeof path === "object") { - node = path - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node - } catch (e) {} - } - var created = false; - if (flags & 64) { - if (node) { - if (flags & 128) { - throw new FS.ErrnoError(20) - } - } else { - node = FS.mknod(path, mode, 0); - created = true - } - } - if (!node) { - throw new FS.ErrnoError(44) - } - if (FS.isChrdev(node.mode)) { - flags &= ~512 - } - if (flags & 65536 && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - if (flags & 512) { - FS.truncate(node, 0) - } - flags &= ~(128 | 512 | 131072); - var stream = FS.createStream({ - node: node, - path: FS.getPath(node), - flags: flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - ungotten: [], - error: false - }, fd_start, fd_end); - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - if (Module["logReadFiles"] && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path) - } - } - try { - if (FS.trackingDelegate["onOpenFile"]) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) { - trackingFlags |= FS.tracking.openFlags.READ - } - if ((flags & 2097155) !== 0) { - trackingFlags |= FS.tracking.openFlags.WRITE - } - FS.trackingDelegate["onOpenFile"](path, trackingFlags) - } - } catch (e) { - err("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message) - } - return stream - }, - close: function(stream) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (stream.getdents) stream.getdents = null; - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream) - } - } catch (e) { - throw e - } finally { - FS.closeStream(stream.fd) - } - stream.fd = null - }, - isClosed: function(stream) { - return stream.fd === null - }, - llseek: function(stream, offset, whence) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(70) - } - if (whence != 0 && whence != 1 && whence != 2) { - throw new FS.ErrnoError(28) - } - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position - }, - read: function(stream, buffer, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(28) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(28) - } - if (stream.seekable && stream.flags & 1024) { - FS.llseek(stream, 0, 2) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - try { - if (stream.path && FS.trackingDelegate["onWriteToFile"]) FS.trackingDelegate["onWriteToFile"](stream.path) - } catch (e) { - err("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message) - } - return bytesWritten - }, - allocate: function(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138) - } - stream.stream_ops.allocate(stream, offset, length) - }, - mmap: function(stream, buffer, offset, length, position, prot, flags) { - if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { - throw new FS.ErrnoError(2) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(2) - } - if (!stream.stream_ops.mmap) { - throw new FS.ErrnoError(43) - } - return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags) - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) { - return 0 - } - return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) - }, - munmap: function(stream) { - return 0 - }, - ioctl: function(stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(59) - } - return stream.stream_ops.ioctl(stream, cmd, arg) - }, - readFile: function(path, opts) { - opts = opts || {}; - opts.flags = opts.flags || "r"; - opts.encoding = opts.encoding || "binary"; - if (opts.encoding !== "utf8" && opts.encoding !== "binary") { - throw new Error('Invalid encoding type "' + opts.encoding + '"') - } - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === "utf8") { - ret = UTF8ArrayToString(buf, 0) - } else if (opts.encoding === "binary") { - ret = buf - } - FS.close(stream); - return ret - }, - writeFile: function(path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || "w"; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === "string") { - var buf = new Uint8Array(lengthBytesUTF8(data) + 1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) - } else { - throw new Error("Unsupported data type") - } - FS.close(stream) - }, - cwd: function() { - return FS.currentPath - }, - chdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - if (lookup.node === null) { - throw new FS.ErrnoError(44) - } - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(54) - } - var errCode = FS.nodePermissions(lookup.node, "x"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - FS.currentPath = lookup.path - }, - createDefaultDirectories: function() { - FS.mkdir("/tmp"); - FS.mkdir("/home"); - FS.mkdir("/home/web_user") - }, - createDefaultDevices: function() { - FS.mkdir("/dev"); - FS.registerDevice(FS.makedev(1, 3), { - read: function() { - return 0 - }, - write: function(stream, buffer, offset, length, pos) { - return length - } - }); - FS.mkdev("/dev/null", FS.makedev(1, 3)); - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev("/dev/tty", FS.makedev(5, 0)); - FS.mkdev("/dev/tty1", FS.makedev(6, 0)); - var random_device; - if (typeof crypto === "object" && typeof crypto["getRandomValues"] === "function") { - var randomBuffer = new Uint8Array(1); - random_device = function() { - crypto.getRandomValues(randomBuffer); - return randomBuffer[0] - } - } else if (ENVIRONMENT_IS_NODE) { - try { - var crypto_module = require("crypto"); - random_device = function() { - return crypto_module["randomBytes"](1)[0] - } - } catch (e) {} - } else {} - if (!random_device) { - random_device = function() { - abort("random_device") - } - } - FS.createDevice("/dev", "random", random_device); - FS.createDevice("/dev", "urandom", random_device); - FS.mkdir("/dev/shm"); - FS.mkdir("/dev/shm/tmp") - }, - createSpecialDirectories: function() { - FS.mkdir("/proc"); - FS.mkdir("/proc/self"); - FS.mkdir("/proc/self/fd"); - FS.mount({ - mount: function() { - var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73); - node.node_ops = { - lookup: function(parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - var ret = { - parent: null, - mount: { - mountpoint: "fake" - }, - node_ops: { - readlink: function() { - return stream.path - } - } - }; - ret.parent = ret; - return ret - } - }; - return node - } - }, {}, "/proc/self/fd") - }, - createStandardStreams: function() { - if (Module["stdin"]) { - FS.createDevice("/dev", "stdin", Module["stdin"]) - } else { - FS.symlink("/dev/tty", "/dev/stdin") - } - if (Module["stdout"]) { - FS.createDevice("/dev", "stdout", null, Module["stdout"]) - } else { - FS.symlink("/dev/tty", "/dev/stdout") - } - if (Module["stderr"]) { - FS.createDevice("/dev", "stderr", null, Module["stderr"]) - } else { - FS.symlink("/dev/tty1", "/dev/stderr") - } - var stdin = FS.open("/dev/stdin", "r"); - var stdout = FS.open("/dev/stdout", "w"); - var stderr = FS.open("/dev/stderr", "w") - }, - ensureErrnoError: function() { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.node = node; - this.setErrno = function(errno) { - this.errno = errno - }; - this.setErrno(errno); - this.message = "FS error" - }; - FS.ErrnoError.prototype = new Error; - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [44].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = "" - }) - }, - staticInit: function() { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.mount(MEMFS, {}, "/"); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - FS.filesystems = { - "MEMFS": MEMFS - } - }, - init: function(input, output, error) { - FS.init.initialized = true; - FS.ensureErrnoError(); - Module["stdin"] = input || Module["stdin"]; - Module["stdout"] = output || Module["stdout"]; - Module["stderr"] = error || Module["stderr"]; - FS.createStandardStreams() - }, - quit: function() { - FS.init.initialized = false; - var fflush = Module["_fflush"]; - if (fflush) fflush(0); - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue - } - FS.close(stream) - } - }, - getMode: function(canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode - }, - joinPath: function(parts, forceRelative) { - var path = PATH.join.apply(null, parts); - if (forceRelative && path[0] == "/") path = path.substr(1); - return path - }, - absolutePath: function(relative, base) { - return PATH_FS.resolve(base, relative) - }, - standardizePath: function(path) { - return PATH.normalize(path) - }, - findObject: function(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object - } else { - setErrNo(ret.error); - return null - } - }, - analyzePath: function(path, dontResolveLastLink) { - try { - var lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - path = lookup.path - } catch (e) {} - var ret = { - isRoot: false, - exists: false, - error: 0, - name: null, - path: null, - object: null, - parentExists: false, - parentPath: null, - parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { - parent: true - }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === "/" - } catch (e) { - ret.error = e.errno - } - return ret - }, - createFolder: function(parent, name, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.mkdir(path, mode) - }, - createPath: function(parent, path, canRead, canWrite) { - parent = typeof parent === "string" ? parent : FS.getPath(parent); - var parts = path.split("/").reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current) - } catch (e) {} - parent = current - } - return current - }, - createFile: function(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode) - }, - createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === "string") { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr - } - FS.chmod(node, mode | 146); - var stream = FS.open(node, "w"); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode) - } - return node - }, - createDevice: function(parent, name, input, output) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false - }, - close: function(stream) { - if (output && output.buffer && output.buffer.length) { - output(10) - } - }, - read: function(stream, buffer, offset, length, pos) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input() - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer[offset + i]) - } catch (e) { - throw new FS.ErrnoError(29) - } - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }); - return FS.mkdev(path, mode, dev) - }, - createLink: function(parent, name, target, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - return FS.symlink(target, path) - }, - forceLoadFile: function(obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - var success = true; - if (typeof XMLHttpRequest !== "undefined") { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.") - } else if (read_) { - try { - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length - } catch (e) { - success = false - } - } else { - throw new Error("Cannot load without read() or XMLHttpRequest.") - } - if (!success) setErrNo(29); - return success - }, - createLazyFile: function(parent, name, url, canRead, canWrite) { - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = [] - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length - 1 || idx < 0) { - return undefined - } - var chunkOffset = idx % this.chunkSize; - var chunkNum = idx / this.chunkSize | 0; - return this.getter(chunkNum)[chunkOffset] - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter - }; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - var xhr = new XMLHttpRequest; - xhr.open("HEAD", url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; - var chunkSize = 1024 * 1024; - if (!hasByteServing) chunkSize = datalength; - var doXHR = function(from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - if (typeof Uint8Array != "undefined") xhr.responseType = "arraybuffer"; - if (xhr.overrideMimeType) { - xhr.overrideMimeType("text/plain; charset=x-user-defined") - } - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - if (xhr.response !== undefined) { - return new Uint8Array(xhr.response || []) - } else { - return intArrayFromString(xhr.responseText || "", true) - } - }; - var lazyArray = this; - lazyArray.setDataGetter(function(chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum + 1) * chunkSize - 1; - end = Math.min(end, datalength - 1); - if (typeof lazyArray.chunks[chunkNum] === "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end) - } - if (typeof lazyArray.chunks[chunkNum] === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum] - }); - if (usesGzip || !datalength) { - chunkSize = datalength = 1; - datalength = this.getter(0).length; - chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed") - } - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true - }; - if (typeof XMLHttpRequest !== "undefined") { - if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; - var lazyArray = new LazyUint8Array; - Object.defineProperties(lazyArray, { - length: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._length - } - }, - chunkSize: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._chunkSize - } - } - }); - var properties = { - isDevice: false, - contents: lazyArray - } - } else { - var properties = { - isDevice: false, - url: url - } - } - var node = FS.createFile(parent, name, properties, canRead, canWrite); - if (properties.contents) { - node.contents = properties.contents - } else if (properties.url) { - node.contents = null; - node.url = properties.url - } - Object.defineProperties(node, { - usedBytes: { - get: function() { - return this.contents.length - } - } - }); - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - return fn.apply(null, arguments) - } - }); - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - var contents = stream.node.contents; - if (position >= contents.length) return 0; - var size = Math.min(contents.length - position, length); - if (contents.slice) { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i] - } - } else { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents.get(position + i) - } - } - return size - }; - node.stream_ops = stream_ops; - return node - }, - createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency("cp " + fullname); - - function processData(byteArray) { - function finish(byteArray) { - if (preFinish) preFinish(); - if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) - } - if (onload) onload(); - removeRunDependency(dep) - } - var handled = false; - Module["preloadPlugins"].forEach(function(plugin) { - if (handled) return; - if (plugin["canHandle"](fullname)) { - plugin["handle"](byteArray, fullname, finish, function() { - if (onerror) onerror(); - removeRunDependency(dep) - }); - handled = true - } - }); - if (!handled) finish(byteArray) - } - addRunDependency(dep); - if (typeof url == "string") { - Browser.asyncLoad(url, function(byteArray) { - processData(byteArray) - }, onerror) - } else { - processData(url) - } - }, - indexedDB: function() { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB - }, - DB_NAME: function() { - return "EM_FS_" + window.location.pathname - }, - DB_VERSION: 20, - DB_STORE_NAME: "FILE_DATA", - saveFilesToDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out("creating db"); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME) - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, - fail = 0, - total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { - ok++; - if (ok + fail == total) finish() - }; - putRequest.onerror = function putRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - }, - loadFilesFromDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = onerror; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], "readonly") - } catch (e) { - onerror(e); - return - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, - fail = 0, - total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path) - } - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish() - }; - getRequest.onerror = function getRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - } -}; -var SYSCALLS = { - mappings: {}, - DEFAULT_POLLMASK: 5, - umask: 511, - calculateAt: function(dirfd, path) { - if (path[0] !== "/") { - var dir; - if (dirfd === -100) { - dir = FS.cwd() - } else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) throw new FS.ErrnoError(8); - dir = dirstream.path - } - path = PATH.join2(dir, path) - } - return path - }, - doStat: function(func, path, buf) { - try { - var stat = func(path) - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54 - } - throw e - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 4 >> 2] = 0; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAP32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - HEAP32[buf + 32 >> 2] = 0; - tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; - HEAP32[buf + 60 >> 2] = 0; - HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; - HEAP32[buf + 68 >> 2] = 0; - HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; - HEAP32[buf + 76 >> 2] = 0; - tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; - return 0 - }, - doMsync: function(addr, stream, len, flags, offset) { - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags) - }, - doMkdir: function(path, mode) { - path = PATH.normalize(path); - if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); - FS.mkdir(path, mode, 0); - return 0 - }, - doMknod: function(path, mode, dev) { - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - return -28 - } - FS.mknod(path, mode, dev); - return 0 - }, - doReadlink: function(path, buf, bufsize) { - if (bufsize <= 0) return -28; - var ret = FS.readlink(path); - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf + len]; - stringToUTF8(ret, buf, bufsize + 1); - HEAP8[buf + len] = endChar; - return len - }, - doAccess: function(path, amode) { - if (amode & ~7) { - return -28 - } - var node; - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node; - if (!node) { - return -44 - } - var perms = ""; - if (amode & 4) perms += "r"; - if (amode & 2) perms += "w"; - if (amode & 1) perms += "x"; - if (perms && FS.nodePermissions(node, perms)) { - return -2 - } - return 0 - }, - doDup: function(path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd - }, - doReadv: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.read(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) break - } - return ret - }, - doWritev: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr - } - return ret - }, - varargs: undefined, - get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret - }, - getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret - }, - getStreamFromFD: function(fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream - }, - get64: function(low, high) { - return low - } -}; - -function ___sys_fcntl64(fd, cmd, varargs) { - SYSCALLS.varargs = varargs; - try { - var stream = SYSCALLS.getStreamFromFD(fd); - switch (cmd) { - case 0: { - var arg = SYSCALLS.get(); - if (arg < 0) { - return -28 - } - var newStream; - newStream = FS.open(stream.path, stream.flags, 0, arg); - return newStream.fd - } - case 1: - case 2: - return 0; - case 3: - return stream.flags; - case 4: { - var arg = SYSCALLS.get(); - stream.flags |= arg; - return 0 - } - case 12: { - var arg = SYSCALLS.get(); - var offset = 0; - HEAP16[arg + offset >> 1] = 2; - return 0 - } - case 13: - case 14: - return 0; - case 16: - case 8: - return -28; - case 9: - setErrNo(28); - return -1; - default: { - return -28 - } - } - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno - } -} - -function ___syscall221(a0, a1, a2) { - return ___sys_fcntl64(a0, a1, a2) -} - -function ___sys_open(path, flags, varargs) { - SYSCALLS.varargs = varargs; - try { - var pathname = SYSCALLS.getStr(path); - var mode = SYSCALLS.get(); - var stream = FS.open(pathname, flags, mode); - return stream.fd - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno - } -} - -function ___syscall5(a0, a1, a2) { - return ___sys_open(a0, a1, a2) -} - -function ___sys_ioctl(fd, op, varargs) { - SYSCALLS.varargs = varargs; - try { - var stream = SYSCALLS.getStreamFromFD(fd); - switch (op) { - case 21509: - case 21505: { - if (!stream.tty) return -59; - return 0 - } - case 21510: - case 21511: - case 21512: - case 21506: - case 21507: - case 21508: { - if (!stream.tty) return -59; - return 0 - } - case 21519: { - if (!stream.tty) return -59; - var argp = SYSCALLS.get(); - HEAP32[argp >> 2] = 0; - return 0 - } - case 21520: { - if (!stream.tty) return -59; - return -28 - } - case 21531: { - var argp = SYSCALLS.get(); - return FS.ioctl(stream, op, argp) - } - case 21523: { - if (!stream.tty) return -59; - return 0 - } - case 21524: { - if (!stream.tty) return -59; - return 0 - } - default: - abort("bad ioctl syscall " + op) - } - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno - } -} - -function ___syscall54(a0, a1, a2) { - return ___sys_ioctl(a0, a1, a2) -} - -function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function ___wasi_fd_close(a0) { - return _fd_close(a0) -} - -function _fd_read(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function ___wasi_fd_read(a0, a1, a2, a3) { - return _fd_read(a0, a1, a2, a3) -} - -function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 4294967296; - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - var DOUBLE_LIMIT = 9007199254740992; - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { - return -61 - } - FS.llseek(stream, offset, whence); - tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function ___wasi_fd_seek(a0, a1, a2, a3, a4) { - return _fd_seek(a0, a1, a2, a3, a4) -} - -function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function ___wasi_fd_write(a0, a1, a2, a3) { - return _fd_write(a0, a1, a2, a3) -} - -function _emscripten_set_main_loop_timing(mode, value) { - Browser.mainLoop.timingMode = mode; - Browser.mainLoop.timingValue = value; - if (!Browser.mainLoop.func) { - return 1 - } - if (mode == 0) { - Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() { - var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now()) | 0; - setTimeout(Browser.mainLoop.runner, timeUntilNextTick) - }; - Browser.mainLoop.method = "timeout" - } else if (mode == 1) { - Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() { - Browser.requestAnimationFrame(Browser.mainLoop.runner) - }; - Browser.mainLoop.method = "rAF" - } else if (mode == 2) { - if (typeof setImmediate === "undefined") { - var setImmediates = []; - var emscriptenMainLoopMessageId = "setimmediate"; - var Browser_setImmediate_messageHandler = function(event) { - if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) { - event.stopPropagation(); - setImmediates.shift()() - } - }; - addEventListener("message", Browser_setImmediate_messageHandler, true); - setImmediate = function Browser_emulated_setImmediate(func) { - setImmediates.push(func); - if (ENVIRONMENT_IS_WORKER) { - if (Module["setImmediates"] === undefined) Module["setImmediates"] = []; - Module["setImmediates"].push(func); - postMessage({ - target: emscriptenMainLoopMessageId - }) - } else postMessage(emscriptenMainLoopMessageId, "*") - } - } - Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() { - setImmediate(Browser.mainLoop.runner) - }; - Browser.mainLoop.method = "immediate" - } - return 0 -} -var _emscripten_get_now; -if (ENVIRONMENT_IS_NODE) { - _emscripten_get_now = function() { - var t = process["hrtime"](); - return t[0] * 1e3 + t[1] / 1e6 - } -} else if (typeof dateNow !== "undefined") { - _emscripten_get_now = dateNow -} else _emscripten_get_now = function() { - return performance.now() -}; - -function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { - noExitRuntime = true; - assert(!Browser.mainLoop.func, "emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."); - Browser.mainLoop.func = func; - Browser.mainLoop.arg = arg; - var browserIterationFunc; - if (typeof arg !== "undefined") { - browserIterationFunc = function() { - Module["dynCall_vi"](func, arg) - } - } else { - browserIterationFunc = function() { - Module["dynCall_v"](func) - } - } - var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop; - Browser.mainLoop.runner = function Browser_mainLoop_runner() { - if (ABORT) return; - if (Browser.mainLoop.queue.length > 0) { - var start = Date.now(); - var blocker = Browser.mainLoop.queue.shift(); - blocker.func(blocker.arg); - if (Browser.mainLoop.remainingBlockers) { - var remaining = Browser.mainLoop.remainingBlockers; - var next = remaining % 1 == 0 ? remaining - 1 : Math.floor(remaining); - if (blocker.counted) { - Browser.mainLoop.remainingBlockers = next - } else { - next = next + .5; - Browser.mainLoop.remainingBlockers = (8 * remaining + next) / 9 - } - } - console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + " ms"); - Browser.mainLoop.updateStatus(); - if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; - setTimeout(Browser.mainLoop.runner, 0); - return - } - if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; - Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0; - if (Browser.mainLoop.timingMode == 1 && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) { - Browser.mainLoop.scheduler(); - return - } else if (Browser.mainLoop.timingMode == 0) { - Browser.mainLoop.tickStartTime = _emscripten_get_now() - } - Browser.mainLoop.runIter(browserIterationFunc); - if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; - if (typeof SDL === "object" && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData(); - Browser.mainLoop.scheduler() - }; - if (!noSetTiming) { - if (fps && fps > 0) _emscripten_set_main_loop_timing(0, 1e3 / fps); - else _emscripten_set_main_loop_timing(1, 1); - Browser.mainLoop.scheduler() - } - if (simulateInfiniteLoop) { - throw "unwind" - } -} -var Browser = { - mainLoop: { - scheduler: null, - method: "", - currentlyRunningMainloop: 0, - func: null, - arg: 0, - timingMode: 0, - timingValue: 0, - currentFrameNumber: 0, - queue: [], - pause: function() { - Browser.mainLoop.scheduler = null; - Browser.mainLoop.currentlyRunningMainloop++ - }, - resume: function() { - Browser.mainLoop.currentlyRunningMainloop++; - var timingMode = Browser.mainLoop.timingMode; - var timingValue = Browser.mainLoop.timingValue; - var func = Browser.mainLoop.func; - Browser.mainLoop.func = null; - _emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true); - _emscripten_set_main_loop_timing(timingMode, timingValue); - Browser.mainLoop.scheduler() - }, - updateStatus: function() { - if (Module["setStatus"]) { - var message = Module["statusMessage"] || "Please wait..."; - var remaining = Browser.mainLoop.remainingBlockers; - var expected = Browser.mainLoop.expectedBlockers; - if (remaining) { - if (remaining < expected) { - Module["setStatus"](message + " (" + (expected - remaining) + "/" + expected + ")") - } else { - Module["setStatus"](message) - } - } else { - Module["setStatus"]("") - } - } - }, - runIter: function(func) { - if (ABORT) return; - if (Module["preMainLoop"]) { - var preRet = Module["preMainLoop"](); - if (preRet === false) { - return - } - } - try { - func() - } catch (e) { - if (e instanceof ExitStatus) { - return - } else { - if (e && typeof e === "object" && e.stack) err("exception thrown: " + [e, e.stack]); - throw e - } - } - if (Module["postMainLoop"]) Module["postMainLoop"]() - } - }, - isFullscreen: false, - pointerLock: false, - moduleContextCreatedCallbacks: [], - workers: [], - init: function() { - if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; - if (Browser.initted) return; - Browser.initted = true; - try { - new Blob; - Browser.hasBlobConstructor = true - } catch (e) { - Browser.hasBlobConstructor = false; - console.log("warning: no blob constructor, cannot create blobs with mimetypes") - } - Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : !Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null; - Browser.URLObject = typeof window != "undefined" ? window.URL ? window.URL : window.webkitURL : undefined; - if (!Module.noImageDecoding && typeof Browser.URLObject === "undefined") { - console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); - Module.noImageDecoding = true - } - var imagePlugin = {}; - imagePlugin["canHandle"] = function imagePlugin_canHandle(name) { - return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name) - }; - imagePlugin["handle"] = function imagePlugin_handle(byteArray, name, onload, onerror) { - var b = null; - if (Browser.hasBlobConstructor) { - try { - b = new Blob([byteArray], { - type: Browser.getMimetype(name) - }); - if (b.size !== byteArray.length) { - b = new Blob([new Uint8Array(byteArray).buffer], { - type: Browser.getMimetype(name) - }) - } - } catch (e) { - warnOnce("Blob constructor present but fails: " + e + "; falling back to blob builder") - } - } - if (!b) { - var bb = new Browser.BlobBuilder; - bb.append(new Uint8Array(byteArray).buffer); - b = bb.getBlob() - } - var url = Browser.URLObject.createObjectURL(b); - var img = new Image; - img.onload = function img_onload() { - assert(img.complete, "Image " + name + " could not be decoded"); - var canvas = document.createElement("canvas"); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0); - Module["preloadedImages"][name] = canvas; - Browser.URLObject.revokeObjectURL(url); - if (onload) onload(byteArray) - }; - img.onerror = function img_onerror(event) { - console.log("Image " + url + " could not be decoded"); - if (onerror) onerror() - }; - img.src = url - }; - Module["preloadPlugins"].push(imagePlugin); - var audioPlugin = {}; - audioPlugin["canHandle"] = function audioPlugin_canHandle(name) { - return !Module.noAudioDecoding && name.substr(-4) in { - ".ogg": 1, - ".wav": 1, - ".mp3": 1 - } - }; - audioPlugin["handle"] = function audioPlugin_handle(byteArray, name, onload, onerror) { - var done = false; - - function finish(audio) { - if (done) return; - done = true; - Module["preloadedAudios"][name] = audio; - if (onload) onload(byteArray) - } - - function fail() { - if (done) return; - done = true; - Module["preloadedAudios"][name] = new Audio; - if (onerror) onerror() - } - if (Browser.hasBlobConstructor) { - try { - var b = new Blob([byteArray], { - type: Browser.getMimetype(name) - }) - } catch (e) { - return fail() - } - var url = Browser.URLObject.createObjectURL(b); - var audio = new Audio; - audio.addEventListener("canplaythrough", function() { - finish(audio) - }, false); - audio.onerror = function audio_onerror(event) { - if (done) return; - console.log("warning: browser could not fully decode audio " + name + ", trying slower base64 approach"); - - function encode64(data) { - var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var PAD = "="; - var ret = ""; - var leftchar = 0; - var leftbits = 0; - for (var i = 0; i < data.length; i++) { - leftchar = leftchar << 8 | data[i]; - leftbits += 8; - while (leftbits >= 6) { - var curr = leftchar >> leftbits - 6 & 63; - leftbits -= 6; - ret += BASE[curr] - } - } - if (leftbits == 2) { - ret += BASE[(leftchar & 3) << 4]; - ret += PAD + PAD - } else if (leftbits == 4) { - ret += BASE[(leftchar & 15) << 2]; - ret += PAD - } - return ret - } - audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(byteArray); - finish(audio) - }; - audio.src = url; - Browser.safeSetTimeout(function() { - finish(audio) - }, 1e4) - } else { - return fail() - } - }; - Module["preloadPlugins"].push(audioPlugin); - - function pointerLockChange() { - Browser.pointerLock = document["pointerLockElement"] === Module["canvas"] || document["mozPointerLockElement"] === Module["canvas"] || document["webkitPointerLockElement"] === Module["canvas"] || document["msPointerLockElement"] === Module["canvas"] - } - var canvas = Module["canvas"]; - if (canvas) { - canvas.requestPointerLock = canvas["requestPointerLock"] || canvas["mozRequestPointerLock"] || canvas["webkitRequestPointerLock"] || canvas["msRequestPointerLock"] || function() {}; - canvas.exitPointerLock = document["exitPointerLock"] || document["mozExitPointerLock"] || document["webkitExitPointerLock"] || document["msExitPointerLock"] || function() {}; - canvas.exitPointerLock = canvas.exitPointerLock.bind(document); - document.addEventListener("pointerlockchange", pointerLockChange, false); - document.addEventListener("mozpointerlockchange", pointerLockChange, false); - document.addEventListener("webkitpointerlockchange", pointerLockChange, false); - document.addEventListener("mspointerlockchange", pointerLockChange, false); - if (Module["elementPointerLock"]) { - canvas.addEventListener("click", function(ev) { - if (!Browser.pointerLock && Module["canvas"].requestPointerLock) { - Module["canvas"].requestPointerLock(); - ev.preventDefault() - } - }, false) - } - } - }, - createContext: function(canvas, useWebGL, setInModule, webGLContextAttributes) { - if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; - var ctx; - var contextHandle; - if (useWebGL) { - var contextAttributes = { - antialias: false, - alpha: false, - majorVersion: 1 - }; - if (webGLContextAttributes) { - for (var attribute in webGLContextAttributes) { - contextAttributes[attribute] = webGLContextAttributes[attribute] - } - } - if (typeof GL !== "undefined") { - contextHandle = GL.createContext(canvas, contextAttributes); - if (contextHandle) { - ctx = GL.getContext(contextHandle).GLctx - } - } - } else { - ctx = canvas.getContext("2d") - } - if (!ctx) return null; - if (setInModule) { - if (!useWebGL) assert(typeof GLctx === "undefined", "cannot set in module if GLctx is used, but we are a non-GL context that would replace it"); - Module.ctx = ctx; - if (useWebGL) GL.makeContextCurrent(contextHandle); - Module.useWebGL = useWebGL; - Browser.moduleContextCreatedCallbacks.forEach(function(callback) { - callback() - }); - Browser.init() - } - return ctx - }, - destroyContext: function(canvas, useWebGL, setInModule) {}, - fullscreenHandlersInstalled: false, - lockPointer: undefined, - resizeCanvas: undefined, - requestFullscreen: function(lockPointer, resizeCanvas) { - Browser.lockPointer = lockPointer; - Browser.resizeCanvas = resizeCanvas; - if (typeof Browser.lockPointer === "undefined") Browser.lockPointer = true; - if (typeof Browser.resizeCanvas === "undefined") Browser.resizeCanvas = false; - var canvas = Module["canvas"]; - - function fullscreenChange() { - Browser.isFullscreen = false; - var canvasContainer = canvas.parentNode; - if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvasContainer) { - canvas.exitFullscreen = Browser.exitFullscreen; - if (Browser.lockPointer) canvas.requestPointerLock(); - Browser.isFullscreen = true; - if (Browser.resizeCanvas) { - Browser.setFullscreenCanvasSize() - } else { - Browser.updateCanvasDimensions(canvas) - } - } else { - canvasContainer.parentNode.insertBefore(canvas, canvasContainer); - canvasContainer.parentNode.removeChild(canvasContainer); - if (Browser.resizeCanvas) { - Browser.setWindowedCanvasSize() - } else { - Browser.updateCanvasDimensions(canvas) - } - } - if (Module["onFullScreen"]) Module["onFullScreen"](Browser.isFullscreen); - if (Module["onFullscreen"]) Module["onFullscreen"](Browser.isFullscreen) - } - if (!Browser.fullscreenHandlersInstalled) { - Browser.fullscreenHandlersInstalled = true; - document.addEventListener("fullscreenchange", fullscreenChange, false); - document.addEventListener("mozfullscreenchange", fullscreenChange, false); - document.addEventListener("webkitfullscreenchange", fullscreenChange, false); - document.addEventListener("MSFullscreenChange", fullscreenChange, false) - } - var canvasContainer = document.createElement("div"); - canvas.parentNode.insertBefore(canvasContainer, canvas); - canvasContainer.appendChild(canvas); - canvasContainer.requestFullscreen = canvasContainer["requestFullscreen"] || canvasContainer["mozRequestFullScreen"] || canvasContainer["msRequestFullscreen"] || (canvasContainer["webkitRequestFullscreen"] ? function() { - canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]) - } : null) || (canvasContainer["webkitRequestFullScreen"] ? function() { - canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]) - } : null); - canvasContainer.requestFullscreen() - }, - exitFullscreen: function() { - if (!Browser.isFullscreen) { - return false - } - var CFS = document["exitFullscreen"] || document["cancelFullScreen"] || document["mozCancelFullScreen"] || document["msExitFullscreen"] || document["webkitCancelFullScreen"] || function() {}; - CFS.apply(document, []); - return true - }, - nextRAF: 0, - fakeRequestAnimationFrame: function(func) { - var now = Date.now(); - if (Browser.nextRAF === 0) { - Browser.nextRAF = now + 1e3 / 60 - } else { - while (now + 2 >= Browser.nextRAF) { - Browser.nextRAF += 1e3 / 60 - } - } - var delay = Math.max(Browser.nextRAF - now, 0); - setTimeout(func, delay) - }, - requestAnimationFrame: function(func) { - if (typeof requestAnimationFrame === "function") { - requestAnimationFrame(func); - return - } - var RAF = Browser.fakeRequestAnimationFrame; - RAF(func) - }, - safeCallback: function(func) { - return function() { - if (!ABORT) return func.apply(null, arguments) - } - }, - allowAsyncCallbacks: true, - queuedAsyncCallbacks: [], - pauseAsyncCallbacks: function() { - Browser.allowAsyncCallbacks = false - }, - resumeAsyncCallbacks: function() { - Browser.allowAsyncCallbacks = true; - if (Browser.queuedAsyncCallbacks.length > 0) { - var callbacks = Browser.queuedAsyncCallbacks; - Browser.queuedAsyncCallbacks = []; - callbacks.forEach(function(func) { - func() - }) - } - }, - safeRequestAnimationFrame: function(func) { - return Browser.requestAnimationFrame(function() { - if (ABORT) return; - if (Browser.allowAsyncCallbacks) { - func() - } else { - Browser.queuedAsyncCallbacks.push(func) - } - }) - }, - safeSetTimeout: function(func, timeout) { - noExitRuntime = true; - return setTimeout(function() { - if (ABORT) return; - if (Browser.allowAsyncCallbacks) { - func() - } else { - Browser.queuedAsyncCallbacks.push(func) - } - }, timeout) - }, - safeSetInterval: function(func, timeout) { - noExitRuntime = true; - return setInterval(function() { - if (ABORT) return; - if (Browser.allowAsyncCallbacks) { - func() - } - }, timeout) - }, - getMimetype: function(name) { - return { - "jpg": "image/jpeg", - "jpeg": "image/jpeg", - "png": "image/png", - "bmp": "image/bmp", - "ogg": "audio/ogg", - "wav": "audio/wav", - "mp3": "audio/mpeg" - } [name.substr(name.lastIndexOf(".") + 1)] - }, - getUserMedia: function(func) { - if (!window.getUserMedia) { - window.getUserMedia = navigator["getUserMedia"] || navigator["mozGetUserMedia"] - } - window.getUserMedia(func) - }, - getMovementX: function(event) { - return event["movementX"] || event["mozMovementX"] || event["webkitMovementX"] || 0 - }, - getMovementY: function(event) { - return event["movementY"] || event["mozMovementY"] || event["webkitMovementY"] || 0 - }, - getMouseWheelDelta: function(event) { - var delta = 0; - switch (event.type) { - case "DOMMouseScroll": - delta = event.detail / 3; - break; - case "mousewheel": - delta = event.wheelDelta / 120; - break; - case "wheel": - delta = event.deltaY; - switch (event.deltaMode) { - case 0: - delta /= 100; - break; - case 1: - delta /= 3; - break; - case 2: - delta *= 80; - break; - default: - throw "unrecognized mouse wheel delta mode: " + event.deltaMode - } - break; - default: - throw "unrecognized mouse wheel event: " + event.type - } - return delta - }, - mouseX: 0, - mouseY: 0, - mouseMovementX: 0, - mouseMovementY: 0, - touches: {}, - lastTouches: {}, - calculateMouseEvent: function(event) { - if (Browser.pointerLock) { - if (event.type != "mousemove" && "mozMovementX" in event) { - Browser.mouseMovementX = Browser.mouseMovementY = 0 - } else { - Browser.mouseMovementX = Browser.getMovementX(event); - Browser.mouseMovementY = Browser.getMovementY(event) - } - if (typeof SDL != "undefined") { - Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; - Browser.mouseY = SDL.mouseY + Browser.mouseMovementY - } else { - Browser.mouseX += Browser.mouseMovementX; - Browser.mouseY += Browser.mouseMovementY - } - } else { - var rect = Module["canvas"].getBoundingClientRect(); - var cw = Module["canvas"].width; - var ch = Module["canvas"].height; - var scrollX = typeof window.scrollX !== "undefined" ? window.scrollX : window.pageXOffset; - var scrollY = typeof window.scrollY !== "undefined" ? window.scrollY : window.pageYOffset; - if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") { - var touch = event.touch; - if (touch === undefined) { - return - } - var adjustedX = touch.pageX - (scrollX + rect.left); - var adjustedY = touch.pageY - (scrollY + rect.top); - adjustedX = adjustedX * (cw / rect.width); - adjustedY = adjustedY * (ch / rect.height); - var coords = { - x: adjustedX, - y: adjustedY - }; - if (event.type === "touchstart") { - Browser.lastTouches[touch.identifier] = coords; - Browser.touches[touch.identifier] = coords - } else if (event.type === "touchend" || event.type === "touchmove") { - var last = Browser.touches[touch.identifier]; - if (!last) last = coords; - Browser.lastTouches[touch.identifier] = last; - Browser.touches[touch.identifier] = coords - } - return - } - var x = event.pageX - (scrollX + rect.left); - var y = event.pageY - (scrollY + rect.top); - x = x * (cw / rect.width); - y = y * (ch / rect.height); - Browser.mouseMovementX = x - Browser.mouseX; - Browser.mouseMovementY = y - Browser.mouseY; - Browser.mouseX = x; - Browser.mouseY = y - } - }, - asyncLoad: function(url, onload, onerror, noRunDep) { - var dep = !noRunDep ? getUniqueRunDependency("al " + url) : ""; - readAsync(url, function(arrayBuffer) { - assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); - onload(new Uint8Array(arrayBuffer)); - if (dep) removeRunDependency(dep) - }, function(event) { - if (onerror) { - onerror() - } else { - throw 'Loading data file "' + url + '" failed.' - } - }); - if (dep) addRunDependency(dep) - }, - resizeListeners: [], - updateResizeListeners: function() { - var canvas = Module["canvas"]; - Browser.resizeListeners.forEach(function(listener) { - listener(canvas.width, canvas.height) - }) - }, - setCanvasSize: function(width, height, noUpdates) { - var canvas = Module["canvas"]; - Browser.updateCanvasDimensions(canvas, width, height); - if (!noUpdates) Browser.updateResizeListeners() - }, - windowedWidth: 0, - windowedHeight: 0, - setFullscreenCanvasSize: function() { - if (typeof SDL != "undefined") { - var flags = HEAPU32[SDL.screen >> 2]; - flags = flags | 8388608; - HEAP32[SDL.screen >> 2] = flags - } - Browser.updateCanvasDimensions(Module["canvas"]); - Browser.updateResizeListeners() - }, - setWindowedCanvasSize: function() { - if (typeof SDL != "undefined") { - var flags = HEAPU32[SDL.screen >> 2]; - flags = flags & ~8388608; - HEAP32[SDL.screen >> 2] = flags - } - Browser.updateCanvasDimensions(Module["canvas"]); - Browser.updateResizeListeners() - }, - updateCanvasDimensions: function(canvas, wNative, hNative) { - if (wNative && hNative) { - canvas.widthNative = wNative; - canvas.heightNative = hNative - } else { - wNative = canvas.widthNative; - hNative = canvas.heightNative - } - var w = wNative; - var h = hNative; - if (Module["forcedAspectRatio"] && Module["forcedAspectRatio"] > 0) { - if (w / h < Module["forcedAspectRatio"]) { - w = Math.round(h * Module["forcedAspectRatio"]) - } else { - h = Math.round(w / Module["forcedAspectRatio"]) - } - } - if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvas.parentNode && typeof screen != "undefined") { - var factor = Math.min(screen.width / w, screen.height / h); - w = Math.round(w * factor); - h = Math.round(h * factor) - } - if (Browser.resizeCanvas) { - if (canvas.width != w) canvas.width = w; - if (canvas.height != h) canvas.height = h; - if (typeof canvas.style != "undefined") { - canvas.style.removeProperty("width"); - canvas.style.removeProperty("height") - } - } else { - if (canvas.width != wNative) canvas.width = wNative; - if (canvas.height != hNative) canvas.height = hNative; - if (typeof canvas.style != "undefined") { - if (w != wNative || h != hNative) { - canvas.style.setProperty("width", w + "px", "important"); - canvas.style.setProperty("height", h + "px", "important") - } else { - canvas.style.removeProperty("width"); - canvas.style.removeProperty("height") - } - } - } - }, - wgetRequests: {}, - nextWgetRequestHandle: 0, - getNextWgetRequestHandle: function() { - var handle = Browser.nextWgetRequestHandle; - Browser.nextWgetRequestHandle++; - return handle - } -}; -var EGL = { - errorCode: 12288, - defaultDisplayInitialized: false, - currentContext: 0, - currentReadSurface: 0, - currentDrawSurface: 0, - contextAttributes: { - alpha: false, - depth: false, - stencil: false, - antialias: false - }, - stringCache: {}, - setErrorCode: function(code) { - EGL.errorCode = code - }, - chooseConfig: function(display, attribList, config, config_size, numConfigs) { - if (display != 62e3) { - EGL.setErrorCode(12296); - return 0 - } - if (attribList) { - for (;;) { - var param = HEAP32[attribList >> 2]; - if (param == 12321) { - var alphaSize = HEAP32[attribList + 4 >> 2]; - EGL.contextAttributes.alpha = alphaSize > 0 - } else if (param == 12325) { - var depthSize = HEAP32[attribList + 4 >> 2]; - EGL.contextAttributes.depth = depthSize > 0 - } else if (param == 12326) { - var stencilSize = HEAP32[attribList + 4 >> 2]; - EGL.contextAttributes.stencil = stencilSize > 0 - } else if (param == 12337) { - var samples = HEAP32[attribList + 4 >> 2]; - EGL.contextAttributes.antialias = samples > 0 - } else if (param == 12338) { - var samples = HEAP32[attribList + 4 >> 2]; - EGL.contextAttributes.antialias = samples == 1 - } else if (param == 12544) { - var requestedPriority = HEAP32[attribList + 4 >> 2]; - EGL.contextAttributes.lowLatency = requestedPriority != 12547 - } else if (param == 12344) { - break - } - attribList += 8 - } - } - if ((!config || !config_size) && !numConfigs) { - EGL.setErrorCode(12300); - return 0 - } - if (numConfigs) { - HEAP32[numConfigs >> 2] = 1 - } - if (config && config_size > 0) { - HEAP32[config >> 2] = 62002 - } - EGL.setErrorCode(12288); - return 1 - } -}; - -function _eglGetProcAddress(name_) { - return _emscripten_GetProcAddress(name_) -} -var JSEvents = { - keyEvent: 0, - mouseEvent: 0, - wheelEvent: 0, - uiEvent: 0, - focusEvent: 0, - deviceOrientationEvent: 0, - deviceMotionEvent: 0, - fullscreenChangeEvent: 0, - pointerlockChangeEvent: 0, - visibilityChangeEvent: 0, - touchEvent: 0, - previousFullscreenElement: null, - previousScreenX: null, - previousScreenY: null, - removeEventListenersRegistered: false, - removeAllEventListeners: function() { - for (var i = JSEvents.eventHandlers.length - 1; i >= 0; --i) { - JSEvents._removeHandler(i) - } - JSEvents.eventHandlers = []; - JSEvents.deferredCalls = [] - }, - registerRemoveEventListeners: function() { - if (!JSEvents.removeEventListenersRegistered) { - __ATEXIT__.push(JSEvents.removeAllEventListeners); - JSEvents.removeEventListenersRegistered = true - } - }, - deferredCalls: [], - deferCall: function(targetFunction, precedence, argsList) { - function arraysHaveEqualContent(arrA, arrB) { - if (arrA.length != arrB.length) return false; - for (var i in arrA) { - if (arrA[i] != arrB[i]) return false - } - return true - } - for (var i in JSEvents.deferredCalls) { - var call = JSEvents.deferredCalls[i]; - if (call.targetFunction == targetFunction && arraysHaveEqualContent(call.argsList, argsList)) { - return - } - } - JSEvents.deferredCalls.push({ - targetFunction: targetFunction, - precedence: precedence, - argsList: argsList - }); - JSEvents.deferredCalls.sort(function(x, y) { - return x.precedence < y.precedence - }) - }, - 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() { - return JSEvents.inEventHandler && JSEvents.currentEventHandler.allowsDeferredCalls - }, - runDeferredCalls: function() { - if (!JSEvents.canPerformEventHandlerRequests()) { - return - } - for (var i = 0; i < JSEvents.deferredCalls.length; ++i) { - var call = JSEvents.deferredCalls[i]; - JSEvents.deferredCalls.splice(i, 1); - --i; - call.targetFunction.apply(null, call.argsList) - } - }, - inEventHandler: 0, - currentEventHandler: null, - 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) { - var h = JSEvents.eventHandlers[i]; - h.target.removeEventListener(h.eventTypeString, h.eventListenerFunc, h.useCapture); - JSEvents.eventHandlers.splice(i, 1) - }, - registerOrRemoveHandler: function(eventHandler) { - var jsEventHandler = function jsEventHandler(event) { - ++JSEvents.inEventHandler; - JSEvents.currentEventHandler = eventHandler; - JSEvents.runDeferredCalls(); - eventHandler.handlerFunc(event); - JSEvents.runDeferredCalls(); - --JSEvents.inEventHandler - }; - if (eventHandler.callbackfunc) { - eventHandler.eventListenerFunc = jsEventHandler; - eventHandler.target.addEventListener(eventHandler.eventTypeString, jsEventHandler, eventHandler.useCapture); - JSEvents.eventHandlers.push(eventHandler); - JSEvents.registerRemoveEventListeners() - } else { - for (var i = 0; i < JSEvents.eventHandlers.length; ++i) { - if (JSEvents.eventHandlers[i].target == eventHandler.target && JSEvents.eventHandlers[i].eventTypeString == eventHandler.eventTypeString) { - JSEvents._removeHandler(i--) - } - } - } - }, - getNodeNameForTarget: function(target) { - if (!target) return ""; - if (target == window) return "#window"; - if (target == screen) return "#screen"; - return target && target.nodeName ? target.nodeName : "" - }, - fullscreenEnabled: function() { - return document.fullscreenEnabled || document.webkitFullscreenEnabled - } -}; - -function __requestPointerLock(target) { - if (target.requestPointerLock) { - target.requestPointerLock() - } else if (target.msRequestPointerLock) { - target.msRequestPointerLock() - } else { - if (document.body.requestPointerLock || document.body.msRequestPointerLock) { - return -3 - } else { - return -1 - } - } - return 0 -} - -function _emscripten_exit_pointerlock() { - JSEvents.removeDeferredCalls(__requestPointerLock); - if (document.exitPointerLock) { - document.exitPointerLock() - } else if (document.msExitPointerLock) { - document.msExitPointerLock() - } else { - return -1 - } - return 0 -} - -function __maybeCStringToJsString(cString) { - return cString === cString + 0 ? UTF8ToString(cString) : cString -} -var __specialEventTargets = [0, typeof document !== "undefined" ? document : 0, typeof window !== "undefined" ? window : 0]; - -function __findEventTarget(target) { - var domElement = __specialEventTargets[target] || (typeof document !== "undefined" ? document.querySelector(__maybeCStringToJsString(target)) : undefined); - return domElement -} - -function __getBoundingClientRect(e) { - return __specialEventTargets.indexOf(e) < 0 ? e.getBoundingClientRect() : { - "left": 0, - "top": 0 - } -} - -function _emscripten_get_element_css_size(target, width, height) { - target = __findEventTarget(target); - if (!target) return -4; - var rect = __getBoundingClientRect(target); - HEAPF64[width >> 3] = rect.width; - HEAPF64[height >> 3] = rect.height; - return 0 -} - -function __fillGamepadEventData(eventStruct, e) { - HEAPF64[eventStruct >> 3] = e.timestamp; - for (var i = 0; i < e.axes.length; ++i) { - HEAPF64[eventStruct + i * 8 + 16 >> 3] = e.axes[i] - } - for (var i = 0; i < e.buttons.length; ++i) { - if (typeof e.buttons[i] === "object") { - HEAPF64[eventStruct + i * 8 + 528 >> 3] = e.buttons[i].value - } else { - HEAPF64[eventStruct + i * 8 + 528 >> 3] = e.buttons[i] - } - } - for (var i = 0; i < e.buttons.length; ++i) { - if (typeof e.buttons[i] === "object") { - HEAP32[eventStruct + i * 4 + 1040 >> 2] = e.buttons[i].pressed - } else { - HEAP32[eventStruct + i * 4 + 1040 >> 2] = e.buttons[i] == 1 - } - } - HEAP32[eventStruct + 1296 >> 2] = e.connected; - HEAP32[eventStruct + 1300 >> 2] = e.index; - HEAP32[eventStruct + 8 >> 2] = e.axes.length; - HEAP32[eventStruct + 12 >> 2] = e.buttons.length; - stringToUTF8(e.id, eventStruct + 1304, 64); - stringToUTF8(e.mapping, eventStruct + 1368, 64) -} - -function _emscripten_get_gamepad_status(index, gamepadState) { - if (index < 0 || index >= JSEvents.lastGamepadState.length) return -5; - if (!JSEvents.lastGamepadState[index]) return -7; - __fillGamepadEventData(gamepadState, JSEvents.lastGamepadState[index]); - return 0 -} - -function _emscripten_get_heap_size() { - return HEAPU8.length -} - -function _emscripten_get_num_gamepads() { - return JSEvents.lastGamepadState.length -} - -function __fillPointerlockChangeEventData(eventStruct) { - var pointerLockElement = document.pointerLockElement || document.mozPointerLockElement || document.webkitPointerLockElement || document.msPointerLockElement; - var isPointerlocked = !!pointerLockElement; - HEAP32[eventStruct >> 2] = isPointerlocked; - var nodeName = JSEvents.getNodeNameForTarget(pointerLockElement); - var id = pointerLockElement && pointerLockElement.id ? pointerLockElement.id : ""; - stringToUTF8(nodeName, eventStruct + 4, 128); - stringToUTF8(id, eventStruct + 132, 128) -} - -function _emscripten_get_pointerlock_status(pointerlockStatus) { - if (pointerlockStatus) __fillPointerlockChangeEventData(pointerlockStatus); - if (!document.body || !document.body.requestPointerLock && !document.body.mozRequestPointerLock && !document.body.webkitRequestPointerLock && !document.body.msRequestPointerLock) { - return -1 - } - return 0 -} - -function __webgl_acquireInstancedArraysExtension(ctx) { - var ext = ctx.getExtension("ANGLE_instanced_arrays"); - if (ext) { - ctx["vertexAttribDivisor"] = function(index, divisor) { - ext["vertexAttribDivisorANGLE"](index, divisor) - }; - ctx["drawArraysInstanced"] = function(mode, first, count, primcount) { - ext["drawArraysInstancedANGLE"](mode, first, count, primcount) - }; - ctx["drawElementsInstanced"] = function(mode, count, type, indices, primcount) { - ext["drawElementsInstancedANGLE"](mode, count, type, indices, primcount) - } - } -} - -function __webgl_acquireVertexArrayObjectExtension(ctx) { - var ext = ctx.getExtension("OES_vertex_array_object"); - if (ext) { - ctx["createVertexArray"] = function() { - return ext["createVertexArrayOES"]() - }; - ctx["deleteVertexArray"] = function(vao) { - ext["deleteVertexArrayOES"](vao) - }; - ctx["bindVertexArray"] = function(vao) { - ext["bindVertexArrayOES"](vao) - }; - ctx["isVertexArray"] = function(vao) { - return ext["isVertexArrayOES"](vao) - } - } -} - -function __webgl_acquireDrawBuffersExtension(ctx) { - var ext = ctx.getExtension("WEBGL_draw_buffers"); - if (ext) { - ctx["drawBuffers"] = function(n, bufs) { - ext["drawBuffersWEBGL"](n, bufs) - } - } -} -var GL = { - counter: 1, - lastError: 0, - buffers: [], - mappedBuffers: {}, - programs: [], - framebuffers: [], - renderbuffers: [], - textures: [], - uniforms: [], - shaders: [], - vaos: [], - contexts: [], - currentContext: null, - offscreenCanvases: {}, - timerQueriesEXT: [], - programInfos: {}, - stringCache: {}, - unpackAlignment: 4, - init: function() { - var miniTempFloatBuffer = new Float32Array(GL.MINI_TEMP_BUFFER_SIZE); - for (var i = 0; i < GL.MINI_TEMP_BUFFER_SIZE; i++) { - GL.miniTempBufferFloatViews[i] = miniTempFloatBuffer.subarray(0, i + 1) - } - var miniTempIntBuffer = new Int32Array(GL.MINI_TEMP_BUFFER_SIZE); - for (var i = 0; i < GL.MINI_TEMP_BUFFER_SIZE; i++) { - GL.miniTempBufferIntViews[i] = miniTempIntBuffer.subarray(0, i + 1) - } - }, - recordError: function recordError(errorCode) { - if (!GL.lastError) { - GL.lastError = errorCode - } - }, - getNewId: function(table) { - var ret = GL.counter++; - for (var i = table.length; i < ret; i++) { - table[i] = null - } - return ret - }, - MINI_TEMP_BUFFER_SIZE: 256, - miniTempBufferFloatViews: [0], - miniTempBufferIntViews: [0], - 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 - }, - createContext: function(canvas, webGLContextAttributes) { - var ctx = canvas.getContext("webgl", webGLContextAttributes); - if (!ctx) return 0; - var handle = GL.registerContext(ctx, webGLContextAttributes); - return handle - }, - registerContext: function(ctx, webGLContextAttributes) { - var handle = GL.getNewId(GL.contexts); - var context = { - handle: handle, - attributes: webGLContextAttributes, - version: webGLContextAttributes.majorVersion, - GLctx: ctx - }; - if (ctx.canvas) ctx.canvas.GLctxObject = context; - GL.contexts[handle] = context; - if (typeof webGLContextAttributes.enableExtensionsByDefault === "undefined" || webGLContextAttributes.enableExtensionsByDefault) { - GL.initExtensions(context) - } - return handle - }, - makeContextCurrent: function(contextHandle) { - GL.currentContext = GL.contexts[contextHandle]; - Module.ctx = GLctx = GL.currentContext && GL.currentContext.GLctx; - return !(contextHandle && !GLctx) - }, - getContext: function(contextHandle) { - return GL.contexts[contextHandle] - }, - deleteContext: function(contextHandle) { - if (GL.currentContext === GL.contexts[contextHandle]) GL.currentContext = null; - if (typeof JSEvents === "object") JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas); - if (GL.contexts[contextHandle] && GL.contexts[contextHandle].GLctx.canvas) GL.contexts[contextHandle].GLctx.canvas.GLctxObject = undefined; - GL.contexts[contextHandle] = null - }, - initExtensions: function(context) { - if (!context) context = GL.currentContext; - if (context.initExtensionsDone) return; - context.initExtensionsDone = true; - var GLctx = context.GLctx; - if (context.version < 2) { - __webgl_acquireInstancedArraysExtension(GLctx); - __webgl_acquireVertexArrayObjectExtension(GLctx); - __webgl_acquireDrawBuffersExtension(GLctx) - } - GLctx.disjointTimerQueryExt = GLctx.getExtension("EXT_disjoint_timer_query"); - var automaticallyEnabledExtensions = ["OES_texture_float", "OES_texture_half_float", "OES_standard_derivatives", "OES_vertex_array_object", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture", "OES_element_index_uint", "EXT_texture_filter_anisotropic", "EXT_frag_depth", "WEBGL_draw_buffers", "ANGLE_instanced_arrays", "OES_texture_float_linear", "OES_texture_half_float_linear", "EXT_blend_minmax", "EXT_shader_texture_lod", "EXT_texture_norm16", "WEBGL_compressed_texture_pvrtc", "EXT_color_buffer_half_float", "WEBGL_color_buffer_float", "EXT_sRGB", "WEBGL_compressed_texture_etc1", "EXT_disjoint_timer_query", "WEBGL_compressed_texture_etc", "WEBGL_compressed_texture_astc", "EXT_color_buffer_float", "WEBGL_compressed_texture_s3tc_srgb", "EXT_disjoint_timer_query_webgl2", "WEBKIT_WEBGL_compressed_texture_pvrtc"]; - var exts = GLctx.getSupportedExtensions() || []; - exts.forEach(function(ext) { - if (automaticallyEnabledExtensions.indexOf(ext) != -1) { - GLctx.getExtension(ext) - } - }) - }, - populateUniformTable: function(program) { - var p = GL.programs[program]; - var ptable = GL.programInfos[program] = { - uniforms: {}, - maxUniformLength: 0, - maxAttributeLength: -1, - maxUniformBlockNameLength: -1 - }; - var utable = ptable.uniforms; - var numUniforms = GLctx.getProgramParameter(p, 35718); - for (var i = 0; i < numUniforms; ++i) { - var u = GLctx.getActiveUniform(p, i); - var name = u.name; - ptable.maxUniformLength = Math.max(ptable.maxUniformLength, name.length + 1); - if (name.slice(-1) == "]") { - name = name.slice(0, name.lastIndexOf("[")) - } - var loc = GLctx.getUniformLocation(p, name); - if (loc) { - var id = GL.getNewId(GL.uniforms); - utable[name] = [u.size, id]; - GL.uniforms[id] = loc; - for (var j = 1; j < u.size; ++j) { - var n = name + "[" + j + "]"; - loc = GLctx.getUniformLocation(p, n); - id = GL.getNewId(GL.uniforms); - GL.uniforms[id] = loc - } - } - } - } -}; - -function _emscripten_glActiveTexture(x0) { - GLctx["activeTexture"](x0) -} - -function _emscripten_glAttachShader(program, shader) { - GLctx.attachShader(GL.programs[program], GL.shaders[shader]) -} - -function _emscripten_glBeginQueryEXT(target, id) { - GLctx.disjointTimerQueryExt["beginQueryEXT"](target, GL.timerQueriesEXT[id]) -} - -function _emscripten_glBindAttribLocation(program, index, name) { - GLctx.bindAttribLocation(GL.programs[program], index, UTF8ToString(name)) -} - -function _emscripten_glBindBuffer(target, buffer) { - GLctx.bindBuffer(target, GL.buffers[buffer]) -} - -function _emscripten_glBindFramebuffer(target, framebuffer) { - GLctx.bindFramebuffer(target, GL.framebuffers[framebuffer]) -} - -function _emscripten_glBindRenderbuffer(target, renderbuffer) { - GLctx.bindRenderbuffer(target, GL.renderbuffers[renderbuffer]) -} - -function _emscripten_glBindTexture(target, texture) { - GLctx.bindTexture(target, GL.textures[texture]) -} - -function _emscripten_glBindVertexArrayOES(vao) { - GLctx["bindVertexArray"](GL.vaos[vao]) -} - -function _emscripten_glBlendColor(x0, x1, x2, x3) { - GLctx["blendColor"](x0, x1, x2, x3) -} - -function _emscripten_glBlendEquation(x0) { - GLctx["blendEquation"](x0) -} - -function _emscripten_glBlendEquationSeparate(x0, x1) { - GLctx["blendEquationSeparate"](x0, x1) -} - -function _emscripten_glBlendFunc(x0, x1) { - GLctx["blendFunc"](x0, x1) -} - -function _emscripten_glBlendFuncSeparate(x0, x1, x2, x3) { - GLctx["blendFuncSeparate"](x0, x1, x2, x3) -} - -function _emscripten_glBufferData(target, size, data, usage) { - GLctx.bufferData(target, data ? HEAPU8.subarray(data, data + size) : size, usage) -} - -function _emscripten_glBufferSubData(target, offset, size, data) { - GLctx.bufferSubData(target, offset, HEAPU8.subarray(data, data + size)) -} - -function _emscripten_glCheckFramebufferStatus(x0) { - return GLctx["checkFramebufferStatus"](x0) -} - -function _emscripten_glClear(x0) { - GLctx["clear"](x0) -} - -function _emscripten_glClearColor(x0, x1, x2, x3) { - GLctx["clearColor"](x0, x1, x2, x3) -} - -function _emscripten_glClearDepthf(x0) { - GLctx["clearDepth"](x0) -} - -function _emscripten_glClearStencil(x0) { - GLctx["clearStencil"](x0) -} - -function _emscripten_glColorMask(red, green, blue, alpha) { - GLctx.colorMask(!!red, !!green, !!blue, !!alpha) -} - -function _emscripten_glCompileShader(shader) { - GLctx.compileShader(GL.shaders[shader]) -} - -function _emscripten_glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data) { - GLctx["compressedTexImage2D"](target, level, internalFormat, width, height, border, data ? HEAPU8.subarray(data, data + imageSize) : null) -} - -function _emscripten_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data) { - GLctx["compressedTexSubImage2D"](target, level, xoffset, yoffset, width, height, format, data ? HEAPU8.subarray(data, data + imageSize) : null) -} - -function _emscripten_glCopyTexImage2D(x0, x1, x2, x3, x4, x5, x6, x7) { - GLctx["copyTexImage2D"](x0, x1, x2, x3, x4, x5, x6, x7) -} - -function _emscripten_glCopyTexSubImage2D(x0, x1, x2, x3, x4, x5, x6, x7) { - GLctx["copyTexSubImage2D"](x0, x1, x2, x3, x4, x5, x6, x7) -} - -function _emscripten_glCreateProgram() { - var id = GL.getNewId(GL.programs); - var program = GLctx.createProgram(); - program.name = id; - GL.programs[id] = program; - return id -} - -function _emscripten_glCreateShader(shaderType) { - var id = GL.getNewId(GL.shaders); - GL.shaders[id] = GLctx.createShader(shaderType); - return id -} - -function _emscripten_glCullFace(x0) { - GLctx["cullFace"](x0) -} - -function _emscripten_glDeleteBuffers(n, buffers) { - for (var i = 0; i < n; i++) { - var id = HEAP32[buffers + i * 4 >> 2]; - var buffer = GL.buffers[id]; - if (!buffer) continue; - GLctx.deleteBuffer(buffer); - buffer.name = 0; - GL.buffers[id] = null; - if (id == GL.currArrayBuffer) GL.currArrayBuffer = 0; - if (id == GL.currElementArrayBuffer) GL.currElementArrayBuffer = 0 - } -} - -function _emscripten_glDeleteFramebuffers(n, framebuffers) { - for (var i = 0; i < n; ++i) { - var id = HEAP32[framebuffers + i * 4 >> 2]; - var framebuffer = GL.framebuffers[id]; - if (!framebuffer) continue; - GLctx.deleteFramebuffer(framebuffer); - framebuffer.name = 0; - GL.framebuffers[id] = null - } -} - -function _emscripten_glDeleteProgram(id) { - if (!id) return; - var program = GL.programs[id]; - if (!program) { - GL.recordError(1281); - return - } - GLctx.deleteProgram(program); - program.name = 0; - GL.programs[id] = null; - GL.programInfos[id] = null -} - -function _emscripten_glDeleteQueriesEXT(n, ids) { - for (var i = 0; i < n; i++) { - var id = HEAP32[ids + i * 4 >> 2]; - var query = GL.timerQueriesEXT[id]; - if (!query) continue; - GLctx.disjointTimerQueryExt["deleteQueryEXT"](query); - GL.timerQueriesEXT[id] = null - } -} - -function _emscripten_glDeleteRenderbuffers(n, renderbuffers) { - for (var i = 0; i < n; i++) { - var id = HEAP32[renderbuffers + i * 4 >> 2]; - var renderbuffer = GL.renderbuffers[id]; - if (!renderbuffer) continue; - GLctx.deleteRenderbuffer(renderbuffer); - renderbuffer.name = 0; - GL.renderbuffers[id] = null - } -} - -function _emscripten_glDeleteShader(id) { - if (!id) return; - var shader = GL.shaders[id]; - if (!shader) { - GL.recordError(1281); - return - } - GLctx.deleteShader(shader); - GL.shaders[id] = null -} - -function _emscripten_glDeleteTextures(n, textures) { - for (var i = 0; i < n; i++) { - var id = HEAP32[textures + i * 4 >> 2]; - var texture = GL.textures[id]; - if (!texture) continue; - GLctx.deleteTexture(texture); - texture.name = 0; - GL.textures[id] = null - } -} - -function _emscripten_glDeleteVertexArraysOES(n, vaos) { - for (var i = 0; i < n; i++) { - var id = HEAP32[vaos + i * 4 >> 2]; - GLctx["deleteVertexArray"](GL.vaos[id]); - GL.vaos[id] = null - } -} - -function _emscripten_glDepthFunc(x0) { - GLctx["depthFunc"](x0) -} - -function _emscripten_glDepthMask(flag) { - GLctx.depthMask(!!flag) -} - -function _emscripten_glDepthRangef(x0, x1) { - GLctx["depthRange"](x0, x1) -} - -function _emscripten_glDetachShader(program, shader) { - GLctx.detachShader(GL.programs[program], GL.shaders[shader]) -} - -function _emscripten_glDisable(x0) { - GLctx["disable"](x0) -} - -function _emscripten_glDisableVertexAttribArray(index) { - GLctx.disableVertexAttribArray(index) -} - -function _emscripten_glDrawArrays(mode, first, count) { - GLctx.drawArrays(mode, first, count) -} - -function _emscripten_glDrawArraysInstancedANGLE(mode, first, count, primcount) { - GLctx["drawArraysInstanced"](mode, first, count, primcount) -} -var __tempFixedLengthArray = []; - -function _emscripten_glDrawBuffersWEBGL(n, bufs) { - var bufArray = __tempFixedLengthArray[n]; - for (var i = 0; i < n; i++) { - bufArray[i] = HEAP32[bufs + i * 4 >> 2] - } - GLctx["drawBuffers"](bufArray) -} - -function _emscripten_glDrawElements(mode, count, type, indices) { - GLctx.drawElements(mode, count, type, indices) -} - -function _emscripten_glDrawElementsInstancedANGLE(mode, count, type, indices, primcount) { - GLctx["drawElementsInstanced"](mode, count, type, indices, primcount) -} - -function _emscripten_glEnable(x0) { - GLctx["enable"](x0) -} - -function _emscripten_glEnableVertexAttribArray(index) { - GLctx.enableVertexAttribArray(index) -} - -function _emscripten_glEndQueryEXT(target) { - GLctx.disjointTimerQueryExt["endQueryEXT"](target) -} - -function _emscripten_glFinish() { - GLctx["finish"]() -} - -function _emscripten_glFlush() { - GLctx["flush"]() -} - -function _emscripten_glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) { - GLctx.framebufferRenderbuffer(target, attachment, renderbuffertarget, GL.renderbuffers[renderbuffer]) -} - -function _emscripten_glFramebufferTexture2D(target, attachment, textarget, texture, level) { - GLctx.framebufferTexture2D(target, attachment, textarget, GL.textures[texture], level) -} - -function _emscripten_glFrontFace(x0) { - GLctx["frontFace"](x0) -} - -function __glGenObject(n, buffers, createFunction, objectTable) { - for (var i = 0; i < n; i++) { - var buffer = GLctx[createFunction](); - var id = buffer && GL.getNewId(objectTable); - if (buffer) { - buffer.name = id; - objectTable[id] = buffer - } else { - GL.recordError(1282) - } - HEAP32[buffers + i * 4 >> 2] = id - } -} - -function _emscripten_glGenBuffers(n, buffers) { - __glGenObject(n, buffers, "createBuffer", GL.buffers) -} - -function _emscripten_glGenFramebuffers(n, ids) { - __glGenObject(n, ids, "createFramebuffer", GL.framebuffers) -} - -function _emscripten_glGenQueriesEXT(n, ids) { - for (var i = 0; i < n; i++) { - var query = GLctx.disjointTimerQueryExt["createQueryEXT"](); - if (!query) { - GL.recordError(1282); - while (i < n) HEAP32[ids + i++ * 4 >> 2] = 0; - return - } - var id = GL.getNewId(GL.timerQueriesEXT); - query.name = id; - GL.timerQueriesEXT[id] = query; - HEAP32[ids + i * 4 >> 2] = id - } -} - -function _emscripten_glGenRenderbuffers(n, renderbuffers) { - __glGenObject(n, renderbuffers, "createRenderbuffer", GL.renderbuffers) -} - -function _emscripten_glGenTextures(n, textures) { - __glGenObject(n, textures, "createTexture", GL.textures) -} - -function _emscripten_glGenVertexArraysOES(n, arrays) { - __glGenObject(n, arrays, "createVertexArray", GL.vaos) -} - -function _emscripten_glGenerateMipmap(x0) { - GLctx["generateMipmap"](x0) -} - -function _emscripten_glGetActiveAttrib(program, index, bufSize, length, size, type, name) { - program = GL.programs[program]; - var info = GLctx.getActiveAttrib(program, index); - if (!info) return; - var numBytesWrittenExclNull = bufSize > 0 && name ? stringToUTF8(info.name, name, bufSize) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull; - if (size) HEAP32[size >> 2] = info.size; - if (type) HEAP32[type >> 2] = info.type -} - -function _emscripten_glGetActiveUniform(program, index, bufSize, length, size, type, name) { - program = GL.programs[program]; - var info = GLctx.getActiveUniform(program, index); - if (!info) return; - var numBytesWrittenExclNull = bufSize > 0 && name ? stringToUTF8(info.name, name, bufSize) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull; - if (size) HEAP32[size >> 2] = info.size; - if (type) HEAP32[type >> 2] = info.type -} - -function _emscripten_glGetAttachedShaders(program, maxCount, count, shaders) { - var result = GLctx.getAttachedShaders(GL.programs[program]); - var len = result.length; - if (len > maxCount) { - len = maxCount - } - HEAP32[count >> 2] = len; - for (var i = 0; i < len; ++i) { - var id = GL.shaders.indexOf(result[i]); - HEAP32[shaders + i * 4 >> 2] = id - } -} - -function _emscripten_glGetAttribLocation(program, name) { - return GLctx.getAttribLocation(GL.programs[program], UTF8ToString(name)) -} - -function writeI53ToI64(ptr, num) { - HEAPU32[ptr >> 2] = num; - HEAPU32[ptr + 4 >> 2] = (num - HEAPU32[ptr >> 2]) / 4294967296 -} - -function emscriptenWebGLGet(name_, p, type) { - if (!p) { - GL.recordError(1281); - return - } - var ret = undefined; - switch (name_) { - case 36346: - ret = 1; - break; - case 36344: - if (type != 0 && type != 1) { - GL.recordError(1280) - } - return; - case 36345: - ret = 0; - break; - case 34466: - var formats = GLctx.getParameter(34467); - ret = formats ? formats.length : 0; - break - } - if (ret === undefined) { - var result = GLctx.getParameter(name_); - switch (typeof result) { - case "number": - ret = result; - break; - case "boolean": - ret = result ? 1 : 0; - break; - case "string": - GL.recordError(1280); - return; - case "object": - if (result === null) { - switch (name_) { - case 34964: - case 35725: - case 34965: - case 36006: - case 36007: - case 32873: - case 34229: - case 34068: { - ret = 0; - break - } - default: { - GL.recordError(1280); - return - } - } - } else if (result instanceof Float32Array || result instanceof Uint32Array || result instanceof Int32Array || result instanceof Array) { - for (var i = 0; i < result.length; ++i) { - switch (type) { - case 0: - HEAP32[p + i * 4 >> 2] = result[i]; - break; - case 2: - HEAPF32[p + i * 4 >> 2] = result[i]; - break; - case 4: - HEAP8[p + i >> 0] = result[i] ? 1 : 0; - break - } - } - return - } else { - try { - ret = result.name | 0 - } catch (e) { - GL.recordError(1280); - err("GL_INVALID_ENUM in glGet" + type + "v: Unknown object returned from WebGL getParameter(" + name_ + ")! (error: " + e + ")"); - return - } - } - break; - default: - GL.recordError(1280); - err("GL_INVALID_ENUM in glGet" + type + "v: Native code calling glGet" + type + "v(" + name_ + ") and it returns " + result + " of type " + typeof result + "!"); - return - } - } - switch (type) { - case 1: - writeI53ToI64(p, ret); - break; - case 0: - HEAP32[p >> 2] = ret; - break; - case 2: - HEAPF32[p >> 2] = ret; - break; - case 4: - HEAP8[p >> 0] = ret ? 1 : 0; - break - } -} - -function _emscripten_glGetBooleanv(name_, p) { - emscriptenWebGLGet(name_, p, 4) -} - -function _emscripten_glGetBufferParameteriv(target, value, data) { - if (!data) { - GL.recordError(1281); - return - } - HEAP32[data >> 2] = GLctx.getBufferParameter(target, value) -} - -function _emscripten_glGetError() { - var error = GLctx.getError() || GL.lastError; - GL.lastError = 0; - return error -} - -function _emscripten_glGetFloatv(name_, p) { - emscriptenWebGLGet(name_, p, 2) -} - -function _emscripten_glGetFramebufferAttachmentParameteriv(target, attachment, pname, params) { - var result = GLctx.getFramebufferAttachmentParameter(target, attachment, pname); - if (result instanceof WebGLRenderbuffer || result instanceof WebGLTexture) { - result = result.name | 0 - } - HEAP32[params >> 2] = result -} - -function _emscripten_glGetIntegerv(name_, p) { - emscriptenWebGLGet(name_, p, 0) -} - -function _emscripten_glGetProgramInfoLog(program, maxLength, length, infoLog) { - var log = GLctx.getProgramInfoLog(GL.programs[program]); - if (log === null) log = "(unknown error)"; - var numBytesWrittenExclNull = maxLength > 0 && infoLog ? stringToUTF8(log, infoLog, maxLength) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull -} - -function _emscripten_glGetProgramiv(program, pname, p) { - if (!p) { - GL.recordError(1281); - return - } - if (program >= GL.counter) { - GL.recordError(1281); - return - } - var ptable = GL.programInfos[program]; - if (!ptable) { - GL.recordError(1282); - return - } - if (pname == 35716) { - var log = GLctx.getProgramInfoLog(GL.programs[program]); - if (log === null) log = "(unknown error)"; - HEAP32[p >> 2] = log.length + 1 - } else if (pname == 35719) { - HEAP32[p >> 2] = ptable.maxUniformLength - } else if (pname == 35722) { - if (ptable.maxAttributeLength == -1) { - program = GL.programs[program]; - var numAttribs = GLctx.getProgramParameter(program, 35721); - ptable.maxAttributeLength = 0; - for (var i = 0; i < numAttribs; ++i) { - var activeAttrib = GLctx.getActiveAttrib(program, i); - ptable.maxAttributeLength = Math.max(ptable.maxAttributeLength, activeAttrib.name.length + 1) - } - } - HEAP32[p >> 2] = ptable.maxAttributeLength - } else if (pname == 35381) { - if (ptable.maxUniformBlockNameLength == -1) { - program = GL.programs[program]; - var numBlocks = GLctx.getProgramParameter(program, 35382); - ptable.maxUniformBlockNameLength = 0; - for (var i = 0; i < numBlocks; ++i) { - var activeBlockName = GLctx.getActiveUniformBlockName(program, i); - ptable.maxUniformBlockNameLength = Math.max(ptable.maxUniformBlockNameLength, activeBlockName.length + 1) - } - } - HEAP32[p >> 2] = ptable.maxUniformBlockNameLength - } else { - HEAP32[p >> 2] = GLctx.getProgramParameter(GL.programs[program], pname) - } -} - -function _emscripten_glGetQueryObjecti64vEXT(id, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - var query = GL.timerQueriesEXT[id]; - var param = GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query, pname); - var ret; - if (typeof param == "boolean") { - ret = param ? 1 : 0 - } else { - ret = param - } - writeI53ToI64(params, ret) -} - -function _emscripten_glGetQueryObjectivEXT(id, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - var query = GL.timerQueriesEXT[id]; - var param = GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query, pname); - var ret; - if (typeof param == "boolean") { - ret = param ? 1 : 0 - } else { - ret = param - } - HEAP32[params >> 2] = ret -} - -function _emscripten_glGetQueryObjectui64vEXT(id, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - var query = GL.timerQueriesEXT[id]; - var param = GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query, pname); - var ret; - if (typeof param == "boolean") { - ret = param ? 1 : 0 - } else { - ret = param - } - writeI53ToI64(params, ret) -} - -function _emscripten_glGetQueryObjectuivEXT(id, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - var query = GL.timerQueriesEXT[id]; - var param = GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query, pname); - var ret; - if (typeof param == "boolean") { - ret = param ? 1 : 0 - } else { - ret = param - } - HEAP32[params >> 2] = ret -} - -function _emscripten_glGetQueryivEXT(target, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - HEAP32[params >> 2] = GLctx.disjointTimerQueryExt["getQueryEXT"](target, pname) -} - -function _emscripten_glGetRenderbufferParameteriv(target, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - HEAP32[params >> 2] = GLctx.getRenderbufferParameter(target, pname) -} - -function _emscripten_glGetShaderInfoLog(shader, maxLength, length, infoLog) { - var log = GLctx.getShaderInfoLog(GL.shaders[shader]); - if (log === null) log = "(unknown error)"; - var numBytesWrittenExclNull = maxLength > 0 && infoLog ? stringToUTF8(log, infoLog, maxLength) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull -} - -function _emscripten_glGetShaderPrecisionFormat(shaderType, precisionType, range, precision) { - var result = GLctx.getShaderPrecisionFormat(shaderType, precisionType); - HEAP32[range >> 2] = result.rangeMin; - HEAP32[range + 4 >> 2] = result.rangeMax; - HEAP32[precision >> 2] = result.precision -} - -function _emscripten_glGetShaderSource(shader, bufSize, length, source) { - var result = GLctx.getShaderSource(GL.shaders[shader]); - if (!result) return; - var numBytesWrittenExclNull = bufSize > 0 && source ? stringToUTF8(result, source, bufSize) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull -} - -function _emscripten_glGetShaderiv(shader, pname, p) { - if (!p) { - GL.recordError(1281); - return - } - if (pname == 35716) { - var log = GLctx.getShaderInfoLog(GL.shaders[shader]); - if (log === null) log = "(unknown error)"; - HEAP32[p >> 2] = log.length + 1 - } else if (pname == 35720) { - var source = GLctx.getShaderSource(GL.shaders[shader]); - var sourceLength = source === null || source.length == 0 ? 0 : source.length + 1; - HEAP32[p >> 2] = sourceLength - } else { - HEAP32[p >> 2] = GLctx.getShaderParameter(GL.shaders[shader], pname) - } -} - -function stringToNewUTF8(jsString) { - var length = lengthBytesUTF8(jsString) + 1; - var cString = _malloc(length); - stringToUTF8(jsString, cString, length); - return cString -} - -function _emscripten_glGetString(name_) { - if (GL.stringCache[name_]) return GL.stringCache[name_]; - var ret; - switch (name_) { - case 7939: - var exts = GLctx.getSupportedExtensions() || []; - exts = exts.concat(exts.map(function(e) { - return "GL_" + e - })); - ret = stringToNewUTF8(exts.join(" ")); - break; - case 7936: - case 7937: - case 37445: - case 37446: - var s = GLctx.getParameter(name_); - if (!s) { - GL.recordError(1280) - } - ret = stringToNewUTF8(s); - break; - case 7938: - var glVersion = GLctx.getParameter(7938); - { - glVersion = "OpenGL ES 2.0 (" + glVersion + ")" - } - ret = stringToNewUTF8(glVersion); - break; - case 35724: - var glslVersion = GLctx.getParameter(35724); - var ver_re = /^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/; - var ver_num = glslVersion.match(ver_re); - if (ver_num !== null) { - if (ver_num[1].length == 3) ver_num[1] = ver_num[1] + "0"; - glslVersion = "OpenGL ES GLSL ES " + ver_num[1] + " (" + glslVersion + ")" - } - ret = stringToNewUTF8(glslVersion); - break; - default: - GL.recordError(1280); - return 0 - } - GL.stringCache[name_] = ret; - return ret -} - -function _emscripten_glGetTexParameterfv(target, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - HEAPF32[params >> 2] = GLctx.getTexParameter(target, pname) -} - -function _emscripten_glGetTexParameteriv(target, pname, params) { - if (!params) { - GL.recordError(1281); - return - } - HEAP32[params >> 2] = GLctx.getTexParameter(target, pname) -} - -function jstoi_q(str) { - return parseInt(str) -} - -function _emscripten_glGetUniformLocation(program, name) { - name = UTF8ToString(name); - var arrayIndex = 0; - if (name[name.length - 1] == "]") { - var leftBrace = name.lastIndexOf("["); - arrayIndex = name[leftBrace + 1] != "]" ? jstoi_q(name.slice(leftBrace + 1)) : 0; - name = name.slice(0, leftBrace) - } - var uniformInfo = GL.programInfos[program] && GL.programInfos[program].uniforms[name]; - if (uniformInfo && arrayIndex >= 0 && arrayIndex < uniformInfo[0]) { - return uniformInfo[1] + arrayIndex - } else { - return -1 - } -} - -function emscriptenWebGLGetUniform(program, location, params, type) { - if (!params) { - GL.recordError(1281); - return - } - var data = GLctx.getUniform(GL.programs[program], GL.uniforms[location]); - if (typeof data == "number" || typeof data == "boolean") { - switch (type) { - case 0: - HEAP32[params >> 2] = data; - break; - case 2: - HEAPF32[params >> 2] = data; - break; - default: - throw "internal emscriptenWebGLGetUniform() error, bad type: " + type - } - } else { - for (var i = 0; i < data.length; i++) { - switch (type) { - case 0: - HEAP32[params + i * 4 >> 2] = data[i]; - break; - case 2: - HEAPF32[params + i * 4 >> 2] = data[i]; - break; - default: - throw "internal emscriptenWebGLGetUniform() error, bad type: " + type - } - } - } -} - -function _emscripten_glGetUniformfv(program, location, params) { - emscriptenWebGLGetUniform(program, location, params, 2) -} - -function _emscripten_glGetUniformiv(program, location, params) { - emscriptenWebGLGetUniform(program, location, params, 0) -} - -function _emscripten_glGetVertexAttribPointerv(index, pname, pointer) { - if (!pointer) { - GL.recordError(1281); - return - } - HEAP32[pointer >> 2] = GLctx.getVertexAttribOffset(index, pname) -} - -function emscriptenWebGLGetVertexAttrib(index, pname, params, type) { - if (!params) { - GL.recordError(1281); - return - } - var data = GLctx.getVertexAttrib(index, pname); - if (pname == 34975) { - HEAP32[params >> 2] = data && data["name"] - } else if (typeof data == "number" || typeof data == "boolean") { - switch (type) { - case 0: - HEAP32[params >> 2] = data; - break; - case 2: - HEAPF32[params >> 2] = data; - break; - case 5: - HEAP32[params >> 2] = Math.fround(data); - break; - default: - throw "internal emscriptenWebGLGetVertexAttrib() error, bad type: " + type - } - } else { - for (var i = 0; i < data.length; i++) { - switch (type) { - case 0: - HEAP32[params + i * 4 >> 2] = data[i]; - break; - case 2: - HEAPF32[params + i * 4 >> 2] = data[i]; - break; - case 5: - HEAP32[params + i * 4 >> 2] = Math.fround(data[i]); - break; - default: - throw "internal emscriptenWebGLGetVertexAttrib() error, bad type: " + type - } - } - } -} - -function _emscripten_glGetVertexAttribfv(index, pname, params) { - emscriptenWebGLGetVertexAttrib(index, pname, params, 2) -} - -function _emscripten_glGetVertexAttribiv(index, pname, params) { - emscriptenWebGLGetVertexAttrib(index, pname, params, 5) -} - -function _emscripten_glHint(x0, x1) { - GLctx["hint"](x0, x1) -} - -function _emscripten_glIsBuffer(buffer) { - var b = GL.buffers[buffer]; - if (!b) return 0; - return GLctx.isBuffer(b) -} - -function _emscripten_glIsEnabled(x0) { - return GLctx["isEnabled"](x0) -} - -function _emscripten_glIsFramebuffer(framebuffer) { - var fb = GL.framebuffers[framebuffer]; - if (!fb) return 0; - return GLctx.isFramebuffer(fb) -} - -function _emscripten_glIsProgram(program) { - program = GL.programs[program]; - if (!program) return 0; - return GLctx.isProgram(program) -} - -function _emscripten_glIsQueryEXT(id) { - var query = GL.timerQueriesEXT[id]; - if (!query) return 0; - return GLctx.disjointTimerQueryExt["isQueryEXT"](query) -} - -function _emscripten_glIsRenderbuffer(renderbuffer) { - var rb = GL.renderbuffers[renderbuffer]; - if (!rb) return 0; - return GLctx.isRenderbuffer(rb) -} - -function _emscripten_glIsShader(shader) { - var s = GL.shaders[shader]; - if (!s) return 0; - return GLctx.isShader(s) -} - -function _emscripten_glIsTexture(id) { - var texture = GL.textures[id]; - if (!texture) return 0; - return GLctx.isTexture(texture) -} - -function _emscripten_glIsVertexArrayOES(array) { - var vao = GL.vaos[array]; - if (!vao) return 0; - return GLctx["isVertexArray"](vao) -} - -function _emscripten_glLineWidth(x0) { - GLctx["lineWidth"](x0) -} - -function _emscripten_glLinkProgram(program) { - GLctx.linkProgram(GL.programs[program]); - GL.populateUniformTable(program) -} - -function _emscripten_glPixelStorei(pname, param) { - if (pname == 3317) { - GL.unpackAlignment = param - } - GLctx.pixelStorei(pname, param) -} - -function _emscripten_glPolygonOffset(x0, x1) { - GLctx["polygonOffset"](x0, x1) -} - -function _emscripten_glQueryCounterEXT(id, target) { - GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id], target) -} - -function __computeUnpackAlignedImageSize(width, height, sizePerPixel, alignment) { - function roundedToNextMultipleOf(x, y) { - return x + y - 1 & -y - } - var plainRowSize = width * sizePerPixel; - var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment); - return height * alignedRowSize -} - -function __colorChannelsInGlTextureFormat(format) { - var colorChannels = { - 5: 3, - 6: 4, - 8: 2, - 29502: 3, - 29504: 4 - }; - return colorChannels[format - 6402] || 1 -} - -function __heapObjectForWebGLType(type) { - type -= 5120; - if (type == 1) return HEAPU8; - if (type == 4) return HEAP32; - if (type == 6) return HEAPF32; - if (type == 5 || type == 28922) return HEAPU32; - return HEAPU16 -} - -function __heapAccessShiftForWebGLHeap(heap) { - return 31 - Math.clz32(heap.BYTES_PER_ELEMENT) -} - -function emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) { - var heap = __heapObjectForWebGLType(type); - var shift = __heapAccessShiftForWebGLHeap(heap); - var byteSize = 1 << shift; - var sizePerPixel = __colorChannelsInGlTextureFormat(format) * byteSize; - var bytes = __computeUnpackAlignedImageSize(width, height, sizePerPixel, GL.unpackAlignment); - return heap.subarray(pixels >> shift, pixels + bytes >> shift) -} - -function _emscripten_glReadPixels(x, y, width, height, format, type, pixels) { - var pixelData = emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, format); - if (!pixelData) { - GL.recordError(1280); - return - } - GLctx.readPixels(x, y, width, height, format, type, pixelData) -} - -function _emscripten_glReleaseShaderCompiler() {} - -function _emscripten_glRenderbufferStorage(x0, x1, x2, x3) { - GLctx["renderbufferStorage"](x0, x1, x2, x3) -} - -function _emscripten_glSampleCoverage(value, invert) { - GLctx.sampleCoverage(value, !!invert) -} - -function _emscripten_glScissor(x0, x1, x2, x3) { - GLctx["scissor"](x0, x1, x2, x3) -} - -function _emscripten_glShaderBinary() { - GL.recordError(1280) -} - -function _emscripten_glShaderSource(shader, count, string, length) { - var source = GL.getSource(shader, count, string, length); - GLctx.shaderSource(GL.shaders[shader], source) -} - -function _emscripten_glStencilFunc(x0, x1, x2) { - GLctx["stencilFunc"](x0, x1, x2) -} - -function _emscripten_glStencilFuncSeparate(x0, x1, x2, x3) { - GLctx["stencilFuncSeparate"](x0, x1, x2, x3) -} - -function _emscripten_glStencilMask(x0) { - GLctx["stencilMask"](x0) -} - -function _emscripten_glStencilMaskSeparate(x0, x1) { - GLctx["stencilMaskSeparate"](x0, x1) -} - -function _emscripten_glStencilOp(x0, x1, x2) { - GLctx["stencilOp"](x0, x1, x2) -} - -function _emscripten_glStencilOpSeparate(x0, x1, x2, x3) { - GLctx["stencilOpSeparate"](x0, x1, x2, x3) -} - -function _emscripten_glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels) { - GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels ? emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) : null) -} - -function _emscripten_glTexParameterf(x0, x1, x2) { - GLctx["texParameterf"](x0, x1, x2) -} - -function _emscripten_glTexParameterfv(target, pname, params) { - var param = HEAPF32[params >> 2]; - GLctx.texParameterf(target, pname, param) -} - -function _emscripten_glTexParameteri(x0, x1, x2) { - GLctx["texParameteri"](x0, x1, x2) -} - -function _emscripten_glTexParameteriv(target, pname, params) { - var param = HEAP32[params >> 2]; - GLctx.texParameteri(target, pname, param) -} - -function _emscripten_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels) { - var pixelData = null; - if (pixels) pixelData = emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, 0); - GLctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixelData) -} - -function _emscripten_glUniform1f(location, v0) { - GLctx.uniform1f(GL.uniforms[location], v0) -} - -function _emscripten_glUniform1fv(location, count, value) { - if (count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[count - 1]; - for (var i = 0; i < count; ++i) { - view[i] = HEAPF32[value + 4 * i >> 2] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 4 >> 2) - } - GLctx.uniform1fv(GL.uniforms[location], view) -} - -function _emscripten_glUniform1i(location, v0) { - GLctx.uniform1i(GL.uniforms[location], v0) -} - -function _emscripten_glUniform1iv(location, count, value) { - if (count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferIntViews[count - 1]; - for (var i = 0; i < count; ++i) { - view[i] = HEAP32[value + 4 * i >> 2] - } - } else { - var view = HEAP32.subarray(value >> 2, value + count * 4 >> 2) - } - GLctx.uniform1iv(GL.uniforms[location], view) -} - -function _emscripten_glUniform2f(location, v0, v1) { - GLctx.uniform2f(GL.uniforms[location], v0, v1) -} - -function _emscripten_glUniform2fv(location, count, value) { - if (2 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[2 * count - 1]; - for (var i = 0; i < 2 * count; i += 2) { - view[i] = HEAPF32[value + 4 * i >> 2]; - view[i + 1] = HEAPF32[value + (4 * i + 4) >> 2] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 8 >> 2) - } - GLctx.uniform2fv(GL.uniforms[location], view) -} - -function _emscripten_glUniform2i(location, v0, v1) { - GLctx.uniform2i(GL.uniforms[location], v0, v1) -} - -function _emscripten_glUniform2iv(location, count, value) { - if (2 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferIntViews[2 * count - 1]; - for (var i = 0; i < 2 * count; i += 2) { - view[i] = HEAP32[value + 4 * i >> 2]; - view[i + 1] = HEAP32[value + (4 * i + 4) >> 2] - } - } else { - var view = HEAP32.subarray(value >> 2, value + count * 8 >> 2) - } - GLctx.uniform2iv(GL.uniforms[location], view) -} - -function _emscripten_glUniform3f(location, v0, v1, v2) { - GLctx.uniform3f(GL.uniforms[location], v0, v1, v2) -} - -function _emscripten_glUniform3fv(location, count, value) { - if (3 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[3 * count - 1]; - for (var i = 0; i < 3 * count; i += 3) { - view[i] = HEAPF32[value + 4 * i >> 2]; - view[i + 1] = HEAPF32[value + (4 * i + 4) >> 2]; - view[i + 2] = HEAPF32[value + (4 * i + 8) >> 2] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 12 >> 2) - } - GLctx.uniform3fv(GL.uniforms[location], view) -} - -function _emscripten_glUniform3i(location, v0, v1, v2) { - GLctx.uniform3i(GL.uniforms[location], v0, v1, v2) -} - -function _emscripten_glUniform3iv(location, count, value) { - if (3 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferIntViews[3 * count - 1]; - for (var i = 0; i < 3 * count; i += 3) { - view[i] = HEAP32[value + 4 * i >> 2]; - view[i + 1] = HEAP32[value + (4 * i + 4) >> 2]; - view[i + 2] = HEAP32[value + (4 * i + 8) >> 2] - } - } else { - var view = HEAP32.subarray(value >> 2, value + count * 12 >> 2) - } - GLctx.uniform3iv(GL.uniforms[location], view) -} - -function _emscripten_glUniform4f(location, v0, v1, v2, v3) { - GLctx.uniform4f(GL.uniforms[location], v0, v1, v2, v3) -} - -function _emscripten_glUniform4fv(location, count, value) { - if (4 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[4 * count - 1]; - var heap = HEAPF32; - value >>= 2; - for (var i = 0; i < 4 * count; i += 4) { - var dst = value + i; - view[i] = heap[dst]; - view[i + 1] = heap[dst + 1]; - view[i + 2] = heap[dst + 2]; - view[i + 3] = heap[dst + 3] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 16 >> 2) - } - GLctx.uniform4fv(GL.uniforms[location], view) -} - -function _emscripten_glUniform4i(location, v0, v1, v2, v3) { - GLctx.uniform4i(GL.uniforms[location], v0, v1, v2, v3) -} - -function _emscripten_glUniform4iv(location, count, value) { - if (4 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferIntViews[4 * count - 1]; - for (var i = 0; i < 4 * count; i += 4) { - view[i] = HEAP32[value + 4 * i >> 2]; - view[i + 1] = HEAP32[value + (4 * i + 4) >> 2]; - view[i + 2] = HEAP32[value + (4 * i + 8) >> 2]; - view[i + 3] = HEAP32[value + (4 * i + 12) >> 2] - } - } else { - var view = HEAP32.subarray(value >> 2, value + count * 16 >> 2) - } - GLctx.uniform4iv(GL.uniforms[location], view) -} - -function _emscripten_glUniformMatrix2fv(location, count, transpose, value) { - if (4 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[4 * count - 1]; - for (var i = 0; i < 4 * count; i += 4) { - view[i] = HEAPF32[value + 4 * i >> 2]; - view[i + 1] = HEAPF32[value + (4 * i + 4) >> 2]; - view[i + 2] = HEAPF32[value + (4 * i + 8) >> 2]; - view[i + 3] = HEAPF32[value + (4 * i + 12) >> 2] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 16 >> 2) - } - GLctx.uniformMatrix2fv(GL.uniforms[location], !!transpose, view) -} - -function _emscripten_glUniformMatrix3fv(location, count, transpose, value) { - if (9 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[9 * count - 1]; - for (var i = 0; i < 9 * count; i += 9) { - view[i] = HEAPF32[value + 4 * i >> 2]; - view[i + 1] = HEAPF32[value + (4 * i + 4) >> 2]; - view[i + 2] = HEAPF32[value + (4 * i + 8) >> 2]; - view[i + 3] = HEAPF32[value + (4 * i + 12) >> 2]; - view[i + 4] = HEAPF32[value + (4 * i + 16) >> 2]; - view[i + 5] = HEAPF32[value + (4 * i + 20) >> 2]; - view[i + 6] = HEAPF32[value + (4 * i + 24) >> 2]; - view[i + 7] = HEAPF32[value + (4 * i + 28) >> 2]; - view[i + 8] = HEAPF32[value + (4 * i + 32) >> 2] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 36 >> 2) - } - GLctx.uniformMatrix3fv(GL.uniforms[location], !!transpose, view) -} - -function _emscripten_glUniformMatrix4fv(location, count, transpose, value) { - if (16 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[16 * count - 1]; - var heap = HEAPF32; - value >>= 2; - for (var i = 0; i < 16 * count; i += 16) { - var dst = value + i; - view[i] = heap[dst]; - view[i + 1] = heap[dst + 1]; - view[i + 2] = heap[dst + 2]; - view[i + 3] = heap[dst + 3]; - view[i + 4] = heap[dst + 4]; - view[i + 5] = heap[dst + 5]; - view[i + 6] = heap[dst + 6]; - view[i + 7] = heap[dst + 7]; - view[i + 8] = heap[dst + 8]; - view[i + 9] = heap[dst + 9]; - view[i + 10] = heap[dst + 10]; - view[i + 11] = heap[dst + 11]; - view[i + 12] = heap[dst + 12]; - view[i + 13] = heap[dst + 13]; - view[i + 14] = heap[dst + 14]; - view[i + 15] = heap[dst + 15] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 64 >> 2) - } - GLctx.uniformMatrix4fv(GL.uniforms[location], !!transpose, view) -} - -function _emscripten_glUseProgram(program) { - GLctx.useProgram(GL.programs[program]) -} - -function _emscripten_glValidateProgram(program) { - GLctx.validateProgram(GL.programs[program]) -} - -function _emscripten_glVertexAttrib1f(x0, x1) { - GLctx["vertexAttrib1f"](x0, x1) -} - -function _emscripten_glVertexAttrib1fv(index, v) { - GLctx.vertexAttrib1f(index, HEAPF32[v >> 2]) -} - -function _emscripten_glVertexAttrib2f(x0, x1, x2) { - GLctx["vertexAttrib2f"](x0, x1, x2) -} - -function _emscripten_glVertexAttrib2fv(index, v) { - GLctx.vertexAttrib2f(index, HEAPF32[v >> 2], HEAPF32[v + 4 >> 2]) -} - -function _emscripten_glVertexAttrib3f(x0, x1, x2, x3) { - GLctx["vertexAttrib3f"](x0, x1, x2, x3) -} - -function _emscripten_glVertexAttrib3fv(index, v) { - GLctx.vertexAttrib3f(index, HEAPF32[v >> 2], HEAPF32[v + 4 >> 2], HEAPF32[v + 8 >> 2]) -} - -function _emscripten_glVertexAttrib4f(x0, x1, x2, x3, x4) { - GLctx["vertexAttrib4f"](x0, x1, x2, x3, x4) -} - -function _emscripten_glVertexAttrib4fv(index, v) { - GLctx.vertexAttrib4f(index, HEAPF32[v >> 2], HEAPF32[v + 4 >> 2], HEAPF32[v + 8 >> 2], HEAPF32[v + 12 >> 2]) -} - -function _emscripten_glVertexAttribDivisorANGLE(index, divisor) { - GLctx["vertexAttribDivisor"](index, divisor) -} - -function _emscripten_glVertexAttribPointer(index, size, type, normalized, stride, ptr) { - GLctx.vertexAttribPointer(index, size, type, !!normalized, stride, ptr) -} - -function _emscripten_glViewport(x0, x1, x2, x3) { - GLctx["viewport"](x0, x1, x2, x3) -} - -function _emscripten_request_pointerlock(target, deferUntilInEventHandler) { - target = __findEventTarget(target); - if (!target) return -4; - if (!target.requestPointerLock && !target.msRequestPointerLock) { - return -1 - } - var canPerformRequests = JSEvents.canPerformEventHandlerRequests(); - if (!canPerformRequests) { - if (deferUntilInEventHandler) { - JSEvents.deferCall(__requestPointerLock, 2, [target]); - return 1 - } else { - return -2 - } - } - return __requestPointerLock(target) -} - -function abortOnCannotGrowMemory(requestedSize) { - abort("OOM") -} - -function _emscripten_resize_heap(requestedSize) { - abortOnCannotGrowMemory(requestedSize) -} - -function _emscripten_run_script(ptr) { - eval(UTF8ToString(ptr)) -} - -function _emscripten_sample_gamepad_data() { - return (JSEvents.lastGamepadState = navigator.getGamepads ? navigator.getGamepads() : navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : null) ? 0 : -1 -} - -function __fillMouseEventData(eventStruct, e, target) { - HEAP32[eventStruct >> 2] = e.screenX; - HEAP32[eventStruct + 4 >> 2] = e.screenY; - HEAP32[eventStruct + 8 >> 2] = e.clientX; - HEAP32[eventStruct + 12 >> 2] = e.clientY; - HEAP32[eventStruct + 16 >> 2] = e.ctrlKey; - HEAP32[eventStruct + 20 >> 2] = e.shiftKey; - HEAP32[eventStruct + 24 >> 2] = e.altKey; - HEAP32[eventStruct + 28 >> 2] = e.metaKey; - HEAP16[eventStruct + 32 >> 1] = e.button; - HEAP16[eventStruct + 34 >> 1] = e.buttons; - var movementX = e["movementX"] || e.screenX - JSEvents.previousScreenX; - var movementY = e["movementY"] || e.screenY - JSEvents.previousScreenY; - HEAP32[eventStruct + 36 >> 2] = movementX; - HEAP32[eventStruct + 40 >> 2] = movementY; - var rect = __getBoundingClientRect(target); - HEAP32[eventStruct + 44 >> 2] = e.clientX - rect.left; - HEAP32[eventStruct + 48 >> 2] = e.clientY - rect.top; - if (e.type !== "wheel" && e.type !== "mousewheel") { - JSEvents.previousScreenX = e.screenX; - JSEvents.previousScreenY = e.screenY - } -} - -function __registerMouseEventCallback(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) { - if (!JSEvents.mouseEvent) JSEvents.mouseEvent = _malloc(64); - target = __findEventTarget(target); - var mouseEventHandlerFunc = function(ev) { - var e = ev || event; - __fillMouseEventData(JSEvents.mouseEvent, e, target); - if (dynCall_iiii(callbackfunc, eventTypeId, JSEvents.mouseEvent, userData)) e.preventDefault() - }; - var eventHandler = { - target: target, - allowsDeferredCalls: eventTypeString != "mousemove" && eventTypeString != "mouseenter" && eventTypeString != "mouseleave", - eventTypeString: eventTypeString, - callbackfunc: callbackfunc, - handlerFunc: mouseEventHandlerFunc, - useCapture: useCapture - }; - JSEvents.registerOrRemoveHandler(eventHandler) -} - -function _emscripten_set_click_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - __registerMouseEventCallback(target, userData, useCapture, callbackfunc, 4, "click", targetThread); - return 0 -} - -function __fillFullscreenChangeEventData(eventStruct) { - var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement; - var isFullscreen = !!fullscreenElement; - HEAP32[eventStruct >> 2] = isFullscreen; - HEAP32[eventStruct + 4 >> 2] = JSEvents.fullscreenEnabled(); - var reportedElement = isFullscreen ? fullscreenElement : JSEvents.previousFullscreenElement; - var nodeName = JSEvents.getNodeNameForTarget(reportedElement); - var id = reportedElement && reportedElement.id ? reportedElement.id : ""; - stringToUTF8(nodeName, eventStruct + 8, 128); - stringToUTF8(id, eventStruct + 136, 128); - HEAP32[eventStruct + 264 >> 2] = reportedElement ? reportedElement.clientWidth : 0; - HEAP32[eventStruct + 268 >> 2] = reportedElement ? reportedElement.clientHeight : 0; - HEAP32[eventStruct + 272 >> 2] = screen.width; - HEAP32[eventStruct + 276 >> 2] = screen.height; - if (isFullscreen) { - JSEvents.previousFullscreenElement = fullscreenElement - } -} - -function __registerFullscreenChangeEventCallback(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) { - if (!JSEvents.fullscreenChangeEvent) JSEvents.fullscreenChangeEvent = _malloc(280); - var fullscreenChangeEventhandlerFunc = function(ev) { - var e = ev || event; - var fullscreenChangeEvent = JSEvents.fullscreenChangeEvent; - __fillFullscreenChangeEventData(fullscreenChangeEvent); - if (dynCall_iiii(callbackfunc, eventTypeId, fullscreenChangeEvent, userData)) e.preventDefault() - }; - var eventHandler = { - target: target, - eventTypeString: eventTypeString, - callbackfunc: callbackfunc, - handlerFunc: fullscreenChangeEventhandlerFunc, - useCapture: useCapture - }; - JSEvents.registerOrRemoveHandler(eventHandler) -} - -function _emscripten_set_fullscreenchange_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - if (!JSEvents.fullscreenEnabled()) return -1; - target = __findEventTarget(target); - if (!target) return -4; - __registerFullscreenChangeEventCallback(target, userData, useCapture, callbackfunc, 19, "fullscreenchange", targetThread); - __registerFullscreenChangeEventCallback(target, userData, useCapture, callbackfunc, 19, "webkitfullscreenchange", targetThread); - return 0 -} - -function __registerGamepadEventCallback(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) { - if (!JSEvents.gamepadEvent) JSEvents.gamepadEvent = _malloc(1432); - var gamepadEventHandlerFunc = function(ev) { - var e = ev || event; - var gamepadEvent = JSEvents.gamepadEvent; - __fillGamepadEventData(gamepadEvent, e["gamepad"]); - if (dynCall_iiii(callbackfunc, eventTypeId, gamepadEvent, userData)) e.preventDefault() - }; - var eventHandler = { - target: __findEventTarget(target), - allowsDeferredCalls: true, - eventTypeString: eventTypeString, - callbackfunc: callbackfunc, - handlerFunc: gamepadEventHandlerFunc, - useCapture: useCapture - }; - JSEvents.registerOrRemoveHandler(eventHandler) -} - -function _emscripten_set_gamepadconnected_callback_on_thread(userData, useCapture, callbackfunc, targetThread) { - if (!navigator.getGamepads && !navigator.webkitGetGamepads) return -1; - __registerGamepadEventCallback(2, userData, useCapture, callbackfunc, 26, "gamepadconnected", targetThread); - return 0 -} - -function _emscripten_set_gamepaddisconnected_callback_on_thread(userData, useCapture, callbackfunc, targetThread) { - if (!navigator.getGamepads && !navigator.webkitGetGamepads) return -1; - __registerGamepadEventCallback(2, userData, useCapture, callbackfunc, 27, "gamepaddisconnected", targetThread); - return 0 -} - -function __registerKeyEventCallback(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) { - if (!JSEvents.keyEvent) JSEvents.keyEvent = _malloc(164); - var keyEventHandlerFunc = function(ev) { - var e = ev || event; - var keyEventData = JSEvents.keyEvent; - stringToUTF8(e.key ? e.key : "", keyEventData + 0, 32); - stringToUTF8(e.code ? e.code : "", keyEventData + 32, 32); - HEAP32[keyEventData + 64 >> 2] = e.location; - HEAP32[keyEventData + 68 >> 2] = e.ctrlKey; - HEAP32[keyEventData + 72 >> 2] = e.shiftKey; - HEAP32[keyEventData + 76 >> 2] = e.altKey; - HEAP32[keyEventData + 80 >> 2] = e.metaKey; - HEAP32[keyEventData + 84 >> 2] = e.repeat; - stringToUTF8(e.locale ? e.locale : "", keyEventData + 88, 32); - stringToUTF8(e.char ? e.char : "", keyEventData + 120, 32); - HEAP32[keyEventData + 152 >> 2] = e.charCode; - HEAP32[keyEventData + 156 >> 2] = e.keyCode; - HEAP32[keyEventData + 160 >> 2] = e.which; - if (dynCall_iiii(callbackfunc, eventTypeId, keyEventData, userData)) e.preventDefault() - }; - var eventHandler = { - target: __findEventTarget(target), - allowsDeferredCalls: true, - eventTypeString: eventTypeString, - callbackfunc: callbackfunc, - handlerFunc: keyEventHandlerFunc, - useCapture: useCapture - }; - JSEvents.registerOrRemoveHandler(eventHandler) -} - -function _emscripten_set_keypress_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - __registerKeyEventCallback(target, userData, useCapture, callbackfunc, 1, "keypress", targetThread); - return 0 -} - -function __registerTouchEventCallback(target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString, targetThread) { - if (!JSEvents.touchEvent) JSEvents.touchEvent = _malloc(1684); - target = __findEventTarget(target); - var touchEventHandlerFunc = function(ev) { - var e = ev || event; - var touches = {}; - for (var i = 0; i < e.touches.length; ++i) { - var touch = e.touches[i]; - touch.changed = false; - touches[touch.identifier] = touch - } - for (var i = 0; i < e.changedTouches.length; ++i) { - var touch = e.changedTouches[i]; - touches[touch.identifier] = touch; - touch.changed = true - } - for (var i = 0; i < e.targetTouches.length; ++i) { - var touch = e.targetTouches[i]; - touches[touch.identifier].onTarget = true - } - var touchEvent = JSEvents.touchEvent; - var ptr = touchEvent; - HEAP32[ptr + 4 >> 2] = e.ctrlKey; - HEAP32[ptr + 8 >> 2] = e.shiftKey; - HEAP32[ptr + 12 >> 2] = e.altKey; - HEAP32[ptr + 16 >> 2] = e.metaKey; - ptr += 20; - var targetRect = __getBoundingClientRect(target); - var numTouches = 0; - for (var i in touches) { - var t = touches[i]; - HEAP32[ptr >> 2] = t.identifier; - HEAP32[ptr + 4 >> 2] = t.screenX; - HEAP32[ptr + 8 >> 2] = t.screenY; - HEAP32[ptr + 12 >> 2] = t.clientX; - HEAP32[ptr + 16 >> 2] = t.clientY; - HEAP32[ptr + 20 >> 2] = t.pageX; - HEAP32[ptr + 24 >> 2] = t.pageY; - HEAP32[ptr + 28 >> 2] = t.changed; - HEAP32[ptr + 32 >> 2] = t.onTarget; - HEAP32[ptr + 36 >> 2] = t.clientX - targetRect.left; - HEAP32[ptr + 40 >> 2] = t.clientY - targetRect.top; - ptr += 52; - if (++numTouches >= 32) { - break - } - } - HEAP32[touchEvent >> 2] = numTouches; - if (dynCall_iiii(callbackfunc, eventTypeId, touchEvent, userData)) e.preventDefault() - }; - var eventHandler = { - target: target, - allowsDeferredCalls: eventTypeString == "touchstart" || eventTypeString == "touchend", - eventTypeString: eventTypeString, - callbackfunc: callbackfunc, - handlerFunc: touchEventHandlerFunc, - useCapture: useCapture - }; - JSEvents.registerOrRemoveHandler(eventHandler) -} - -function _emscripten_set_touchcancel_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - __registerTouchEventCallback(target, userData, useCapture, callbackfunc, 25, "touchcancel", targetThread); - return 0 -} - -function _emscripten_set_touchend_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - __registerTouchEventCallback(target, userData, useCapture, callbackfunc, 23, "touchend", targetThread); - return 0 -} - -function _emscripten_set_touchmove_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - __registerTouchEventCallback(target, userData, useCapture, callbackfunc, 24, "touchmove", targetThread); - return 0 -} - -function _emscripten_set_touchstart_callback_on_thread(target, userData, useCapture, callbackfunc, targetThread) { - __registerTouchEventCallback(target, userData, useCapture, callbackfunc, 22, "touchstart", targetThread); - return 0 -} - -function _exit(status) { - exit(status) -} - -function _glActiveTexture(x0) { - GLctx["activeTexture"](x0) -} - -function _glAttachShader(program, shader) { - GLctx.attachShader(GL.programs[program], GL.shaders[shader]) -} - -function _glBindAttribLocation(program, index, name) { - GLctx.bindAttribLocation(GL.programs[program], index, UTF8ToString(name)) -} - -function _glBindBuffer(target, buffer) { - GLctx.bindBuffer(target, GL.buffers[buffer]) -} - -function _glBindTexture(target, texture) { - GLctx.bindTexture(target, GL.textures[texture]) -} - -function _glBlendFunc(x0, x1) { - GLctx["blendFunc"](x0, x1) -} - -function _glBufferData(target, size, data, usage) { - GLctx.bufferData(target, data ? HEAPU8.subarray(data, data + size) : size, usage) -} - -function _glBufferSubData(target, offset, size, data) { - GLctx.bufferSubData(target, offset, HEAPU8.subarray(data, data + size)) -} - -function _glClear(x0) { - GLctx["clear"](x0) -} - -function _glClearColor(x0, x1, x2, x3) { - GLctx["clearColor"](x0, x1, x2, x3) -} - -function _glClearDepthf(x0) { - GLctx["clearDepth"](x0) -} - -function _glCompileShader(shader) { - GLctx.compileShader(GL.shaders[shader]) -} - -function _glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data) { - GLctx["compressedTexImage2D"](target, level, internalFormat, width, height, border, data ? HEAPU8.subarray(data, data + imageSize) : null) -} - -function _glCreateProgram() { - var id = GL.getNewId(GL.programs); - var program = GLctx.createProgram(); - program.name = id; - GL.programs[id] = program; - return id -} - -function _glCreateShader(shaderType) { - var id = GL.getNewId(GL.shaders); - GL.shaders[id] = GLctx.createShader(shaderType); - return id -} - -function _glCullFace(x0) { - GLctx["cullFace"](x0) -} - -function _glDeleteBuffers(n, buffers) { - for (var i = 0; i < n; i++) { - var id = HEAP32[buffers + i * 4 >> 2]; - var buffer = GL.buffers[id]; - if (!buffer) continue; - GLctx.deleteBuffer(buffer); - buffer.name = 0; - GL.buffers[id] = null; - if (id == GL.currArrayBuffer) GL.currArrayBuffer = 0; - if (id == GL.currElementArrayBuffer) GL.currElementArrayBuffer = 0 - } -} - -function _glDeleteProgram(id) { - if (!id) return; - var program = GL.programs[id]; - if (!program) { - GL.recordError(1281); - return - } - GLctx.deleteProgram(program); - program.name = 0; - GL.programs[id] = null; - GL.programInfos[id] = null -} - -function _glDeleteShader(id) { - if (!id) return; - var shader = GL.shaders[id]; - if (!shader) { - GL.recordError(1281); - return - } - GLctx.deleteShader(shader); - GL.shaders[id] = null -} - -function _glDeleteTextures(n, textures) { - for (var i = 0; i < n; i++) { - var id = HEAP32[textures + i * 4 >> 2]; - var texture = GL.textures[id]; - if (!texture) continue; - GLctx.deleteTexture(texture); - texture.name = 0; - GL.textures[id] = null - } -} - -function _glDepthFunc(x0) { - GLctx["depthFunc"](x0) -} - -function _glDetachShader(program, shader) { - GLctx.detachShader(GL.programs[program], GL.shaders[shader]) -} - -function _glDisable(x0) { - GLctx["disable"](x0) -} - -function _glDisableVertexAttribArray(index) { - GLctx.disableVertexAttribArray(index) -} - -function _glDrawArrays(mode, first, count) { - GLctx.drawArrays(mode, first, count) -} - -function _glDrawElements(mode, count, type, indices) { - GLctx.drawElements(mode, count, type, indices) -} - -function _glEnable(x0) { - GLctx["enable"](x0) -} - -function _glEnableVertexAttribArray(index) { - GLctx.enableVertexAttribArray(index) -} - -function _glFrontFace(x0) { - GLctx["frontFace"](x0) -} - -function _glGenBuffers(n, buffers) { - __glGenObject(n, buffers, "createBuffer", GL.buffers) -} - -function _glGenTextures(n, textures) { - __glGenObject(n, textures, "createTexture", GL.textures) -} - -function _glGetAttribLocation(program, name) { - return GLctx.getAttribLocation(GL.programs[program], UTF8ToString(name)) -} - -function _glGetFloatv(name_, p) { - emscriptenWebGLGet(name_, p, 2) -} - -function _glGetProgramInfoLog(program, maxLength, length, infoLog) { - var log = GLctx.getProgramInfoLog(GL.programs[program]); - if (log === null) log = "(unknown error)"; - var numBytesWrittenExclNull = maxLength > 0 && infoLog ? stringToUTF8(log, infoLog, maxLength) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull -} - -function _glGetProgramiv(program, pname, p) { - if (!p) { - GL.recordError(1281); - return - } - if (program >= GL.counter) { - GL.recordError(1281); - return - } - var ptable = GL.programInfos[program]; - if (!ptable) { - GL.recordError(1282); - return - } - if (pname == 35716) { - var log = GLctx.getProgramInfoLog(GL.programs[program]); - if (log === null) log = "(unknown error)"; - HEAP32[p >> 2] = log.length + 1 - } else if (pname == 35719) { - HEAP32[p >> 2] = ptable.maxUniformLength - } else if (pname == 35722) { - if (ptable.maxAttributeLength == -1) { - program = GL.programs[program]; - var numAttribs = GLctx.getProgramParameter(program, 35721); - ptable.maxAttributeLength = 0; - for (var i = 0; i < numAttribs; ++i) { - var activeAttrib = GLctx.getActiveAttrib(program, i); - ptable.maxAttributeLength = Math.max(ptable.maxAttributeLength, activeAttrib.name.length + 1) - } - } - HEAP32[p >> 2] = ptable.maxAttributeLength - } else if (pname == 35381) { - if (ptable.maxUniformBlockNameLength == -1) { - program = GL.programs[program]; - var numBlocks = GLctx.getProgramParameter(program, 35382); - ptable.maxUniformBlockNameLength = 0; - for (var i = 0; i < numBlocks; ++i) { - var activeBlockName = GLctx.getActiveUniformBlockName(program, i); - ptable.maxUniformBlockNameLength = Math.max(ptable.maxUniformBlockNameLength, activeBlockName.length + 1) - } - } - HEAP32[p >> 2] = ptable.maxUniformBlockNameLength - } else { - HEAP32[p >> 2] = GLctx.getProgramParameter(GL.programs[program], pname) - } -} - -function _glGetShaderInfoLog(shader, maxLength, length, infoLog) { - var log = GLctx.getShaderInfoLog(GL.shaders[shader]); - if (log === null) log = "(unknown error)"; - var numBytesWrittenExclNull = maxLength > 0 && infoLog ? stringToUTF8(log, infoLog, maxLength) : 0; - if (length) HEAP32[length >> 2] = numBytesWrittenExclNull -} - -function _glGetShaderiv(shader, pname, p) { - if (!p) { - GL.recordError(1281); - return - } - if (pname == 35716) { - var log = GLctx.getShaderInfoLog(GL.shaders[shader]); - if (log === null) log = "(unknown error)"; - HEAP32[p >> 2] = log.length + 1 - } else if (pname == 35720) { - var source = GLctx.getShaderSource(GL.shaders[shader]); - var sourceLength = source === null || source.length == 0 ? 0 : source.length + 1; - HEAP32[p >> 2] = sourceLength - } else { - HEAP32[p >> 2] = GLctx.getShaderParameter(GL.shaders[shader], pname) - } -} - -function _glGetString(name_) { - if (GL.stringCache[name_]) return GL.stringCache[name_]; - var ret; - switch (name_) { - case 7939: - var exts = GLctx.getSupportedExtensions() || []; - exts = exts.concat(exts.map(function(e) { - return "GL_" + e - })); - ret = stringToNewUTF8(exts.join(" ")); - break; - case 7936: - case 7937: - case 37445: - case 37446: - var s = GLctx.getParameter(name_); - if (!s) { - GL.recordError(1280) - } - ret = stringToNewUTF8(s); - break; - case 7938: - var glVersion = GLctx.getParameter(7938); - { - glVersion = "OpenGL ES 2.0 (" + glVersion + ")" - } - ret = stringToNewUTF8(glVersion); - break; - case 35724: - var glslVersion = GLctx.getParameter(35724); - var ver_re = /^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/; - var ver_num = glslVersion.match(ver_re); - if (ver_num !== null) { - if (ver_num[1].length == 3) ver_num[1] = ver_num[1] + "0"; - glslVersion = "OpenGL ES GLSL ES " + ver_num[1] + " (" + glslVersion + ")" - } - ret = stringToNewUTF8(glslVersion); - break; - default: - GL.recordError(1280); - return 0 - } - GL.stringCache[name_] = ret; - return ret -} - -function _glGetUniformLocation(program, name) { - name = UTF8ToString(name); - var arrayIndex = 0; - if (name[name.length - 1] == "]") { - var leftBrace = name.lastIndexOf("["); - arrayIndex = name[leftBrace + 1] != "]" ? jstoi_q(name.slice(leftBrace + 1)) : 0; - name = name.slice(0, leftBrace) - } - var uniformInfo = GL.programInfos[program] && GL.programInfos[program].uniforms[name]; - if (uniformInfo && arrayIndex >= 0 && arrayIndex < uniformInfo[0]) { - return uniformInfo[1] + arrayIndex - } else { - return -1 - } -} - -function _glLinkProgram(program) { - GLctx.linkProgram(GL.programs[program]); - GL.populateUniformTable(program) -} - -function _glPixelStorei(pname, param) { - if (pname == 3317) { - GL.unpackAlignment = param - } - GLctx.pixelStorei(pname, param) -} - -function _glReadPixels(x, y, width, height, format, type, pixels) { - var pixelData = emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, format); - if (!pixelData) { - GL.recordError(1280); - return - } - GLctx.readPixels(x, y, width, height, format, type, pixelData) -} - -function _glShaderSource(shader, count, string, length) { - var source = GL.getSource(shader, count, string, length); - GLctx.shaderSource(GL.shaders[shader], source) -} - -function _glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels) { - GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels ? emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) : null) -} - -function _glTexParameteri(x0, x1, x2) { - GLctx["texParameteri"](x0, x1, x2) -} - -function _glUniform1i(location, v0) { - GLctx.uniform1i(GL.uniforms[location], v0) -} - -function _glUniform4f(location, v0, v1, v2, v3) { - GLctx.uniform4f(GL.uniforms[location], v0, v1, v2, v3) -} - -function _glUniformMatrix4fv(location, count, transpose, value) { - if (16 * count <= GL.MINI_TEMP_BUFFER_SIZE) { - var view = GL.miniTempBufferFloatViews[16 * count - 1]; - var heap = HEAPF32; - value >>= 2; - for (var i = 0; i < 16 * count; i += 16) { - var dst = value + i; - view[i] = heap[dst]; - view[i + 1] = heap[dst + 1]; - view[i + 2] = heap[dst + 2]; - view[i + 3] = heap[dst + 3]; - view[i + 4] = heap[dst + 4]; - view[i + 5] = heap[dst + 5]; - view[i + 6] = heap[dst + 6]; - view[i + 7] = heap[dst + 7]; - view[i + 8] = heap[dst + 8]; - view[i + 9] = heap[dst + 9]; - view[i + 10] = heap[dst + 10]; - view[i + 11] = heap[dst + 11]; - view[i + 12] = heap[dst + 12]; - view[i + 13] = heap[dst + 13]; - view[i + 14] = heap[dst + 14]; - view[i + 15] = heap[dst + 15] - } - } else { - var view = HEAPF32.subarray(value >> 2, value + count * 64 >> 2) - } - GLctx.uniformMatrix4fv(GL.uniforms[location], !!transpose, view) -} - -function _glUseProgram(program) { - GLctx.useProgram(GL.programs[program]) -} - -function _glVertexAttribPointer(index, size, type, normalized, stride, ptr) { - GLctx.vertexAttribPointer(index, size, type, !!normalized, stride, ptr) -} - -function _glViewport(x0, x1, x2, x3) { - GLctx["viewport"](x0, x1, x2, x3) -} - -function GLFW_Window(id, width, height, title, monitor, share) { - this.id = id; - this.x = 0; - this.y = 0; - this.fullscreen = false; - this.storedX = 0; - this.storedY = 0; - this.width = width; - this.height = height; - this.storedWidth = width; - this.storedHeight = height; - this.title = title; - this.monitor = monitor; - this.share = share; - this.attributes = GLFW.hints; - this.inputModes = { - 208897: 212993, - 208898: 0, - 208899: 0 - }; - this.buttons = 0; - this.keys = new Array; - this.domKeys = new Array; - this.shouldClose = 0; - this.title = null; - this.windowPosFunc = null; - this.windowSizeFunc = null; - this.windowCloseFunc = null; - this.windowRefreshFunc = null; - this.windowFocusFunc = null; - this.windowIconifyFunc = null; - this.framebufferSizeFunc = null; - this.mouseButtonFunc = null; - this.cursorPosFunc = null; - this.cursorEnterFunc = null; - this.scrollFunc = null; - this.dropFunc = null; - this.keyFunc = null; - this.charFunc = null; - this.userptr = null -} -var GLFW = { - WindowFromId: function(id) { - if (id <= 0 || !GLFW.windows) return null; - return GLFW.windows[id - 1] - }, - joystickFunc: null, - errorFunc: null, - monitorFunc: null, - active: null, - windows: null, - monitors: null, - monitorString: null, - versionString: null, - initialTime: null, - extensions: null, - hints: null, - defaultHints: { - 131073: 0, - 131074: 0, - 131075: 1, - 131076: 1, - 131077: 1, - 135169: 8, - 135170: 8, - 135171: 8, - 135172: 8, - 135173: 24, - 135174: 8, - 135175: 0, - 135176: 0, - 135177: 0, - 135178: 0, - 135179: 0, - 135180: 0, - 135181: 0, - 135182: 0, - 135183: 0, - 139265: 196609, - 139266: 1, - 139267: 0, - 139268: 0, - 139269: 0, - 139270: 0, - 139271: 0, - 139272: 0 - }, - DOMToGLFWKeyCode: function(keycode) { - switch (keycode) { - case 32: - return 32; - case 222: - return 39; - case 188: - return 44; - case 173: - return 45; - case 189: - return 45; - case 190: - return 46; - case 191: - return 47; - case 48: - return 48; - case 49: - return 49; - case 50: - return 50; - case 51: - return 51; - case 52: - return 52; - case 53: - return 53; - case 54: - return 54; - case 55: - return 55; - case 56: - return 56; - case 57: - return 57; - case 59: - return 59; - case 61: - return 61; - case 187: - return 61; - case 65: - return 65; - case 66: - return 66; - case 67: - return 67; - case 68: - return 68; - case 69: - return 69; - case 70: - return 70; - case 71: - return 71; - case 72: - return 72; - case 73: - return 73; - case 74: - return 74; - case 75: - return 75; - case 76: - return 76; - case 77: - return 77; - case 78: - return 78; - case 79: - return 79; - case 80: - return 80; - case 81: - return 81; - case 82: - return 82; - case 83: - return 83; - case 84: - return 84; - case 85: - return 85; - case 86: - return 86; - case 87: - return 87; - case 88: - return 88; - case 89: - return 89; - case 90: - return 90; - case 219: - return 91; - case 220: - return 92; - case 221: - return 93; - case 192: - return 94; - case 27: - return 256; - case 13: - return 257; - case 9: - return 258; - case 8: - return 259; - case 45: - return 260; - case 46: - return 261; - case 39: - return 262; - case 37: - return 263; - case 40: - return 264; - case 38: - return 265; - case 33: - return 266; - case 34: - return 267; - case 36: - return 268; - case 35: - return 269; - case 20: - return 280; - case 145: - return 281; - case 144: - return 282; - case 44: - return 283; - case 19: - return 284; - case 112: - return 290; - case 113: - return 291; - case 114: - return 292; - case 115: - return 293; - case 116: - return 294; - case 117: - return 295; - case 118: - return 296; - case 119: - return 297; - case 120: - return 298; - case 121: - return 299; - case 122: - return 300; - case 123: - return 301; - case 124: - return 302; - case 125: - return 303; - case 126: - return 304; - case 127: - return 305; - case 128: - return 306; - case 129: - return 307; - case 130: - return 308; - case 131: - return 309; - case 132: - return 310; - case 133: - return 311; - case 134: - return 312; - case 135: - return 313; - case 136: - return 314; - case 96: - return 320; - case 97: - return 321; - case 98: - return 322; - case 99: - return 323; - case 100: - return 324; - case 101: - return 325; - case 102: - return 326; - case 103: - return 327; - case 104: - return 328; - case 105: - return 329; - case 110: - return 330; - case 111: - return 331; - case 106: - return 332; - case 109: - return 333; - case 107: - return 334; - case 16: - return 340; - case 17: - return 341; - case 18: - return 342; - case 91: - return 343; - case 93: - return 348; - default: - return -1 - } - }, - getModBits: function(win) { - var mod = 0; - if (win.keys[340]) mod |= 1; - if (win.keys[341]) mod |= 2; - if (win.keys[342]) mod |= 4; - if (win.keys[343]) mod |= 8; - return mod - }, - onKeyPress: function(event) { - if (!GLFW.active || !GLFW.active.charFunc) return; - if (event.ctrlKey || event.metaKey) return; - var charCode = event.charCode; - if (charCode == 0 || charCode >= 0 && charCode <= 31) return; - dynCall_vii(GLFW.active.charFunc, GLFW.active.id, charCode) - }, - onKeyChanged: function(keyCode, status) { - if (!GLFW.active) return; - var key = GLFW.DOMToGLFWKeyCode(keyCode); - if (key == -1) return; - var repeat = status && GLFW.active.keys[key]; - GLFW.active.keys[key] = status; - GLFW.active.domKeys[keyCode] = status; - if (!GLFW.active.keyFunc) return; - if (repeat) status = 2; - dynCall_viiiii(GLFW.active.keyFunc, GLFW.active.id, key, keyCode, status, GLFW.getModBits(GLFW.active)) - }, - onGamepadConnected: function(event) { - GLFW.refreshJoysticks() - }, - onGamepadDisconnected: function(event) { - GLFW.refreshJoysticks() - }, - onKeydown: function(event) { - GLFW.onKeyChanged(event.keyCode, 1); - if (event.keyCode === 8 || event.keyCode === 9) { - event.preventDefault() - } - }, - onKeyup: function(event) { - GLFW.onKeyChanged(event.keyCode, 0) - }, - onBlur: function(event) { - if (!GLFW.active) return; - for (var i = 0; i < GLFW.active.domKeys.length; ++i) { - if (GLFW.active.domKeys[i]) { - GLFW.onKeyChanged(i, 0) - } - } - }, - onMousemove: function(event) { - if (!GLFW.active) return; - Browser.calculateMouseEvent(event); - if (event.target != Module["canvas"] || !GLFW.active.cursorPosFunc) return; - dynCall_vidd(GLFW.active.cursorPosFunc, GLFW.active.id, Browser.mouseX, Browser.mouseY) - }, - DOMToGLFWMouseButton: function(event) { - var eventButton = event["button"]; - if (eventButton > 0) { - if (eventButton == 1) { - eventButton = 2 - } else { - eventButton = 1 - } - } - return eventButton - }, - onMouseenter: function(event) { - if (!GLFW.active) return; - if (event.target != Module["canvas"] || !GLFW.active.cursorEnterFunc) return; - dynCall_vii(GLFW.active.cursorEnterFunc, GLFW.active.id, 1) - }, - onMouseleave: function(event) { - if (!GLFW.active) return; - if (event.target != Module["canvas"] || !GLFW.active.cursorEnterFunc) return; - dynCall_vii(GLFW.active.cursorEnterFunc, GLFW.active.id, 0) - }, - onMouseButtonChanged: function(event, status) { - if (!GLFW.active) return; - Browser.calculateMouseEvent(event); - if (event.target != Module["canvas"]) return; - var eventButton = GLFW.DOMToGLFWMouseButton(event); - if (status == 1) { - GLFW.active.buttons |= 1 << eventButton; - try { - event.target.setCapture() - } catch (e) {} - } else { - GLFW.active.buttons &= ~(1 << eventButton) - } - if (!GLFW.active.mouseButtonFunc) return; - dynCall_viiii(GLFW.active.mouseButtonFunc, GLFW.active.id, eventButton, status, GLFW.getModBits(GLFW.active)) - }, - onMouseButtonDown: function(event) { - if (!GLFW.active) return; - GLFW.onMouseButtonChanged(event, 1) - }, - onMouseButtonUp: function(event) { - if (!GLFW.active) return; - GLFW.onMouseButtonChanged(event, 0) - }, - onMouseWheel: function(event) { - var delta = -Browser.getMouseWheelDelta(event); - delta = delta == 0 ? 0 : delta > 0 ? Math.max(delta, 1) : Math.min(delta, -1); - GLFW.wheelPos += delta; - if (!GLFW.active || !GLFW.active.scrollFunc || event.target != Module["canvas"]) return; - var sx = 0; - var sy = 0; - if (event.type == "mousewheel") { - sx = event.wheelDeltaX; - sy = event.wheelDeltaY - } else { - sx = event.deltaX; - sy = event.deltaY - } - dynCall_vidd(GLFW.active.scrollFunc, GLFW.active.id, sx, sy); - event.preventDefault() - }, - onCanvasResize: function(width, height) { - if (!GLFW.active) return; - var resizeNeeded = true; - if (document["fullscreen"] || document["fullScreen"] || document["mozFullScreen"] || document["webkitIsFullScreen"]) { - GLFW.active.storedX = GLFW.active.x; - GLFW.active.storedY = GLFW.active.y; - GLFW.active.storedWidth = GLFW.active.width; - GLFW.active.storedHeight = GLFW.active.height; - GLFW.active.x = GLFW.active.y = 0; - GLFW.active.width = screen.width; - GLFW.active.height = screen.height; - GLFW.active.fullscreen = true - } else if (GLFW.active.fullscreen == true) { - GLFW.active.x = GLFW.active.storedX; - GLFW.active.y = GLFW.active.storedY; - GLFW.active.width = GLFW.active.storedWidth; - GLFW.active.height = GLFW.active.storedHeight; - GLFW.active.fullscreen = false - } else if (GLFW.active.width != width || GLFW.active.height != height) { - GLFW.active.width = width; - GLFW.active.height = height - } else { - resizeNeeded = false - } - if (resizeNeeded) { - Browser.setCanvasSize(GLFW.active.width, GLFW.active.height, true); - GLFW.onWindowSizeChanged(); - GLFW.onFramebufferSizeChanged() - } - }, - onWindowSizeChanged: function() { - if (!GLFW.active) return; - if (!GLFW.active.windowSizeFunc) return; - dynCall_viii(GLFW.active.windowSizeFunc, GLFW.active.id, GLFW.active.width, GLFW.active.height) - }, - onFramebufferSizeChanged: function() { - if (!GLFW.active) return; - if (!GLFW.active.framebufferSizeFunc) return; - dynCall_viii(GLFW.active.framebufferSizeFunc, GLFW.active.id, GLFW.active.width, GLFW.active.height) - }, - getTime: function() { - return _emscripten_get_now() / 1e3 - }, - setWindowTitle: function(winid, title) { - var win = GLFW.WindowFromId(winid); - if (!win) return; - win.title = UTF8ToString(title); - if (GLFW.active.id == win.id) { - document.title = win.title - } - }, - setJoystickCallback: function(cbfun) { - GLFW.joystickFunc = cbfun; - GLFW.refreshJoysticks() - }, - joys: {}, - lastGamepadState: null, - lastGamepadStateFrame: null, - refreshJoysticks: function() { - if (Browser.mainLoop.currentFrameNumber !== GLFW.lastGamepadStateFrame || !Browser.mainLoop.currentFrameNumber) { - GLFW.lastGamepadState = navigator.getGamepads ? navigator.getGamepads() : navigator.webkitGetGamepads ? navigator.webkitGetGamepads : null; - GLFW.lastGamepadStateFrame = Browser.mainLoop.currentFrameNumber; - for (var joy = 0; joy < GLFW.lastGamepadState.length; ++joy) { - var gamepad = GLFW.lastGamepadState[joy]; - if (gamepad) { - if (!GLFW.joys[joy]) { - console.log("glfw joystick connected:", joy); - GLFW.joys[joy] = { - id: allocate(intArrayFromString(gamepad.id), "i8", ALLOC_NORMAL), - buttonsCount: gamepad.buttons.length, - axesCount: gamepad.axes.length, - buttons: allocate(new Array(gamepad.buttons.length), "i8", ALLOC_NORMAL), - axes: allocate(new Array(gamepad.axes.length * 4), "float", ALLOC_NORMAL) - }; - if (GLFW.joystickFunc) { - dynCall_vii(GLFW.joystickFunc, joy, 262145) - } - } - var data = GLFW.joys[joy]; - for (var i = 0; i < gamepad.buttons.length; ++i) { - setValue(data.buttons + i, gamepad.buttons[i].pressed, "i8") - } - for (var i = 0; i < gamepad.axes.length; ++i) { - setValue(data.axes + i * 4, gamepad.axes[i], "float") - } - } else { - if (GLFW.joys[joy]) { - console.log("glfw joystick disconnected", joy); - if (GLFW.joystickFunc) { - dynCall_vii(GLFW.joystickFunc, joy, 262146) - } - _free(GLFW.joys[joy].id); - _free(GLFW.joys[joy].buttons); - _free(GLFW.joys[joy].axes); - delete GLFW.joys[joy] - } - } - } - } - }, - setKeyCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.keyFunc; - win.keyFunc = cbfun; - return prevcbfun - }, - setCharCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.charFunc; - win.charFunc = cbfun; - return prevcbfun - }, - setMouseButtonCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.mouseButtonFunc; - win.mouseButtonFunc = cbfun; - return prevcbfun - }, - setCursorPosCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.cursorPosFunc; - win.cursorPosFunc = cbfun; - return prevcbfun - }, - setScrollCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.scrollFunc; - win.scrollFunc = cbfun; - return prevcbfun - }, - setDropCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.dropFunc; - win.dropFunc = cbfun; - return prevcbfun - }, - onDrop: function(event) { - if (!GLFW.active || !GLFW.active.dropFunc) return; - if (!event.dataTransfer || !event.dataTransfer.files || event.dataTransfer.files.length == 0) return; - event.preventDefault(); - var filenames = allocate(new Array(event.dataTransfer.files.length * 4), "i8*", ALLOC_NORMAL); - var filenamesArray = []; - var count = event.dataTransfer.files.length; - var written = 0; - var drop_dir = ".glfw_dropped_files"; - FS.createPath("/", drop_dir); - - function save(file) { - var path = "/" + drop_dir + "/" + file.name.replace(/\//g, "_"); - var reader = new FileReader; - reader.onloadend = function(e) { - if (reader.readyState != 2) { - ++written; - console.log("failed to read dropped file: " + file.name + ": " + reader.error); - return - } - var data = e.target.result; - FS.writeFile(path, new Uint8Array(data)); - if (++written === count) { - dynCall_viii(GLFW.active.dropFunc, GLFW.active.id, count, filenames); - for (var i = 0; i < filenamesArray.length; ++i) { - _free(filenamesArray[i]) - } - _free(filenames) - } - }; - reader.readAsArrayBuffer(file); - var filename = allocate(intArrayFromString(path), "i8", ALLOC_NORMAL); - filenamesArray.push(filename); - setValue(filenames + i * 4, filename, "i8*") - } - for (var i = 0; i < count; ++i) { - save(event.dataTransfer.files[i]) - } - return false - }, - onDragover: function(event) { - if (!GLFW.active || !GLFW.active.dropFunc) return; - event.preventDefault(); - return false - }, - setWindowSizeCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.windowSizeFunc; - win.windowSizeFunc = cbfun; - return prevcbfun - }, - setWindowCloseCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.windowCloseFunc; - win.windowCloseFunc = cbfun; - return prevcbfun - }, - setWindowRefreshCallback: function(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.windowRefreshFunc; - win.windowRefreshFunc = cbfun; - return prevcbfun - }, - onClickRequestPointerLock: function(e) { - if (!Browser.pointerLock && Module["canvas"].requestPointerLock) { - Module["canvas"].requestPointerLock(); - e.preventDefault() - } - }, - setInputMode: function(winid, mode, value) { - var win = GLFW.WindowFromId(winid); - if (!win) return; - switch (mode) { - case 208897: { - switch (value) { - case 212993: { - win.inputModes[mode] = value; - Module["canvas"].removeEventListener("click", GLFW.onClickRequestPointerLock, true); - Module["canvas"].exitPointerLock(); - break - } - case 212994: { - console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented."); - break - } - case 212995: { - win.inputModes[mode] = value; - Module["canvas"].addEventListener("click", GLFW.onClickRequestPointerLock, true); - Module["canvas"].requestPointerLock(); - break - } - default: { - console.log("glfwSetInputMode called with unknown value parameter value: " + value + "."); - break - } - } - break - } - case 208898: { - console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented."); - break - } - case 208899: { - console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented."); - break - } - default: { - console.log("glfwSetInputMode called with unknown mode parameter value: " + mode + "."); - break - } - } - }, - getKey: function(winid, key) { - var win = GLFW.WindowFromId(winid); - if (!win) return 0; - return win.keys[key] - }, - getMouseButton: function(winid, button) { - var win = GLFW.WindowFromId(winid); - if (!win) return 0; - return (win.buttons & 1 << button) > 0 - }, - getCursorPos: function(winid, x, y) { - setValue(x, Browser.mouseX, "double"); - setValue(y, Browser.mouseY, "double") - }, - getMousePos: function(winid, x, y) { - setValue(x, Browser.mouseX, "i32"); - setValue(y, Browser.mouseY, "i32") - }, - setCursorPos: function(winid, x, y) {}, - getWindowPos: function(winid, x, y) { - var wx = 0; - var wy = 0; - var win = GLFW.WindowFromId(winid); - if (win) { - wx = win.x; - wy = win.y - } - setValue(x, wx, "i32"); - setValue(y, wy, "i32") - }, - setWindowPos: function(winid, x, y) { - var win = GLFW.WindowFromId(winid); - if (!win) return; - win.x = x; - win.y = y - }, - getWindowSize: function(winid, width, height) { - var ww = 0; - var wh = 0; - var win = GLFW.WindowFromId(winid); - if (win) { - ww = win.width; - wh = win.height - } - setValue(width, ww, "i32"); - setValue(height, wh, "i32") - }, - setWindowSize: function(winid, width, height) { - var win = GLFW.WindowFromId(winid); - if (!win) return; - if (GLFW.active.id == win.id) { - if (width == screen.width && height == screen.height) { - Browser.requestFullscreen() - } else { - Browser.exitFullscreen(); - Browser.setCanvasSize(width, height); - win.width = width; - win.height = height - } - } - if (!win.windowSizeFunc) return; - dynCall_viii(win.windowSizeFunc, win.id, width, height) - }, - createWindow: function(width, height, title, monitor, share) { - var i, id; - for (i = 0; i < GLFW.windows.length && GLFW.windows[i] !== null; i++) {} - if (i > 0) throw "glfwCreateWindow only supports one window at time currently"; - id = i + 1; - if (width <= 0 || height <= 0) return 0; - if (monitor) { - Browser.requestFullscreen() - } else { - Browser.setCanvasSize(width, height) - } - for (i = 0; i < GLFW.windows.length && GLFW.windows[i] == null; i++) {} - if (i == GLFW.windows.length) { - var contextAttributes = { - antialias: GLFW.hints[135181] > 1, - depth: GLFW.hints[135173] > 0, - stencil: GLFW.hints[135174] > 0, - alpha: GLFW.hints[135172] > 0 - }; - Module.ctx = Browser.createContext(Module["canvas"], true, true, contextAttributes) - } - if (!Module.ctx) return 0; - var win = new GLFW_Window(id, width, height, title, monitor, share); - if (id - 1 == GLFW.windows.length) { - GLFW.windows.push(win) - } else { - GLFW.windows[id - 1] = win - } - GLFW.active = win; - return win.id - }, - destroyWindow: function(winid) { - var win = GLFW.WindowFromId(winid); - if (!win) return; - if (win.windowCloseFunc) dynCall_vi(win.windowCloseFunc, win.id); - GLFW.windows[win.id - 1] = null; - if (GLFW.active.id == win.id) GLFW.active = null; - for (var i = 0; i < GLFW.windows.length; i++) - if (GLFW.windows[i] !== null) return; - Module.ctx = Browser.destroyContext(Module["canvas"], true, true) - }, - swapBuffers: function(winid) {}, - GLFW2ParamToGLFW3Param: function(param) { - var table = { - 196609: 0, - 196610: 0, - 196611: 0, - 196612: 0, - 196613: 0, - 196614: 0, - 131073: 0, - 131074: 0, - 131075: 0, - 131076: 0, - 131077: 135169, - 131078: 135170, - 131079: 135171, - 131080: 135172, - 131081: 135173, - 131082: 135174, - 131083: 135183, - 131084: 135175, - 131085: 135176, - 131086: 135177, - 131087: 135178, - 131088: 135179, - 131089: 135180, - 131090: 0, - 131091: 135181, - 131092: 139266, - 131093: 139267, - 131094: 139270, - 131095: 139271, - 131096: 139272 - }; - return table[param] - } -}; - -function _glfwCreateWindow(width, height, title, monitor, share) { - return GLFW.createWindow(width, height, title, monitor, share) -} - -function _glfwDefaultWindowHints() { - GLFW.hints = GLFW.defaultHints -} - -function _glfwDestroyWindow(winid) { - return GLFW.destroyWindow(winid) -} - -function _glfwGetPrimaryMonitor() { - return 1 -} - -function _glfwGetTime() { - return GLFW.getTime() - GLFW.initialTime -} - -function _glfwGetVideoModes(monitor, count) { - setValue(count, 0, "i32"); - return 0 -} - -function _glfwInit() { - if (GLFW.windows) return 1; - GLFW.initialTime = GLFW.getTime(); - GLFW.hints = GLFW.defaultHints; - GLFW.windows = new Array; - GLFW.active = null; - window.addEventListener("gamepadconnected", GLFW.onGamepadConnected, true); - window.addEventListener("gamepaddisconnected", GLFW.onGamepadDisconnected, true); - window.addEventListener("keydown", GLFW.onKeydown, true); - window.addEventListener("keypress", GLFW.onKeyPress, true); - window.addEventListener("keyup", GLFW.onKeyup, true); - window.addEventListener("blur", GLFW.onBlur, true); - Module["canvas"].addEventListener("touchmove", GLFW.onMousemove, true); - Module["canvas"].addEventListener("touchstart", GLFW.onMouseButtonDown, true); - Module["canvas"].addEventListener("touchcancel", GLFW.onMouseButtonUp, true); - Module["canvas"].addEventListener("touchend", GLFW.onMouseButtonUp, true); - Module["canvas"].addEventListener("mousemove", GLFW.onMousemove, true); - Module["canvas"].addEventListener("mousedown", GLFW.onMouseButtonDown, true); - Module["canvas"].addEventListener("mouseup", GLFW.onMouseButtonUp, true); - Module["canvas"].addEventListener("wheel", GLFW.onMouseWheel, true); - Module["canvas"].addEventListener("mousewheel", GLFW.onMouseWheel, true); - Module["canvas"].addEventListener("mouseenter", GLFW.onMouseenter, true); - Module["canvas"].addEventListener("mouseleave", GLFW.onMouseleave, true); - Module["canvas"].addEventListener("drop", GLFW.onDrop, true); - Module["canvas"].addEventListener("dragover", GLFW.onDragover, true); - Browser.resizeListeners.push(function(width, height) { - GLFW.onCanvasResize(width, height) - }); - return 1 -} - -function _glfwMakeContextCurrent(winid) {} - -function _glfwSetCharCallback(winid, cbfun) { - return GLFW.setCharCallback(winid, cbfun) -} - -function _glfwSetCursorEnterCallback(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.cursorEnterFunc; - win.cursorEnterFunc = cbfun; - return prevcbfun -} - -function _glfwSetCursorPosCallback(winid, cbfun) { - return GLFW.setCursorPosCallback(winid, cbfun) -} - -function _glfwSetDropCallback(winid, cbfun) { - return GLFW.setDropCallback(winid, cbfun) -} - -function _glfwSetErrorCallback(cbfun) { - var prevcbfun = GLFW.errorFunc; - GLFW.errorFunc = cbfun; - return prevcbfun -} - -function _glfwSetKeyCallback(winid, cbfun) { - return GLFW.setKeyCallback(winid, cbfun) -} - -function _glfwSetMouseButtonCallback(winid, cbfun) { - return GLFW.setMouseButtonCallback(winid, cbfun) -} - -function _glfwSetScrollCallback(winid, cbfun) { - return GLFW.setScrollCallback(winid, cbfun) -} - -function _glfwSetWindowIconifyCallback(winid, cbfun) { - var win = GLFW.WindowFromId(winid); - if (!win) return null; - var prevcbfun = win.windowIconifyFunc; - win.windowIconifyFunc = cbfun; - return prevcbfun -} - -function _glfwSetWindowShouldClose(winid, value) { - var win = GLFW.WindowFromId(winid); - if (!win) return; - win.shouldClose = value -} - -function _glfwSetWindowSizeCallback(winid, cbfun) { - return GLFW.setWindowSizeCallback(winid, cbfun) -} - -function _glfwSwapBuffers(winid) { - GLFW.swapBuffers(winid) -} - -function _glfwSwapInterval(interval) { - interval = Math.abs(interval); - if (interval == 0) _emscripten_set_main_loop_timing(0, 0); - else _emscripten_set_main_loop_timing(1, interval) -} - -function _glfwTerminate() { - window.removeEventListener("gamepadconnected", GLFW.onGamepadConnected, true); - window.removeEventListener("gamepaddisconnected", GLFW.onGamepadDisconnected, true); - window.removeEventListener("keydown", GLFW.onKeydown, true); - window.removeEventListener("keypress", GLFW.onKeyPress, true); - window.removeEventListener("keyup", GLFW.onKeyup, true); - window.removeEventListener("blur", GLFW.onBlur, true); - Module["canvas"].removeEventListener("touchmove", GLFW.onMousemove, true); - Module["canvas"].removeEventListener("touchstart", GLFW.onMouseButtonDown, true); - Module["canvas"].removeEventListener("touchcancel", GLFW.onMouseButtonUp, true); - Module["canvas"].removeEventListener("touchend", GLFW.onMouseButtonUp, true); - Module["canvas"].removeEventListener("mousemove", GLFW.onMousemove, true); - Module["canvas"].removeEventListener("mousedown", GLFW.onMouseButtonDown, true); - Module["canvas"].removeEventListener("mouseup", GLFW.onMouseButtonUp, true); - Module["canvas"].removeEventListener("wheel", GLFW.onMouseWheel, true); - Module["canvas"].removeEventListener("mousewheel", GLFW.onMouseWheel, true); - Module["canvas"].removeEventListener("mouseenter", GLFW.onMouseenter, true); - Module["canvas"].removeEventListener("mouseleave", GLFW.onMouseleave, true); - Module["canvas"].removeEventListener("drop", GLFW.onDrop, true); - Module["canvas"].removeEventListener("dragover", GLFW.onDragover, true); - Module["canvas"].width = Module["canvas"].height = 1; - GLFW.windows = null; - GLFW.active = null -} - -function _glfwWindowHint(target, hint) { - GLFW.hints[target] = hint -} - -function _llvm_exp2_f32(x) { - return Math.pow(2, x) -} - -function _llvm_stackrestore(p) { - var self = _llvm_stacksave; - var ret = self.LLVM_SAVEDSTACKS[p]; - self.LLVM_SAVEDSTACKS.splice(p, 1); - stackRestore(ret) -} - -function _llvm_stacksave() { - var self = _llvm_stacksave; - if (!self.LLVM_SAVEDSTACKS) { - self.LLVM_SAVEDSTACKS = [] - } - self.LLVM_SAVEDSTACKS.push(stackSave()); - return self.LLVM_SAVEDSTACKS.length - 1 -} - -function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num) -} - -function _usleep(useconds) { - var start = _emscripten_get_now(); - while (_emscripten_get_now() - start < useconds / 1e3) {} -} - -function _nanosleep(rqtp, rmtp) { - if (rqtp === 0) { - setErrNo(28); - return -1 - } - var seconds = HEAP32[rqtp >> 2]; - var nanoseconds = HEAP32[rqtp + 4 >> 2]; - if (nanoseconds < 0 || nanoseconds > 999999999 || seconds < 0) { - setErrNo(28); - return -1 - } - if (rmtp !== 0) { - HEAP32[rmtp >> 2] = 0; - HEAP32[rmtp + 4 >> 2] = 0 - } - return _usleep(seconds * 1e6 + nanoseconds / 1e3) -} - -function _pthread_attr_destroy(attr) { - return 0 -} - -function _pthread_attr_init(attr) { - return 0 -} - -function _pthread_create() { - return 6 -} - -function _pthread_join() {} - -function _time(ptr) { - var ret = Date.now() / 1e3 | 0; - if (ptr) { - HEAP32[ptr >> 2] = ret - } - return ret -} -var FSNode = function(parent, name, mode, rdev) { - if (!parent) { - parent = this - } - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev -}; -var readMode = 292 | 73; -var writeMode = 146; -Object.defineProperties(FSNode.prototype, { - read: { - get: function() { - return (this.mode & readMode) === readMode - }, - set: function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode - } - }, - write: { - get: function() { - return (this.mode & writeMode) === writeMode - }, - set: function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode - } - }, - isFolder: { - get: function() { - return FS.isDir(this.mode) - } - }, - isDevice: { - get: function() { - return FS.isChrdev(this.mode) - } - } -}); -FS.FSNode = FSNode; -FS.staticInit(); -Module["FS_createFolder"] = FS.createFolder; -Module["FS_createPath"] = FS.createPath; -Module["FS_createDataFile"] = FS.createDataFile; -Module["FS_createPreloadedFile"] = FS.createPreloadedFile; -Module["FS_createLazyFile"] = FS.createLazyFile; -Module["FS_createLink"] = FS.createLink; -Module["FS_createDevice"] = FS.createDevice; -Module["FS_unlink"] = FS.unlink; -Module["requestFullscreen"] = function Module_requestFullscreen(lockPointer, resizeCanvas) { - Browser.requestFullscreen(lockPointer, resizeCanvas) -}; -Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { - Browser.requestAnimationFrame(func) -}; -Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { - Browser.setCanvasSize(width, height, noUpdates) -}; -Module["pauseMainLoop"] = function Module_pauseMainLoop() { - Browser.mainLoop.pause() -}; -Module["resumeMainLoop"] = function Module_resumeMainLoop() { - Browser.mainLoop.resume() -}; -Module["getUserMedia"] = function Module_getUserMedia() { - Browser.getUserMedia() -}; -Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { - return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) -}; -var GLctx; -GL.init(); -for (var i = 0; i < 32; i++) __tempFixedLengthArray.push(new Array(i)); - -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array -} -var asmGlobalArg = {}; -var asmLibraryArg = { - "a": ___assert_fail, - "L": ___syscall221, - "gb": ___syscall5, - "Xa": ___syscall54, - "v": ___wasi_fd_close, - "Ca": ___wasi_fd_read, - "jb": ___wasi_fd_seek, - "ra": ___wasi_fd_write, - "__memory_base": 1024, - "__table_base": 0, - "q": _eglGetProcAddress, - "e": _emscripten_asm_const_ii, - "ie": _emscripten_asm_const_iii, - "Zd": _emscripten_asm_const_iiiiii, - "O": _emscripten_exit_pointerlock, - "Ed": _emscripten_get_element_css_size, - "td": _emscripten_get_gamepad_status, - "id": _emscripten_get_heap_size, - "Zc": _emscripten_get_num_gamepads, - "N": _emscripten_get_pointerlock_status, - "Ec": _emscripten_glActiveTexture, - "tc": _emscripten_glAttachShader, - "mc": _emscripten_glBeginQueryEXT, - "fc": _emscripten_glBindAttribLocation, - "ac": _emscripten_glBindBuffer, - "Wb": _emscripten_glBindFramebuffer, - "Pb": _emscripten_glBindRenderbuffer, - "Ib": _emscripten_glBindTexture, - "yb": _emscripten_glBindVertexArrayOES, - "pb": _emscripten_glBlendColor, - "ib": _emscripten_glBlendEquation, - "hb": _emscripten_glBlendEquationSeparate, - "fb": _emscripten_glBlendFunc, - "eb": _emscripten_glBlendFuncSeparate, - "db": _emscripten_glBufferData, - "cb": _emscripten_glBufferSubData, - "bb": _emscripten_glCheckFramebufferStatus, - "ab": _emscripten_glClear, - "$a": _emscripten_glClearColor, - "_a": _emscripten_glClearDepthf, - "Za": _emscripten_glClearStencil, - "Ya": _emscripten_glColorMask, - "Wa": _emscripten_glCompileShader, - "Va": _emscripten_glCompressedTexImage2D, - "Ua": _emscripten_glCompressedTexSubImage2D, - "Ta": _emscripten_glCopyTexImage2D, - "Sa": _emscripten_glCopyTexSubImage2D, - "Ra": _emscripten_glCreateProgram, - "Qa": _emscripten_glCreateShader, - "Pa": _emscripten_glCullFace, - "Oa": _emscripten_glDeleteBuffers, - "Na": _emscripten_glDeleteFramebuffers, - "Ma": _emscripten_glDeleteProgram, - "La": _emscripten_glDeleteQueriesEXT, - "Ka": _emscripten_glDeleteRenderbuffers, - "Ja": _emscripten_glDeleteShader, - "Ia": _emscripten_glDeleteTextures, - "Ha": _emscripten_glDeleteVertexArraysOES, - "Ga": _emscripten_glDepthFunc, - "Fa": _emscripten_glDepthMask, - "Ea": _emscripten_glDepthRangef, - "Da": _emscripten_glDetachShader, - "Ba": _emscripten_glDisable, - "Aa": _emscripten_glDisableVertexAttribArray, - "za": _emscripten_glDrawArrays, - "ya": _emscripten_glDrawArraysInstancedANGLE, - "xa": _emscripten_glDrawBuffersWEBGL, - "wa": _emscripten_glDrawElements, - "va": _emscripten_glDrawElementsInstancedANGLE, - "ua": _emscripten_glEnable, - "ta": _emscripten_glEnableVertexAttribArray, - "sa": _emscripten_glEndQueryEXT, - "qa": _emscripten_glFinish, - "pa": _emscripten_glFlush, - "oa": _emscripten_glFramebufferRenderbuffer, - "na": _emscripten_glFramebufferTexture2D, - "ma": _emscripten_glFrontFace, - "la": _emscripten_glGenBuffers, - "ka": _emscripten_glGenFramebuffers, - "ja": _emscripten_glGenQueriesEXT, - "ia": _emscripten_glGenRenderbuffers, - "ha": _emscripten_glGenTextures, - "ga": _emscripten_glGenVertexArraysOES, - "fa": _emscripten_glGenerateMipmap, - "ea": _emscripten_glGetActiveAttrib, - "da": _emscripten_glGetActiveUniform, - "ca": _emscripten_glGetAttachedShaders, - "ba": _emscripten_glGetAttribLocation, - "aa": _emscripten_glGetBooleanv, - "$": _emscripten_glGetBufferParameteriv, - "_": _emscripten_glGetError, - "Z": _emscripten_glGetFloatv, - "Y": _emscripten_glGetFramebufferAttachmentParameteriv, - "X": _emscripten_glGetIntegerv, - "W": _emscripten_glGetProgramInfoLog, - "V": _emscripten_glGetProgramiv, - "U": _emscripten_glGetQueryObjecti64vEXT, - "T": _emscripten_glGetQueryObjectivEXT, - "S": _emscripten_glGetQueryObjectui64vEXT, - "R": _emscripten_glGetQueryObjectuivEXT, - "Q": _emscripten_glGetQueryivEXT, - "P": _emscripten_glGetRenderbufferParameteriv, - "he": _emscripten_glGetShaderInfoLog, - "ge": _emscripten_glGetShaderPrecisionFormat, - "fe": _emscripten_glGetShaderSource, - "ee": _emscripten_glGetShaderiv, - "de": _emscripten_glGetString, - "ce": _emscripten_glGetTexParameterfv, - "be": _emscripten_glGetTexParameteriv, - "ae": _emscripten_glGetUniformLocation, - "$d": _emscripten_glGetUniformfv, - "_d": _emscripten_glGetUniformiv, - "Yd": _emscripten_glGetVertexAttribPointerv, - "Xd": _emscripten_glGetVertexAttribfv, - "Wd": _emscripten_glGetVertexAttribiv, - "Vd": _emscripten_glHint, - "Ud": _emscripten_glIsBuffer, - "Td": _emscripten_glIsEnabled, - "Sd": _emscripten_glIsFramebuffer, - "Rd": _emscripten_glIsProgram, - "Qd": _emscripten_glIsQueryEXT, - "Pd": _emscripten_glIsRenderbuffer, - "Od": _emscripten_glIsShader, - "Nd": _emscripten_glIsTexture, - "Md": _emscripten_glIsVertexArrayOES, - "Ld": _emscripten_glLineWidth, - "Kd": _emscripten_glLinkProgram, - "Jd": _emscripten_glPixelStorei, - "Id": _emscripten_glPolygonOffset, - "Hd": _emscripten_glQueryCounterEXT, - "Gd": _emscripten_glReadPixels, - "Fd": _emscripten_glReleaseShaderCompiler, - "Dd": _emscripten_glRenderbufferStorage, - "Cd": _emscripten_glSampleCoverage, - "Bd": _emscripten_glScissor, - "Ad": _emscripten_glShaderBinary, - "zd": _emscripten_glShaderSource, - "yd": _emscripten_glStencilFunc, - "xd": _emscripten_glStencilFuncSeparate, - "wd": _emscripten_glStencilMask, - "vd": _emscripten_glStencilMaskSeparate, - "ud": _emscripten_glStencilOp, - "sd": _emscripten_glStencilOpSeparate, - "rd": _emscripten_glTexImage2D, - "qd": _emscripten_glTexParameterf, - "pd": _emscripten_glTexParameterfv, - "od": _emscripten_glTexParameteri, - "nd": _emscripten_glTexParameteriv, - "md": _emscripten_glTexSubImage2D, - "ld": _emscripten_glUniform1f, - "kd": _emscripten_glUniform1fv, - "jd": _emscripten_glUniform1i, - "hd": _emscripten_glUniform1iv, - "gd": _emscripten_glUniform2f, - "fd": _emscripten_glUniform2fv, - "ed": _emscripten_glUniform2i, - "dd": _emscripten_glUniform2iv, - "cd": _emscripten_glUniform3f, - "bd": _emscripten_glUniform3fv, - "ad": _emscripten_glUniform3i, - "$c": _emscripten_glUniform3iv, - "_c": _emscripten_glUniform4f, - "Yc": _emscripten_glUniform4fv, - "Xc": _emscripten_glUniform4i, - "Wc": _emscripten_glUniform4iv, - "Vc": _emscripten_glUniformMatrix2fv, - "Uc": _emscripten_glUniformMatrix3fv, - "Tc": _emscripten_glUniformMatrix4fv, - "Sc": _emscripten_glUseProgram, - "Rc": _emscripten_glValidateProgram, - "Qc": _emscripten_glVertexAttrib1f, - "Pc": _emscripten_glVertexAttrib1fv, - "Oc": _emscripten_glVertexAttrib2f, - "Nc": _emscripten_glVertexAttrib2fv, - "Mc": _emscripten_glVertexAttrib3f, - "Lc": _emscripten_glVertexAttrib3fv, - "Kc": _emscripten_glVertexAttrib4f, - "Jc": _emscripten_glVertexAttrib4fv, - "Ic": _emscripten_glVertexAttribDivisorANGLE, - "Hc": _emscripten_glVertexAttribPointer, - "Gc": _emscripten_glViewport, - "Fc": _emscripten_memcpy_big, - "Dc": _emscripten_request_pointerlock, - "Cc": _emscripten_resize_heap, - "Bc": _emscripten_run_script, - "Ac": _emscripten_sample_gamepad_data, - "zc": _emscripten_set_click_callback_on_thread, - "yc": _emscripten_set_fullscreenchange_callback_on_thread, - "xc": _emscripten_set_gamepadconnected_callback_on_thread, - "wc": _emscripten_set_gamepaddisconnected_callback_on_thread, - "vc": _emscripten_set_keypress_callback_on_thread, - "uc": _emscripten_set_main_loop, - "sc": _emscripten_set_touchcancel_callback_on_thread, - "rc": _emscripten_set_touchend_callback_on_thread, - "qc": _emscripten_set_touchmove_callback_on_thread, - "pc": _emscripten_set_touchstart_callback_on_thread, - "oc": _exit, - "nc": _glActiveTexture, - "M": _glAttachShader, - "j": _glBindAttribLocation, - "c": _glBindBuffer, - "l": _glBindTexture, - "lc": _glBlendFunc, - "p": _glBufferData, - "u": _glBufferSubData, - "K": _glClear, - "J": _glClearColor, - "kc": _glClearDepthf, - "jc": _glCompileShader, - "ic": _glCompressedTexImage2D, - "hc": _glCreateProgram, - "gc": _glCreateShader, - "ec": _glCullFace, - "o": _glDeleteBuffers, - "I": _glDeleteProgram, - "H": _glDeleteShader, - "G": _glDeleteTextures, - "dc": _glDepthFunc, - "F": _glDetachShader, - "cc": _glDisable, - "n": _glDisableVertexAttribArray, - "bc": _glDrawArrays, - "$b": _glDrawElements, - "E": _glEnable, - "i": _glEnableVertexAttribArray, - "_b": _glFrontFace, - "m": _glGenBuffers, - "Zb": _glGenTextures, - "t": _glGetAttribLocation, - "Yb": _glGetFloatv, - "Xb": _glGetProgramInfoLog, - "D": _glGetProgramiv, - "Vb": _glGetShaderInfoLog, - "C": _glGetShaderiv, - "k": _glGetString, - "s": _glGetUniformLocation, - "Ub": _glLinkProgram, - "Tb": _glPixelStorei, - "Sb": _glReadPixels, - "Rb": _glShaderSource, - "Qb": _glTexImage2D, - "h": _glTexParameteri, - "Ob": _glUniform1i, - "Nb": _glUniform4f, - "Mb": _glUniformMatrix4fv, - "r": _glUseProgram, - "g": _glVertexAttribPointer, - "Lb": _glViewport, - "B": _glfwCreateWindow, - "Kb": _glfwDefaultWindowHints, - "Jb": _glfwDestroyWindow, - "A": _glfwGetPrimaryMonitor, - "f": _glfwGetTime, - "Hb": _glfwGetVideoModes, - "Gb": _glfwInit, - "Fb": _glfwMakeContextCurrent, - "Eb": _glfwSetCharCallback, - "Db": _glfwSetCursorEnterCallback, - "Cb": _glfwSetCursorPosCallback, - "Bb": _glfwSetDropCallback, - "Ab": _glfwSetErrorCallback, - "zb": _glfwSetKeyCallback, - "xb": _glfwSetMouseButtonCallback, - "wb": _glfwSetScrollCallback, - "vb": _glfwSetWindowIconifyCallback, - "ub": _glfwSetWindowShouldClose, - "tb": _glfwSetWindowSizeCallback, - "sb": _glfwSwapBuffers, - "rb": _glfwSwapInterval, - "z": _glfwTerminate, - "d": _glfwWindowHint, - "qb": _llvm_exp2_f32, - "y": _llvm_stackrestore, - "x": _llvm_stacksave, - "ob": _nanosleep, - "nb": _pthread_attr_destroy, - "mb": _pthread_attr_init, - "lb": _pthread_create, - "kb": _pthread_join, - "w": _time, - "b": abort, - "memory": wasmMemory, - "table": wasmTable -}; -var asm = Module["asm"](asmGlobalArg, asmLibraryArg, buffer); -Module["asm"] = asm; -var __GLOBAL__sub_I_main_cpp = Module["__GLOBAL__sub_I_main_cpp"] = function() { - return Module["asm"]["je"].apply(null, arguments) -}; -var ___errno_location = Module["___errno_location"] = function() { - return Module["asm"]["ke"].apply(null, arguments) -}; -var _emscripten_GetProcAddress = Module["_emscripten_GetProcAddress"] = function() { - return Module["asm"]["le"].apply(null, arguments) -}; -var _free = Module["_free"] = function() { - return Module["asm"]["me"].apply(null, arguments) -}; -var _ma_device_process_pcm_frames_capture__webaudio = Module["_ma_device_process_pcm_frames_capture__webaudio"] = function() { - return Module["asm"]["ne"].apply(null, arguments) -}; -var _ma_device_process_pcm_frames_playback__webaudio = Module["_ma_device_process_pcm_frames_playback__webaudio"] = function() { - return Module["asm"]["oe"].apply(null, arguments) -}; -var _main = Module["_main"] = function() { - return Module["asm"]["pe"].apply(null, arguments) -}; -var _malloc = Module["_malloc"] = function() { - return Module["asm"]["qe"].apply(null, arguments) -}; -var stackAlloc = Module["stackAlloc"] = function() { - return Module["asm"]["ze"].apply(null, arguments) -}; -var stackRestore = Module["stackRestore"] = function() { - return Module["asm"]["Ae"].apply(null, arguments) -}; -var stackSave = Module["stackSave"] = function() { - return Module["asm"]["Be"].apply(null, arguments) -}; -var dynCall_iiii = Module["dynCall_iiii"] = function() { - return Module["asm"]["re"].apply(null, arguments) -}; -var dynCall_v = Module["dynCall_v"] = function() { - return Module["asm"]["se"].apply(null, arguments) -}; -var dynCall_vi = Module["dynCall_vi"] = function() { - return Module["asm"]["te"].apply(null, arguments) -}; -var dynCall_vidd = Module["dynCall_vidd"] = function() { - return Module["asm"]["ue"].apply(null, arguments) -}; -var dynCall_vii = Module["dynCall_vii"] = function() { - return Module["asm"]["ve"].apply(null, arguments) -}; -var dynCall_viii = Module["dynCall_viii"] = function() { - return Module["asm"]["we"].apply(null, arguments) -}; -var dynCall_viiii = Module["dynCall_viiii"] = function() { - return Module["asm"]["xe"].apply(null, arguments) -}; -var dynCall_viiiii = Module["dynCall_viiiii"] = function() { - return Module["asm"]["ye"].apply(null, arguments) -}; -Module["asm"] = asm; -Module["getMemory"] = getMemory; -Module["addRunDependency"] = addRunDependency; -Module["removeRunDependency"] = removeRunDependency; -Module["FS_createFolder"] = FS.createFolder; -Module["FS_createPath"] = FS.createPath; -Module["FS_createDataFile"] = FS.createDataFile; -Module["FS_createPreloadedFile"] = FS.createPreloadedFile; -Module["FS_createLazyFile"] = FS.createLazyFile; -Module["FS_createLink"] = FS.createLink; -Module["FS_createDevice"] = FS.createDevice; -Module["FS_unlink"] = FS.unlink; -var calledRun; - -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status -} -var calledMain = false; -dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller -}; - -function callMain(args) { - var entryFunction = Module["_main"]; - args = args || []; - var argc = args.length + 1; - var argv = stackAlloc((argc + 1) * 4); - HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram); - for (var i = 1; i < argc; i++) { - HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]) - } - HEAP32[(argv >> 2) + argc] = 0; - try { - var ret = entryFunction(argc, argv); - exit(ret, true) - } catch (e) { - if (e instanceof ExitStatus) { - return - } else if (e == "unwind") { - noExitRuntime = true; - return - } else { - var toLog = e; - if (e && typeof e === "object" && e.stack) { - toLog = [e, e.stack] - } - err("exception thrown: " + toLog); - quit_(1, e) - } - } finally { - calledMain = true - } -} - -function run(args) { - args = args || arguments_; - if (runDependencies > 0) { - return - } - preRun(); - if (runDependencies > 0) return; - - function doRun() { - if (calledRun) return; - calledRun = true; - Module["calledRun"] = true; - if (ABORT) return; - initRuntime(); - preMain(); - if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); - if (shouldRunNow) callMain(args); - postRun() - } - if (Module["setStatus"]) { - Module["setStatus"]("Running..."); - setTimeout(function() { - setTimeout(function() { - Module["setStatus"]("") - }, 1); - doRun() - }, 1) - } else { - doRun() - } -} -Module["run"] = run; - -function exit(status, implicit) { - if (implicit && noExitRuntime && status === 0) { - return - } - if (noExitRuntime) {} else { - ABORT = true; - EXITSTATUS = status; - exitRuntime(); - if (Module["onExit"]) Module["onExit"](status) - } - quit_(status, new ExitStatus(status)) -} -if (Module["preInit"]) { - if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; - while (Module["preInit"].length > 0) { - Module["preInit"].pop()() - } -} -var shouldRunNow = true; -if (Module["noInitialRun"]) shouldRunNow = false; -noExitRuntime = true; -run(); \ No newline at end of file