load.js
1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
if (!(!Math.fround)) {
var script = document.createElement('script');
script.src = "Release/WEBGL.js";
document.body.appendChild(script);
} else {
var codeXHR = new XMLHttpRequest();
codeXHR.open('GET', 'Release/WEBGL.js', true);
codeXHR.onload = function() {
var code = codeXHR.responseText;
if (!Math.fround) {
try {
console.log('optimizing out Math.fround calls');
var m = /var ([^=]+)=global\.Math\.fround;/.exec(code);
var minified = m[1];
if (!minified) throw 'fail';
var startAsm = code.indexOf('// EMSCRIPTEN_START_FUNCS');
var endAsm = code.indexOf('// EMSCRIPTEN_END_FUNCS');
var asm = code.substring(startAsm, endAsm);
do {
var moar = false; // we need to re-do, as x(x( will not be fixed
asm = asm.replace(new RegExp('[^a-zA-Z0-9\\$\\_]' + minified + '\\(', 'g'), function(s) { moar = true; return s[0] + '(' });
} while (moar);
code = code.substring(0, startAsm) + asm + code.substring(endAsm);
code = code.replace("'use asm'", "'almost asm'");
} catch(e) { console.log('failed to optimize out Math.fround calls ' + e) }
}
var blob = new Blob([code], { type: 'text/javascript' });
codeXHR = null;
var src = URL.createObjectURL(blob);
var script = document.createElement('script');
script.src = URL.createObjectURL(blob);
script.onload = function() {
URL.revokeObjectURL(script.src);
};
document.body.appendChild(script);
};
codeXHR.send(null);
}