wasm unity tanks started google getting earth demos chrome webassembly

unity - Uso de WebAssembly para llamar a los métodos de la API web



webassembly download (1)

¿Es posible utilizar las API web con WebAssembly? ¿Si es así, cómo? Estoy más interesado en la interfaz del navegador .


Sí, es posible.

Cómo llamar a las API de JavaScript cuando se utiliza una cadena de herramientas de ensamblaje web depende de esa cadena de herramientas específica. Es efectivamente una forma de FFI: desde el código C ++ parece que está llamando a una función externa, pero la cadena de herramientas se une al integrador (aquí, el JavaScript del navegador). Algunos ejemplos:

Las importObject de importObject como Emscripten generan automáticamente un importObject para WebAssembly.instantiate (junto con los archivos .html y .js ) / La mayoría de los detalles internos de WebAssembly suelen estar ocultos (los documento a continuación).

Este diseño le permite llamar a cualquier código JavaScript, no solo a las API de JavaScript. Por lo tanto, puede llamar a su propio código JavaScript desde WebAssembly. Las cadenas de herramientas simplemente facilitan el manejo de conjuntos comunes de API web, a veces de manera multiplataforma, por ejemplo, SDL2 hace audio, teclado, mouse, joystick y gráficos.

Detalles internos

La API de JavaScript de WebAssembly le permite pasar un importObject al constructor WebAssembly.Instantiate y la función WebAssembly.instantiate :

new Instance(moduleObject [, importObject]) Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}> instantiate(BufferSource bytes [, importObject])

El formato binario de WebAssembly contiene una sección de importación en la que usted (a través de un compilador como LLVM) declara las importaciones que utilizará. Cada uno de estos campos importados se busca en importObject , y las funciones se pueden invocar a través del código de operación de call y de call - call_indirect WebAssembly.

Por lo tanto, puede llamar a JavaScript arbitrario, que a su vez puede llamar a cualquier API web que desee. En el futuro, WebAssembly podrá obtener capacidades que le permitirán al incrustador exponer las API directamente , en un navegador que incluya, esto podría incluir el DOM, lienzo, eventos, etc.