maplibre-rs/web/index.ts
2022-01-09 12:42:19 +01:00

75 lines
1.9 KiB
TypeScript

import init from "./dist/libs/mapr";
// @ts-ignore
import {Spector} from "spectorjs";
declare var WEBGL: boolean;
const isWebGLSupported = () => {
try {
const canvas = document.createElement('canvas');
canvas.getContext("webgl");
return true;
} catch (x) {
return false;
}
}
const start = async () => {
if (!isSecureContext) {
let message = "isSecureContext is false!";
console.error(message)
alert(message)
return;
}
if (!crossOriginIsolated) {
let message = "crossOriginIsolated is false! " +
"The Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy HTTP headers are required.";
console.error(message)
alert(message)
return;
}
if (WEBGL) {
if (!isWebGLSupported()) {
console.error("WebGL is not supported in this Browser!")
return;
}
let spector = new Spector();
spector.displayUI();
} else {
if (!("gpu" in navigator)) {
console.error("WebGPU is not supported in this Browser!")
return;
}
}
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js');
});
}
let MEMORY = 16 * 1024;
const memory = new WebAssembly.Memory({initial: 1024, maximum: MEMORY, shared: true});
const module = await init(undefined, memory);
const worker = new Worker(new URL('./cache-worker.ts', import.meta.url), {
type: "module",
});
let cache_address = module.create_cache();
console.log("Starting cache-worker")
worker.postMessage({type: "init", memory, cache_address});
/* worker.onmessage = (e) => {
console.log(e)
}*/
await module.run(cache_address);
}
start().then(r => console.log("started via wasm"));