forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package iron.data;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Wasm {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var exports: Dynamic;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static inline function instance(blob: kha.Blob, importObject: Dynamic = null): Wasm {
							 | 
						||
| 
								 | 
							
										var data = blob.toBytes().getData();
							 | 
						||
| 
								 | 
							
										var module = new js.lib.webassembly.Module(data);
							 | 
						||
| 
								 | 
							
										var exports: Dynamic = importObject == null ?
							 | 
						||
| 
								 | 
							
											new js.lib.webassembly.Instance(module).exports :
							 | 
						||
| 
								 | 
							
											new js.lib.webassembly.Instance(module, importObject).exports;
							 | 
						||
| 
								 | 
							
										return new Wasm(exports);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									#if kha_html5_js
							 | 
						||
| 
								 | 
							
									public static function instantiateStreaming(blob: kha.Blob, importObject: Dynamic = null, done: Wasm->Void) {
							 | 
						||
| 
								 | 
							
										js.lib.WebAssembly.instantiateStreaming(new js.html.Response(blob.toBytes().getData(), {
							 | 
						||
| 
								 | 
							
											headers: new js.html.Headers({"Content-Type": "application/wasm"})
							 | 
						||
| 
								 | 
							
										}), importObject).then(m -> done(new Wasm(m.instance.exports)));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									#end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function new(exports: Dynamic) {
							 | 
						||
| 
								 | 
							
										this.exports = exports;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getString(i: Int): String { // Retrieve string from memory pointer
							 | 
						||
| 
								 | 
							
										var mem = getMemory(i, 32);
							 | 
						||
| 
								 | 
							
										var s = "";
							 | 
						||
| 
								 | 
							
										for (i in 0...32) {
							 | 
						||
| 
								 | 
							
											mem[i] == 0 ? break : s += String.fromCharCode(mem[i]);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return s;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public inline function getMemory(offset: Int, length: Int): js.lib.Uint8Array {
							 | 
						||
| 
								 | 
							
										return new js.lib.Uint8Array(exports.memory.buffer, offset, length);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public inline function getMemoryF32(offset: Int, length: Int): kha.arrays.Float32Array {
							 | 
						||
| 
								 | 
							
										return new kha.arrays.Float32Array(exports.memory.buffer).subarray( offset, length );
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public inline function getMemoryU32(offset: Int, length: Int): kha.arrays.Uint32Array {
							 | 
						||
| 
								 | 
							
										return new kha.arrays.Uint32Array(exports.memory.buffer).subarray(offset, length);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#end
							 |