three-stdlib 2.6.0 → 2.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) 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/TrackballControls.cjs.js +1 -1
  4. package/controls/TrackballControls.js +19 -6
  5. package/index.cjs.js +1 -1
  6. package/index.js +1 -1
  7. package/loaders/AMFLoader.js +1 -3
  8. package/loaders/ColladaLoader.cjs.js +1 -1
  9. package/loaders/ColladaLoader.js +58 -35
  10. package/loaders/EXRLoader.cjs.js +1 -1
  11. package/loaders/EXRLoader.js +197 -262
  12. package/loaders/FBXLoader.cjs.js +1 -1
  13. package/loaders/FBXLoader.js +41 -90
  14. package/loaders/GLTFLoader.cjs.js +1 -1
  15. package/loaders/GLTFLoader.js +160 -72
  16. package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
  17. package/loaders/HDRCubeTextureLoader.js +2 -10
  18. package/loaders/NodeMaterialLoader.cjs.js +1 -1
  19. package/loaders/RGBELoader.cjs.js +1 -1
  20. package/loaders/RGBELoader.js +11 -25
  21. package/loaders/RGBMLoader.cjs.js +1 -1
  22. package/loaders/RGBMLoader.js +225 -263
  23. package/loaders/SVGLoader.cjs.js +1 -1
  24. package/loaders/SVGLoader.js +46 -30
  25. package/loaders/VRMLLoader.cjs.js +1 -1
  26. package/loaders/VRMLLoader.js +2 -1
  27. package/misc/WebGL.cjs.js +1 -1
  28. package/misc/WebGL.d.ts +5 -7
  29. package/misc/WebGL.js +67 -54
  30. package/nodes/core/NodeBuilder.cjs.js +1 -1
  31. package/nodes/core/NodeBuilder.js +2 -2
  32. package/nodes/inputs/CubeTextureNode.cjs.js +1 -1
  33. package/nodes/inputs/RTTNode.cjs.js +1 -1
  34. package/nodes/inputs/ReflectorNode.cjs.js +1 -1
  35. package/nodes/inputs/ScreenNode.cjs.js +1 -1
  36. package/nodes/inputs/TextureNode.cjs.js +1 -1
  37. package/nodes/materials/BasicNodeMaterial.cjs.js +1 -1
  38. package/nodes/materials/NodeMaterial.cjs.js +1 -1
  39. package/nodes/materials/SpriteNodeMaterial.cjs.js +1 -1
  40. package/nodes/postprocessing/NodePass.cjs.js +1 -1
  41. package/nodes/postprocessing/NodePostProcessing.cjs.js +1 -1
  42. package/nodes/utils/ColorSpaceNode.cjs.js +1 -1
  43. package/nodes/utils/ColorSpaceNode.js +2 -45
  44. package/package.json +1 -1
  45. 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