129 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; | ||
|  | 
 | ||
|  | let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); | ||
|  | 
 | ||
|  | cachedTextDecoder.decode(); | ||
|  | 
 | ||
|  | let cachegetUint8Memory0 = null; | ||
|  | function getUint8Memory0() { | ||
|  |     if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { | ||
|  |         cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); | ||
|  |     } | ||
|  |     return cachegetUint8Memory0; | ||
|  | } | ||
|  | 
 | ||
|  | function getStringFromWasm0(ptr, len) { | ||
|  |     return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); | ||
|  | } | ||
|  | 
 | ||
|  | const heap = new Array(32).fill(undefined); | ||
|  | 
 | ||
|  | heap.push(undefined, null, true, false); | ||
|  | 
 | ||
|  | let heap_next = heap.length; | ||
|  | 
 | ||
|  | function addHeapObject(obj) { | ||
|  |     if (heap_next === heap.length) heap.push(heap.length + 1); | ||
|  |     const idx = heap_next; | ||
|  |     heap_next = heap[idx]; | ||
|  | 
 | ||
|  |     heap[idx] = obj; | ||
|  |     return idx; | ||
|  | } | ||
|  | 
 | ||
|  | function getObject(idx) { return heap[idx]; } | ||
|  | 
 | ||
|  | function dropObject(idx) { | ||
|  |     if (idx < 36) return; | ||
|  |     heap[idx] = heap_next; | ||
|  |     heap_next = idx; | ||
|  | } | ||
|  | 
 | ||
|  | function takeObject(idx) { | ||
|  |     const ret = getObject(idx); | ||
|  |     dropObject(idx); | ||
|  |     return ret; | ||
|  | } | ||
|  | 
 | ||
|  | let cachegetFloat32Memory0 = null; | ||
|  | function getFloat32Memory0() { | ||
|  |     if (cachegetFloat32Memory0 === null || cachegetFloat32Memory0.buffer !== wasm.memory.buffer) { | ||
|  |         cachegetFloat32Memory0 = new Float32Array(wasm.memory.buffer); | ||
|  |     } | ||
|  |     return cachegetFloat32Memory0; | ||
|  | } | ||
|  | 
 | ||
|  | let WASM_VECTOR_LEN = 0; | ||
|  | 
 | ||
|  | function passArrayF32ToWasm0(arg, malloc) { | ||
|  |     const ptr = malloc(arg.length * 4); | ||
|  |     getFloat32Memory0().set(arg, ptr / 4); | ||
|  |     WASM_VECTOR_LEN = arg.length; | ||
|  |     return ptr; | ||
|  | } | ||
|  | 
 | ||
|  | let cachegetInt32Memory0 = null; | ||
|  | function getInt32Memory0() { | ||
|  |     if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { | ||
|  |         cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); | ||
|  |     } | ||
|  |     return cachegetInt32Memory0; | ||
|  | } | ||
|  | 
 | ||
|  | function getArrayF32FromWasm0(ptr, len) { | ||
|  |     return getFloat32Memory0().subarray(ptr / 4, ptr / 4 + len); | ||
|  | } | ||
|  | /** | ||
|  | * Generates vertex tangents for the given position/normal/texcoord attributes. | ||
|  | * @param {Float32Array} position | ||
|  | * @param {Float32Array} normal | ||
|  | * @param {Float32Array} texcoord | ||
|  | * @returns {Float32Array} | ||
|  | */ | ||
|  | export function generateTangents(position, normal, texcoord) { | ||
|  |     try { | ||
|  |         const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); | ||
|  |         var ptr0 = passArrayF32ToWasm0(position, wasm.__wbindgen_malloc); | ||
|  |         var len0 = WASM_VECTOR_LEN; | ||
|  |         var ptr1 = passArrayF32ToWasm0(normal, wasm.__wbindgen_malloc); | ||
|  |         var len1 = WASM_VECTOR_LEN; | ||
|  |         var ptr2 = passArrayF32ToWasm0(texcoord, wasm.__wbindgen_malloc); | ||
|  |         var len2 = WASM_VECTOR_LEN; | ||
|  |         wasm.generateTangents(retptr, ptr0, len0, ptr1, len1, ptr2, len2); | ||
|  |         var r0 = getInt32Memory0()[retptr / 4 + 0]; | ||
|  |         var r1 = getInt32Memory0()[retptr / 4 + 1]; | ||
|  |         var v3 = getArrayF32FromWasm0(r0, r1).slice(); | ||
|  |         wasm.__wbindgen_free(r0, r1 * 4); | ||
|  |         return v3; | ||
|  |     } finally { | ||
|  |         wasm.__wbindgen_add_to_stack_pointer(16); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | export const __wbindgen_string_new = function(arg0, arg1) { | ||
|  |     var ret = getStringFromWasm0(arg0, arg1); | ||
|  |     return addHeapObject(ret); | ||
|  | }; | ||
|  | 
 | ||
|  | export const __wbindgen_rethrow = function(arg0) { | ||
|  |     throw takeObject(arg0); | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | 
 | ||
|  | const wasmDataURI = 'data:application/octet-stream;base64,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TQ0WIARBAnRqIgQgBCgCAEEBajYCACACQQRqIQIgA0F/aiIDDQALCyABQdgFaigCACABKALgBUUNFUEAIQJBADYCAEEBIQQDQCABQfgCaiABQdgFahBjIAEoAvwCIgMgBEF/aiIHTQ0UIAEoAvgCIAJqKAIAIQMgAUHwAmogAUHoBWoQYyABKAL0AiINIAdNDRMgASgC8AIgAmooAgAhByABQdgFaigCACENIAEoAuAFIhEgBE0NEiACIA1qQQRqIAMgB2o2AgAgAkEEaiECIARBAWoiBEGAEEcNAAsgCEEJTwRAQQAhBCABQZgGakEAQQRBCCAGGyALG2ohCCAFIQMDQCABQegCaiADKAIAEGEgAUGYBmogACABKALoAiABKALsAhAxIDAgLiAIKgIAEDwhAiABQeACaiABQdgFahBjIAEoAuQCIgYgAk0NEiABQcgFaigCACABKALQBSINIAJBAnQiBiABKALgAmooAgAiC00NESABQdgCaiABQfgFahBjIAEoAtwCIg0gAk0NECALQQJ0aiABKALYAiAGaigCAEECdGogBDYCACABQfgFaigCACELIAEoAoAGIgcgAk0NDyAGIAtqIgIgAigCAEEBajYCACADQQRqIQMgCiAEQQFqIgRHDQALCyABQdACaiABQegFahBjIAEoAtQCRQ0MIAEoAtACKAIAIQNBBCECQQEhBANAIAFByAJqIAFB6AVqEGMgASgCzAIiCiAETQ0MIAMgASgCyAIgAmooAgBJBEAgAUHAAmogAUHoBWoQYyABKALEAiIDIARNDQwgASgCwAIgAmooAgAhAwsgAkEEaiECIARBAWoiBEGAEEcNAAsgAUHgA2oiAkIANwIAIAJBCGpCADcCACABQaAGaiABQegDaikDADcDACABIAEpA+ADNwOYBiABQYgGaiABQZgGaiADEEEgASgCiAYhCiABKAKQBiELQQAhBgNAIAFBuAJqIAFB2AVqEGMgASgCvAIiAyAGTQ0KIAFByAVqKAIAIQIgASgC0AUiBCAGQQJ0IgggASgCuAJqKAIAIgNNDQkgAUGwAmogAUHoBWoQYyABKAK0AiIEIAZNDQggASgCsAIgCGooAgAiCEECTwRAIAIgA0ECdGohBEEAIQMgCiECA0AgAUGoAmogBSAEKAIAIgdBAnRqKAIAEGEgAUGYBmogACABKAKoAiABKAKsAhAxIAMgC0YNCSACIAEoApgGNgIAIAJBBGogASgCnAY2AgAgASgCoAYhDSACQQxqIAc2AgAgAkEIaiANNgIAIARBBGohBCACQRBqIQIgCCADQQFqIgNHDQALIAUgCiAAQQAgCEF/ahAECyAGQQFqIgZBgBBHDQALIBNBASATQQFLGyEFIA5BPGohAyABQYgGahBSIAFB+AVqKAIAGiABQfgFahBWIAFB6AVqKAIAGiABQegFahBWIAFB2AVqKAIAGiABQdgFahBWIAFByAVqKAIAGiABQcgFahBWQQAhAkEAIQRBACEGQQAhBwNAIAFBoAJqIAFBwANqEGMgASgCpAIiCiAETQ0GIAEoAqACIAJqKAIAIQogAUGYAmogAUHAA2oQYyABKAKcAiILIARBAWpNDQUgASgCmAIgAmpBB | ||
|  | 
 | ||
|  | export let wasm; | ||
|  | 
 | ||
|  | export let isReady = false; | ||
|  | 
 | ||
|  | export const ready = fetch(wasmDataURI) | ||
|  |     .then((res) => res.arrayBuffer()) | ||
|  |     .then((buffer) => WebAssembly.instantiate(buffer, { | ||
|  |         './mikktspace_module_bg.js': {__wbindgen_string_new, __wbindgen_rethrow} | ||
|  |     })) | ||
|  |     .then((result) => { | ||
|  |         wasm = result.instance.exports; | ||
|  |         isReady = true; | ||
|  |     }); |