-
Notifications
You must be signed in to change notification settings - Fork 2
/
imgloader.js
52 lines (52 loc) · 1.43 KB
/
imgloader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
;var imgLoader = {};
(function() {
var loadingCount = 0;
imgLoader.images = {};
// ロードした画像を2のべき乗サイズに揃える
var createTexture = function(name, img, func) {
var size = 1;
while(img.width > size || img.height > size) {
size *= 2;
}
// canvas 2Dを作成し、そのサイズに拡大縮小する
var canvas = document.createElement("canvas");
canvas.width = canvas.height = size;
canvas.getContext("2d").drawImage(img, 0, 0, img.width, img.height, 0, 0, size, size);
// canvasを保存してcallbackを呼び出す
loadingCount--;
imgLoader.images[name] = canvas;
func(canvas);
};
// 画像をロードする
imgLoader.load = function(url, func) {
// 既にあれば何もしない
if(imgLoader.images[url]) {
return;
}
// 読み込もうとしているフラグを設定
imgLoader.images[url] = true;
loadingCount++;
// 拡張子で判断
var ext = url.split(".").pop();
switch(ext.toLowerCase()) {
default:
// ブラウザ対応の画像の場合はDOMで生成
var img = document.createElement("img");
img.onload = function() {
createTexture(url, img, func);
};
img.src = url;
break;
case "tga":
// TGAの場合はCanvasで生成
var tga = new TGA();
tga.open(url, function() {
createTexture(url, tga.getCanvas(), func);
});
break;
}
};
imgLoader.isLoading = function() {
return loadingCount != 0;
};
})();