three-stdlib 2.6.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/{Nodes-acab3ca5.js → Nodes-427f68b0.js} +0 -0
  2. package/{Nodes-244507d0.js → Nodes-ec4e1143.js} +0 -0
  3. package/controls/ArcballControls.cjs.js +1 -1
  4. package/controls/ArcballControls.d.ts +164 -0
  5. package/controls/ArcballControls.js +512 -197
  6. package/controls/OrbitControls.cjs.js +1 -1
  7. package/controls/OrbitControls.d.ts +1 -0
  8. package/controls/OrbitControls.js +13 -2
  9. package/geometries/TextGeometry.cjs.js +1 -0
  10. package/geometries/TextGeometry.d.ts +16 -0
  11. package/geometries/TextGeometry.js +26 -0
  12. package/index.cjs.js +1 -1
  13. package/index.d.ts +2 -0
  14. package/index.js +3 -1
  15. package/loaders/AMFLoader.js +1 -3
  16. package/loaders/ColladaLoader.cjs.js +1 -1
  17. package/loaders/ColladaLoader.js +58 -35
  18. package/loaders/EXRLoader.cjs.js +1 -1
  19. package/loaders/EXRLoader.js +197 -262
  20. package/loaders/FBXLoader.cjs.js +1 -1
  21. package/loaders/FBXLoader.js +41 -90
  22. package/loaders/FontLoader.cjs.js +1 -0
  23. package/loaders/FontLoader.d.ts +32 -0
  24. package/loaders/FontLoader.js +139 -0
  25. package/loaders/GLTFLoader.cjs.js +1 -1
  26. package/loaders/GLTFLoader.js +160 -72
  27. package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
  28. package/loaders/HDRCubeTextureLoader.js +2 -10
  29. package/loaders/NodeMaterialLoader.cjs.js +1 -1
  30. package/loaders/RGBELoader.cjs.js +1 -1
  31. package/loaders/RGBELoader.js +11 -25
  32. package/loaders/RGBMLoader.cjs.js +1 -1
  33. package/loaders/RGBMLoader.js +225 -263
  34. package/loaders/SVGLoader.cjs.js +1 -1
  35. package/loaders/SVGLoader.js +46 -30
  36. package/loaders/VRMLLoader.cjs.js +1 -1
  37. package/loaders/VRMLLoader.js +2 -1
  38. package/misc/WebGL.cjs.js +1 -1
  39. package/misc/WebGL.d.ts +5 -7
  40. package/misc/WebGL.js +67 -54
  41. package/nodes/core/NodeBuilder.cjs.js +1 -1
  42. package/nodes/core/NodeBuilder.js +2 -2
  43. package/nodes/inputs/CubeTextureNode.cjs.js +1 -1
  44. package/nodes/inputs/RTTNode.cjs.js +1 -1
  45. package/nodes/inputs/ReflectorNode.cjs.js +1 -1
  46. package/nodes/inputs/ScreenNode.cjs.js +1 -1
  47. package/nodes/inputs/TextureNode.cjs.js +1 -1
  48. package/nodes/materials/BasicNodeMaterial.cjs.js +1 -1
  49. package/nodes/materials/NodeMaterial.cjs.js +1 -1
  50. package/nodes/materials/SpriteNodeMaterial.cjs.js +1 -1
  51. package/nodes/postprocessing/NodePass.cjs.js +1 -1
  52. package/nodes/postprocessing/NodePostProcessing.cjs.js +1 -1
  53. package/nodes/utils/ColorSpaceNode.cjs.js +1 -1
  54. package/nodes/utils/ColorSpaceNode.js +2 -45
  55. package/package.json +1 -1
  56. package/shaders/GammaCorrectionShader.js +1 -2
@@ -1,6 +1,22 @@
1
- import { DataTextureLoader, CubeTexture, RGBM7Encoding, RGBAFormat, LinearFilter, UnsignedByteType } from 'three';
1
+ import { DataTextureLoader, HalfFloatType, CubeTexture, RGBAFormat, LinearFilter, DataUtils } from 'three';
2
2
 
3
3
  class RGBMLoader extends DataTextureLoader {
4
+ constructor(manager) {
5
+ super(manager);
6
+ this.type = HalfFloatType;
7
+ this.maxRange = 7; // more information about this property at https://iwasbeingirony.blogspot.com/2010/06/difference-between-rgbm-and-rgbd.html
8
+ }
9
+
10
+ setDataType(value) {
11
+ this.type = value;
12
+ return this;
13
+ }
14
+
15
+ setMaxRange(value) {
16
+ this.maxRange = value;
17
+ return this;
18
+ }
19
+
4
20
  loadCubemap(urls, onLoad, onProgress, onError) {
5
21
  const texture = new CubeTexture();
6
22
  let loaded = 0;
@@ -22,7 +38,7 @@ class RGBMLoader extends DataTextureLoader {
22
38
  loadTexture(i);
23
39
  }
24
40
 
25
- texture.encoding = RGBM7Encoding;
41
+ texture.type = this.type;
26
42
  texture.format = RGBAFormat;
27
43
  texture.minFilter = LinearFilter;
28
44
  texture.generateMipmaps = false;
@@ -32,14 +48,36 @@ class RGBMLoader extends DataTextureLoader {
32
48
  parse(buffer) {
33
49
  const img = UPNG.decode(buffer);
34
50
  const rgba = UPNG.toRGBA8(img)[0];
51
+ const data = new Uint8Array(rgba);
52
+ const size = img.width * img.height * 4;
53
+ const output = this.type === HalfFloatType ? new Uint16Array(size) : new Float32Array(size); // decode RGBM
54
+
55
+ for (let i = 0; i < data.length; i += 4) {
56
+ const r = data[i + 0] / 255;
57
+ const g = data[i + 1] / 255;
58
+ const b = data[i + 2] / 255;
59
+ const a = data[i + 3] / 255;
60
+
61
+ if (this.type === HalfFloatType) {
62
+ output[i + 0] = DataUtils.toHalfFloat(Math.min(r * a * this.maxRange, 65504));
63
+ output[i + 1] = DataUtils.toHalfFloat(Math.min(g * a * this.maxRange, 65504));
64
+ output[i + 2] = DataUtils.toHalfFloat(Math.min(b * a * this.maxRange, 65504));
65
+ output[i + 3] = DataUtils.toHalfFloat(1);
66
+ } else {
67
+ output[i + 0] = r * a * this.maxRange;
68
+ output[i + 1] = g * a * this.maxRange;
69
+ output[i + 2] = b * a * this.maxRange;
70
+ output[i + 3] = 1;
71
+ }
72
+ }
73
+
35
74
  return {
36
75
  width: img.width,
37
76
  height: img.height,
38
- data: new Uint8Array(rgba),
77
+ data: output,
39
78
  format: RGBAFormat,
40
- type: UnsignedByteType,
41
- flipY: true,
42
- encoding: RGBM7Encoding
79
+ type: this.type,
80
+ flipY: true
43
81
  };
44
82
  }
45
83
 
@@ -70,11 +108,7 @@ UPNG.toRGBA8 = function (out) {
70
108
  if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);
71
109
  frms.push(img.buffer.slice(0));
72
110
 
73
- if (frm.dispose == 0) ; else if (frm.dispose == 1) {
74
- UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);
75
- } else if (frm.dispose == 2) {
76
- for (var j = 0; j < len; j++) img[j] = prev[j];
77
- }
111
+ if (frm.dispose == 0) ; else if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j];
78
112
  }
79
113
 
80
114
  return frms;
@@ -95,60 +129,43 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
95
129
  if (ctype == 6) {
96
130
  // RGB + alpha
97
131
  var qarea = area << 2;
98
-
99
- if (depth == 8) {
100
- for (var i = 0; i < qarea; i += 4) {
101
- bf[i] = data[i];
102
- bf[i + 1] = data[i + 1];
103
- bf[i + 2] = data[i + 2];
104
- bf[i + 3] = data[i + 3];
105
- }
132
+ if (depth == 8) for (var i = 0; i < qarea; i += 4) {
133
+ bf[i] = data[i];
134
+ bf[i + 1] = data[i + 1];
135
+ bf[i + 2] = data[i + 2];
136
+ bf[i + 3] = data[i + 3];
106
137
  }
107
-
108
- if (depth == 16) {
109
- for (var i = 0; i < qarea; i++) {
110
- bf[i] = data[i << 1];
111
- }
138
+ if (depth == 16) for (var i = 0; i < qarea; i++) {
139
+ bf[i] = data[i << 1];
112
140
  }
113
141
  } else if (ctype == 2) {
114
142
  // RGB
115
143
  var ts = out.tabs['tRNS'];
116
144
 
117
145
  if (ts == null) {
118
- if (depth == 8) {
119
- for (var i = 0; i < area; i++) {
120
- var ti = i * 3;
121
- bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
122
- }
146
+ if (depth == 8) for (var i = 0; i < area; i++) {
147
+ var ti = i * 3;
148
+ bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
123
149
  }
124
-
125
- if (depth == 16) {
126
- for (var i = 0; i < area; i++) {
127
- var ti = i * 6;
128
- bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
129
- }
150
+ if (depth == 16) for (var i = 0; i < area; i++) {
151
+ var ti = i * 6;
152
+ bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
130
153
  }
131
154
  } else {
132
155
  var tr = ts[0],
133
156
  tg = ts[1],
134
157
  tb = ts[2];
135
-
136
- if (depth == 8) {
137
- for (var i = 0; i < area; i++) {
138
- var qi = i << 2,
139
- ti = i * 3;
140
- bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
141
- if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0;
142
- }
158
+ if (depth == 8) for (var i = 0; i < area; i++) {
159
+ var qi = i << 2,
160
+ ti = i * 3;
161
+ bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
162
+ if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0;
143
163
  }
144
-
145
- if (depth == 16) {
146
- for (var i = 0; i < area; i++) {
147
- var qi = i << 2,
148
- ti = i * 6;
149
- bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
150
- if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0;
151
- }
164
+ if (depth == 16) for (var i = 0; i < area; i++) {
165
+ var qi = i << 2,
166
+ ti = i * 6;
167
+ bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
168
+ if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0;
152
169
  }
153
170
  }
154
171
  } else if (ctype == 3) {
@@ -157,61 +174,41 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
157
174
  ap = out.tabs['tRNS'],
158
175
  tl = ap ? ap.length : 0; //console.log(p, ap);
159
176
 
160
- if (depth == 1) {
161
- for (var y = 0; y < h; y++) {
162
- var s0 = y * bpl,
163
- t0 = y * w;
164
-
165
- for (var i = 0; i < w; i++) {
166
- var qi = t0 + i << 2,
167
- j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1,
168
- cj = 3 * j;
169
- bf[qi] = p[cj];
170
- bf[qi + 1] = p[cj + 1];
171
- bf[qi + 2] = p[cj + 2];
172
- bf[qi + 3] = j < tl ? ap[j] : 255;
173
- }
174
- }
175
- }
177
+ if (depth == 1) for (var y = 0; y < h; y++) {
178
+ var s0 = y * bpl,
179
+ t0 = y * w;
176
180
 
177
- if (depth == 2) {
178
- for (var y = 0; y < h; y++) {
179
- var s0 = y * bpl,
180
- t0 = y * w;
181
-
182
- for (var i = 0; i < w; i++) {
183
- var qi = t0 + i << 2,
184
- j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3,
185
- cj = 3 * j;
186
- bf[qi] = p[cj];
187
- bf[qi + 1] = p[cj + 1];
188
- bf[qi + 2] = p[cj + 2];
189
- bf[qi + 3] = j < tl ? ap[j] : 255;
190
- }
181
+ for (var i = 0; i < w; i++) {
182
+ var qi = t0 + i << 2,
183
+ j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1,
184
+ cj = 3 * j;
185
+ bf[qi] = p[cj];
186
+ bf[qi + 1] = p[cj + 1];
187
+ bf[qi + 2] = p[cj + 2];
188
+ bf[qi + 3] = j < tl ? ap[j] : 255;
191
189
  }
192
190
  }
191
+ if (depth == 2) for (var y = 0; y < h; y++) {
192
+ var s0 = y * bpl,
193
+ t0 = y * w;
193
194
 
194
- if (depth == 4) {
195
- for (var y = 0; y < h; y++) {
196
- var s0 = y * bpl,
197
- t0 = y * w;
198
-
199
- for (var i = 0; i < w; i++) {
200
- var qi = t0 + i << 2,
201
- j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15,
202
- cj = 3 * j;
203
- bf[qi] = p[cj];
204
- bf[qi + 1] = p[cj + 1];
205
- bf[qi + 2] = p[cj + 2];
206
- bf[qi + 3] = j < tl ? ap[j] : 255;
207
- }
195
+ for (var i = 0; i < w; i++) {
196
+ var qi = t0 + i << 2,
197
+ j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3,
198
+ cj = 3 * j;
199
+ bf[qi] = p[cj];
200
+ bf[qi + 1] = p[cj + 1];
201
+ bf[qi + 2] = p[cj + 2];
202
+ bf[qi + 3] = j < tl ? ap[j] : 255;
208
203
  }
209
204
  }
205
+ if (depth == 4) for (var y = 0; y < h; y++) {
206
+ var s0 = y * bpl,
207
+ t0 = y * w;
210
208
 
211
- if (depth == 8) {
212
- for (var i = 0; i < area; i++) {
213
- var qi = i << 2,
214
- j = data[i],
209
+ for (var i = 0; i < w; i++) {
210
+ var qi = t0 + i << 2,
211
+ j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15,
215
212
  cj = 3 * j;
216
213
  bf[qi] = p[cj];
217
214
  bf[qi + 1] = p[cj + 1];
@@ -219,30 +216,34 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
219
216
  bf[qi + 3] = j < tl ? ap[j] : 255;
220
217
  }
221
218
  }
219
+ if (depth == 8) for (var i = 0; i < area; i++) {
220
+ var qi = i << 2,
221
+ j = data[i],
222
+ cj = 3 * j;
223
+ bf[qi] = p[cj];
224
+ bf[qi + 1] = p[cj + 1];
225
+ bf[qi + 2] = p[cj + 2];
226
+ bf[qi + 3] = j < tl ? ap[j] : 255;
227
+ }
222
228
  } else if (ctype == 4) {
223
229
  // gray + alpha
224
- if (depth == 8) {
225
- for (var i = 0; i < area; i++) {
226
- var qi = i << 2,
227
- di = i << 1,
228
- gr = data[di];
229
- bf[qi] = gr;
230
- bf[qi + 1] = gr;
231
- bf[qi + 2] = gr;
232
- bf[qi + 3] = data[di + 1];
233
- }
230
+ if (depth == 8) for (var i = 0; i < area; i++) {
231
+ var qi = i << 2,
232
+ di = i << 1,
233
+ gr = data[di];
234
+ bf[qi] = gr;
235
+ bf[qi + 1] = gr;
236
+ bf[qi + 2] = gr;
237
+ bf[qi + 3] = data[di + 1];
234
238
  }
235
-
236
- if (depth == 16) {
237
- for (var i = 0; i < area; i++) {
238
- var qi = i << 2,
239
- di = i << 2,
240
- gr = data[di];
241
- bf[qi] = gr;
242
- bf[qi + 1] = gr;
243
- bf[qi + 2] = gr;
244
- bf[qi + 3] = data[di + 2];
245
- }
239
+ if (depth == 16) for (var i = 0; i < area; i++) {
240
+ var qi = i << 2,
241
+ di = i << 2,
242
+ gr = data[di];
243
+ bf[qi] = gr;
244
+ bf[qi + 1] = gr;
245
+ bf[qi + 2] = gr;
246
+ bf[qi + 3] = data[di + 2];
246
247
  }
247
248
  } else if (ctype == 0) {
248
249
  // gray
@@ -251,37 +252,26 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
251
252
  for (var y = 0; y < h; y++) {
252
253
  var off = y * bpl,
253
254
  to = y * w;
254
-
255
- if (depth == 1) {
256
- for (var x = 0; x < w; x++) {
257
- var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1),
258
- al = gr == tr * 255 ? 0 : 255;
259
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
260
- }
261
- } else if (depth == 2) {
262
- for (var x = 0; x < w; x++) {
263
- var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3),
264
- al = gr == tr * 85 ? 0 : 255;
265
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
266
- }
267
- } else if (depth == 4) {
268
- for (var x = 0; x < w; x++) {
269
- var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15),
270
- al = gr == tr * 17 ? 0 : 255;
271
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
272
- }
273
- } else if (depth == 8) {
274
- for (var x = 0; x < w; x++) {
275
- var gr = data[off + x],
276
- al = gr == tr ? 0 : 255;
277
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
278
- }
279
- } else if (depth == 16) {
280
- for (var x = 0; x < w; x++) {
281
- var gr = data[off + (x << 1)],
282
- al = rs(data, off + (x << i)) == tr ? 0 : 255;
283
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
284
- }
255
+ if (depth == 1) for (var x = 0; x < w; x++) {
256
+ var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1),
257
+ al = gr == tr * 255 ? 0 : 255;
258
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
259
+ } else if (depth == 2) for (var x = 0; x < w; x++) {
260
+ var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3),
261
+ al = gr == tr * 85 ? 0 : 255;
262
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
263
+ } else if (depth == 4) for (var x = 0; x < w; x++) {
264
+ var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15),
265
+ al = gr == tr * 17 ? 0 : 255;
266
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
267
+ } else if (depth == 8) for (var x = 0; x < w; x++) {
268
+ var gr = data[off + x],
269
+ al = gr == tr ? 0 : 255;
270
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
271
+ } else if (depth == 16) for (var x = 0; x < w; x++) {
272
+ var gr = data[off + (x << 1)],
273
+ al = rs(data, off + (x << 1)) == tr ? 0 : 255;
274
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
285
275
  }
286
276
  }
287
277
  } //console.log(Date.now()-time);
@@ -369,15 +359,11 @@ UPNG.decode = function (buff) {
369
359
  var keyw = bin.readASCII(data, offset, nz - offset);
370
360
  var text,
371
361
  tl = offset + len - nz - 1;
372
-
373
- if (type == 'tEXt') {
374
- text = bin.readASCII(data, nz + 1, tl);
375
- } else {
362
+ if (type == 'tEXt') text = bin.readASCII(data, nz + 1, tl);else {
376
363
  var bfr = UPNG.decode._inflate(data.slice(nz + 2, nz + 2 + tl));
377
364
 
378
365
  text = bin.readUTF8(bfr, 0, bfr.length);
379
366
  }
380
-
381
367
  out.tabs[type][keyw] = text;
382
368
  } else if (type == 'iTXt') {
383
369
  if (out.tabs[type] == null) out.tabs[type] = {};
@@ -396,15 +382,11 @@ UPNG.decode = function (buff) {
396
382
  off = nz + 1;
397
383
  var text,
398
384
  tl = len - (off - offset);
399
-
400
- if (cflag == 0) {
401
- text = bin.readUTF8(data, off, tl);
402
- } else {
385
+ if (cflag == 0) text = bin.readUTF8(data, off, tl);else {
403
386
  var bfr = UPNG.decode._inflate(data.slice(off, off + tl));
404
387
 
405
388
  text = bin.readUTF8(bfr, 0, bfr.length);
406
389
  }
407
-
408
390
  out.tabs[type][keyw] = text;
409
391
  } else if (type == 'PLTE') {
410
392
  out.tabs[type] = bin.readBytes(data, offset, len);
@@ -415,21 +397,11 @@ UPNG.decode = function (buff) {
415
397
  for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data, offset + i * 2));
416
398
  } else if (type == 'tRNS') {
417
399
  if (out.ctype == 3) out.tabs[type] = bin.readBytes(data, offset, len);else if (out.ctype == 0) out.tabs[type] = rUs(data, offset);else if (out.ctype == 2) out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)]; //else console.log("tRNS for unsupported color type",out.ctype, len);
418
- } else if (type == 'gAMA') {
419
- out.tabs[type] = bin.readUint(data, offset) / 100000;
420
- } else if (type == 'sRGB') {
421
- out.tabs[type] = data[offset];
422
- } else if (type == 'bKGD') {
423
- if (out.ctype == 0 || out.ctype == 4) {
424
- out.tabs[type] = [rUs(data, offset)];
425
- } else if (out.ctype == 2 || out.ctype == 6) {
426
- out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];
427
- } else if (out.ctype == 3) {
428
- out.tabs[type] = data[offset];
429
- }
400
+ } else if (type == 'gAMA') out.tabs[type] = bin.readUint(data, offset) / 100000;else if (type == 'sRGB') out.tabs[type] = data[offset];else if (type == 'bKGD') {
401
+ if (out.ctype == 0 || out.ctype == 4) out.tabs[type] = [rUs(data, offset)];else if (out.ctype == 2 || out.ctype == 6) out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];else if (out.ctype == 3) out.tabs[type] = data[offset];
430
402
  } else if (type == 'IEND') {
431
403
  break;
432
- } //else { log("unknown chunk type", type, len); }
404
+ } //else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
433
405
 
434
406
 
435
407
  offset += len;
@@ -440,7 +412,6 @@ UPNG.decode = function (buff) {
440
412
  if (foff != 0) {
441
413
  var fr = out.frames[out.frames.length - 1];
442
414
  fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);
443
- foff = 0;
444
415
  }
445
416
 
446
417
  out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
@@ -702,20 +673,18 @@ UPNG.inflateRaw = function () {
702
673
  n = H.H.m,
703
674
  A = n.r;
704
675
 
705
- for (var l = 0; l < V; l += 2) {
706
- if (N[l + 1] != 0) {
707
- var M = l >> 1,
708
- I = N[l + 1],
709
- e = M << 4 | I,
710
- b = W - I,
711
- Z = N[l] << b,
712
- m = Z + (1 << b);
713
-
714
- while (Z != m) {
715
- var J = A[Z] >>> 15 - W;
716
- R[J] = e;
717
- Z++;
718
- }
676
+ for (var l = 0; l < V; l += 2) if (N[l + 1] != 0) {
677
+ var M = l >> 1,
678
+ I = N[l + 1],
679
+ e = M << 4 | I,
680
+ b = W - I,
681
+ Z = N[l] << b,
682
+ m = Z + (1 << b);
683
+
684
+ while (Z != m) {
685
+ var J = A[Z] >>> 15 - W;
686
+ R[J] = e;
687
+ Z++;
719
688
  }
720
689
  }
721
690
  };
@@ -934,8 +903,8 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
934
903
  paeth = UPNG.decode._paeth;
935
904
 
936
905
  bpp = Math.ceil(bpp / 8);
937
- var i = 0,
938
- di = 1,
906
+ var i,
907
+ di,
939
908
  type = data[off],
940
909
  x = 0;
941
910
  if (type > 1) data[off] = [0, 0, 1][type - 2];
@@ -946,10 +915,7 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
946
915
  di = i + y + 1;
947
916
  type = data[di - 1];
948
917
  x = 0;
949
-
950
- if (type == 0) {
951
- for (; x < bpl; x++) data[i + x] = data[di + x];
952
- } else if (type == 1) {
918
+ if (type == 0) for (; x < bpl; x++) data[i + x] = data[di + x];else if (type == 1) {
953
919
  for (; x < bpp; x++) data[i + x] = data[di + x];
954
920
 
955
921
  for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpp];
@@ -962,9 +928,7 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
962
928
  } else {
963
929
  for (; x < bpp; x++) data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0);
964
930
 
965
- for (; x < bpl; x++) {
966
- data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);
967
- }
931
+ for (; x < bpl; x++) data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);
968
932
  }
969
933
  }
970
934
 
@@ -1062,73 +1026,71 @@ UPNG._copyTile = function (sb, sw, sh, tb, tw, th, xoff, yoff, mode) {
1062
1026
  var si = 0,
1063
1027
  ti = 0;
1064
1028
 
1065
- for (var y = 0; y < h; y++) {
1066
- for (var x = 0; x < w; x++) {
1067
- if (xoff >= 0 && yoff >= 0) {
1068
- si = y * sw + x << 2;
1069
- ti = (yoff + y) * tw + xoff + x << 2;
1070
- } else {
1071
- si = (-yoff + y) * sw - xoff + x << 2;
1072
- ti = y * tw + x << 2;
1073
- }
1029
+ for (var y = 0; y < h; y++) for (var x = 0; x < w; x++) {
1030
+ if (xoff >= 0 && yoff >= 0) {
1031
+ si = y * sw + x << 2;
1032
+ ti = (yoff + y) * tw + xoff + x << 2;
1033
+ } else {
1034
+ si = (-yoff + y) * sw - xoff + x << 2;
1035
+ ti = y * tw + x << 2;
1036
+ }
1074
1037
 
1075
- if (mode == 0) {
1076
- tb[ti] = sb[si];
1077
- tb[ti + 1] = sb[si + 1];
1078
- tb[ti + 2] = sb[si + 2];
1079
- tb[ti + 3] = sb[si + 3];
1080
- } else if (mode == 1) {
1081
- var fa = sb[si + 3] * (1 / 255),
1082
- fr = sb[si] * fa,
1083
- fg = sb[si + 1] * fa,
1084
- fb = sb[si + 2] * fa;
1085
- var ba = tb[ti + 3] * (1 / 255),
1086
- br = tb[ti] * ba,
1087
- bg = tb[ti + 1] * ba,
1088
- bb = tb[ti + 2] * ba;
1089
- var ifa = 1 - fa,
1090
- oa = fa + ba * ifa,
1091
- ioa = oa == 0 ? 0 : 1 / oa;
1092
- tb[ti + 3] = 255 * oa;
1093
- tb[ti + 0] = (fr + br * ifa) * ioa;
1094
- tb[ti + 1] = (fg + bg * ifa) * ioa;
1095
- tb[ti + 2] = (fb + bb * ifa) * ioa;
1096
- } else if (mode == 2) {
1097
- // copy only differences, otherwise zero
1098
- var fa = sb[si + 3],
1099
- fr = sb[si],
1100
- fg = sb[si + 1],
1101
- fb = sb[si + 2];
1102
- var ba = tb[ti + 3],
1103
- br = tb[ti],
1104
- bg = tb[ti + 1],
1105
- bb = tb[ti + 2];
1106
-
1107
- if (fa == ba && fr == br && fg == bg && fb == bb) {
1108
- tb[ti] = 0;
1109
- tb[ti + 1] = 0;
1110
- tb[ti + 2] = 0;
1111
- tb[ti + 3] = 0;
1112
- } else {
1113
- tb[ti] = fr;
1114
- tb[ti + 1] = fg;
1115
- tb[ti + 2] = fb;
1116
- tb[ti + 3] = fa;
1117
- }
1118
- } else if (mode == 3) {
1119
- // check if can be blended
1120
- var fa = sb[si + 3],
1121
- fr = sb[si],
1122
- fg = sb[si + 1],
1123
- fb = sb[si + 2];
1124
- var ba = tb[ti + 3],
1125
- br = tb[ti],
1126
- bg = tb[ti + 1],
1127
- bb = tb[ti + 2];
1128
- if (fa == ba && fr == br && fg == bg && fb == bb) continue; //if(fa!=255 && ba!=0) return false;
1129
-
1130
- if (fa < 220 && ba > 20) return false;
1038
+ if (mode == 0) {
1039
+ tb[ti] = sb[si];
1040
+ tb[ti + 1] = sb[si + 1];
1041
+ tb[ti + 2] = sb[si + 2];
1042
+ tb[ti + 3] = sb[si + 3];
1043
+ } else if (mode == 1) {
1044
+ var fa = sb[si + 3] * (1 / 255),
1045
+ fr = sb[si] * fa,
1046
+ fg = sb[si + 1] * fa,
1047
+ fb = sb[si + 2] * fa;
1048
+ var ba = tb[ti + 3] * (1 / 255),
1049
+ br = tb[ti] * ba,
1050
+ bg = tb[ti + 1] * ba,
1051
+ bb = tb[ti + 2] * ba;
1052
+ var ifa = 1 - fa,
1053
+ oa = fa + ba * ifa,
1054
+ ioa = oa == 0 ? 0 : 1 / oa;
1055
+ tb[ti + 3] = 255 * oa;
1056
+ tb[ti + 0] = (fr + br * ifa) * ioa;
1057
+ tb[ti + 1] = (fg + bg * ifa) * ioa;
1058
+ tb[ti + 2] = (fb + bb * ifa) * ioa;
1059
+ } else if (mode == 2) {
1060
+ // copy only differences, otherwise zero
1061
+ var fa = sb[si + 3],
1062
+ fr = sb[si],
1063
+ fg = sb[si + 1],
1064
+ fb = sb[si + 2];
1065
+ var ba = tb[ti + 3],
1066
+ br = tb[ti],
1067
+ bg = tb[ti + 1],
1068
+ bb = tb[ti + 2];
1069
+
1070
+ if (fa == ba && fr == br && fg == bg && fb == bb) {
1071
+ tb[ti] = 0;
1072
+ tb[ti + 1] = 0;
1073
+ tb[ti + 2] = 0;
1074
+ tb[ti + 3] = 0;
1075
+ } else {
1076
+ tb[ti] = fr;
1077
+ tb[ti + 1] = fg;
1078
+ tb[ti + 2] = fb;
1079
+ tb[ti + 3] = fa;
1131
1080
  }
1081
+ } else if (mode == 3) {
1082
+ // check if can be blended
1083
+ var fa = sb[si + 3],
1084
+ fr = sb[si],
1085
+ fg = sb[si + 1],
1086
+ fb = sb[si + 2];
1087
+ var ba = tb[ti + 3],
1088
+ br = tb[ti],
1089
+ bg = tb[ti + 1],
1090
+ bb = tb[ti + 2];
1091
+ if (fa == ba && fr == br && fg == bg && fb == bb) continue; //if(fa!=255 && ba!=0) return false;
1092
+
1093
+ if (fa < 220 && ba > 20) return false;
1132
1094
  }
1133
1095
  }
1134
1096