egret 支持worker

 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;
                    }
                }
                /*else {
                    if (image.hasAttribute("crossOrigin")) {//兼容猎豹
                        image.removeAttribute("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);
            };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值