|
3 년 전 | |
---|---|---|
.. | ||
WebGL | 3 년 전 | |
js | 3 년 전 | |
README.md | 3 년 전 |
This directory is for use when targeting the js_wasm32
target and the packages that rely on it.
The js_wasm32
target assumes that the WASM output will be ran within a web browser rather than a standalone VM. In the VM cases, either wasi_wasm32
or freestanding_wasm32
should be used accordingly.
import {WasmMemoryInterface, odinSetupDefaultImports} from "./js/runtime.js";
import {WebGLInterface} from "./WebGL/runtime.js";
const runWasm = async (wasm_path, webglCanvasElement, consoleElement) => {
let wasmMemoryInterface = new WasmMemoryInterface();
let imports = odinSetupDefaultImports(wasmMemoryInterface, consoleElement);
if (webglCanvasElement !== undefined) {
let gl_context = new WebGLInterface(
wasmMemoryInterface,
webglCanvasElement,
{antialias: false},
);
if (!gl_context.ctx) {
return "WebGL is not available.";
}
imports["webgl"] = gl_context.getWebGL1Interface()
imports["webgl2"] = gl_context.getWebGL2Interface()
}
const response = await fetch(wasm_path);
const file = await response.arrayBuffer();
const wasm = await WebAssembly.instantiate(file, imports);
const exports = wasm.instance.exports;
wasmMemoryInterface.setMemory(exports.memory);
exports._start();
if (exports.step) {
const odin_ctx = exports.default_context_ptr();
let prevTimeStamp = undefined;
const step = (currTimeStamp) => {
if (prevTimeStamp == undefined) {
prevTimeStamp = currTimeStamp;
}
const dt = (currTimeStamp - prevTimeStamp)*0.001;
prevTimeStamp = currTimeStamp;
exports.step(dt, odin_ctx);
window.requestAnimationFrame(step);
};
window.requestAnimationFrame(step);
}
return;
};