three-stdlib 2.6.3 → 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/index.cjs.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 -2
- package/loaders/RGBELoader.cjs.js +1 -1
- package/loaders/RGBELoader.js +10 -9
- package/loaders/RGBMLoader.cjs.js +1 -1
- package/loaders/RGBMLoader.js +181 -257
- 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/package.json +1 -1
package/loaders/RGBMLoader.js
CHANGED
@@ -108,11 +108,7 @@ UPNG.toRGBA8 = function (out) {
|
|
108
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);
|
109
109
|
frms.push(img.buffer.slice(0));
|
110
110
|
|
111
|
-
if (frm.dispose == 0) ; else if (frm.dispose == 1)
|
112
|
-
UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);
|
113
|
-
} else if (frm.dispose == 2) {
|
114
|
-
for (var j = 0; j < len; j++) img[j] = prev[j];
|
115
|
-
}
|
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];
|
116
112
|
}
|
117
113
|
|
118
114
|
return frms;
|
@@ -133,60 +129,43 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
|
|
133
129
|
if (ctype == 6) {
|
134
130
|
// RGB + alpha
|
135
131
|
var qarea = area << 2;
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
bf[i + 2] = data[i + 2];
|
142
|
-
bf[i + 3] = data[i + 3];
|
143
|
-
}
|
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];
|
144
137
|
}
|
145
|
-
|
146
|
-
|
147
|
-
for (var i = 0; i < qarea; i++) {
|
148
|
-
bf[i] = data[i << 1];
|
149
|
-
}
|
138
|
+
if (depth == 16) for (var i = 0; i < qarea; i++) {
|
139
|
+
bf[i] = data[i << 1];
|
150
140
|
}
|
151
141
|
} else if (ctype == 2) {
|
152
142
|
// RGB
|
153
143
|
var ts = out.tabs['tRNS'];
|
154
144
|
|
155
145
|
if (ts == null) {
|
156
|
-
if (depth == 8) {
|
157
|
-
|
158
|
-
|
159
|
-
bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
|
160
|
-
}
|
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];
|
161
149
|
}
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
var ti = i * 6;
|
166
|
-
bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
|
167
|
-
}
|
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];
|
168
153
|
}
|
169
154
|
} else {
|
170
155
|
var tr = ts[0],
|
171
156
|
tg = ts[1],
|
172
157
|
tb = ts[2];
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
|
179
|
-
if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0;
|
180
|
-
}
|
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;
|
181
163
|
}
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
|
188
|
-
if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0;
|
189
|
-
}
|
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;
|
190
169
|
}
|
191
170
|
}
|
192
171
|
} else if (ctype == 3) {
|
@@ -195,61 +174,41 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
|
|
195
174
|
ap = out.tabs['tRNS'],
|
196
175
|
tl = ap ? ap.length : 0; //console.log(p, ap);
|
197
176
|
|
198
|
-
if (depth == 1) {
|
199
|
-
|
200
|
-
|
201
|
-
t0 = y * w;
|
202
|
-
|
203
|
-
for (var i = 0; i < w; i++) {
|
204
|
-
var qi = t0 + i << 2,
|
205
|
-
j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1,
|
206
|
-
cj = 3 * j;
|
207
|
-
bf[qi] = p[cj];
|
208
|
-
bf[qi + 1] = p[cj + 1];
|
209
|
-
bf[qi + 2] = p[cj + 2];
|
210
|
-
bf[qi + 3] = j < tl ? ap[j] : 255;
|
211
|
-
}
|
212
|
-
}
|
213
|
-
}
|
177
|
+
if (depth == 1) for (var y = 0; y < h; y++) {
|
178
|
+
var s0 = y * bpl,
|
179
|
+
t0 = y * w;
|
214
180
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
cj = 3 * j;
|
224
|
-
bf[qi] = p[cj];
|
225
|
-
bf[qi + 1] = p[cj + 1];
|
226
|
-
bf[qi + 2] = p[cj + 2];
|
227
|
-
bf[qi + 3] = j < tl ? ap[j] : 255;
|
228
|
-
}
|
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;
|
229
189
|
}
|
230
190
|
}
|
191
|
+
if (depth == 2) for (var y = 0; y < h; y++) {
|
192
|
+
var s0 = y * bpl,
|
193
|
+
t0 = y * w;
|
231
194
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
cj = 3 * j;
|
241
|
-
bf[qi] = p[cj];
|
242
|
-
bf[qi + 1] = p[cj + 1];
|
243
|
-
bf[qi + 2] = p[cj + 2];
|
244
|
-
bf[qi + 3] = j < tl ? ap[j] : 255;
|
245
|
-
}
|
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;
|
246
203
|
}
|
247
204
|
}
|
205
|
+
if (depth == 4) for (var y = 0; y < h; y++) {
|
206
|
+
var s0 = y * bpl,
|
207
|
+
t0 = y * w;
|
248
208
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
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,
|
253
212
|
cj = 3 * j;
|
254
213
|
bf[qi] = p[cj];
|
255
214
|
bf[qi + 1] = p[cj + 1];
|
@@ -257,30 +216,34 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
|
|
257
216
|
bf[qi + 3] = j < tl ? ap[j] : 255;
|
258
217
|
}
|
259
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
|
+
}
|
260
228
|
} else if (ctype == 4) {
|
261
229
|
// gray + alpha
|
262
|
-
if (depth == 8) {
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
bf[qi + 3] = data[di + 1];
|
271
|
-
}
|
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];
|
272
238
|
}
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
bf[qi + 2] = gr;
|
282
|
-
bf[qi + 3] = data[di + 2];
|
283
|
-
}
|
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];
|
284
247
|
}
|
285
248
|
} else if (ctype == 0) {
|
286
249
|
// gray
|
@@ -289,37 +252,26 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
|
|
289
252
|
for (var y = 0; y < h; y++) {
|
290
253
|
var off = y * bpl,
|
291
254
|
to = y * w;
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
for (var x = 0; x < w; x++) {
|
313
|
-
var gr = data[off + x],
|
314
|
-
al = gr == tr ? 0 : 255;
|
315
|
-
bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
|
316
|
-
}
|
317
|
-
} else if (depth == 16) {
|
318
|
-
for (var x = 0; x < w; x++) {
|
319
|
-
var gr = data[off + (x << 1)],
|
320
|
-
al = rs(data, off + (x << i)) == tr ? 0 : 255;
|
321
|
-
bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
|
322
|
-
}
|
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;
|
323
275
|
}
|
324
276
|
}
|
325
277
|
} //console.log(Date.now()-time);
|
@@ -407,15 +359,11 @@ UPNG.decode = function (buff) {
|
|
407
359
|
var keyw = bin.readASCII(data, offset, nz - offset);
|
408
360
|
var text,
|
409
361
|
tl = offset + len - nz - 1;
|
410
|
-
|
411
|
-
if (type == 'tEXt') {
|
412
|
-
text = bin.readASCII(data, nz + 1, tl);
|
413
|
-
} else {
|
362
|
+
if (type == 'tEXt') text = bin.readASCII(data, nz + 1, tl);else {
|
414
363
|
var bfr = UPNG.decode._inflate(data.slice(nz + 2, nz + 2 + tl));
|
415
364
|
|
416
365
|
text = bin.readUTF8(bfr, 0, bfr.length);
|
417
366
|
}
|
418
|
-
|
419
367
|
out.tabs[type][keyw] = text;
|
420
368
|
} else if (type == 'iTXt') {
|
421
369
|
if (out.tabs[type] == null) out.tabs[type] = {};
|
@@ -434,15 +382,11 @@ UPNG.decode = function (buff) {
|
|
434
382
|
off = nz + 1;
|
435
383
|
var text,
|
436
384
|
tl = len - (off - offset);
|
437
|
-
|
438
|
-
if (cflag == 0) {
|
439
|
-
text = bin.readUTF8(data, off, tl);
|
440
|
-
} else {
|
385
|
+
if (cflag == 0) text = bin.readUTF8(data, off, tl);else {
|
441
386
|
var bfr = UPNG.decode._inflate(data.slice(off, off + tl));
|
442
387
|
|
443
388
|
text = bin.readUTF8(bfr, 0, bfr.length);
|
444
389
|
}
|
445
|
-
|
446
390
|
out.tabs[type][keyw] = text;
|
447
391
|
} else if (type == 'PLTE') {
|
448
392
|
out.tabs[type] = bin.readBytes(data, offset, len);
|
@@ -453,21 +397,11 @@ UPNG.decode = function (buff) {
|
|
453
397
|
for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data, offset + i * 2));
|
454
398
|
} else if (type == 'tRNS') {
|
455
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);
|
456
|
-
} else if (type == 'gAMA') {
|
457
|
-
out.tabs[type] =
|
458
|
-
} else if (type == 'sRGB') {
|
459
|
-
out.tabs[type] = data[offset];
|
460
|
-
} else if (type == 'bKGD') {
|
461
|
-
if (out.ctype == 0 || out.ctype == 4) {
|
462
|
-
out.tabs[type] = [rUs(data, offset)];
|
463
|
-
} else if (out.ctype == 2 || out.ctype == 6) {
|
464
|
-
out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];
|
465
|
-
} else if (out.ctype == 3) {
|
466
|
-
out.tabs[type] = data[offset];
|
467
|
-
}
|
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];
|
468
402
|
} else if (type == 'IEND') {
|
469
403
|
break;
|
470
|
-
} //else { log("unknown chunk type", type, len); }
|
404
|
+
} //else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
|
471
405
|
|
472
406
|
|
473
407
|
offset += len;
|
@@ -478,7 +412,6 @@ UPNG.decode = function (buff) {
|
|
478
412
|
if (foff != 0) {
|
479
413
|
var fr = out.frames[out.frames.length - 1];
|
480
414
|
fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);
|
481
|
-
foff = 0;
|
482
415
|
}
|
483
416
|
|
484
417
|
out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
|
@@ -740,20 +673,18 @@ UPNG.inflateRaw = function () {
|
|
740
673
|
n = H.H.m,
|
741
674
|
A = n.r;
|
742
675
|
|
743
|
-
for (var l = 0; l < V; l += 2) {
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
Z++;
|
756
|
-
}
|
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++;
|
757
688
|
}
|
758
689
|
}
|
759
690
|
};
|
@@ -972,8 +903,8 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
|
|
972
903
|
paeth = UPNG.decode._paeth;
|
973
904
|
|
974
905
|
bpp = Math.ceil(bpp / 8);
|
975
|
-
var i
|
976
|
-
di
|
906
|
+
var i,
|
907
|
+
di,
|
977
908
|
type = data[off],
|
978
909
|
x = 0;
|
979
910
|
if (type > 1) data[off] = [0, 0, 1][type - 2];
|
@@ -984,10 +915,7 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
|
|
984
915
|
di = i + y + 1;
|
985
916
|
type = data[di - 1];
|
986
917
|
x = 0;
|
987
|
-
|
988
|
-
if (type == 0) {
|
989
|
-
for (; x < bpl; x++) data[i + x] = data[di + x];
|
990
|
-
} else if (type == 1) {
|
918
|
+
if (type == 0) for (; x < bpl; x++) data[i + x] = data[di + x];else if (type == 1) {
|
991
919
|
for (; x < bpp; x++) data[i + x] = data[di + x];
|
992
920
|
|
993
921
|
for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpp];
|
@@ -1000,9 +928,7 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
|
|
1000
928
|
} else {
|
1001
929
|
for (; x < bpp; x++) data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0);
|
1002
930
|
|
1003
|
-
for (; x < bpl; x++)
|
1004
|
-
data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);
|
1005
|
-
}
|
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]);
|
1006
932
|
}
|
1007
933
|
}
|
1008
934
|
|
@@ -1100,73 +1026,71 @@ UPNG._copyTile = function (sb, sw, sh, tb, tw, th, xoff, yoff, mode) {
|
|
1100
1026
|
var si = 0,
|
1101
1027
|
ti = 0;
|
1102
1028
|
|
1103
|
-
for (var y = 0; y < h; y++) {
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
}
|
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
|
+
}
|
1112
1037
|
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
}
|
1156
|
-
} else if (mode == 3) {
|
1157
|
-
// check if can be blended
|
1158
|
-
var fa = sb[si + 3],
|
1159
|
-
fr = sb[si],
|
1160
|
-
fg = sb[si + 1],
|
1161
|
-
fb = sb[si + 2];
|
1162
|
-
var ba = tb[ti + 3],
|
1163
|
-
br = tb[ti],
|
1164
|
-
bg = tb[ti + 1],
|
1165
|
-
bb = tb[ti + 2];
|
1166
|
-
if (fa == ba && fr == br && fg == bg && fb == bb) continue; //if(fa!=255 && ba!=0) return false;
|
1167
|
-
|
1168
|
-
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;
|
1169
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;
|
1170
1094
|
}
|
1171
1095
|
}
|
1172
1096
|
|