@allmaps/render
Version:
Render functions for WebGL and image buffers
53 lines (52 loc) • 1.54 kB
JavaScript
import { proxy } from "comlink";
import { CacheableTile } from "./CacheableTile.js";
import { WarpedMapEvent, WarpedMapEventType } from "../shared/events.js";
class CacheableWorkerImageDataTile extends CacheableTile {
#worker;
constructor(fetchableTile, worker, fetchFn) {
super(fetchableTile, fetchFn);
this.#worker = worker;
}
/**
* Fetch the tile and create its ImageData using a WebWorker.
*
* @returns
*/
async fetch() {
try {
this.#worker.getImageData(
this.tileUrl,
proxy(() => this.abortController.abort()),
this.fetchFn,
this.tile.tileZoomLevel.width,
this.tile.tileZoomLevel.height
).then((response) => {
this.data = response;
this.dispatchEvent(
new WarpedMapEvent(WarpedMapEventType.TILEFETCHED, this.tileUrl)
);
}).catch((err) => {
if (err instanceof Error && err.name === "AbortError") {
console.log("Fetch aborted");
} else {
console.error(err);
}
});
} catch (err) {
if (err instanceof Error && err.name === "AbortError") ;
else {
this.dispatchEvent(
new WarpedMapEvent(WarpedMapEventType.TILEFETCHERROR, this.tileUrl)
);
}
}
return this.data;
}
static createFactory(worker) {
return (fetchableTile, fetchFn) => new CacheableWorkerImageDataTile(fetchableTile, worker, fetchFn);
}
}
export {
CacheableWorkerImageDataTile
};
//# sourceMappingURL=CacheableWorkerImageDataTile.js.map