diff options
Diffstat (limited to 'demos/raytrace.js')
-rw-r--r-- | demos/raytrace.js | 2668 |
1 files changed, 640 insertions, 2028 deletions
diff --git a/demos/raytrace.js b/demos/raytrace.js index 2f4dffeb..9da9b744 100644 --- a/demos/raytrace.js +++ b/demos/raytrace.js @@ -7,2084 +7,696 @@ // Optimized using Closure Compiler //==================================================================================== - -// === Auto-generated preamble library stuff === - -function __globalConstructor__() { -} - -var __THREW__ = false; // Used in checking for thrown exceptions. - -var __ATEXIT__ = []; - - - - -function assert(condition, text) { - if (!condition) { - var text = "Assertion failed: " + text; - print(text + ':\n' + (new Error).stack); - throw "Assertion: " + text; +function l() { + return function() { } } - -function Pointer_niceify(ptr) { - return { slab: HEAP, pos: ptr }; +function m() { } - -// Creates a pointer for a certain slab and a certain address in that slab. -// If just a slab is given, will allocate room for it and copy it there. In -// other words, do whatever is necessary in order to return a pointer, that -// points to the slab (and possibly position) we are given. - -ALLOC_NORMAL = 0; // Tries to use _malloc() -ALLOC_STACK = 1; // Lives for the duration of the current function call -ALLOC_STATIC = 2; // Cannot be freed - -function Pointer_make(slab, pos, allocator) { - pos = pos ? pos : 0; - if (slab === HEAP) return pos; - // Flatten out - needed for global consts/vars - function flatten(slab) { - if (!slab || slab.length === undefined || typeof slab === 'function') return [slab]; - return slab.map(flatten).reduce(function(a,b) { return a.concat(b) }, []); +FUNCTION_TABLE = []; +var o = []; +function q(a, b) { + if(!a) { + b = "Assertion failed: " + b; + print(b + ":\n" + Error().stack); + throw"Assertion: " + b; } - var slab = flatten(slab); - // Finalize - var ret = [_malloc, stackAlloc, staticAlloc][allocator ? allocator : ALLOC_STATIC](Math.max(slab.length - pos, 1)); - for (var i = 0; i < slab.length - pos; i++) { - HEAP[ret + i] = slab[pos + i]; +} +ALLOC_NORMAL = 0; +ALLOC_STACK = 1; +ALLOC_STATIC = 2; +function r(a, b, c) { + function d(g) { + if(!g || g.length === undefined || typeof g === "function") { + return[g] + } + return g.map(d).reduce(function(i, j) { + return i.concat(j) + }, []) } - return ret; + b = b ? b : 0; + if(a === HEAP) { + return b + } + a = d(a); + c = [_malloc, aa, u][c ? c : ALLOC_STATIC](Math.max(a.length - b, 1)); + for(var e = 0;e < a.length - b;e++) { + var h = a[b + e]; + if(typeof h === "number" || typeof h === "boolean") { + IHEAP[c + e] = h; + FHEAP[c + e] = h + }else { + HEAP[c + e] = h + } + } + return c } - -function Pointer_stringify(ptr) { - ptr = Pointer_niceify(ptr); - - var ret = ""; - var i = 0; - var t; - while (1) { -// if ((ptr.pos + i) >= ptr.slab.length) { return "<< Invalid read: " + (ptr.pos+i) + " : " + ptr.slab.length + " >>"; } else {} - if ((ptr.pos+i) >= ptr.slab.length) { break; } else {} - t = String.fromCharCode(ptr.slab[ptr.pos + i]); - if (t == "\0") { break; } else {} - ret += t; - i += 1; +function ba(a) { + a = {e:IHEAP, d:a}; + for(var b = "", c = 0, d;;) { + if(a.d + c >= a.e.length) { + break + } + d = String.fromCharCode(a.e[a.d + c]); + if(d == "\u0000") { + break + } + b += d; + c += 1 } - return ret; + return b } - -// Memory management - PAGE_SIZE = 4096; -function alignMemoryPage(x) { - return Math.ceil(x/PAGE_SIZE)*PAGE_SIZE; -} - -// If we don't have malloc/free implemented, use a simple implementation. -if (!this._malloc) { - _malloc = staticAlloc; - _free = function() { }; // leak! -} - -// Mangled "new"s... need a heuristic for autogeneration... -__Znwj = _malloc; // llvm-gcc -__Znaj = _malloc; // llvm-gcc -__Znam = _malloc; // clang -__Znwm = _malloc; // clang -// Mangled "delete"s... need a heuristic for autogeneration... -__ZdlPv = _free; // llvm-gcc -__ZdaPv = _free; // llvm-gcc - -function __initializeRuntime__() { - HEAP = intArrayFromString('(null)'); // So printing %s of NULL gives '(null)' - // Also this ensures we leave 0 as an invalid address, 'NULL' - - STACK_STACK = []; - STACK_ROOT = STACKTOP = alignMemoryPage(10); - if (!this['TOTAL_STACK']) TOTAL_STACK = 64*1024*100; // Reserved room for stack - STACK_MAX = STACK_ROOT + TOTAL_STACK; - - STATICTOP = alignMemoryPage(STACK_MAX); -} - -// stdio.h - -// C-style: we work on ints on the HEAP. -function __formatString() { - var textIndex = arguments[0]; - var argIndex = 1; - var ret = []; - var curr = -1; - while (curr != 0) { - curr = HEAP[textIndex]; - next = HEAP[textIndex+1]; - if (curr == '%'.charCodeAt(0) && ['d', 'u', 'f', '.'].indexOf(String.fromCharCode(next)) != -1) { - var argText = String(arguments[argIndex]); - // Handle very very simply formatting, namely only %.Xf - if (next == '.'.charCodeAt(0)) { - var limit = parseInt(String.fromCharCode(HEAP[textIndex+2])); - var dotIndex = argText.indexOf('.'); - if (dotIndex == -1) { - dotIndex = argText.length; - argText += '.'; - } - argText += '00000000000'; // padding - argText = argText.substr(0, dotIndex+1+limit); - textIndex += 2; - } else if (next == 'u'.charCodeAt(0)) { - argText = String(unSign(arguments[argIndex], 32)); - } - argText.split('').forEach(function(chr) { - ret.push(chr.charCodeAt(0)); - }); - argIndex += 1; - textIndex += 2; - } else if (curr == '%'.charCodeAt(0) && next == 's'.charCodeAt(0)) { - ret = ret.concat(String_copy(arguments[argIndex])); - argIndex += 1; - textIndex += 2; - } else { - ret.push(curr); - textIndex += 1; +if(!this.f) { + _malloc = u; + _free = l() +} +__Znwm = __Znam = __Znaj = __Znwj = _malloc; +__ZdaPv = __ZdlPv = _free; +function ia() { + HEAP = x("(null)"); + this.TOTAL_MEMORY || (TOTAL_MEMORY = 52428800); + if(this.Int32Array) { + IHEAP = new Int32Array(TOTAL_MEMORY); + for(var a = 0;a < HEAP.length;a++) { + IHEAP[a] = HEAP[a] } + }else { + IHEAP = HEAP } - return Pointer_make(ret, 0, ALLOC_STACK); // NB: Stored on the stack -} - -// Copies a list of num items on the HEAP into a -// a normal JavaScript array of numbers -function Array_copy(ptr, num) { - // XXX hardcoded ptr impl - return HEAP.slice(ptr, ptr+num); -} - -// Copies a C-style string, terminated by a zero, from the HEAP into -// a normal JavaScript array of numbers -function String_copy(ptr, addZero) { - // XXX hardcoded ptr impl - return Array_copy(ptr, _strlen(ptr)).concat(addZero ? [0] : []); -} - -// stdlib.h - -// Get a pointer, return int value of the string it points to -function _atoi(s) { - return Math.floor(Number(Pointer_stringify(s))); + FHEAP = this.Float64Array ? new Float64Array(TOTAL_MEMORY) : HEAP; + STACK_ROOT = STACKTOP = Math.ceil(10 / PAGE_SIZE) * PAGE_SIZE; + this.TOTAL_STACK || (TOTAL_STACK = 1048576); + STACK_MAX = STACK_ROOT + TOTAL_STACK; + STATICTOP = Math.ceil(STACK_MAX / PAGE_SIZE) * PAGE_SIZE } - -function _llvm_memcpy_i32(dest, src, num, idunno) { -// XXX hardcoded ptr impl - for (var i = 0; i < num; i++) { - HEAP[dest + i] = HEAP[src + i]; +function ja(a, b, c) { + for(var d = 0;d < c;d++) { + HEAP[a + d] = HEAP[b + d]; + IHEAP[a + d] = IHEAP[b + d]; + FHEAP[a + d] = FHEAP[b + d] } -// dest = Pointer_niceify(dest); -// src = Pointer_niceify(src); -// dest.slab = src.slab.slice(src.pos); } -_llvm_memcpy_i64 = _llvm_memcpy_i32; - -// Tools - -PRINTBUFFER = ''; -function __print__(text) { - // We print only when we see a '\n', as console JS engines always add - // one anyhow. - PRINTBUFFER = PRINTBUFFER + text; - var endIndex; - while ((endIndex = PRINTBUFFER.indexOf('\n')) != -1) { - print(PRINTBUFFER.substr(0, endIndex)); - PRINTBUFFER = PRINTBUFFER.substr(endIndex + 1); +_llvm_memcpy_p0i8_p0i8_i32 = _llvm_memcpy_i64 = ja; +_llvm_memset_p0i8_i32 = function(a, b, c) { + for(var d = 0;d < c;d++) { + HEAP[a + d] = IHEAP[a + d] = FHEAP[a + d] = b } -} - -function jrint(label, obj) { // XXX manual debugging - if (!obj) { - obj = label; - label = ''; - } else - label = label + ' : '; - print(label + JSON.stringify(obj)); -} - -// This processes a 'normal' string into a C-line array of numbers. -// For LLVM-originating strings, see parser.js:parseLLVMString function -function intArrayFromString(stringy) { - var ret = []; - var t; - var i = 0; - while (i < stringy.length) { - ret.push(stringy.charCodeAt(i)); - i = i + 1; +}; +PRINTBUFFER = ""; +function x(a) { + for(var b = [], c = 0;c < a.length;) { + b.push(a.charCodeAt(c)); + c += 1 } - ret.push(0); - return ret; -} - -// Converts a value we have as signed, into an unsigned value. For -// example, -1 in int32 would be a very large number as unsigned. -function unSign(value, bits) { - if (value >= 0) return value; - return 2*Math.abs(1 << (bits-1)) + value; -} - -// === Body === - -function stackAlloc(size) { var ret = STACKTOP; STACKTOP += size; return ret; } -function staticAlloc(size) { var ret = STATICTOP; STATICTOP += size; return ret; } - -var _0___FLATTENER = [0,1]; -var _struct__1__pthread_mutex_s___FLATTENER = [0,1,2,3,4,5]; -var _struct_SDL_BlitMap___FLATTENER = []; -var _struct_SDL_Color___FLATTENER = [0,1,2,3]; -var _struct_SDL_Palette___FLATTENER = [0,1]; -var _struct_SDL_PixelFormat___FLATTENER = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; -var _struct_SDL_Rect___FLATTENER = [0,1,2,3]; -var _struct_SDL_Surface___FLATTENER = [0,1,2,3,4,5,6,7,8,12,13,14,15,16]; -var _struct___pthread_slist_t___FLATTENER = [0]; -var _struct_basis_t___FLATTENER = [0,3,6]; -var _struct_hit_t___FLATTENER = [0,3]; -var _struct_node_t___FLATTENER = [0,4,8]; -var _struct_private_hwdata___FLATTENER = []; -var _struct_ray_t___FLATTENER = [0,3]; -var _struct_sphere_t___FLATTENER = [0,3]; -var __struct_std__ios_base__Init____FLATTENER = [0]; -var _struct_v_t___FLATTENER = [0,1,2]; -var _union__0__45___FLATTENER = [0]; -var _union_pthread_attr_t___FLATTENER = [0,1]; -var _union_pthread_mutex_t___FLATTENER = [0]; -var _union_pthread_mutexattr_t___FLATTENER = [0]; -this.__defineGetter__("_screen", function() { delete _screen; _screen = Pointer_make([0], 0, ALLOC_STATIC); return _screen }); -this.__defineGetter__("__ZStL8__ioinit", function() { delete __ZStL8__ioinit; __ZStL8__ioinit = Pointer_make([0], 0, ALLOC_STATIC); return __ZStL8__ioinit }); -var ___dso_handle = 0; /* external value? */ -this.__defineGetter__("__ZL5light", function() { delete __ZL5light; __ZL5light = Pointer_make([0,0,0], 0, ALLOC_STATIC); return __ZL5light }); -this.__defineGetter__("__ZL4pool", function() { delete __ZL4pool; __ZL4pool = Pointer_make([0], 0, ALLOC_STATIC); return __ZL4pool }); -this.__defineGetter__("__ZL3end", function() { delete __ZL3end; __ZL3end = Pointer_make([0], 0, ALLOC_STATIC); return __ZL3end }); -this.__defineGetter__("__ZL4grid", function() { delete __ZL4grid; __ZL4grid = Pointer_make([ [-1.000000e+00, -0.3333333333333333], [0.3333333333333333, -1.000000e+00], [-0.3333333333333333, 1.000000e+00], [1.000000e+00, 0.3333333333333333] ], 0, ALLOC_STATIC); return __ZL4grid }); - -__globalConstructor__ = function() { - __GLOBAL__I_screen(); -} - - -_sqrt = function (x) { return Math.sqrt(x) } -__ZNSt8ios_base4InitC1Ev = function () { - // need valid 'file descriptors' - __ZSt4cout = 1; - __ZSt4cerr = 2; + b.push(0); + return b +} +function aa(a) { + var b = STACKTOP; + q(a > 0); + STACKTOP += a; + STACKTOP = Math.ceil(STACKTOP / 4) * 4; + q(STACKTOP < STACK_ROOT + STACK_MAX); + return b +} +function u(a) { + var b = STATICTOP; + q(a > 0); + STATICTOP += a; + STATICTOP = Math.ceil(STATICTOP / 4) * 4; + return b +} +var ka = [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 16]; +this.__defineGetter__("_screen", function() { + delete _screen; + return _screen = r([0], 0, ALLOC_STATIC) +}); +this.__defineGetter__("__ZStL8__ioinit", function() { + delete __ZStL8__ioinit; + return __ZStL8__ioinit = r([0], 0, ALLOC_STATIC) +}); +var la = 0; +this.__defineGetter__("__ZL5light", function() { + delete __ZL5light; + return __ZL5light = r([0, 0, 0], 0, ALLOC_STATIC) +}); +this.__defineGetter__("__ZL4pool", function() { + delete __ZL4pool; + return __ZL4pool = r([0], 0, ALLOC_STATIC) +}); +this.__defineGetter__("__ZL3end", function() { + delete __ZL3end; + return __ZL3end = r([0], 0, ALLOC_STATIC) +}); +this.__defineGetter__("__ZL4grid", function() { + delete __ZL4grid; + return __ZL4grid = r([[-1, -0.3333333333333333], [0.3333333333333333, -1], [-0.3333333333333333, 1], [1, 0.3333333333333333]], 0, ALLOC_STATIC) +}); +m = function() { + B() +}; +_sqrt = Math.sqrt; +__ZNSt8ios_base4InitC1Ev = function() { + __ZSt4cout = 1; + __ZSt4cerr = 2 +}; +___cxa_atexit = function(a) { + o.push(a) +}; +__ZNSt8ios_base4InitD1Ev = function() { + __ZSt4cout = 1; + __ZSt4cerr = 2 +}; +_cos = Math.cos; +_sin = Math.sin; +_SDL_LockSurface = function(a) { + var b = SDL_SURFACES[a]; + b.a = b.c.getImageData(0, 0, b.width, b.height); + for(var c = b.a.data.length, d = 0;d < c;d++) { + IHEAP[b.b + d] = b.a.data[d] } -___cxa_atexit = function (func) { - __ATEXIT__.push(func); + IHEAP[a + 5] = b.b +}; +_SDL_UnlockSurface = function(a) { + a = SDL_SURFACES[a]; + for(var b = a.a.data.length, c = 0;c < b;c++) { + a.a.data[c] = IHEAP[a.b + c] } -__ZNSt8ios_base4InitD1Ev = function () { - // need valid 'file descriptors' - __ZSt4cout = 1; - __ZSt4cerr = 2; + for(c = 0;c < b / 4;c++) { + a.a.data[c * 4 + 3] = 255 } -_cos = function (x) { return Math.cos(x) } -_sin = function (x) { return Math.sin(x) } -_SDL_LockSurface = function (surf) { - var surfData = SDL_SURFACES[surf]; - surfData.image = surfData.ctx.getImageData(0, 0, surfData.width, surfData.height); - // Copy pixel data to somewhere accessible to 'C/C++' - var num = surfData.image.data.length; - for (var i = 0; i < num; i++) { - HEAP[surfData.buffer+i] = surfData.image.data[i]; + a.c.putImageData(a.a, 0, 0); + a.a = null +}; +_SDL_Flip = l(); +_SDL_Init = function() { + SDL_SURFACES = {}; + return 1 +}; +_SDL_SetVideoMode = function(a, b, c, d, e) { + c = _malloc(14); + SDL_SURFACES[c] = {width:a, height:b, canvas:e, c:e.getContext("2d"), g:c, b:_malloc(a * b * 4)}; + return c +}; +_SDL_Delay = l(); +_SDL_Quit = function() { + return 1 +}; +function B() { + C(1, 65535) +} +FUNCTION_TABLE[0] = B; +FUNCTION_TABLE[1] = function(a, b) { + return b +}; +FUNCTION_TABLE[2] = l(); +function E(a, b) { + return FHEAP[a] < FHEAP[b] ? b : a +} +FUNCTION_TABLE[3] = E; +function F(a, b) { + return IHEAP[a] < IHEAP[b] ? b : a +} +FUNCTION_TABLE[4] = F; +var ma = 5; +FUNCTION_TABLE[5] = function() { + __ZNSt8ios_base4InitD1Ev(__ZStL8__ioinit) +}; +function G(a, b, c, d) { + FHEAP[a] = b; + FHEAP[a + 1] = c; + FHEAP[a + 2] = d +} +FUNCTION_TABLE[6] = G; +function H(a, b, c) { + G(a, FHEAP[b] + FHEAP[c], FHEAP[b + 1] + FHEAP[c + 1], FHEAP[b + 2] + FHEAP[c + 2]) +} +FUNCTION_TABLE[7] = H; +function I(a, b, c) { + G(a, FHEAP[b] - FHEAP[c], FHEAP[b + 1] - FHEAP[c + 1], FHEAP[b + 2] - FHEAP[c + 2]) +} +FUNCTION_TABLE[8] = I; +function J(a, b) { + G(a, 0 - FHEAP[b], 0 - FHEAP[b + 1], 0 - FHEAP[b + 2]) +} +FUNCTION_TABLE[9] = J; +function K(a, b, c) { + G(a, FHEAP[b] * c, FHEAP[b + 1] * c, FHEAP[b + 2] * c) +} +FUNCTION_TABLE[10] = K; +function L(a, b, c) { + G(a, FHEAP[b + 1] * FHEAP[c + 2] - FHEAP[b + 2] * FHEAP[c + 1], FHEAP[b + 2] * FHEAP[c] - FHEAP[b] * FHEAP[c + 2], FHEAP[b] * FHEAP[c + 1] - FHEAP[b + 1] * FHEAP[c]) +} +FUNCTION_TABLE[11] = L; +function M(a, b) { + return FHEAP[a] * FHEAP[b] + FHEAP[a + 1] * FHEAP[b + 1] + FHEAP[a + 2] * FHEAP[b + 2] +} +FUNCTION_TABLE[12] = M; +function P(a, b) { + FHEAP[a] = FHEAP[b]; + FHEAP[a + 1] = FHEAP[b + 1]; + FHEAP[a + 2] = FHEAP[b + 2] +} +FUNCTION_TABLE[13] = P; +function Q(a, b, c) { + FHEAP[a] = FHEAP[b]; + FHEAP[a + 1] = FHEAP[b + 1]; + FHEAP[a + 2] = FHEAP[b + 2]; + a = a + 3; + FHEAP[a] = FHEAP[c]; + FHEAP[a + 1] = FHEAP[c + 1]; + FHEAP[a + 2] = FHEAP[c + 2] +} +FUNCTION_TABLE[14] = Q; +function R(a) { + G(a, 0, 0, 0); + FHEAP[a + 3] = Infinity +} +FUNCTION_TABLE[15] = R; +FUNCTION_TABLE[16] = l(); +function S(a, b, c) { + FHEAP[a] = FHEAP[b]; + FHEAP[a + 1] = FHEAP[b + 1]; + FHEAP[a + 2] = FHEAP[b + 2]; + FHEAP[a + 3] = c +} +FUNCTION_TABLE[17] = S; +function T(a, b, c) { + var d = STACKTOP; + STACKTOP += 3; + var e = 1 / FHEAP[b + 3]; + I(d, c, b); + K(a, d, e); + STACKTOP = d +} +FUNCTION_TABLE[18] = T; +FUNCTION_TABLE[19] = l(); +function U(a, b, c, d) { + FHEAP[a] = FHEAP[b]; + FHEAP[a + 1] = FHEAP[b + 1]; + FHEAP[a + 2] = FHEAP[b + 2]; + FHEAP[a + 3] = FHEAP[b + 3]; + b = a + 4; + FHEAP[b] = FHEAP[c]; + FHEAP[b + 1] = FHEAP[c + 1]; + FHEAP[b + 2] = FHEAP[c + 2]; + FHEAP[b + 3] = FHEAP[c + 3]; + IHEAP[a + 8] = d +} +FUNCTION_TABLE[20] = U; +function V(a, b) { + var c = STACKTOP; + STACKTOP += 12; + var d = c + 3, e = c + 6, h = c + 9; + W(d, b); + if((FHEAP[d] * FHEAP[d] != 1 != 0 & FHEAP[d + 1] * FHEAP[d + 1] != 1 != 0 & FHEAP[d + 2] * FHEAP[d + 2] != 1) != 0) { + var g = a + 3; + FHEAP[g] = FHEAP[d]; + FHEAP[g + 1] = FHEAP[d + 1]; + FHEAP[g + 2] = FHEAP[d + 2]; + if(FHEAP[d + 1] * FHEAP[d + 1] > FHEAP[d] * FHEAP[d]) { + if(FHEAP[d + 1] * FHEAP[d + 1] > FHEAP[d + 2] * FHEAP[d + 2]) { + FHEAP[a + 3 + 1] = 0 - FHEAP[a + 3 + 1] + }else { + FHEAP[a + 3 + 2] = 0 - FHEAP[a + 3 + 2] + } + }else { + if(FHEAP[d + 2] * FHEAP[d + 2] > FHEAP[d] * FHEAP[d]) { + FHEAP[a + 3 + 2] = 0 - FHEAP[a + 3 + 2] + }else { + FHEAP[a + 3] = 0 - FHEAP[a + 3] + } } - // Mark in C/C++-accessible SDL structure - // SDL_Surface has the following fields: Uint32 flags, SDL_PixelFormat *format; int w, h; Uint16 pitch; void *pixels; ... - // So we have fields all of the same size, and 5 of them before us. - HEAP[surf + 5*1] = surfData.buffer; + }else { + G(c, FHEAP[d + 2], FHEAP[d], FHEAP[d + 1]); + g = a + 3; + FHEAP[g] = FHEAP[c]; + FHEAP[g + 1] = FHEAP[c + 1]; + FHEAP[g + 2] = FHEAP[c + 2] } -_SDL_UnlockSurface = function (surf) { - var surfData = SDL_SURFACES[surf]; - // Copy pixel data to image - var num = surfData.image.data.length; - for (var i = 0; i < num; i++) { - surfData.image.data[i] = HEAP[surfData.buffer+i]; + FHEAP[a] = FHEAP[d]; + FHEAP[a + 1] = FHEAP[d + 1]; + FHEAP[a + 2] = FHEAP[d + 2]; + d = a + 6; + L(e, a, a + 3); + FHEAP[d] = FHEAP[e]; + FHEAP[d + 1] = FHEAP[e + 1]; + FHEAP[d + 2] = FHEAP[e + 2]; + e = a + 3; + L(h, a, a + 6); + FHEAP[e] = FHEAP[h]; + FHEAP[e + 1] = FHEAP[h + 1]; + FHEAP[e + 2] = FHEAP[h + 2]; + STACKTOP = c +} +FUNCTION_TABLE[21] = V; +function X(a) { + return M(a, a) +} +FUNCTION_TABLE[22] = X; +function W(a, b) { + var c = 1 / _sqrt(X(b)); + K(a, b, c) +} +FUNCTION_TABLE[23] = W; +function C(a, b) { + var c = STACKTOP; + STACKTOP += 3; + var d = a == 1; + a:do { + if(d) { + if(b != 65535) { + break a + } + __ZNSt8ios_base4InitC1Ev(__ZStL8__ioinit); + ___cxa_atexit(ma, 0, la); + G(c, -0.5, -0.65, 0.9); + W(__ZL5light, c) } - for (var i = 0; i < num/4; i++) { - surfData.image.data[i*4+3] = 255; // opacity, as canvases blend alpha + }while(0); + STACKTOP = c +} +FUNCTION_TABLE[24] = C; +function Y(a, b) { + var c = STACKTOP; + STACKTOP += 3; + var d, e, h; + I(c, a, b); + d = M(b + 3, c); + e = d * d - X(c) + FHEAP[a + 3] * FHEAP[a + 3]; + if(e < 0) { + d = Infinity + }else { + h = _sqrt(e); + e = d + h; + d = d - h; + if(e < 0) { + d = Infinity + }else { + d = d = d > 0 ? d : e } - // Copy to canvas - surfData.ctx.putImageData(surfData.image, 0, 0); - // Cleanup - surfData.image = null; - } -_SDL_Flip = function (surf) { - // We actually do this in Unlock... - } -// stub for _atoi -// stub for __Znaj -_SDL_Init = function (what) { - SDL_SURFACES = {}; - return 1; - } -_SDL_SetVideoMode = function (width, height, depth, flags, canvas) { - // ^^^^^^ a 'canvas' parameter is added here; supply a canvas from JS there - var surf = _malloc(14*1); // SDL_Surface has 14 fields of quantum size - SDL_SURFACES[surf] = { - width: width, - height: height, - canvas: canvas, - ctx: canvas.getContext('2d'), - surf: surf, - buffer: _malloc(width*height*4), - }; - return surf; - } -_SDL_Delay = function (delay) { - // No can do... unless you were a generator... - } -_SDL_Quit = function () { - return 1; } -// stub for i32 -// stub for i8_ -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 -// stub for i32 - - -function __GLOBAL__I_screen() { - STACK_STACK.push(STACKTOP); - var __label__; - __Z41__static_initialization_and_destruction_0ii(1, 65535); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZnwjPv(_unnamed_arg, ___p) { - STACK_STACK.push(STACKTOP); - var __label__; - var _unnamed_arg_addr; - var ___p_addr = STACKTOP; STACKTOP += 1; - var _retval = STACKTOP; STACKTOP += 1; - var _0 = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - _unnamed_arg_addr = _unnamed_arg; - HEAP[___p_addr] = ___p; - var _1 = HEAP[___p_addr]; - HEAP[_0] = _1; - var _2 = HEAP[_0]; - HEAP[_0] = _2; - var _3 = HEAP[_0]; - HEAP[_retval] = _3; - __label__ = 0; /* _return */ - var _retval1 = HEAP[_retval]; - STACKTOP = STACK_STACK.pop(); - return _retval1; -} - - -function __ZN3v_tC1Ev(_this) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZNK3v_tplERKS_(_agg_result, _this, _v) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - var _0 = HEAP[_this_addr]; - var _2 = HEAP[0 + _0+2*1]; - var _3 = HEAP[_v_addr]; - var _5 = HEAP[0 + _3+2*1]; - var _6 = _2 + _5; - var _7 = HEAP[_this_addr]; - var _9 = HEAP[0 + _7+1*1]; - var _10 = HEAP[_v_addr]; - var _12 = HEAP[0 + _10+1*1]; - var _13 = _9 + _12; - var _14 = HEAP[_this_addr]; - var _16 = HEAP[0 + _14+0*1]; - var _17 = HEAP[_v_addr]; - var _19 = HEAP[0 + _17+0*1]; - var _20 = _16 + _19; - __ZN3v_tC1Eddd(_agg_result, _20, _13, _6); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZNK3v_tmiERKS_(_agg_result, _this, _v) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - var _0 = HEAP[_this_addr]; - var _2 = HEAP[0 + _0+2*1]; - var _3 = HEAP[_v_addr]; - var _5 = HEAP[0 + _3+2*1]; - var _6 = _2 - _5; - var _7 = HEAP[_this_addr]; - var _9 = HEAP[0 + _7+1*1]; - var _10 = HEAP[_v_addr]; - var _12 = HEAP[0 + _10+1*1]; - var _13 = _9 - _12; - var _14 = HEAP[_this_addr]; - var _16 = HEAP[0 + _14+0*1]; - var _17 = HEAP[_v_addr]; - var _19 = HEAP[0 + _17+0*1]; - var _20 = _16 - _19; - __ZN3v_tC1Eddd(_agg_result, _20, _13, _6); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZNK3v_tngEv(_agg_result, _this) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - var _0 = HEAP[_this_addr]; - var _2 = HEAP[0 + _0+2*1]; - var _3 = -0.000000e+00 - _2; - var _4 = HEAP[_this_addr]; - var _6 = HEAP[0 + _4+1*1]; - var _7 = -0.000000e+00 - _6; - var _8 = HEAP[_this_addr]; - var _10 = HEAP[0 + _8+0*1]; - var _11 = -0.000000e+00 - _10; - __ZN3v_tC1Eddd(_agg_result, _11, _7, _3); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZNK3v_tmlEd(_agg_result, _this, _d) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _d_addr; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - _d_addr = _d; - var _0 = HEAP[_this_addr]; - var _2 = HEAP[0 + _0+2*1]; - var _3 = _d_addr; - var _4 = _2 * _3; - var _5 = HEAP[_this_addr]; - var _7 = HEAP[0 + _5+1*1]; - var _8 = _d_addr; - var _9 = _7 * _8; - var _10 = HEAP[_this_addr]; - var _12 = HEAP[0 + _10+0*1]; - var _13 = _d_addr; - var _14 = _12 * _13; - __ZN3v_tC1Eddd(_agg_result, _14, _9, _4); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZNK3v_t5crossERKS_(_agg_result, _this, _v) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - var _0 = HEAP[_this_addr]; - var _2 = HEAP[0 + _0+0*1]; - var _3 = HEAP[_v_addr]; - var _5 = HEAP[0 + _3+1*1]; - var _6 = _2 * _5; - var _7 = HEAP[_this_addr]; - var _9 = HEAP[0 + _7+1*1]; - var _10 = HEAP[_v_addr]; - var _12 = HEAP[0 + _10+0*1]; - var _13 = _9 * _12; - var _14 = _6 - _13; - var _15 = HEAP[_this_addr]; - var _17 = HEAP[0 + _15+2*1]; - var _18 = HEAP[_v_addr]; - var _20 = HEAP[0 + _18+0*1]; - var _21 = _17 * _20; - var _22 = HEAP[_this_addr]; - var _24 = HEAP[0 + _22+0*1]; - var _25 = HEAP[_v_addr]; - var _27 = HEAP[0 + _25+2*1]; - var _28 = _24 * _27; - var _29 = _21 - _28; - var _30 = HEAP[_this_addr]; - var _32 = HEAP[0 + _30+1*1]; - var _33 = HEAP[_v_addr]; - var _35 = HEAP[0 + _33+2*1]; - var _36 = _32 * _35; - var _37 = HEAP[_this_addr]; - var _39 = HEAP[0 + _37+2*1]; - var _40 = HEAP[_v_addr]; - var _42 = HEAP[0 + _40+1*1]; - var _43 = _39 * _42; - var _44 = _36 - _43; - __ZN3v_tC1Eddd(_agg_result, _44, _29, _14); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZNK3v_t3dotERKS_(_this, _v) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var _retval; - var _0; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - var _1 = HEAP[_this_addr]; - var _3 = HEAP[0 + _1+0*1]; - var _4 = HEAP[_v_addr]; - var _6 = HEAP[0 + _4+0*1]; - var _7 = _3 * _6; - var _8 = HEAP[_this_addr]; - var _10 = HEAP[0 + _8+1*1]; - var _11 = HEAP[_v_addr]; - var _13 = HEAP[0 + _11+1*1]; - var _14 = _10 * _13; - var _15 = _7 + _14; - var _16 = HEAP[_this_addr]; - var _18 = HEAP[0 + _16+2*1]; - var _19 = HEAP[_v_addr]; - var _21 = HEAP[0 + _19+2*1]; - var _22 = _18 * _21; - _0 = _15 + _22; - _retval = _0; - __label__ = 0; /* _return */ - var _retval1 = _retval; - STACKTOP = STACK_STACK.pop(); - return _retval1; -} - - -function __ZSt3maxIdERKT_S2_S2_(___a, ___b) { - STACK_STACK.push(STACKTOP); - var __label__; - var ___a_addr = STACKTOP; STACKTOP += 1; - var ___b_addr = STACKTOP; STACKTOP += 1; - var _retval = STACKTOP; STACKTOP += 1; - var _0 = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[___a_addr] = ___a; - HEAP[___b_addr] = ___b; - var _1 = HEAP[___a_addr]; - var _2 = HEAP[_1]; - var _3 = HEAP[___b_addr]; - var _4 = HEAP[_3]; - var _5 = 0+(_2 < _4); - if (_5) { __label__ = 1; /* _bb */ } else { __label__ = 2; /* _bb1 */ } - _bb: do { - if (__label__ == 1) { - var _6 = HEAP[___b_addr]; - HEAP[_0] = _6; - __label__ = 3; /* _bb2 */ break _bb; - } - else if (__label__ == 2) { - var _7 = HEAP[___a_addr]; - HEAP[_0] = _7; - __label__ = 3; /* _bb2 */ break _bb; + d = d; + STACKTOP = c; + return d +} +FUNCTION_TABLE[25] = Y; +function Z(a, b) { + var c = STACKTOP; + STACKTOP += 9; + var d = c + 3, e, h, g = c + 6; + h = IHEAP[__ZL4pool]; + a:for(;;) { + if(!(h < IHEAP[__ZL3end])) { + break a } - } while(0); - var _8 = HEAP[_0]; - HEAP[_retval] = _8; - __label__ = 0; /* _return */ - var _retval3 = HEAP[_retval]; - STACKTOP = STACK_STACK.pop(); - return _retval3; -} - - -function __ZSt3maxIiERKT_S2_S2_(___a, ___b) { - STACK_STACK.push(STACKTOP); - var __label__; - var ___a_addr = STACKTOP; STACKTOP += 1; - var ___b_addr = STACKTOP; STACKTOP += 1; - var _retval = STACKTOP; STACKTOP += 1; - var _0 = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[___a_addr] = ___a; - HEAP[___b_addr] = ___b; - var _1 = HEAP[___a_addr]; - var _2 = HEAP[_1]; - var _3 = HEAP[___b_addr]; - var _4 = HEAP[_3]; - var _5 = 0+(_2 < _4); - if (_5) { __label__ = 1; /* _bb */ } else { __label__ = 2; /* _bb1 */ } - _bb: do { - if (__label__ == 1) { - var _6 = HEAP[___b_addr]; - HEAP[_0] = _6; - __label__ = 3; /* _bb2 */ break _bb; - } - else if (__label__ == 2) { - var _7 = HEAP[___a_addr]; - HEAP[_0] = _7; - __label__ = 3; /* _bb2 */ break _bb; - } - } while(0); - var _8 = HEAP[_0]; - HEAP[_retval] = _8; - __label__ = 0; /* _return */ - var _retval3 = HEAP[_retval]; - STACKTOP = STACK_STACK.pop(); - return _retval3; -} - - -function ___tcf_0(_unnamed_arg) { - STACK_STACK.push(STACKTOP); - var __label__; - var _unnamed_arg_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_unnamed_arg_addr] = _unnamed_arg; - __ZNSt8ios_base4InitD1Ev(__ZStL8__ioinit); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZN3v_tC1Eddd(_this, _a, _b, _c) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _a_addr; - var _b_addr; - var _c_addr; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - _a_addr = _a; - _b_addr = _b; - _c_addr = _c; - var _0 = HEAP[_this_addr]; - var _1 = _0+0*1; - HEAP[_1] = _a_addr; - var _3 = HEAP[_this_addr]; - var _4 = _3+1*1; - HEAP[_4] = _b_addr; - var _6 = HEAP[_this_addr]; - var _7 = _6+2*1; - HEAP[_7] = _c_addr; - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZN5ray_tC1ERK3v_t(_this, _v) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - var _0 = HEAP[_this_addr]; - var _1 = _0+0*3; - var _2 = HEAP[_v_addr]; - var _3 = _1+0*1; - var _5 = HEAP[0 + _2+0*1]; - HEAP[_3] = _5; - var _6 = _1+1*1; - var _8 = HEAP[0 + _2+1*1]; - HEAP[_6] = _8; - var _9 = _1+2*1; - var _11 = HEAP[0 + _2+2*1]; - HEAP[_9] = _11; - var _12 = HEAP[_this_addr]; - var _13 = _12+1*3; - __ZN3v_tC1Ev(_13); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZN5ray_tC1ERK3v_tS2_(_this, _v, _w) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var _w_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - HEAP[_w_addr] = _w; - var _0 = HEAP[_this_addr]; - var _1 = _0+0*3; - var _2 = HEAP[_v_addr]; - var _3 = _1+0*1; - var _5 = HEAP[0 + _2+0*1]; - HEAP[_3] = _5; - var _6 = _1+1*1; - var _8 = HEAP[0 + _2+1*1]; - HEAP[_6] = _8; - var _9 = _1+2*1; - var _11 = HEAP[0 + _2+2*1]; - HEAP[_9] = _11; - var _12 = HEAP[_this_addr]; - var _13 = _12+1*3; - var _14 = HEAP[_w_addr]; - var _15 = _13+0*1; - var _17 = HEAP[0 + _14+0*1]; - HEAP[_15] = _17; - var _18 = _13+1*1; - var _20 = HEAP[0 + _14+1*1]; - HEAP[_18] = _20; - var _21 = _13+2*1; - var _23 = HEAP[0 + _14+2*1]; - HEAP[_21] = _23; - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZN5hit_tC1Ev(_this) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - var _0 = HEAP[_this_addr]; - var _1 = _0+_struct_hit_t___FLATTENER[0]; - __ZN3v_tC1Eddd(_1, 0.000000e+00, 0.000000e+00, 0.000000e+00); - var _2 = HEAP[_this_addr]; - var _3 = _2+_struct_hit_t___FLATTENER[1]; - HEAP[_3] = Infinity; - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZN8sphere_tC1Ev(_this) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - var _0 = HEAP[_this_addr]; - var _1 = _0+_struct_hit_t___FLATTENER[0]; - __ZN3v_tC1Ev(_1); - __label__ = 0; /* _return */ - STACKTOP = STACK_STACK.pop(); - return; -} - - -function __ZN8sphere_tC1ERK3v_td(_this, _v, _d) { - STACK_STACK.push(STACKTOP); - var __label__; - var _this_addr = STACKTOP; STACKTOP += 1; - var _v_addr = STACKTOP; STACKTOP += 1; - var _d_addr; - var __alloca_point_ = 0; - HEAP[_this_addr] = _this; - HEAP[_v_addr] = _v; - _d_addr = _d; - var _0 = HEAP[_this_addr]; - var _1 = _0+_struct_hit_t___FLATTENER[0]; |