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.
- package/{Nodes-acab3ca5.js → Nodes-427f68b0.js} +0 -0
- package/{Nodes-244507d0.js → Nodes-ec4e1143.js} +0 -0
- package/controls/TrackballControls.cjs.js +1 -1
- package/controls/TrackballControls.js +19 -6
- package/index.cjs.js +1 -1
- package/index.js +1 -1
- package/loaders/AMFLoader.js +1 -3
- package/loaders/ColladaLoader.cjs.js +1 -1
- package/loaders/ColladaLoader.js +58 -35
- package/loaders/EXRLoader.cjs.js +1 -1
- package/loaders/EXRLoader.js +197 -262
- package/loaders/FBXLoader.cjs.js +1 -1
- package/loaders/FBXLoader.js +41 -90
- package/loaders/GLTFLoader.cjs.js +1 -1
- package/loaders/GLTFLoader.js +160 -72
- package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
- package/loaders/HDRCubeTextureLoader.js +2 -10
- package/loaders/NodeMaterialLoader.cjs.js +1 -1
- package/loaders/RGBELoader.cjs.js +1 -1
- package/loaders/RGBELoader.js +11 -25
- package/loaders/RGBMLoader.cjs.js +1 -1
- package/loaders/RGBMLoader.js +225 -263
- package/loaders/SVGLoader.cjs.js +1 -1
- package/loaders/SVGLoader.js +46 -30
- package/loaders/VRMLLoader.cjs.js +1 -1
- package/loaders/VRMLLoader.js +2 -1
- package/misc/WebGL.cjs.js +1 -1
- package/misc/WebGL.d.ts +5 -7
- package/misc/WebGL.js +67 -54
- package/nodes/core/NodeBuilder.cjs.js +1 -1
- package/nodes/core/NodeBuilder.js +2 -2
- package/nodes/inputs/CubeTextureNode.cjs.js +1 -1
- package/nodes/inputs/RTTNode.cjs.js +1 -1
- package/nodes/inputs/ReflectorNode.cjs.js +1 -1
- package/nodes/inputs/ScreenNode.cjs.js +1 -1
- package/nodes/inputs/TextureNode.cjs.js +1 -1
- package/nodes/materials/BasicNodeMaterial.cjs.js +1 -1
- package/nodes/materials/NodeMaterial.cjs.js +1 -1
- package/nodes/materials/SpriteNodeMaterial.cjs.js +1 -1
- package/nodes/postprocessing/NodePass.cjs.js +1 -1
- package/nodes/postprocessing/NodePostProcessing.cjs.js +1 -1
- package/nodes/utils/ColorSpaceNode.cjs.js +1 -1
- package/nodes/utils/ColorSpaceNode.js +2 -45
- package/package.json +1 -1
- package/shaders/GammaCorrectionShader.js +1 -2
package/loaders/RGBMLoader.js
CHANGED
@@ -1,6 +1,22 @@
|
|
1
|
-
import { DataTextureLoader,
|
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.
|
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:
|
77
|
+
data: output,
|
39
78
|
format: RGBAFormat,
|
40
|
-
type:
|
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
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
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
|
-
|
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
|
-
|
120
|
-
|
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
|
-
|
126
|
-
|
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
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
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
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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
|
-
|
162
|
-
|
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
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
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
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
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
|
-
|
212
|
-
|
213
|
-
|
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
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
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
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
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
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
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] =
|
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
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
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
|
938
|
-
di
|
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
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
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
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
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
|
|