three-stdlib
Version:
stand-alone library of threejs examples
1 lines • 6.3 kB
Source Map (JSON)
{"version":3,"file":"LUTCubeLoader.cjs","sources":["../../src/loaders/LUTCubeLoader.js"],"sourcesContent":["// https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf\n\nimport { Loader, FileLoader, Vector3, DataTexture, UnsignedByteType, ClampToEdgeWrapping, LinearFilter } from 'three'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nexport class LUTCubeLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setResponseType('text')\n loader.load(\n url,\n (text) => {\n try {\n onLoad(this.parse(text))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n this.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(str) {\n // Remove empty lines and comments\n str = str\n .replace(/^#.*?(\\n|\\r)/gm, '')\n .replace(/^\\s*?(\\n|\\r)/gm, '')\n .trim()\n\n let title = null\n let size = null\n const domainMin = new Vector3(0, 0, 0)\n const domainMax = new Vector3(1, 1, 1)\n\n const lines = str.split(/[\\n\\r]+/g)\n let data = null\n\n let currIndex = 0\n for (let i = 0, l = lines.length; i < l; i++) {\n const line = lines[i].trim()\n const split = line.split(/\\s/g)\n\n switch (split[0]) {\n case 'TITLE':\n title = line.substring(7, line.length - 1)\n break\n case 'LUT_3D_SIZE':\n // TODO: A .CUBE LUT file specifies floating point values and could be represented with\n // more precision than can be captured with Uint8Array.\n const sizeToken = split[1]\n size = parseFloat(sizeToken)\n data = new Uint8Array(size * size * size * 4)\n break\n case 'DOMAIN_MIN':\n domainMin.x = parseFloat(split[1])\n domainMin.y = parseFloat(split[2])\n domainMin.z = parseFloat(split[3])\n break\n case 'DOMAIN_MAX':\n domainMax.x = parseFloat(split[1])\n domainMax.y = parseFloat(split[2])\n domainMax.z = parseFloat(split[3])\n break\n default:\n const r = parseFloat(split[0])\n const g = parseFloat(split[1])\n const b = parseFloat(split[2])\n\n if (r > 1.0 || r < 0.0 || g > 1.0 || g < 0.0 || b > 1.0 || b < 0.0) {\n throw new Error('LUTCubeLoader : Non normalized values not supported.')\n }\n\n data[currIndex + 0] = r * 255\n data[currIndex + 1] = g * 255\n data[currIndex + 2] = b * 255\n data[currIndex + 3] = 255\n currIndex += 4\n }\n }\n\n const texture = new DataTexture()\n texture.image.data = data\n texture.image.width = size\n texture.image.height = size * size\n texture.type = UnsignedByteType\n texture.magFilter = LinearFilter\n texture.minFilter = LinearFilter\n texture.wrapS = ClampToEdgeWrapping\n texture.wrapT = ClampToEdgeWrapping\n texture.generateMipmaps = false\n texture.needsUpdate = true\n\n const texture3D = new Data3DTexture()\n texture3D.image.data = data\n texture3D.image.width = size\n texture3D.image.height = size\n texture3D.image.depth = size\n texture3D.type = UnsignedByteType\n texture3D.magFilter = LinearFilter\n texture3D.minFilter = LinearFilter\n texture3D.wrapS = ClampToEdgeWrapping\n texture3D.wrapT = ClampToEdgeWrapping\n texture3D.wrapR = ClampToEdgeWrapping\n texture3D.generateMipmaps = false\n texture3D.needsUpdate = true\n\n return {\n title,\n size,\n domainMin,\n domainMax,\n texture,\n texture3D,\n }\n }\n}\n"],"names":["Loader","FileLoader","Vector3","DataTexture","UnsignedByteType","LinearFilter","ClampToEdgeWrapping","Data3DTexture"],"mappings":"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"}