three-stdlib 2.30.2 → 2.30.4
Sign up to get free protection for your applications and to get access to all the features.
- package/_polyfill/LoaderUtils.cjs +18 -0
- package/_polyfill/LoaderUtils.cjs.map +1 -0
- package/_polyfill/LoaderUtils.js +18 -0
- package/_polyfill/LoaderUtils.js.map +1 -0
- package/loaders/3MFLoader.cjs +4 -3
- package/loaders/3MFLoader.cjs.map +1 -1
- package/loaders/3MFLoader.js +5 -4
- package/loaders/3MFLoader.js.map +1 -1
- package/loaders/AMFLoader.cjs +2 -1
- package/loaders/AMFLoader.cjs.map +1 -1
- package/loaders/AMFLoader.js +3 -2
- package/loaders/AMFLoader.js.map +1 -1
- package/loaders/FBXLoader.cjs +3 -2
- package/loaders/FBXLoader.cjs.map +1 -1
- package/loaders/FBXLoader.js +3 -2
- package/loaders/FBXLoader.js.map +1 -1
- package/loaders/GLTFLoader.cjs +5 -4
- package/loaders/GLTFLoader.cjs.map +1 -1
- package/loaders/GLTFLoader.js +5 -4
- package/loaders/GLTFLoader.js.map +1 -1
- package/loaders/KTX2Loader.cjs +3 -3
- package/loaders/KTX2Loader.cjs.map +1 -1
- package/loaders/KTX2Loader.js +3 -3
- package/loaders/KTX2Loader.js.map +1 -1
- package/loaders/PCDLoader.cjs +2 -1
- package/loaders/PCDLoader.cjs.map +1 -1
- package/loaders/PCDLoader.js +3 -2
- package/loaders/PCDLoader.js.map +1 -1
- package/loaders/PLYLoader.cjs +2 -1
- package/loaders/PLYLoader.cjs.map +1 -1
- package/loaders/PLYLoader.js +3 -2
- package/loaders/PLYLoader.js.map +1 -1
- package/loaders/STLLoader.cjs +2 -1
- package/loaders/STLLoader.cjs.map +1 -1
- package/loaders/STLLoader.js +3 -2
- package/loaders/STLLoader.js.map +1 -1
- package/loaders/VTKLoader.cjs +4 -3
- package/loaders/VTKLoader.cjs.map +1 -1
- package/loaders/VTKLoader.js +5 -4
- package/loaders/VTKLoader.js.map +1 -1
- package/loaders/XLoader.cjs +3 -2
- package/loaders/XLoader.cjs.map +1 -1
- package/loaders/XLoader.js +3 -2
- package/loaders/XLoader.js.map +1 -1
- package/package.json +1 -1
package/loaders/KTX2Loader.cjs
CHANGED
@@ -211,9 +211,9 @@ __publicField(KTX2Loader, "BasisWorker", function() {
|
|
211
211
|
let config;
|
212
212
|
let transcoderPending;
|
213
213
|
let BasisModule;
|
214
|
-
const EngineFormat =
|
215
|
-
const TranscoderFormat =
|
216
|
-
const BasisFormat =
|
214
|
+
const EngineFormat = _EngineFormat;
|
215
|
+
const TranscoderFormat = _TranscoderFormat;
|
216
|
+
const BasisFormat = _BasisFormat;
|
217
217
|
self.addEventListener("message", function(e) {
|
218
218
|
const message = e.data;
|
219
219
|
switch (message.type) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"KTX2Loader.cjs","sources":["../../src/loaders/KTX2Loader.js"],"sourcesContent":["/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n CompressedTexture,\n DataTexture,\n FileLoader,\n FloatType,\n HalfFloatType,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n RedFormat,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format,\n RGBA_ASTC_4x4_Format,\n RGBA_ASTC_6x6_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGBAFormat,\n RGFormat,\n UnsignedByteType,\n} from 'three'\nimport { WorkerPool } from '../utils/WorkerPool'\nimport {\n read,\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_TRANSFER_SRGB,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n VK_FORMAT_UNDEFINED,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n} from '../libs/ktx-parse'\nimport { ZSTDDecoder } from '../libs/zstddec'\nimport { CompressedCubeTexture } from '../_polyfill/CompressedCubeTexture'\nimport { CompressedArrayTexture } from '../_polyfill/CompressedArrayTexture'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nconst LinearEncoding = 3000\nconst sRGBEncoding = 3001\n\nconst NoColorSpace = ''\nconst DisplayP3ColorSpace = 'display-p3'\nconst LinearDisplayP3ColorSpace = 'display-p3-linear'\nconst LinearSRGBColorSpace = 'srgb-linear'\nconst SRGBColorSpace = 'srgb'\n\nconst _taskCache = new WeakMap()\n\nlet _activeLoaders = 0\n\nlet _zstd\n\nclass KTX2Loader extends Loader {\n /* CONSTANTS */\n\n static BasisFormat = {\n ETC1S: 0,\n UASTC_4x4: 1,\n }\n\n static TranscoderFormat = {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16,\n }\n\n static EngineFormat = {\n RGBAFormat: RGBAFormat,\n RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format: RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format: RGB_ETC1_Format,\n RGB_ETC2_Format: RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n }\n\n /* WEB WORKER */\n\n static BasisWorker = function () {\n let config\n let transcoderPending\n let BasisModule\n\n const EngineFormat = KTX2Loader.EngineFormat\n const TranscoderFormat = KTX2Loader.TranscoderFormat\n const BasisFormat = KTX2Loader.BasisFormat\n\n self.addEventListener('message', function (e) {\n const message = e.data\n\n switch (message.type) {\n case 'init':\n config = message.config\n init(message.transcoderBinary)\n break\n\n case 'transcode':\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer)\n\n self.postMessage(\n { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers,\n )\n } catch (error) {\n console.error(error)\n\n self.postMessage({ type: 'error', id: message.id, error: error.message })\n }\n })\n break\n }\n })\n\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve }\n BASIS(BasisModule)\n }).then(() => {\n BasisModule.initializeBasis()\n\n if (BasisModule.KTX2File === undefined) {\n console.warn('THREE.KTX2Loader: Please update Basis Universal transcoder.')\n }\n })\n }\n\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer))\n\n function cleanup() {\n ktx2File.close()\n ktx2File.delete()\n }\n\n if (!ktx2File.isValid()) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file')\n }\n\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S\n const width = ktx2File.getWidth()\n const height = ktx2File.getHeight()\n const layerCount = ktx2File.getLayers() || 1\n const levelCount = ktx2File.getLevels()\n const faceCount = ktx2File.getFaces()\n const hasAlpha = ktx2File.getHasAlpha()\n const dfdFlags = ktx2File.getDFDFlags()\n\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha)\n\n if (!width || !height || !levelCount) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid texture')\n }\n\n if (!ktx2File.startTranscoding()) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .startTranscoding failed')\n }\n\n const faces = []\n const buffers = []\n\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = []\n\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = []\n\n let mipWidth, mipHeight\n\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face)\n\n if (\n face === 0 &&\n mip === 0 &&\n layer === 0 &&\n (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)\n ) {\n console.warn('THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.')\n }\n\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth\n mipHeight = levelInfo.origHeight\n } else {\n // Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n // mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n // See mrdoob/three.js#25908.\n mipWidth = levelInfo.width\n mipHeight = levelInfo.height\n }\n\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat))\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)\n\n if (!status) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .transcodeImage failed.')\n }\n\n layerMips.push(dst)\n }\n\n const mipData = concat(layerMips)\n\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight })\n buffers.push(mipData.buffer)\n }\n\n faces.push({ mipmaps, width, height, format: engineFormat })\n }\n\n cleanup()\n\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags }\n }\n\n //\n\n // Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n // device capabilities, and texture dimensions. The list below ranks the formats separately\n // for ETC1S and UASTC.\n //\n // In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n // significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n // chooses RGBA32 only as a last resort and does not expose that option to the caller.\n const FORMAT_OPTIONS = [\n {\n if: 'astcSupported',\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false,\n },\n {\n if: 'bptcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false,\n },\n {\n if: 'dxtSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc2Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc1Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false,\n },\n {\n if: 'pvrtcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true,\n },\n ]\n\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityETC1S - b.priorityETC1S\n })\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityUASTC - b.priorityUASTC\n })\n\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat\n let engineFormat\n\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS\n\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]\n\n if (!config[opt.if]) continue\n if (!opt.basisFormat.includes(basisFormat)) continue\n if (hasAlpha && opt.transcoderFormat.length < 2) continue\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue\n\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]\n\n return { transcoderFormat, engineFormat }\n }\n\n console.warn('THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.')\n\n transcoderFormat = TranscoderFormat.RGBA32\n engineFormat = EngineFormat.RGBAFormat\n\n return { transcoderFormat, engineFormat }\n }\n\n function isPowerOfTwo(value) {\n if (value <= 2) return true\n\n return (value & (value - 1)) === 0 && value !== 0\n }\n\n /** Concatenates N byte arrays. */\n function concat(arrays) {\n if (arrays.length === 1) return arrays[0]\n\n let totalByteLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n totalByteLength += array.byteLength\n }\n\n const result = new Uint8Array(totalByteLength)\n\n let byteOffset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n result.set(array, byteOffset)\n\n byteOffset += array.byteLength\n }\n\n return result\n }\n }\n\n constructor(manager) {\n super(manager)\n\n this.transcoderPath = ''\n this.transcoderBinary = null\n this.transcoderPending = null\n\n this.workerPool = new WorkerPool()\n this.workerSourceURL = ''\n this.workerConfig = null\n\n if (typeof MSC_TRANSCODER !== 'undefined') {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".' +\n ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.',\n )\n }\n }\n\n setTranscoderPath(path) {\n this.transcoderPath = path\n\n return this\n }\n\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num)\n\n return this\n }\n\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has('WEBGL_compressed_texture_astc'),\n etc1Supported: renderer.extensions.has('WEBGL_compressed_texture_etc1'),\n etc2Supported: renderer.extensions.has('WEBGL_compressed_texture_etc'),\n dxtSupported: renderer.extensions.has('WEBGL_compressed_texture_s3tc'),\n bptcSupported: renderer.extensions.has('EXT_texture_compression_bptc'),\n pvrtcSupported:\n renderer.extensions.has('WEBGL_compressed_texture_pvrtc') ||\n renderer.extensions.has('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n }\n\n if (renderer.capabilities.isWebGL2) {\n // https://github.com/mrdoob/three.js/pull/22928\n this.workerConfig.etc1Supported = false\n }\n\n return this\n }\n\n init() {\n if (!this.transcoderPending) {\n // Load transcoder wrapper.\n const jsLoader = new FileLoader(this.manager)\n jsLoader.setPath(this.transcoderPath)\n jsLoader.setWithCredentials(this.withCredentials)\n const jsContent = jsLoader.loadAsync('basis_transcoder.js')\n\n // Load transcoder WASM binary.\n const binaryLoader = new FileLoader(this.manager)\n binaryLoader.setPath(this.transcoderPath)\n binaryLoader.setResponseType('arraybuffer')\n binaryLoader.setWithCredentials(this.withCredentials)\n const binaryContent = binaryLoader.loadAsync('basis_transcoder.wasm')\n\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent, binaryContent]) => {\n const fn = KTX2Loader.BasisWorker.toString()\n\n const body = [\n '/* constants */',\n 'let _EngineFormat = ' + JSON.stringify(KTX2Loader.EngineFormat),\n 'let _TranscoderFormat = ' + JSON.stringify(KTX2Loader.TranscoderFormat),\n 'let _BasisFormat = ' + JSON.stringify(KTX2Loader.BasisFormat),\n '/* basis_transcoder.js */',\n jsContent,\n '/* worker */',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}')),\n ].join('\\n')\n\n this.workerSourceURL = URL.createObjectURL(new Blob([body]))\n this.transcoderBinary = binaryContent\n\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL)\n const transcoderBinary = this.transcoderBinary.slice(0)\n\n worker.postMessage({ type: 'init', config: this.workerConfig, transcoderBinary }, [transcoderBinary])\n\n return worker\n })\n })\n\n if (_activeLoaders > 0) {\n // Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n console.warn(\n 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' +\n ' Use a single KTX2Loader instance, or call .dispose() on old instances.',\n )\n }\n\n _activeLoaders++\n }\n\n return this.transcoderPending\n }\n\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error('THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.')\n }\n\n const loader = new FileLoader(this.manager)\n\n loader.setResponseType('arraybuffer')\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n (buffer) => {\n // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n // again from this thread.\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer)\n\n return cachedTask.promise.then(onLoad).catch(onError)\n }\n\n this._createTexture(buffer)\n .then((texture) => (onLoad ? onLoad(texture) : null))\n .catch(onError)\n },\n onProgress,\n onError,\n )\n }\n\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult\n\n if (type === 'error') return Promise.reject(error)\n\n let texture\n\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType)\n } else {\n const mipmaps = faces[0].mipmaps\n\n texture =\n container.layerCount > 1\n ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType)\n : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType)\n }\n\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED)\n\n return texture\n }\n\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer))\n\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container)\n }\n\n //\n\n const taskConfig = config\n const texturePending = this.init()\n .then(() => {\n return this.workerPool.postMessage({ type: 'transcode', buffer, taskConfig: taskConfig }, [buffer])\n })\n .then((e) => this._createTextureFrom(e.data, container))\n\n // Cache the task result.\n _taskCache.set(buffer, { promise: texturePending })\n\n return texturePending\n }\n\n dispose() {\n this.workerPool.dispose()\n if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL)\n\n _activeLoaders--\n\n return this\n }\n}\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set([RGBAFormat, RGFormat, RedFormat])\n\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format,\n}\n\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType,\n}\n\nasync function createRawTexture(container) {\n const { vkFormat } = container\n\n if (FORMAT_MAP[vkFormat] === undefined) {\n throw new Error('THREE.KTX2Loader: Unsupported vkFormat.')\n }\n\n //\n\n let zstd\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd = new ZSTDDecoder()\n await zstd.init()\n resolve(zstd)\n })\n }\n\n zstd = await _zstd\n }\n\n //\n\n const mipmaps = []\n\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex)\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex)\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0\n\n const level = container.levels[levelIndex]\n\n let levelData\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength)\n } else {\n throw new Error('THREE.KTX2Loader: Unsupported supercompressionScheme.')\n }\n\n let data\n\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT,\n )\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT,\n )\n } else {\n data = levelData\n }\n\n mipmaps.push({\n data: data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth,\n })\n }\n\n let texture\n\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture =\n container.pixelDepth === 0\n ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight)\n : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth)\n } else {\n if (container.pixelDepth > 0) throw new Error('THREE.KTX2Loader: Unsupported pixelDepth.')\n\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight)\n }\n\n texture.mipmaps = mipmaps\n\n texture.type = TYPE_MAP[vkFormat]\n texture.format = FORMAT_MAP[vkFormat]\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n //\n\n return Promise.resolve(texture)\n}\n\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0]\n\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`)\n return NoColorSpace\n }\n}\n\nexport { KTX2Loader }\n"],"names":["Loader","WorkerPool","FileLoader","jsContent","binaryContent","CompressedCubeTexture","UnsignedByteType","CompressedArrayTexture","CompressedTexture","LinearFilter","LinearMipmapLinearFilter","KHR_DF_FLAG_ALPHA_PREMULTIPLIED","read","VK_FORMAT_UNDEFINED","RGBAFormat","RGBA_ASTC_4x4_Format","RGBA_BPTC_Format","RGBA_ETC2_EAC_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_S3TC_DXT5_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGB_PVRTC_4BPPV1_Format","RGB_S3TC_DXT1_Format","RGFormat","RedFormat","VK_FORMAT_R32G32B32A32_SFLOAT","VK_FORMAT_R16G16B16A16_SFLOAT","VK_FORMAT_R8G8B8A8_UNORM","VK_FORMAT_R8G8B8A8_SRGB","VK_FORMAT_R32G32_SFLOAT","VK_FORMAT_R16G16_SFLOAT","VK_FORMAT_R8G8_UNORM","VK_FORMAT_R8G8_SRGB","VK_FORMAT_R32_SFLOAT","VK_FORMAT_R16_SFLOAT","VK_FORMAT_R8_SRGB","VK_FORMAT_R8_UNORM","VK_FORMAT_ASTC_6x6_SRGB_BLOCK","RGBA_ASTC_6x6_Format","VK_FORMAT_ASTC_6x6_UNORM_BLOCK","FloatType","HalfFloatType","KHR_SUPERCOMPRESSION_ZSTD","zstd","ZSTDDecoder","KHR_SUPERCOMPRESSION_NONE","DataTexture","Data3DTexture","KHR_DF_PRIMARIES_BT709","KHR_DF_TRANSFER_SRGB","KHR_DF_PRIMARIES_DISPLAYP3","KHR_DF_PRIMARIES_UNSPECIFIED"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"KTX2Loader.cjs","sources":["../../src/loaders/KTX2Loader.js"],"sourcesContent":["/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n CompressedTexture,\n DataTexture,\n FileLoader,\n FloatType,\n HalfFloatType,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n RedFormat,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format,\n RGBA_ASTC_4x4_Format,\n RGBA_ASTC_6x6_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGBAFormat,\n RGFormat,\n UnsignedByteType,\n} from 'three'\nimport { WorkerPool } from '../utils/WorkerPool'\nimport {\n read,\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_TRANSFER_SRGB,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n VK_FORMAT_UNDEFINED,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n} from '../libs/ktx-parse'\nimport { ZSTDDecoder } from '../libs/zstddec'\nimport { CompressedCubeTexture } from '../_polyfill/CompressedCubeTexture'\nimport { CompressedArrayTexture } from '../_polyfill/CompressedArrayTexture'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nconst LinearEncoding = 3000\nconst sRGBEncoding = 3001\n\nconst NoColorSpace = ''\nconst DisplayP3ColorSpace = 'display-p3'\nconst LinearDisplayP3ColorSpace = 'display-p3-linear'\nconst LinearSRGBColorSpace = 'srgb-linear'\nconst SRGBColorSpace = 'srgb'\n\nconst _taskCache = new WeakMap()\n\nlet _activeLoaders = 0\n\nlet _zstd\n\nclass KTX2Loader extends Loader {\n /* CONSTANTS */\n\n static BasisFormat = {\n ETC1S: 0,\n UASTC_4x4: 1,\n }\n\n static TranscoderFormat = {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16,\n }\n\n static EngineFormat = {\n RGBAFormat: RGBAFormat,\n RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format: RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format: RGB_ETC1_Format,\n RGB_ETC2_Format: RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n }\n\n /* WEB WORKER */\n\n static BasisWorker = function () {\n let config\n let transcoderPending\n let BasisModule\n\n /** @type KTX2Loader.EngineFormat */\n const EngineFormat = _EngineFormat\n /** @type KTX2Loader.TranscoderFormat */\n const TranscoderFormat = _TranscoderFormat\n /** @type KTX2Loader.BasisFormat */\n const BasisFormat = _BasisFormat\n\n self.addEventListener('message', function (e) {\n const message = e.data\n\n switch (message.type) {\n case 'init':\n config = message.config\n init(message.transcoderBinary)\n break\n\n case 'transcode':\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer)\n\n self.postMessage(\n { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers,\n )\n } catch (error) {\n console.error(error)\n\n self.postMessage({ type: 'error', id: message.id, error: error.message })\n }\n })\n break\n }\n })\n\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve }\n BASIS(BasisModule)\n }).then(() => {\n BasisModule.initializeBasis()\n\n if (BasisModule.KTX2File === undefined) {\n console.warn('THREE.KTX2Loader: Please update Basis Universal transcoder.')\n }\n })\n }\n\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer))\n\n function cleanup() {\n ktx2File.close()\n ktx2File.delete()\n }\n\n if (!ktx2File.isValid()) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file')\n }\n\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S\n const width = ktx2File.getWidth()\n const height = ktx2File.getHeight()\n const layerCount = ktx2File.getLayers() || 1\n const levelCount = ktx2File.getLevels()\n const faceCount = ktx2File.getFaces()\n const hasAlpha = ktx2File.getHasAlpha()\n const dfdFlags = ktx2File.getDFDFlags()\n\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha)\n\n if (!width || !height || !levelCount) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid texture')\n }\n\n if (!ktx2File.startTranscoding()) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .startTranscoding failed')\n }\n\n const faces = []\n const buffers = []\n\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = []\n\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = []\n\n let mipWidth, mipHeight\n\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face)\n\n if (\n face === 0 &&\n mip === 0 &&\n layer === 0 &&\n (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)\n ) {\n console.warn('THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.')\n }\n\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth\n mipHeight = levelInfo.origHeight\n } else {\n // Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n // mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n // See mrdoob/three.js#25908.\n mipWidth = levelInfo.width\n mipHeight = levelInfo.height\n }\n\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat))\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)\n\n if (!status) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .transcodeImage failed.')\n }\n\n layerMips.push(dst)\n }\n\n const mipData = concat(layerMips)\n\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight })\n buffers.push(mipData.buffer)\n }\n\n faces.push({ mipmaps, width, height, format: engineFormat })\n }\n\n cleanup()\n\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags }\n }\n\n //\n\n // Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n // device capabilities, and texture dimensions. The list below ranks the formats separately\n // for ETC1S and UASTC.\n //\n // In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n // significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n // chooses RGBA32 only as a last resort and does not expose that option to the caller.\n const FORMAT_OPTIONS = [\n {\n if: 'astcSupported',\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false,\n },\n {\n if: 'bptcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false,\n },\n {\n if: 'dxtSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc2Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc1Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false,\n },\n {\n if: 'pvrtcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true,\n },\n ]\n\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityETC1S - b.priorityETC1S\n })\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityUASTC - b.priorityUASTC\n })\n\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat\n let engineFormat\n\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS\n\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]\n\n if (!config[opt.if]) continue\n if (!opt.basisFormat.includes(basisFormat)) continue\n if (hasAlpha && opt.transcoderFormat.length < 2) continue\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue\n\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]\n\n return { transcoderFormat, engineFormat }\n }\n\n console.warn('THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.')\n\n transcoderFormat = TranscoderFormat.RGBA32\n engineFormat = EngineFormat.RGBAFormat\n\n return { transcoderFormat, engineFormat }\n }\n\n function isPowerOfTwo(value) {\n if (value <= 2) return true\n\n return (value & (value - 1)) === 0 && value !== 0\n }\n\n /** Concatenates N byte arrays. */\n function concat(arrays) {\n if (arrays.length === 1) return arrays[0]\n\n let totalByteLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n totalByteLength += array.byteLength\n }\n\n const result = new Uint8Array(totalByteLength)\n\n let byteOffset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n result.set(array, byteOffset)\n\n byteOffset += array.byteLength\n }\n\n return result\n }\n }\n\n constructor(manager) {\n super(manager)\n\n this.transcoderPath = ''\n this.transcoderBinary = null\n this.transcoderPending = null\n\n this.workerPool = new WorkerPool()\n this.workerSourceURL = ''\n this.workerConfig = null\n\n if (typeof MSC_TRANSCODER !== 'undefined') {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".' +\n ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.',\n )\n }\n }\n\n setTranscoderPath(path) {\n this.transcoderPath = path\n\n return this\n }\n\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num)\n\n return this\n }\n\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has('WEBGL_compressed_texture_astc'),\n etc1Supported: renderer.extensions.has('WEBGL_compressed_texture_etc1'),\n etc2Supported: renderer.extensions.has('WEBGL_compressed_texture_etc'),\n dxtSupported: renderer.extensions.has('WEBGL_compressed_texture_s3tc'),\n bptcSupported: renderer.extensions.has('EXT_texture_compression_bptc'),\n pvrtcSupported:\n renderer.extensions.has('WEBGL_compressed_texture_pvrtc') ||\n renderer.extensions.has('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n }\n\n if (renderer.capabilities.isWebGL2) {\n // https://github.com/mrdoob/three.js/pull/22928\n this.workerConfig.etc1Supported = false\n }\n\n return this\n }\n\n init() {\n if (!this.transcoderPending) {\n // Load transcoder wrapper.\n const jsLoader = new FileLoader(this.manager)\n jsLoader.setPath(this.transcoderPath)\n jsLoader.setWithCredentials(this.withCredentials)\n const jsContent = jsLoader.loadAsync('basis_transcoder.js')\n\n // Load transcoder WASM binary.\n const binaryLoader = new FileLoader(this.manager)\n binaryLoader.setPath(this.transcoderPath)\n binaryLoader.setResponseType('arraybuffer')\n binaryLoader.setWithCredentials(this.withCredentials)\n const binaryContent = binaryLoader.loadAsync('basis_transcoder.wasm')\n\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent, binaryContent]) => {\n const fn = KTX2Loader.BasisWorker.toString()\n\n const body = [\n '/* constants */',\n 'let _EngineFormat = ' + JSON.stringify(KTX2Loader.EngineFormat),\n 'let _TranscoderFormat = ' + JSON.stringify(KTX2Loader.TranscoderFormat),\n 'let _BasisFormat = ' + JSON.stringify(KTX2Loader.BasisFormat),\n '/* basis_transcoder.js */',\n jsContent,\n '/* worker */',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}')),\n ].join('\\n')\n\n this.workerSourceURL = URL.createObjectURL(new Blob([body]))\n this.transcoderBinary = binaryContent\n\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL)\n const transcoderBinary = this.transcoderBinary.slice(0)\n\n worker.postMessage({ type: 'init', config: this.workerConfig, transcoderBinary }, [transcoderBinary])\n\n return worker\n })\n })\n\n if (_activeLoaders > 0) {\n // Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n console.warn(\n 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' +\n ' Use a single KTX2Loader instance, or call .dispose() on old instances.',\n )\n }\n\n _activeLoaders++\n }\n\n return this.transcoderPending\n }\n\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error('THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.')\n }\n\n const loader = new FileLoader(this.manager)\n\n loader.setResponseType('arraybuffer')\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n (buffer) => {\n // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n // again from this thread.\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer)\n\n return cachedTask.promise.then(onLoad).catch(onError)\n }\n\n this._createTexture(buffer)\n .then((texture) => (onLoad ? onLoad(texture) : null))\n .catch(onError)\n },\n onProgress,\n onError,\n )\n }\n\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult\n\n if (type === 'error') return Promise.reject(error)\n\n let texture\n\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType)\n } else {\n const mipmaps = faces[0].mipmaps\n\n texture =\n container.layerCount > 1\n ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType)\n : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType)\n }\n\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED)\n\n return texture\n }\n\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer))\n\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container)\n }\n\n //\n\n const taskConfig = config\n const texturePending = this.init()\n .then(() => {\n return this.workerPool.postMessage({ type: 'transcode', buffer, taskConfig: taskConfig }, [buffer])\n })\n .then((e) => this._createTextureFrom(e.data, container))\n\n // Cache the task result.\n _taskCache.set(buffer, { promise: texturePending })\n\n return texturePending\n }\n\n dispose() {\n this.workerPool.dispose()\n if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL)\n\n _activeLoaders--\n\n return this\n }\n}\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set([RGBAFormat, RGFormat, RedFormat])\n\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format,\n}\n\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType,\n}\n\nasync function createRawTexture(container) {\n const { vkFormat } = container\n\n if (FORMAT_MAP[vkFormat] === undefined) {\n throw new Error('THREE.KTX2Loader: Unsupported vkFormat.')\n }\n\n //\n\n let zstd\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd = new ZSTDDecoder()\n await zstd.init()\n resolve(zstd)\n })\n }\n\n zstd = await _zstd\n }\n\n //\n\n const mipmaps = []\n\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex)\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex)\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0\n\n const level = container.levels[levelIndex]\n\n let levelData\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength)\n } else {\n throw new Error('THREE.KTX2Loader: Unsupported supercompressionScheme.')\n }\n\n let data\n\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT,\n )\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT,\n )\n } else {\n data = levelData\n }\n\n mipmaps.push({\n data: data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth,\n })\n }\n\n let texture\n\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture =\n container.pixelDepth === 0\n ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight)\n : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth)\n } else {\n if (container.pixelDepth > 0) throw new Error('THREE.KTX2Loader: Unsupported pixelDepth.')\n\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight)\n }\n\n texture.mipmaps = mipmaps\n\n texture.type = TYPE_MAP[vkFormat]\n texture.format = FORMAT_MAP[vkFormat]\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n //\n\n return Promise.resolve(texture)\n}\n\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0]\n\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`)\n return NoColorSpace\n }\n}\n\nexport { KTX2Loader }\n"],"names":["Loader","WorkerPool","FileLoader","jsContent","binaryContent","CompressedCubeTexture","UnsignedByteType","CompressedArrayTexture","CompressedTexture","LinearFilter","LinearMipmapLinearFilter","KHR_DF_FLAG_ALPHA_PREMULTIPLIED","read","VK_FORMAT_UNDEFINED","RGBAFormat","RGBA_ASTC_4x4_Format","RGBA_BPTC_Format","RGBA_ETC2_EAC_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_S3TC_DXT5_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGB_PVRTC_4BPPV1_Format","RGB_S3TC_DXT1_Format","RGFormat","RedFormat","VK_FORMAT_R32G32B32A32_SFLOAT","VK_FORMAT_R16G16B16A16_SFLOAT","VK_FORMAT_R8G8B8A8_UNORM","VK_FORMAT_R8G8B8A8_SRGB","VK_FORMAT_R32G32_SFLOAT","VK_FORMAT_R16G16_SFLOAT","VK_FORMAT_R8G8_UNORM","VK_FORMAT_R8G8_SRGB","VK_FORMAT_R32_SFLOAT","VK_FORMAT_R16_SFLOAT","VK_FORMAT_R8_SRGB","VK_FORMAT_R8_UNORM","VK_FORMAT_ASTC_6x6_SRGB_BLOCK","RGBA_ASTC_6x6_Format","VK_FORMAT_ASTC_6x6_UNORM_BLOCK","FloatType","HalfFloatType","KHR_SUPERCOMPRESSION_ZSTD","zstd","ZSTDDecoder","KHR_SUPERCOMPRESSION_NONE","DataTexture","Data3DTexture","KHR_DF_PRIMARIES_BT709","KHR_DF_TRANSFER_SRGB","KHR_DF_PRIMARIES_DISPLAYP3","KHR_DF_PRIMARIES_UNSPECIFIED"],"mappings":"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"}
|
package/loaders/KTX2Loader.js
CHANGED
@@ -209,9 +209,9 @@ __publicField(KTX2Loader, "BasisWorker", function() {
|
|
209
209
|
let config;
|
210
210
|
let transcoderPending;
|
211
211
|
let BasisModule;
|
212
|
-
const EngineFormat =
|
213
|
-
const TranscoderFormat =
|
214
|
-
const BasisFormat =
|
212
|
+
const EngineFormat = _EngineFormat;
|
213
|
+
const TranscoderFormat = _TranscoderFormat;
|
214
|
+
const BasisFormat = _BasisFormat;
|
215
215
|
self.addEventListener("message", function(e) {
|
216
216
|
const message = e.data;
|
217
217
|
switch (message.type) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"KTX2Loader.js","sources":["../../src/loaders/KTX2Loader.js"],"sourcesContent":["/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n CompressedTexture,\n DataTexture,\n FileLoader,\n FloatType,\n HalfFloatType,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n RedFormat,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format,\n RGBA_ASTC_4x4_Format,\n RGBA_ASTC_6x6_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGBAFormat,\n RGFormat,\n UnsignedByteType,\n} from 'three'\nimport { WorkerPool } from '../utils/WorkerPool'\nimport {\n read,\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_TRANSFER_SRGB,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n VK_FORMAT_UNDEFINED,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n} from '../libs/ktx-parse'\nimport { ZSTDDecoder } from '../libs/zstddec'\nimport { CompressedCubeTexture } from '../_polyfill/CompressedCubeTexture'\nimport { CompressedArrayTexture } from '../_polyfill/CompressedArrayTexture'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nconst LinearEncoding = 3000\nconst sRGBEncoding = 3001\n\nconst NoColorSpace = ''\nconst DisplayP3ColorSpace = 'display-p3'\nconst LinearDisplayP3ColorSpace = 'display-p3-linear'\nconst LinearSRGBColorSpace = 'srgb-linear'\nconst SRGBColorSpace = 'srgb'\n\nconst _taskCache = new WeakMap()\n\nlet _activeLoaders = 0\n\nlet _zstd\n\nclass KTX2Loader extends Loader {\n /* CONSTANTS */\n\n static BasisFormat = {\n ETC1S: 0,\n UASTC_4x4: 1,\n }\n\n static TranscoderFormat = {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16,\n }\n\n static EngineFormat = {\n RGBAFormat: RGBAFormat,\n RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format: RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format: RGB_ETC1_Format,\n RGB_ETC2_Format: RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n }\n\n /* WEB WORKER */\n\n static BasisWorker = function () {\n let config\n let transcoderPending\n let BasisModule\n\n const EngineFormat = KTX2Loader.EngineFormat\n const TranscoderFormat = KTX2Loader.TranscoderFormat\n const BasisFormat = KTX2Loader.BasisFormat\n\n self.addEventListener('message', function (e) {\n const message = e.data\n\n switch (message.type) {\n case 'init':\n config = message.config\n init(message.transcoderBinary)\n break\n\n case 'transcode':\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer)\n\n self.postMessage(\n { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers,\n )\n } catch (error) {\n console.error(error)\n\n self.postMessage({ type: 'error', id: message.id, error: error.message })\n }\n })\n break\n }\n })\n\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve }\n BASIS(BasisModule)\n }).then(() => {\n BasisModule.initializeBasis()\n\n if (BasisModule.KTX2File === undefined) {\n console.warn('THREE.KTX2Loader: Please update Basis Universal transcoder.')\n }\n })\n }\n\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer))\n\n function cleanup() {\n ktx2File.close()\n ktx2File.delete()\n }\n\n if (!ktx2File.isValid()) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file')\n }\n\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S\n const width = ktx2File.getWidth()\n const height = ktx2File.getHeight()\n const layerCount = ktx2File.getLayers() || 1\n const levelCount = ktx2File.getLevels()\n const faceCount = ktx2File.getFaces()\n const hasAlpha = ktx2File.getHasAlpha()\n const dfdFlags = ktx2File.getDFDFlags()\n\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha)\n\n if (!width || !height || !levelCount) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid texture')\n }\n\n if (!ktx2File.startTranscoding()) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .startTranscoding failed')\n }\n\n const faces = []\n const buffers = []\n\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = []\n\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = []\n\n let mipWidth, mipHeight\n\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face)\n\n if (\n face === 0 &&\n mip === 0 &&\n layer === 0 &&\n (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)\n ) {\n console.warn('THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.')\n }\n\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth\n mipHeight = levelInfo.origHeight\n } else {\n // Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n // mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n // See mrdoob/three.js#25908.\n mipWidth = levelInfo.width\n mipHeight = levelInfo.height\n }\n\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat))\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)\n\n if (!status) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .transcodeImage failed.')\n }\n\n layerMips.push(dst)\n }\n\n const mipData = concat(layerMips)\n\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight })\n buffers.push(mipData.buffer)\n }\n\n faces.push({ mipmaps, width, height, format: engineFormat })\n }\n\n cleanup()\n\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags }\n }\n\n //\n\n // Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n // device capabilities, and texture dimensions. The list below ranks the formats separately\n // for ETC1S and UASTC.\n //\n // In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n // significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n // chooses RGBA32 only as a last resort and does not expose that option to the caller.\n const FORMAT_OPTIONS = [\n {\n if: 'astcSupported',\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false,\n },\n {\n if: 'bptcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false,\n },\n {\n if: 'dxtSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc2Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc1Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false,\n },\n {\n if: 'pvrtcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true,\n },\n ]\n\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityETC1S - b.priorityETC1S\n })\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityUASTC - b.priorityUASTC\n })\n\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat\n let engineFormat\n\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS\n\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]\n\n if (!config[opt.if]) continue\n if (!opt.basisFormat.includes(basisFormat)) continue\n if (hasAlpha && opt.transcoderFormat.length < 2) continue\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue\n\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]\n\n return { transcoderFormat, engineFormat }\n }\n\n console.warn('THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.')\n\n transcoderFormat = TranscoderFormat.RGBA32\n engineFormat = EngineFormat.RGBAFormat\n\n return { transcoderFormat, engineFormat }\n }\n\n function isPowerOfTwo(value) {\n if (value <= 2) return true\n\n return (value & (value - 1)) === 0 && value !== 0\n }\n\n /** Concatenates N byte arrays. */\n function concat(arrays) {\n if (arrays.length === 1) return arrays[0]\n\n let totalByteLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n totalByteLength += array.byteLength\n }\n\n const result = new Uint8Array(totalByteLength)\n\n let byteOffset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n result.set(array, byteOffset)\n\n byteOffset += array.byteLength\n }\n\n return result\n }\n }\n\n constructor(manager) {\n super(manager)\n\n this.transcoderPath = ''\n this.transcoderBinary = null\n this.transcoderPending = null\n\n this.workerPool = new WorkerPool()\n this.workerSourceURL = ''\n this.workerConfig = null\n\n if (typeof MSC_TRANSCODER !== 'undefined') {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".' +\n ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.',\n )\n }\n }\n\n setTranscoderPath(path) {\n this.transcoderPath = path\n\n return this\n }\n\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num)\n\n return this\n }\n\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has('WEBGL_compressed_texture_astc'),\n etc1Supported: renderer.extensions.has('WEBGL_compressed_texture_etc1'),\n etc2Supported: renderer.extensions.has('WEBGL_compressed_texture_etc'),\n dxtSupported: renderer.extensions.has('WEBGL_compressed_texture_s3tc'),\n bptcSupported: renderer.extensions.has('EXT_texture_compression_bptc'),\n pvrtcSupported:\n renderer.extensions.has('WEBGL_compressed_texture_pvrtc') ||\n renderer.extensions.has('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n }\n\n if (renderer.capabilities.isWebGL2) {\n // https://github.com/mrdoob/three.js/pull/22928\n this.workerConfig.etc1Supported = false\n }\n\n return this\n }\n\n init() {\n if (!this.transcoderPending) {\n // Load transcoder wrapper.\n const jsLoader = new FileLoader(this.manager)\n jsLoader.setPath(this.transcoderPath)\n jsLoader.setWithCredentials(this.withCredentials)\n const jsContent = jsLoader.loadAsync('basis_transcoder.js')\n\n // Load transcoder WASM binary.\n const binaryLoader = new FileLoader(this.manager)\n binaryLoader.setPath(this.transcoderPath)\n binaryLoader.setResponseType('arraybuffer')\n binaryLoader.setWithCredentials(this.withCredentials)\n const binaryContent = binaryLoader.loadAsync('basis_transcoder.wasm')\n\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent, binaryContent]) => {\n const fn = KTX2Loader.BasisWorker.toString()\n\n const body = [\n '/* constants */',\n 'let _EngineFormat = ' + JSON.stringify(KTX2Loader.EngineFormat),\n 'let _TranscoderFormat = ' + JSON.stringify(KTX2Loader.TranscoderFormat),\n 'let _BasisFormat = ' + JSON.stringify(KTX2Loader.BasisFormat),\n '/* basis_transcoder.js */',\n jsContent,\n '/* worker */',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}')),\n ].join('\\n')\n\n this.workerSourceURL = URL.createObjectURL(new Blob([body]))\n this.transcoderBinary = binaryContent\n\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL)\n const transcoderBinary = this.transcoderBinary.slice(0)\n\n worker.postMessage({ type: 'init', config: this.workerConfig, transcoderBinary }, [transcoderBinary])\n\n return worker\n })\n })\n\n if (_activeLoaders > 0) {\n // Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n console.warn(\n 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' +\n ' Use a single KTX2Loader instance, or call .dispose() on old instances.',\n )\n }\n\n _activeLoaders++\n }\n\n return this.transcoderPending\n }\n\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error('THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.')\n }\n\n const loader = new FileLoader(this.manager)\n\n loader.setResponseType('arraybuffer')\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n (buffer) => {\n // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n // again from this thread.\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer)\n\n return cachedTask.promise.then(onLoad).catch(onError)\n }\n\n this._createTexture(buffer)\n .then((texture) => (onLoad ? onLoad(texture) : null))\n .catch(onError)\n },\n onProgress,\n onError,\n )\n }\n\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult\n\n if (type === 'error') return Promise.reject(error)\n\n let texture\n\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType)\n } else {\n const mipmaps = faces[0].mipmaps\n\n texture =\n container.layerCount > 1\n ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType)\n : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType)\n }\n\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED)\n\n return texture\n }\n\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer))\n\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container)\n }\n\n //\n\n const taskConfig = config\n const texturePending = this.init()\n .then(() => {\n return this.workerPool.postMessage({ type: 'transcode', buffer, taskConfig: taskConfig }, [buffer])\n })\n .then((e) => this._createTextureFrom(e.data, container))\n\n // Cache the task result.\n _taskCache.set(buffer, { promise: texturePending })\n\n return texturePending\n }\n\n dispose() {\n this.workerPool.dispose()\n if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL)\n\n _activeLoaders--\n\n return this\n }\n}\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set([RGBAFormat, RGFormat, RedFormat])\n\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format,\n}\n\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType,\n}\n\nasync function createRawTexture(container) {\n const { vkFormat } = container\n\n if (FORMAT_MAP[vkFormat] === undefined) {\n throw new Error('THREE.KTX2Loader: Unsupported vkFormat.')\n }\n\n //\n\n let zstd\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd = new ZSTDDecoder()\n await zstd.init()\n resolve(zstd)\n })\n }\n\n zstd = await _zstd\n }\n\n //\n\n const mipmaps = []\n\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex)\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex)\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0\n\n const level = container.levels[levelIndex]\n\n let levelData\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength)\n } else {\n throw new Error('THREE.KTX2Loader: Unsupported supercompressionScheme.')\n }\n\n let data\n\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT,\n )\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT,\n )\n } else {\n data = levelData\n }\n\n mipmaps.push({\n data: data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth,\n })\n }\n\n let texture\n\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture =\n container.pixelDepth === 0\n ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight)\n : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth)\n } else {\n if (container.pixelDepth > 0) throw new Error('THREE.KTX2Loader: Unsupported pixelDepth.')\n\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight)\n }\n\n texture.mipmaps = mipmaps\n\n texture.type = TYPE_MAP[vkFormat]\n texture.format = FORMAT_MAP[vkFormat]\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n //\n\n return Promise.resolve(texture)\n}\n\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0]\n\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`)\n return NoColorSpace\n }\n}\n\nexport { KTX2Loader }\n"],"names":["jsContent","binaryContent","zstd"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"KTX2Loader.js","sources":["../../src/loaders/KTX2Loader.js"],"sourcesContent":["/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n CompressedTexture,\n DataTexture,\n FileLoader,\n FloatType,\n HalfFloatType,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n RedFormat,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format,\n RGBA_ASTC_4x4_Format,\n RGBA_ASTC_6x6_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGBAFormat,\n RGFormat,\n UnsignedByteType,\n} from 'three'\nimport { WorkerPool } from '../utils/WorkerPool'\nimport {\n read,\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_TRANSFER_SRGB,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n VK_FORMAT_UNDEFINED,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n} from '../libs/ktx-parse'\nimport { ZSTDDecoder } from '../libs/zstddec'\nimport { CompressedCubeTexture } from '../_polyfill/CompressedCubeTexture'\nimport { CompressedArrayTexture } from '../_polyfill/CompressedArrayTexture'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nconst LinearEncoding = 3000\nconst sRGBEncoding = 3001\n\nconst NoColorSpace = ''\nconst DisplayP3ColorSpace = 'display-p3'\nconst LinearDisplayP3ColorSpace = 'display-p3-linear'\nconst LinearSRGBColorSpace = 'srgb-linear'\nconst SRGBColorSpace = 'srgb'\n\nconst _taskCache = new WeakMap()\n\nlet _activeLoaders = 0\n\nlet _zstd\n\nclass KTX2Loader extends Loader {\n /* CONSTANTS */\n\n static BasisFormat = {\n ETC1S: 0,\n UASTC_4x4: 1,\n }\n\n static TranscoderFormat = {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16,\n }\n\n static EngineFormat = {\n RGBAFormat: RGBAFormat,\n RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format: RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format: RGB_ETC1_Format,\n RGB_ETC2_Format: RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n }\n\n /* WEB WORKER */\n\n static BasisWorker = function () {\n let config\n let transcoderPending\n let BasisModule\n\n /** @type KTX2Loader.EngineFormat */\n const EngineFormat = _EngineFormat\n /** @type KTX2Loader.TranscoderFormat */\n const TranscoderFormat = _TranscoderFormat\n /** @type KTX2Loader.BasisFormat */\n const BasisFormat = _BasisFormat\n\n self.addEventListener('message', function (e) {\n const message = e.data\n\n switch (message.type) {\n case 'init':\n config = message.config\n init(message.transcoderBinary)\n break\n\n case 'transcode':\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer)\n\n self.postMessage(\n { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers,\n )\n } catch (error) {\n console.error(error)\n\n self.postMessage({ type: 'error', id: message.id, error: error.message })\n }\n })\n break\n }\n })\n\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve }\n BASIS(BasisModule)\n }).then(() => {\n BasisModule.initializeBasis()\n\n if (BasisModule.KTX2File === undefined) {\n console.warn('THREE.KTX2Loader: Please update Basis Universal transcoder.')\n }\n })\n }\n\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer))\n\n function cleanup() {\n ktx2File.close()\n ktx2File.delete()\n }\n\n if (!ktx2File.isValid()) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file')\n }\n\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S\n const width = ktx2File.getWidth()\n const height = ktx2File.getHeight()\n const layerCount = ktx2File.getLayers() || 1\n const levelCount = ktx2File.getLevels()\n const faceCount = ktx2File.getFaces()\n const hasAlpha = ktx2File.getHasAlpha()\n const dfdFlags = ktx2File.getDFDFlags()\n\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha)\n\n if (!width || !height || !levelCount) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid texture')\n }\n\n if (!ktx2File.startTranscoding()) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .startTranscoding failed')\n }\n\n const faces = []\n const buffers = []\n\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = []\n\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = []\n\n let mipWidth, mipHeight\n\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face)\n\n if (\n face === 0 &&\n mip === 0 &&\n layer === 0 &&\n (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)\n ) {\n console.warn('THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.')\n }\n\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth\n mipHeight = levelInfo.origHeight\n } else {\n // Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n // mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n // See mrdoob/three.js#25908.\n mipWidth = levelInfo.width\n mipHeight = levelInfo.height\n }\n\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat))\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)\n\n if (!status) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .transcodeImage failed.')\n }\n\n layerMips.push(dst)\n }\n\n const mipData = concat(layerMips)\n\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight })\n buffers.push(mipData.buffer)\n }\n\n faces.push({ mipmaps, width, height, format: engineFormat })\n }\n\n cleanup()\n\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags }\n }\n\n //\n\n // Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n // device capabilities, and texture dimensions. The list below ranks the formats separately\n // for ETC1S and UASTC.\n //\n // In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n // significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n // chooses RGBA32 only as a last resort and does not expose that option to the caller.\n const FORMAT_OPTIONS = [\n {\n if: 'astcSupported',\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false,\n },\n {\n if: 'bptcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false,\n },\n {\n if: 'dxtSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc2Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc1Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false,\n },\n {\n if: 'pvrtcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true,\n },\n ]\n\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityETC1S - b.priorityETC1S\n })\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityUASTC - b.priorityUASTC\n })\n\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat\n let engineFormat\n\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS\n\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]\n\n if (!config[opt.if]) continue\n if (!opt.basisFormat.includes(basisFormat)) continue\n if (hasAlpha && opt.transcoderFormat.length < 2) continue\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue\n\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]\n\n return { transcoderFormat, engineFormat }\n }\n\n console.warn('THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.')\n\n transcoderFormat = TranscoderFormat.RGBA32\n engineFormat = EngineFormat.RGBAFormat\n\n return { transcoderFormat, engineFormat }\n }\n\n function isPowerOfTwo(value) {\n if (value <= 2) return true\n\n return (value & (value - 1)) === 0 && value !== 0\n }\n\n /** Concatenates N byte arrays. */\n function concat(arrays) {\n if (arrays.length === 1) return arrays[0]\n\n let totalByteLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n totalByteLength += array.byteLength\n }\n\n const result = new Uint8Array(totalByteLength)\n\n let byteOffset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n result.set(array, byteOffset)\n\n byteOffset += array.byteLength\n }\n\n return result\n }\n }\n\n constructor(manager) {\n super(manager)\n\n this.transcoderPath = ''\n this.transcoderBinary = null\n this.transcoderPending = null\n\n this.workerPool = new WorkerPool()\n this.workerSourceURL = ''\n this.workerConfig = null\n\n if (typeof MSC_TRANSCODER !== 'undefined') {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".' +\n ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.',\n )\n }\n }\n\n setTranscoderPath(path) {\n this.transcoderPath = path\n\n return this\n }\n\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num)\n\n return this\n }\n\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has('WEBGL_compressed_texture_astc'),\n etc1Supported: renderer.extensions.has('WEBGL_compressed_texture_etc1'),\n etc2Supported: renderer.extensions.has('WEBGL_compressed_texture_etc'),\n dxtSupported: renderer.extensions.has('WEBGL_compressed_texture_s3tc'),\n bptcSupported: renderer.extensions.has('EXT_texture_compression_bptc'),\n pvrtcSupported:\n renderer.extensions.has('WEBGL_compressed_texture_pvrtc') ||\n renderer.extensions.has('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n }\n\n if (renderer.capabilities.isWebGL2) {\n // https://github.com/mrdoob/three.js/pull/22928\n this.workerConfig.etc1Supported = false\n }\n\n return this\n }\n\n init() {\n if (!this.transcoderPending) {\n // Load transcoder wrapper.\n const jsLoader = new FileLoader(this.manager)\n jsLoader.setPath(this.transcoderPath)\n jsLoader.setWithCredentials(this.withCredentials)\n const jsContent = jsLoader.loadAsync('basis_transcoder.js')\n\n // Load transcoder WASM binary.\n const binaryLoader = new FileLoader(this.manager)\n binaryLoader.setPath(this.transcoderPath)\n binaryLoader.setResponseType('arraybuffer')\n binaryLoader.setWithCredentials(this.withCredentials)\n const binaryContent = binaryLoader.loadAsync('basis_transcoder.wasm')\n\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent, binaryContent]) => {\n const fn = KTX2Loader.BasisWorker.toString()\n\n const body = [\n '/* constants */',\n 'let _EngineFormat = ' + JSON.stringify(KTX2Loader.EngineFormat),\n 'let _TranscoderFormat = ' + JSON.stringify(KTX2Loader.TranscoderFormat),\n 'let _BasisFormat = ' + JSON.stringify(KTX2Loader.BasisFormat),\n '/* basis_transcoder.js */',\n jsContent,\n '/* worker */',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}')),\n ].join('\\n')\n\n this.workerSourceURL = URL.createObjectURL(new Blob([body]))\n this.transcoderBinary = binaryContent\n\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL)\n const transcoderBinary = this.transcoderBinary.slice(0)\n\n worker.postMessage({ type: 'init', config: this.workerConfig, transcoderBinary }, [transcoderBinary])\n\n return worker\n })\n })\n\n if (_activeLoaders > 0) {\n // Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n console.warn(\n 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' +\n ' Use a single KTX2Loader instance, or call .dispose() on old instances.',\n )\n }\n\n _activeLoaders++\n }\n\n return this.transcoderPending\n }\n\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error('THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.')\n }\n\n const loader = new FileLoader(this.manager)\n\n loader.setResponseType('arraybuffer')\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n (buffer) => {\n // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n // again from this thread.\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer)\n\n return cachedTask.promise.then(onLoad).catch(onError)\n }\n\n this._createTexture(buffer)\n .then((texture) => (onLoad ? onLoad(texture) : null))\n .catch(onError)\n },\n onProgress,\n onError,\n )\n }\n\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult\n\n if (type === 'error') return Promise.reject(error)\n\n let texture\n\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType)\n } else {\n const mipmaps = faces[0].mipmaps\n\n texture =\n container.layerCount > 1\n ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType)\n : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType)\n }\n\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED)\n\n return texture\n }\n\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer))\n\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container)\n }\n\n //\n\n const taskConfig = config\n const texturePending = this.init()\n .then(() => {\n return this.workerPool.postMessage({ type: 'transcode', buffer, taskConfig: taskConfig }, [buffer])\n })\n .then((e) => this._createTextureFrom(e.data, container))\n\n // Cache the task result.\n _taskCache.set(buffer, { promise: texturePending })\n\n return texturePending\n }\n\n dispose() {\n this.workerPool.dispose()\n if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL)\n\n _activeLoaders--\n\n return this\n }\n}\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set([RGBAFormat, RGFormat, RedFormat])\n\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format,\n}\n\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType,\n}\n\nasync function createRawTexture(container) {\n const { vkFormat } = container\n\n if (FORMAT_MAP[vkFormat] === undefined) {\n throw new Error('THREE.KTX2Loader: Unsupported vkFormat.')\n }\n\n //\n\n let zstd\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd = new ZSTDDecoder()\n await zstd.init()\n resolve(zstd)\n })\n }\n\n zstd = await _zstd\n }\n\n //\n\n const mipmaps = []\n\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex)\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex)\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0\n\n const level = container.levels[levelIndex]\n\n let levelData\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength)\n } else {\n throw new Error('THREE.KTX2Loader: Unsupported supercompressionScheme.')\n }\n\n let data\n\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT,\n )\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT,\n )\n } else {\n data = levelData\n }\n\n mipmaps.push({\n data: data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth,\n })\n }\n\n let texture\n\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture =\n container.pixelDepth === 0\n ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight)\n : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth)\n } else {\n if (container.pixelDepth > 0) throw new Error('THREE.KTX2Loader: Unsupported pixelDepth.')\n\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight)\n }\n\n texture.mipmaps = mipmaps\n\n texture.type = TYPE_MAP[vkFormat]\n texture.format = FORMAT_MAP[vkFormat]\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n //\n\n return Promise.resolve(texture)\n}\n\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0]\n\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`)\n return NoColorSpace\n }\n}\n\nexport { KTX2Loader }\n"],"names":["jsContent","binaryContent","zstd"],"mappings":"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"}
|
package/loaders/PCDLoader.cjs
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
3
3
|
const THREE = require("three");
|
4
|
+
const LoaderUtils = require("../_polyfill/LoaderUtils.cjs");
|
4
5
|
class PCDLoader extends THREE.Loader {
|
5
6
|
constructor(manager) {
|
6
7
|
super(manager);
|
@@ -136,7 +137,7 @@ class PCDLoader extends THREE.Loader {
|
|
136
137
|
PCDheader2.rowSize = sizeSum;
|
137
138
|
return PCDheader2;
|
138
139
|
}
|
139
|
-
const textData =
|
140
|
+
const textData = LoaderUtils.decodeText(new Uint8Array(data));
|
140
141
|
const PCDheader = parseHeader(textData);
|
141
142
|
const position = [];
|
142
143
|
const normal = [];
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PCDLoader.cjs","sources":["../../src/loaders/PCDLoader.js"],"sourcesContent":["import { BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils, Points, PointsMaterial } from 'three'\n\nclass PCDLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.littleEndian = true\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n loader.load(\n url,\n function (data) {\n try {\n onLoad(scope.parse(data, url))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(data, url) {\n // from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n function decompressLZF(inData, outLength) {\n const inLength = inData.length\n const outData = new Uint8Array(outLength)\n let inPtr = 0\n let outPtr = 0\n let ctrl\n let len\n let ref\n do {\n ctrl = inData[inPtr++]\n if (ctrl < 1 << 5) {\n ctrl++\n if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough')\n if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data')\n do {\n outData[outPtr++] = inData[inPtr++]\n } while (--ctrl)\n } else {\n len = ctrl >> 5\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1\n if (inPtr >= inLength) throw new Error('Invalid compressed data')\n if (len === 7) {\n len += inData[inPtr++]\n if (inPtr >= inLength) throw new Error('Invalid compressed data')\n }\n\n ref -= inData[inPtr++]\n if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough')\n if (ref < 0) throw new Error('Invalid compressed data')\n if (ref >= outPtr) throw new Error('Invalid compressed data')\n do {\n outData[outPtr++] = outData[ref++]\n } while (--len + 2)\n }\n } while (inPtr < inLength)\n\n return outData\n }\n\n function parseHeader(data) {\n const PCDheader = {}\n const result1 = data.search(/[\\r\\n]DATA\\s(\\S*)\\s/i)\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data.substr(result1 - 1))\n\n PCDheader.data = result2[1]\n PCDheader.headerLen = result2[0].length + result1\n PCDheader.str = data.substr(0, PCDheader.headerLen)\n\n // remove comments\n\n PCDheader.str = PCDheader.str.replace(/\\#.*/gi, '')\n\n // parse\n\n PCDheader.version = /VERSION (.*)/i.exec(PCDheader.str)\n PCDheader.fields = /FIELDS (.*)/i.exec(PCDheader.str)\n PCDheader.size = /SIZE (.*)/i.exec(PCDheader.str)\n PCDheader.type = /TYPE (.*)/i.exec(PCDheader.str)\n PCDheader.count = /COUNT (.*)/i.exec(PCDheader.str)\n PCDheader.width = /WIDTH (.*)/i.exec(PCDheader.str)\n PCDheader.height = /HEIGHT (.*)/i.exec(PCDheader.str)\n PCDheader.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader.str)\n PCDheader.points = /POINTS (.*)/i.exec(PCDheader.str)\n\n // evaluate\n\n if (PCDheader.version !== null) PCDheader.version = parseFloat(PCDheader.version[1])\n\n if (PCDheader.fields !== null) PCDheader.fields = PCDheader.fields[1].split(' ')\n\n if (PCDheader.type !== null) PCDheader.type = PCDheader.type[1].split(' ')\n\n if (PCDheader.width !== null) PCDheader.width = parseInt(PCDheader.width[1])\n\n if (PCDheader.height !== null) PCDheader.height = parseInt(PCDheader.height[1])\n\n if (PCDheader.viewpoint !== null) PCDheader.viewpoint = PCDheader.viewpoint[1]\n\n if (PCDheader.points !== null) PCDheader.points = parseInt(PCDheader.points[1], 10)\n\n if (PCDheader.points === null) PCDheader.points = PCDheader.width * PCDheader.height\n\n if (PCDheader.size !== null) {\n PCDheader.size = PCDheader.size[1].split(' ').map(function (x) {\n return parseInt(x, 10)\n })\n }\n\n if (PCDheader.count !== null) {\n PCDheader.count = PCDheader.count[1].split(' ').map(function (x) {\n return parseInt(x, 10)\n })\n } else {\n PCDheader.count = []\n\n for (let i = 0, l = PCDheader.fields.length; i < l; i++) {\n PCDheader.count.push(1)\n }\n }\n\n PCDheader.offset = {}\n\n let sizeSum = 0\n\n for (let i = 0, l = PCDheader.fields.length; i < l; i++) {\n if (PCDheader.data === 'ascii') {\n PCDheader.offset[PCDheader.fields[i]] = i\n } else {\n PCDheader.offset[PCDheader.fields[i]] = sizeSum\n sizeSum += PCDheader.size[i] * PCDheader.count[i]\n }\n }\n\n // for binary only\n\n PCDheader.rowSize = sizeSum\n\n return PCDheader\n }\n\n const textData = LoaderUtils.decodeText(new Uint8Array(data))\n\n // parse header (always ascii format)\n\n const PCDheader = parseHeader(textData)\n\n // parse data\n\n const position = []\n const normal = []\n const color = []\n\n // ascii\n\n if (PCDheader.data === 'ascii') {\n const offset = PCDheader.offset\n const pcdData = textData.substr(PCDheader.headerLen)\n const lines = pcdData.split('\\n')\n\n for (let i = 0, l = lines.length; i < l; i++) {\n if (lines[i] === '') continue\n\n const line = lines[i].split(' ')\n\n if (offset.x !== undefined) {\n position.push(parseFloat(line[offset.x]))\n position.push(parseFloat(line[offset.y]))\n position.push(parseFloat(line[offset.z]))\n }\n\n if (offset.rgb !== undefined) {\n const rgb = parseFloat(line[offset.rgb])\n const r = (rgb >> 16) & 0x0000ff\n const g = (rgb >> 8) & 0x0000ff\n const b = (rgb >> 0) & 0x0000ff\n color.push(r / 255, g / 255, b / 255)\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(parseFloat(line[offset.normal_x]))\n normal.push(parseFloat(line[offset.normal_y]))\n normal.push(parseFloat(line[offset.normal_z]))\n }\n }\n }\n\n // binary-compressed\n\n // normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n // binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n // that requires a totally different parsing approach compared to non-compressed data\n\n if (PCDheader.data === 'binary_compressed') {\n const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8))\n const compressedSize = sizes[0]\n const decompressedSize = sizes[1]\n const decompressed = decompressLZF(\n new Uint8Array(data, PCDheader.headerLen + 8, compressedSize),\n decompressedSize,\n )\n const dataview = new DataView(decompressed.buffer)\n\n const offset = PCDheader.offset\n\n for (let i = 0; i < PCDheader.points; i++) {\n if (offset.x !== undefined) {\n position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian))\n position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, this.littleEndian))\n position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, this.littleEndian))\n }\n\n if (offset.rgb !== undefined) {\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255.0)\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255.0)\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255.0)\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, this.littleEndian),\n )\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, this.littleEndian),\n )\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, this.littleEndian),\n )\n }\n }\n }\n\n // binary\n\n if (PCDheader.data === 'binary') {\n const dataview = new DataView(data, PCDheader.headerLen)\n const offset = PCDheader.offset\n\n for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) {\n if (offset.x !== undefined) {\n position.push(dataview.getFloat32(row + offset.x, this.littleEndian))\n position.push(dataview.getFloat32(row + offset.y, this.littleEndian))\n position.push(dataview.getFloat32(row + offset.z, this.littleEndian))\n }\n\n if (offset.rgb !== undefined) {\n color.push(dataview.getUint8(row + offset.rgb + 2) / 255.0)\n color.push(dataview.getUint8(row + offset.rgb + 1) / 255.0)\n color.push(dataview.getUint8(row + offset.rgb + 0) / 255.0)\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian))\n normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian))\n normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian))\n }\n }\n }\n\n // build geometry\n\n const geometry = new BufferGeometry()\n\n if (position.length > 0) geometry.setAttribute('position', new Float32BufferAttribute(position, 3))\n if (normal.length > 0) geometry.setAttribute('normal', new Float32BufferAttribute(normal, 3))\n if (color.length > 0) geometry.setAttribute('color', new Float32BufferAttribute(color, 3))\n\n geometry.computeBoundingSphere()\n\n // build material\n\n const material = new PointsMaterial({ size: 0.005 })\n\n if (color.length > 0) {\n material.vertexColors = true\n } else {\n material.color.setHex(Math.random() * 0xffffff)\n }\n\n // build point cloud\n\n const mesh = new Points(geometry, material)\n let name = url.split('').reverse().join('')\n name = /([^\\/]*)/.exec(name)\n name = name[1].split('').reverse().join('')\n mesh.name = name\n\n return mesh\n }\n}\n\nexport { PCDLoader }\n"],"names":["Loader","FileLoader","data","PCDheader","LoaderUtils","BufferGeometry","Float32BufferAttribute","PointsMaterial","Points"],"mappings":";;;AAEA,MAAM,kBAAkBA,MAAAA,OAAO;AAAA,EAC7B,YAAY,SAAS;AACnB,UAAM,OAAO;AAEb,SAAK,eAAe;AAAA,EACrB;AAAA,EAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAIC,iBAAW,MAAM,OAAO;AAC3C,WAAO,QAAQ,MAAM,IAAI;AACzB,WAAO,gBAAgB,aAAa;AACpC,WAAO,iBAAiB,MAAM,aAAa;AAC3C,WAAO,mBAAmB,MAAM,eAAe;AAC/C,WAAO;AAAA,MACL;AAAA,MACA,SAAU,MAAM;AACd,YAAI;AACF,iBAAO,MAAM,MAAM,MAAM,GAAG,CAAC;AAAA,QAC9B,SAAQ,GAAP;AACA,cAAI,SAAS;AACX,oBAAQ,CAAC;AAAA,UACrB,OAAiB;AACL,oBAAQ,MAAM,CAAC;AAAA,UAChB;AAED,gBAAM,QAAQ,UAAU,GAAG;AAAA,QAC5B;AAAA,MACF;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,MAAM,MAAM,KAAK;AAGf,aAAS,cAAc,QAAQ,WAAW;AACxC,YAAM,WAAW,OAAO;AACxB,YAAM,UAAU,IAAI,WAAW,SAAS;AACxC,UAAI,QAAQ;AACZ,UAAI,SAAS;AACb,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,SAAG;AACD,eAAO,OAAO,OAAO;AACrB,YAAI,OAAO,KAAK,GAAG;AACjB;AACA,cAAI,SAAS,OAAO;AAAW,kBAAM,IAAI,MAAM,mCAAmC;AAClF,cAAI,QAAQ,OAAO;AAAU,kBAAM,IAAI,MAAM,yBAAyB;AACtE,aAAG;AACD,oBAAQ,QAAQ,IAAI,OAAO,OAAO;AAAA,UACnC,SAAQ,EAAE;AAAA,QACrB,OAAe;AACL,gBAAM,QAAQ;AACd,gBAAM,WAAW,OAAO,OAAS,KAAK;AACtC,cAAI,SAAS;AAAU,kBAAM,IAAI,MAAM,yBAAyB;AAChE,cAAI,QAAQ,GAAG;AACb,mBAAO,OAAO,OAAO;AACrB,gBAAI,SAAS;AAAU,oBAAM,IAAI,MAAM,yBAAyB;AAAA,UACjE;AAED,iBAAO,OAAO,OAAO;AACrB,cAAI,SAAS,MAAM,IAAI;AAAW,kBAAM,IAAI,MAAM,mCAAmC;AACrF,cAAI,MAAM;AAAG,kBAAM,IAAI,MAAM,yBAAyB;AACtD,cAAI,OAAO;AAAQ,kBAAM,IAAI,MAAM,yBAAyB;AAC5D,aAAG;AACD,oBAAQ,QAAQ,IAAI,QAAQ,KAAK;AAAA,UAC7C,SAAmB,EAAE,MAAM;AAAA,QAClB;AAAA,MACT,SAAe,QAAQ;AAEjB,aAAO;AAAA,IACR;AAED,aAAS,YAAYC,OAAM;AACzB,YAAMC,aAAY,CAAE;AACpB,YAAM,UAAUD,MAAK,OAAO,sBAAsB;AAClD,YAAM,UAAU,uBAAuB,KAAKA,MAAK,OAAO,UAAU,CAAC,CAAC;AAEpE,MAAAC,WAAU,OAAO,QAAQ,CAAC;AAC1B,MAAAA,WAAU,YAAY,QAAQ,CAAC,EAAE,SAAS;AAC1C,MAAAA,WAAU,MAAMD,MAAK,OAAO,GAAGC,WAAU,SAAS;AAIlD,MAAAA,WAAU,MAAMA,WAAU,IAAI,QAAQ,UAAU,EAAE;AAIlD,MAAAA,WAAU,UAAU,gBAAgB,KAAKA,WAAU,GAAG;AACtD,MAAAA,WAAU,SAAS,eAAe,KAAKA,WAAU,GAAG;AACpD,MAAAA,WAAU,OAAO,aAAa,KAAKA,WAAU,GAAG;AAChD,MAAAA,WAAU,OAAO,aAAa,KAAKA,WAAU,GAAG;AAChD,MAAAA,WAAU,QAAQ,cAAc,KAAKA,WAAU,GAAG;AAClD,MAAAA,WAAU,QAAQ,cAAc,KAAKA,WAAU,GAAG;AAClD,MAAAA,WAAU,SAAS,eAAe,KAAKA,WAAU,GAAG;AACpD,MAAAA,WAAU,YAAY,kBAAkB,KAAKA,WAAU,GAAG;AAC1D,MAAAA,WAAU,SAAS,eAAe,KAAKA,WAAU,GAAG;AAIpD,UAAIA,WAAU,YAAY;AAAM,QAAAA,WAAU,UAAU,WAAWA,WAAU,QAAQ,CAAC,CAAC;AAEnF,UAAIA,WAAU,WAAW;AAAM,QAAAA,WAAU,SAASA,WAAU,OAAO,CAAC,EAAE,MAAM,GAAG;AAE/E,UAAIA,WAAU,SAAS;AAAM,QAAAA,WAAU,OAAOA,WAAU,KAAK,CAAC,EAAE,MAAM,GAAG;AAEzE,UAAIA,WAAU,UAAU;AAAM,QAAAA,WAAU,QAAQ,SAASA,WAAU,MAAM,CAAC,CAAC;AAE3E,UAAIA,WAAU,WAAW;AAAM,QAAAA,WAAU,SAAS,SAASA,WAAU,OAAO,CAAC,CAAC;AAE9E,UAAIA,WAAU,cAAc;AAAM,QAAAA,WAAU,YAAYA,WAAU,UAAU,CAAC;AAE7E,UAAIA,WAAU,WAAW;AAAM,QAAAA,WAAU,SAAS,SAASA,WAAU,OAAO,CAAC,GAAG,EAAE;AAElF,UAAIA,WAAU,WAAW;AAAM,QAAAA,WAAU,SAASA,WAAU,QAAQA,WAAU;AAE9E,UAAIA,WAAU,SAAS,MAAM;AAC3B,QAAAA,WAAU,OAAOA,WAAU,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,SAAU,GAAG;AAC7D,iBAAO,SAAS,GAAG,EAAE;AAAA,QAC/B,CAAS;AAAA,MACF;AAED,UAAIA,WAAU,UAAU,MAAM;AAC5B,QAAAA,WAAU,QAAQA,WAAU,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,SAAU,GAAG;AAC/D,iBAAO,SAAS,GAAG,EAAE;AAAA,QAC/B,CAAS;AAAA,MACT,OAAa;AACL,QAAAA,WAAU,QAAQ,CAAE;AAEpB,iBAAS,IAAI,GAAG,IAAIA,WAAU,OAAO,QAAQ,IAAI,GAAG,KAAK;AACvD,UAAAA,WAAU,MAAM,KAAK,CAAC;AAAA,QACvB;AAAA,MACF;AAED,MAAAA,WAAU,SAAS,CAAE;AAErB,UAAI,UAAU;AAEd,eAAS,IAAI,GAAG,IAAIA,WAAU,OAAO,QAAQ,IAAI,GAAG,KAAK;AACvD,YAAIA,WAAU,SAAS,SAAS;AAC9B,UAAAA,WAAU,OAAOA,WAAU,OAAO,CAAC,CAAC,IAAI;AAAA,QAClD,OAAe;AACL,UAAAA,WAAU,OAAOA,WAAU,OAAO,CAAC,CAAC,IAAI;AACxC,qBAAWA,WAAU,KAAK,CAAC,IAAIA,WAAU,MAAM,CAAC;AAAA,QACjD;AAAA,MACF;AAID,MAAAA,WAAU,UAAU;AAEpB,aAAOA;AAAA,IACR;AAED,UAAM,WAAWC,MAAAA,YAAY,WAAW,IAAI,WAAW,IAAI,CAAC;AAI5D,UAAM,YAAY,YAAY,QAAQ;AAItC,UAAM,WAAW,CAAE;AACnB,UAAM,SAAS,CAAE;AACjB,UAAM,QAAQ,CAAE;AAIhB,QAAI,UAAU,SAAS,SAAS;AAC9B,YAAM,SAAS,UAAU;AACzB,YAAM,UAAU,SAAS,OAAO,UAAU,SAAS;AACnD,YAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC5C,YAAI,MAAM,CAAC,MAAM;AAAI;AAErB,cAAM,OAAO,MAAM,CAAC,EAAE,MAAM,GAAG;AAE/B,YAAI,OAAO,MAAM,QAAW;AAC1B,mBAAS,KAAK,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;AACxC,mBAAS,KAAK,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;AACxC,mBAAS,KAAK,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;AAAA,QACzC;AAED,YAAI,OAAO,QAAQ,QAAW;AAC5B,gBAAM,MAAM,WAAW,KAAK,OAAO,GAAG,CAAC;AACvC,gBAAM,IAAK,OAAO,KAAM;AACxB,gBAAM,IAAK,OAAO,IAAK;AACvB,gBAAM,IAAK,OAAO,IAAK;AACvB,gBAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,QACrC;AAED,YAAI,OAAO,aAAa,QAAW;AACjC,iBAAO,KAAK,WAAW,KAAK,OAAO,QAAQ,CAAC,CAAC;AAC7C,iBAAO,KAAK,WAAW,KAAK,OAAO,QAAQ,CAAC,CAAC;AAC7C,iBAAO,KAAK,WAAW,KAAK,OAAO,QAAQ,CAAC,CAAC;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAQD,QAAI,UAAU,SAAS,qBAAqB;AAC1C,YAAM,QAAQ,IAAI,YAAY,KAAK,MAAM,UAAU,WAAW,UAAU,YAAY,CAAC,CAAC;AACtF,YAAM,iBAAiB,MAAM,CAAC;AAC9B,YAAM,mBAAmB,MAAM,CAAC;AAChC,YAAM,eAAe;AAAA,QACnB,IAAI,WAAW,MAAM,UAAU,YAAY,GAAG,cAAc;AAAA,QAC5D;AAAA,MACD;AACD,YAAM,WAAW,IAAI,SAAS,aAAa,MAAM;AAEjD,YAAM,SAAS,UAAU;AAEzB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,YAAI,OAAO,MAAM,QAAW;AAC1B,mBAAS,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,CAAC,IAAI,GAAG,KAAK,YAAY,CAAC;AACzG,mBAAS,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,CAAC,IAAI,GAAG,KAAK,YAAY,CAAC;AACzG,mBAAS,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,CAAC,IAAI,GAAG,KAAK,YAAY,CAAC;AAAA,QAC1G;AAED,YAAI,OAAO,QAAQ,QAAW;AAC5B,gBAAM,KAAK,SAAS,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAK;AAC/F,gBAAM,KAAK,SAAS,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAK;AAC/F,gBAAM,KAAK,SAAS,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAK;AAAA,QAChG;AAED,YAAI,OAAO,aAAa,QAAW;AACjC,iBAAO;AAAA,YACL,SAAS,WAAW,UAAU,SAAS,OAAO,WAAW,UAAU,KAAK,CAAC,IAAI,GAAG,KAAK,YAAY;AAAA,UAClG;AACD,iBAAO;AAAA,YACL,SAAS,WAAW,UAAU,SAAS,OAAO,WAAW,UAAU,KAAK,CAAC,IAAI,GAAG,KAAK,YAAY;AAAA,UAClG;AACD,iBAAO;AAAA,YACL,SAAS,WAAW,UAAU,SAAS,OAAO,WAAW,UAAU,KAAK,CAAC,IAAI,GAAG,KAAK,YAAY;AAAA,UAClG;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAID,QAAI,UAAU,SAAS,UAAU;AAC/B,YAAM,WAAW,IAAI,SAAS,MAAM,UAAU,SAAS;AACvD,YAAM,SAAS,UAAU;AAEzB,eAAS,IAAI,GAAG,MAAM,GAAG,IAAI,UAAU,QAAQ,KAAK,OAAO,UAAU,SAAS;AAC5E,YAAI,OAAO,MAAM,QAAW;AAC1B,mBAAS,KAAK,SAAS,WAAW,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC;AACpE,mBAAS,KAAK,SAAS,WAAW,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC;AACpE,mBAAS,KAAK,SAAS,WAAW,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC;AAAA,QACrE;AAED,YAAI,OAAO,QAAQ,QAAW;AAC5B,gBAAM,KAAK,SAAS,SAAS,MAAM,OAAO,MAAM,CAAC,IAAI,GAAK;AAC1D,gBAAM,KAAK,SAAS,SAAS,MAAM,OAAO,MAAM,CAAC,IAAI,GAAK;AAC1D,gBAAM,KAAK,SAAS,SAAS,MAAM,OAAO,MAAM,CAAC,IAAI,GAAK;AAAA,QAC3D;AAED,YAAI,OAAO,aAAa,QAAW;AACjC,iBAAO,KAAK,SAAS,WAAW,MAAM,OAAO,UAAU,KAAK,YAAY,CAAC;AACzE,iBAAO,KAAK,SAAS,WAAW,MAAM,OAAO,UAAU,KAAK,YAAY,CAAC;AACzE,iBAAO,KAAK,SAAS,WAAW,MAAM,OAAO,UAAU,KAAK,YAAY,CAAC;AAAA,QAC1E;AAAA,MACF;AAAA,IACF;AAID,UAAM,WAAW,IAAIC,qBAAgB;AAErC,QAAI,SAAS,SAAS;AAAG,eAAS,aAAa,YAAY,IAAIC,MAAsB,uBAAC,UAAU,CAAC,CAAC;AAClG,QAAI,OAAO,SAAS;AAAG,eAAS,aAAa,UAAU,IAAIA,MAAsB,uBAAC,QAAQ,CAAC,CAAC;AAC5F,QAAI,MAAM,SAAS;AAAG,eAAS,aAAa,SAAS,IAAIA,MAAsB,uBAAC,OAAO,CAAC,CAAC;AAEzF,aAAS,sBAAuB;AAIhC,UAAM,WAAW,IAAIC,MAAAA,eAAe,EAAE,MAAM,KAAK,CAAE;AAEnD,QAAI,MAAM,SAAS,GAAG;AACpB,eAAS,eAAe;AAAA,IAC9B,OAAW;AACL,eAAS,MAAM,OAAO,KAAK,OAAM,IAAK,QAAQ;AAAA,IAC/C;AAID,UAAM,OAAO,IAAIC,aAAO,UAAU,QAAQ;AAC1C,QAAI,OAAO,IAAI,MAAM,EAAE,EAAE,QAAS,EAAC,KAAK,EAAE;AAC1C,WAAO,WAAW,KAAK,IAAI;AAC3B,WAAO,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,QAAO,EAAG,KAAK,EAAE;AAC1C,SAAK,OAAO;AAEZ,WAAO;AAAA,EACR;AACH;;"}
|
1
|
+
{"version":3,"file":"PCDLoader.cjs","sources":["../../src/loaders/PCDLoader.js"],"sourcesContent":["import { BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils, Points, PointsMaterial } from 'three'\nimport { decodeText } from '../_polyfill/LoaderUtils'\n\nclass PCDLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.littleEndian = true\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n loader.load(\n url,\n function (data) {\n try {\n onLoad(scope.parse(data, url))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(data, url) {\n // from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n function decompressLZF(inData, outLength) {\n const inLength = inData.length\n const outData = new Uint8Array(outLength)\n let inPtr = 0\n let outPtr = 0\n let ctrl\n let len\n let ref\n do {\n ctrl = inData[inPtr++]\n if (ctrl < 1 << 5) {\n ctrl++\n if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough')\n if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data')\n do {\n outData[outPtr++] = inData[inPtr++]\n } while (--ctrl)\n } else {\n len = ctrl >> 5\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1\n if (inPtr >= inLength) throw new Error('Invalid compressed data')\n if (len === 7) {\n len += inData[inPtr++]\n if (inPtr >= inLength) throw new Error('Invalid compressed data')\n }\n\n ref -= inData[inPtr++]\n if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough')\n if (ref < 0) throw new Error('Invalid compressed data')\n if (ref >= outPtr) throw new Error('Invalid compressed data')\n do {\n outData[outPtr++] = outData[ref++]\n } while (--len + 2)\n }\n } while (inPtr < inLength)\n\n return outData\n }\n\n function parseHeader(data) {\n const PCDheader = {}\n const result1 = data.search(/[\\r\\n]DATA\\s(\\S*)\\s/i)\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data.substr(result1 - 1))\n\n PCDheader.data = result2[1]\n PCDheader.headerLen = result2[0].length + result1\n PCDheader.str = data.substr(0, PCDheader.headerLen)\n\n // remove comments\n\n PCDheader.str = PCDheader.str.replace(/\\#.*/gi, '')\n\n // parse\n\n PCDheader.version = /VERSION (.*)/i.exec(PCDheader.str)\n PCDheader.fields = /FIELDS (.*)/i.exec(PCDheader.str)\n PCDheader.size = /SIZE (.*)/i.exec(PCDheader.str)\n PCDheader.type = /TYPE (.*)/i.exec(PCDheader.str)\n PCDheader.count = /COUNT (.*)/i.exec(PCDheader.str)\n PCDheader.width = /WIDTH (.*)/i.exec(PCDheader.str)\n PCDheader.height = /HEIGHT (.*)/i.exec(PCDheader.str)\n PCDheader.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader.str)\n PCDheader.points = /POINTS (.*)/i.exec(PCDheader.str)\n\n // evaluate\n\n if (PCDheader.version !== null) PCDheader.version = parseFloat(PCDheader.version[1])\n\n if (PCDheader.fields !== null) PCDheader.fields = PCDheader.fields[1].split(' ')\n\n if (PCDheader.type !== null) PCDheader.type = PCDheader.type[1].split(' ')\n\n if (PCDheader.width !== null) PCDheader.width = parseInt(PCDheader.width[1])\n\n if (PCDheader.height !== null) PCDheader.height = parseInt(PCDheader.height[1])\n\n if (PCDheader.viewpoint !== null) PCDheader.viewpoint = PCDheader.viewpoint[1]\n\n if (PCDheader.points !== null) PCDheader.points = parseInt(PCDheader.points[1], 10)\n\n if (PCDheader.points === null) PCDheader.points = PCDheader.width * PCDheader.height\n\n if (PCDheader.size !== null) {\n PCDheader.size = PCDheader.size[1].split(' ').map(function (x) {\n return parseInt(x, 10)\n })\n }\n\n if (PCDheader.count !== null) {\n PCDheader.count = PCDheader.count[1].split(' ').map(function (x) {\n return parseInt(x, 10)\n })\n } else {\n PCDheader.count = []\n\n for (let i = 0, l = PCDheader.fields.length; i < l; i++) {\n PCDheader.count.push(1)\n }\n }\n\n PCDheader.offset = {}\n\n let sizeSum = 0\n\n for (let i = 0, l = PCDheader.fields.length; i < l; i++) {\n if (PCDheader.data === 'ascii') {\n PCDheader.offset[PCDheader.fields[i]] = i\n } else {\n PCDheader.offset[PCDheader.fields[i]] = sizeSum\n sizeSum += PCDheader.size[i] * PCDheader.count[i]\n }\n }\n\n // for binary only\n\n PCDheader.rowSize = sizeSum\n\n return PCDheader\n }\n\n const textData = decodeText(new Uint8Array(data))\n\n // parse header (always ascii format)\n\n const PCDheader = parseHeader(textData)\n\n // parse data\n\n const position = []\n const normal = []\n const color = []\n\n // ascii\n\n if (PCDheader.data === 'ascii') {\n const offset = PCDheader.offset\n const pcdData = textData.substr(PCDheader.headerLen)\n const lines = pcdData.split('\\n')\n\n for (let i = 0, l = lines.length; i < l; i++) {\n if (lines[i] === '') continue\n\n const line = lines[i].split(' ')\n\n if (offset.x !== undefined) {\n position.push(parseFloat(line[offset.x]))\n position.push(parseFloat(line[offset.y]))\n position.push(parseFloat(line[offset.z]))\n }\n\n if (offset.rgb !== undefined) {\n const rgb = parseFloat(line[offset.rgb])\n const r = (rgb >> 16) & 0x0000ff\n const g = (rgb >> 8) & 0x0000ff\n const b = (rgb >> 0) & 0x0000ff\n color.push(r / 255, g / 255, b / 255)\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(parseFloat(line[offset.normal_x]))\n normal.push(parseFloat(line[offset.normal_y]))\n normal.push(parseFloat(line[offset.normal_z]))\n }\n }\n }\n\n // binary-compressed\n\n // normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n // binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n // that requires a totally different parsing approach compared to non-compressed data\n\n if (PCDheader.data === 'binary_compressed') {\n const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8))\n const compressedSize = sizes[0]\n const decompressedSize = sizes[1]\n const decompressed = decompressLZF(\n new Uint8Array(data, PCDheader.headerLen + 8, compressedSize),\n decompressedSize,\n )\n const dataview = new DataView(decompressed.buffer)\n\n const offset = PCDheader.offset\n\n for (let i = 0; i < PCDheader.points; i++) {\n if (offset.x !== undefined) {\n position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian))\n position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, this.littleEndian))\n position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, this.littleEndian))\n }\n\n if (offset.rgb !== undefined) {\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255.0)\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255.0)\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255.0)\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, this.littleEndian),\n )\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, this.littleEndian),\n )\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, this.littleEndian),\n )\n }\n }\n }\n\n // binary\n\n if (PCDheader.data === 'binary') {\n const dataview = new DataView(data, PCDheader.headerLen)\n const offset = PCDheader.offset\n\n for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) {\n if (offset.x !== undefined) {\n position.push(dataview.getFloat32(row + offset.x, this.littleEndian))\n position.push(dataview.getFloat32(row + offset.y, this.littleEndian))\n position.push(dataview.getFloat32(row + offset.z, this.littleEndian))\n }\n\n if (offset.rgb !== undefined) {\n color.push(dataview.getUint8(row + offset.rgb + 2) / 255.0)\n color.push(dataview.getUint8(row + offset.rgb + 1) / 255.0)\n color.push(dataview.getUint8(row + offset.rgb + 0) / 255.0)\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian))\n normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian))\n normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian))\n }\n }\n }\n\n // build geometry\n\n const geometry = new BufferGeometry()\n\n if (position.length > 0) geometry.setAttribute('position', new Float32BufferAttribute(position, 3))\n if (normal.length > 0) geometry.setAttribute('normal', new Float32BufferAttribute(normal, 3))\n if (color.length > 0) geometry.setAttribute('color', new Float32BufferAttribute(color, 3))\n\n geometry.computeBoundingSphere()\n\n // build material\n\n const material = new PointsMaterial({ size: 0.005 })\n\n if (color.length > 0) {\n material.vertexColors = true\n } else {\n material.color.setHex(Math.random() * 0xffffff)\n }\n\n // build point cloud\n\n const mesh = new Points(geometry, material)\n let name = url.split('').reverse().join('')\n name = /([^\\/]*)/.exec(name)\n name = name[1].split('').reverse().join('')\n mesh.name = name\n\n return mesh\n }\n}\n\nexport { PCDLoader }\n"],"names":["Loader","FileLoader","data","PCDheader","decodeText","BufferGeometry","Float32BufferAttribute","PointsMaterial","Points"],"mappings":"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"}
|
package/loaders/PCDLoader.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import { Loader, FileLoader,
|
1
|
+
import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute, PointsMaterial, Points } from "three";
|
2
|
+
import { decodeText } from "../_polyfill/LoaderUtils.js";
|
2
3
|
class PCDLoader extends Loader {
|
3
4
|
constructor(manager) {
|
4
5
|
super(manager);
|
@@ -134,7 +135,7 @@ class PCDLoader extends Loader {
|
|
134
135
|
PCDheader2.rowSize = sizeSum;
|
135
136
|
return PCDheader2;
|
136
137
|
}
|
137
|
-
const textData =
|
138
|
+
const textData = decodeText(new Uint8Array(data));
|
138
139
|
const PCDheader = parseHeader(textData);
|
139
140
|
const position = [];
|
140
141
|
const normal = [];
|