1 line
62 KiB
Plaintext
1 line
62 KiB
Plaintext
|
|
{"version":3,"file":"RGBMLoader.cjs","sources":["../../src/loaders/RGBMLoader.js"],"sourcesContent":["import { DataTextureLoader, RGBAFormat, LinearFilter, CubeTexture, HalfFloatType, DataUtils } from 'three'\n\nlet UPNG\n\nfunction init() {\n if (UPNG) return UPNG\n // from https://github.com/photopea/UPNG.js (MIT License)\n\n UPNG = {}\n\n UPNG.toRGBA8 = function (out) {\n var w = out.width,\n h = out.height\n if (out.tabs.acTL == null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer]\n\n var frms = []\n if (out.frames[0].data == null) out.frames[0].data = out.data\n\n var len = w * h * 4,\n img = new Uint8Array(len),\n empty = new Uint8Array(len),\n prev = new Uint8Array(len)\n for (var i = 0; i < out.frames.length; i++) {\n var frm = out.frames[i]\n var fx = frm.rect.x,\n fy = frm.rect.y,\n fw = frm.rect.width,\n fh = frm.rect.height\n var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out)\n\n if (i != 0) for (var j = 0; j < len; j++) prev[j] = img[j]\n\n if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0)\n else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1)\n\n frms.push(img.buffer.slice(0))\n\n if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0)\n else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j]\n }\n\n return frms\n }\n\n UPNG.toRGBA8.decodeImage = function (data, w, h, out) {\n var area = w * h,\n bpp = UPNG.decode._getBPP(out)\n var bpl = Math.ceil((w * bpp) / 8) // bytes per line\n\n var bf = new Uint8Array(area * 4),\n bf32 = new Uint32Array(bf.buffer)\n var ctype = out.ctype,\n depth = out.depth\n var rs = UPNG._bin.readUshort\n\n if (ctype == 6) {\n // RGB + alpha\n\n var qarea = area << 2\n if (depth == 8) {\n for (var i = 0; i < qarea; i += 4) {\n bf[i] = data[i]\n bf[i + 1] = data[i + 1]\n bf[i + 2] = data[i + 2]\n bf[i + 3] = data[i + 3]\n }\n }\n\n if (depth == 16) {\n for (var i = 0; i < qarea; i++) {\n bf[i] = data[i << 1]\n }\n }\n } else if (ctype == 2) {\n // RGB\n\n var ts = out.tabs['tRNS']\n if (ts == null) {\n if (depth == 8) {\n for (var i = 0; i < area; i++) {\n var ti = i * 3\n bf32[i] = (255 << 24) | (data[ti + 2] << 16) | (data[ti + 1] << 8) | data[ti]\n }\n }\n\n if (depth == 16) {\n for (var i = 0; i < area; i++) {\n var ti = i * 6\n bf32[i] = (255 << 24) | (data[ti + 4] << 16) | (data[ti + 2] << 8) | data[ti]\n }\n }\n } else {\n var tr = ts[0],\n tg = ts[1],\n tb = ts[2]\n if (depth == 8) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2,\n ti = i * 3\n bf32[i] = (255 << 24) | (data[ti + 2] << 16) | (data[ti + 1] << 8) | data[ti]\n if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0\n }\n }\n\n if (depth == 16) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2,\n ti = i * 6\n bf32[i] = (255 << 24) | (data[ti + 4] << 16) | (data[ti + 2] << 8) | data[ti]\n if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0\n }\n }\n }\n } else if (ctype == 3) {\n // palette\n\n var p = out.tabs['PLTE'],\n ap = out.tabs['tRNS'],\n tl = ap ? ap.length : 0\n //console.log(p, ap);\n if (depth == 1) {\n for (var y = 0; y < h; y++) {\n var s0 = y * bpl,\n t0 = y * w\n for (var i = 0; i < w; i++) {\n var qi = (t0 + i) << 2,\n j = (data[s0 + (i >> 3)] >> (7 - ((i & 7) << 0))) & 1,\n cj = 3 * j\n bf[qi] = p[cj]\n bf[qi + 1] = p[cj + 1]\n
|