window._use_worker = document.location.href.indexOf("useWorker=1") != -1;
if (window._use_worker) {
window.worker = new Worker("./worker_loader.js");
window.loadMap = {};
window.worker.onmessage = evt => {
window.loadMap[evt.data.url](evt.data);
}
window._work_load = (url, fun) => {
window.loadMap[url.url] = fun;
window.worker.postMessage(url);
}
}
console.log("worker_loader init ok");
onmessage = evt => {
loadImage2(evt.data.url);
}
function loadImage2(url) {
console.log("worker load " + url);
var failed = false;
var xhr = new XMLHttpRequest;
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
var response = xhr.response || xhr.mozResponseArrayBuffer;
if ((xhr.status != 200 && xhr.status != 0) || response.byteLength < 10) {
if (!failed) {
failed = true;
pngFail(url, "loadFail from onload" + xhr.status);
}
return;
}
var data, png;
data = new Uint8Array(response);
doCreateImageBitmap(data, url);
};
xhr.onerror = function (e) {
pngFail(url, "loadFail");
}
xhr.send(null);
}
function doCreateImageBitmap(response, url) {
try {
response = new self.Blob([response], { type: "image/png" });
self.createImageBitmap(response).then(imageBitmap => {
var data = {};
data.url = url;
data.imageBitmap = imageBitmap;
postMessage(data, [data.imageBitmap]);
}).catch(
)
} catch (e) {
}
}
WebImageLoader.prototype.loadImage = function (src) {
var image = new Image();
this.data = null;
this.currentImage = image;
if (this._hasCrossOriginSet) {
if (this._crossOrigin) {
image.crossOrigin = this._crossOrigin;
}
}
else {
if (WebImageLoader.crossOrigin) {
image.crossOrigin = WebImageLoader.crossOrigin;
}
}
image.onload = this.onImageComplete.bind(this);
image.onerror = this.onLoadError.bind(this);
if (window._use_worker == false) {
image.src = src;
} else {
window._work_load({ url: src }, e => { this.onImageComplete(e) });
}
};
WebImageLoader.prototype.onImageComplete = function (event) {
var image
if (window._use_worker == false) {
image = this.getImage(event);
} else {
image = event.imageBitmap;
}
if (!image) {
return;
}
this.data = new egret.BitmapData(image);
var self = this;
window.setTimeout(function () {
self.dispatchEventWith(egret.Event.COMPLETE);
}, 0);
};