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.
- package/{Nodes-acab3ca5.js → Nodes-427f68b0.js} +0 -0
- package/{Nodes-244507d0.js → Nodes-ec4e1143.js} +0 -0
- package/controls/ArcballControls.cjs.js +1 -1
- package/controls/ArcballControls.d.ts +164 -0
- package/controls/ArcballControls.js +512 -197
- package/controls/OrbitControls.cjs.js +1 -1
- package/controls/OrbitControls.d.ts +1 -0
- package/controls/OrbitControls.js +13 -2
- package/geometries/TextGeometry.cjs.js +1 -0
- package/geometries/TextGeometry.d.ts +16 -0
- package/geometries/TextGeometry.js +26 -0
- package/index.cjs.js +1 -1
- package/index.d.ts +2 -0
- package/index.js +3 -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/FontLoader.cjs.js +1 -0
- package/loaders/FontLoader.d.ts +32 -0
- package/loaders/FontLoader.js +139 -0
- 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
|
|