diff --git a/demo/src/demos/ColorGradingDemo.js b/demo/src/demos/ColorGradingDemo.js index 5109292c8..a9db5b26c 100644 --- a/demo/src/demos/ColorGradingDemo.js +++ b/demo/src/demos/ColorGradingDemo.js @@ -332,7 +332,9 @@ export class ColorGradingDemo extends PostProcessingDemo { registerOptions(menu) { - const capabilities = this.composer.getRenderer().capabilities; + const renderer = this.composer.getRenderer(); + const context = renderer.getContext(); + const capabilities = renderer.capabilities; const assets = this.assets; const luts = this.luts; @@ -446,6 +448,13 @@ export class ColorGradingDemo extends PostProcessingDemo { if(capabilities.isWebGL2) { + if(context.getExtension("OES_texture_float_linear") === null) { + + console.log("Linear float filtering not supported, converting to Uint8"); + lut.convertToUint8(); + + } + lutEffect.setLUT(params.lut["3D texture"] ? lut : lut.toDataTexture()); } else { diff --git a/demo/src/demos/PostProcessingDemo.js b/demo/src/demos/PostProcessingDemo.js index ad017cc82..e5c0dc74a 100644 --- a/demo/src/demos/PostProcessingDemo.js +++ b/demo/src/demos/PostProcessingDemo.js @@ -19,7 +19,7 @@ export class PostProcessingDemo extends Demo { super(id); /** - * Spatial controls + * Spatial controls. * * @type {SpatialControls} * @protected diff --git a/demo/src/index.js b/demo/src/index.js index 2063157a0..37a4960ea 100644 --- a/demo/src/index.js +++ b/demo/src/index.js @@ -76,7 +76,7 @@ function render(timestamp) { window.addEventListener("load", (event) => { - const debug = (window.location.href.indexOf("localhost") !== -1); + const debug = (window.location.hostname === "localhost"); const viewport = document.getElementById("viewport"); const demoCache = new WeakSet(); diff --git a/demo/static/styles.css b/demo/static/styles.css index 0d9f590e2..c71b1fc12 100644 --- a/demo/static/styles.css +++ b/demo/static/styles.css @@ -148,7 +148,7 @@ p { } .dg ul { - max-height: 80vh; + max-height: calc(100vh - 20px); overflow: auto; scrollbar-width: thin; } diff --git a/esbuild.mjs b/esbuild.mjs index 095275484..9a60545c4 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -23,6 +23,7 @@ await esbuild.build({ ], outExtension: { ".js": ".txt" }, outdir: "tmp", + logLevel: "info", format: "iife", bundle: true, minify, @@ -32,6 +33,7 @@ await esbuild.build({ await esbuild.build({ entryPoints: ["demo/src/index.js"], outdir: "public/demo", + logLevel: "info", format: "iife", bundle: true, plugins, @@ -43,6 +45,7 @@ await esbuild.build({ entryPoints: ["src/index.js"], outfile: `build/${pkg.name}.esm.js`, banner: { js: banner }, + logLevel: "info", format: "esm", bundle: true, external, @@ -59,6 +62,7 @@ await esbuild.build({ outfile: `build/${pkg.name}.js`, banner: { js: `${banner}\n${requireShim}` }, footer: { js: footer }, + logLevel: "info", format: "iife", bundle: true, globalName, @@ -71,6 +75,7 @@ await esbuild.build({ outfile: `build/${pkg.name}.min.js`, banner: { js: `${banner}\n${requireShim}` }, footer: { js: footer }, + logLevel: "info", format: "iife", bundle: true, globalName, diff --git a/package.json b/package.json index 908926fd0..f20459040 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postprocessing", - "version": "6.21.5", + "version": "6.22.0", "description": "A post processing library that provides the means to implement image filter effects for three.js.", "homepage": "https://github.com/vanruesc/postprocessing", "main": "build/postprocessing.js", @@ -70,7 +70,7 @@ "extends": "aether" }, "peerDependencies": { - "three": ">= 0.102.0 < 0.129.0" + "three": ">= 0.102.0 < 0.130.0" }, "devDependencies": { "@types/three": "0.x.x", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5731f839..b652d48aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,27 +24,27 @@ specifiers: typescript: 4.x.x devDependencies: - '@types/three': 0.127.1 + '@types/three': 0.128.0 ava: 3.15.0 cpy-cli: 3.1.1 dat.gui: 0.7.7 del-cli: 3.0.1 - esbuild: 0.11.20 - esbuild-plugin-glsl: 1.0.3_esbuild@0.11.20 + esbuild: 0.12.5 + esbuild-plugin-glsl: 1.0.3_esbuild@0.12.5 esdoc: 1.1.0 esdoc-importpath-plugin: 1.0.2 esdoc-standard-plugin: 1.0.0 - eslint: 7.26.0 - eslint-config-aether: 1.1.3 - eslint-watch: 7.0.0_eslint@7.26.0 + eslint: 7.27.0 + eslint-config-aether: 1.1.5 + eslint-watch: 7.0.0_eslint@7.27.0 esm: 3.2.25 http-server: 0.12.3 npm-run-all: 4.1.5 - spatial-controls: 4.0.2_three@0.128.0 - three: 0.128.0 - three-demo: 5.0.4_dat.gui@0.7.7+three@0.128.0 + spatial-controls: 4.1.0_three@0.129.0 + three: 0.129.0 + three-demo: 5.0.5_dat.gui@0.7.7+three@0.129.0 tslib: 2.2.0 - typescript: 4.2.4 + typescript: 4.3.2 packages: @@ -146,7 +146,7 @@ packages: resolution: {integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==} dependencies: '@types/minimatch': 3.0.4 - '@types/node': 15.0.2 + '@types/node': 15.6.1 dev: true /@types/minimatch/3.0.4: @@ -157,16 +157,16 @@ packages: resolution: {integrity: sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==} dev: true - /@types/node/15.0.2: - resolution: {integrity: sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==} + /@types/node/15.6.1: + resolution: {integrity: sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==} dev: true /@types/normalize-package-data/2.4.0: resolution: {integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==} dev: true - /@types/three/0.127.1: - resolution: {integrity: sha512-e90iYq3zde3axANg7BPZY0fKrez1AzveamIIFk23PMh9WtCx91geokDy+yEAIymdIldgUpvezAP6+zCV3oekXw==} + /@types/three/0.128.0: + resolution: {integrity: sha512-Jwq5XYUkzAcPTo34hlGAQGUyAI0b2F3aCCFWG/v7ZhJBEG5HGcusMSr70GhDlT8Gs0f02QnSPZ2RCA1MrCOa/w==} dev: true /abab/1.0.4: @@ -230,8 +230,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.3.0: - resolution: {integrity: sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==} + /ajv/8.5.0: + resolution: {integrity: sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -294,7 +294,7 @@ packages: engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 - picomatch: 2.2.3 + picomatch: 2.3.0 dev: true /argparse/1.0.10: @@ -445,7 +445,7 @@ packages: ora: 5.4.0 p-event: 4.2.0 p-map: 4.0.0 - picomatch: 2.2.3 + picomatch: 2.3.0 pkg-conf: 3.1.0 plur: 4.0.0 pretty-ms: 7.0.1 @@ -681,7 +681,7 @@ packages: http-cache-semantics: 4.1.0 keyv: 3.1.0 lowercase-keys: 2.0.0 - normalize-url: 4.5.0 + normalize-url: 4.5.1 responselike: 1.0.2 dev: true @@ -1008,8 +1008,8 @@ packages: requiresBuild: true dev: true - /core-js/3.12.1: - resolution: {integrity: sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==} + /core-js/3.13.1: + resolution: {integrity: sha512-JqveUc4igkqwStL2RTRn/EPFGBOfEZHxJl/8ej1mXJR75V3go2mFF4bmUYkEIT1rveHKnkUlcJX/c+f1TyIovQ==} requiresBuild: true dev: true @@ -1421,8 +1421,8 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.18.0: - resolution: {integrity: sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==} + /es-abstract/1.18.3: + resolution: {integrity: sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -1452,17 +1452,17 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-plugin-glsl/1.0.3_esbuild@0.11.20: + /esbuild-plugin-glsl/1.0.3_esbuild@0.12.5: resolution: {integrity: sha512-wkoCLCnjoDn8QkClWJK9XnX3VDfId+clqlQ4tkKS32pGzAroAGnmnIpdID5jIDkHsjvHXRK76/1hhUrtLLnCsQ==} engines: {node: '>= 0.10.18'} peerDependencies: esbuild: 0.x.x dependencies: - esbuild: 0.11.20 + esbuild: 0.12.5 dev: true - /esbuild/0.11.20: - resolution: {integrity: sha512-QOZrVpN/Yz74xfat0H6euSgn3RnwLevY1mJTEXneukz1ln9qB+ieaerRMzSeETpz/UJWsBMzRVR/andBht5WKw==} + /esbuild/0.12.5: + resolution: {integrity: sha512-vcuP53pA5XiwUU4FnlXM+2PnVjTfHGthM7uP1gtp+9yfheGvFFbq/KyuESThmtoHPUrfZH5JpxGVJIFDVD1Egw==} hasBin: true requiresBuild: true dev: true @@ -1617,8 +1617,8 @@ packages: taffydb: 2.7.3 dev: true - /eslint-config-aether/1.1.3: - resolution: {integrity: sha512-c/BEDMd8tDmbSPVuAu6BvT8BRD5c2DjuFxWaQtgcBi5tc9RrFgap1iObiUqPVVcZjW+6VtZhfouls6qtSdJq7A==} + /eslint-config-aether/1.1.5: + resolution: {integrity: sha512-oPriD6NzLlVIaUGAbkYPgHZ9D0LWzfOoWnK8QwaTOH22Vlf5R9xtOxytLUnzUdnD/J7ZxZEjI0jn1SOWcWCFcg==} dev: true /eslint-scope/5.1.1: @@ -1646,7 +1646,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-watch/7.0.0_eslint@7.26.0: + /eslint-watch/7.0.0_eslint@7.27.0: resolution: {integrity: sha512-xwEm3blWQbBoYI1eZTfpPAXfqkCteQPgMa28u8k/J97tFwtffSgDc7hCOoR1vxsSzmRLtEthxB0a6pwimPTgLQ==} engines: {node: '>=10'} hasBin: true @@ -1654,9 +1654,9 @@ packages: eslint: '>=7 <8.0.0' dependencies: chokidar: 3.5.1 - core-js: 3.12.1 + core-js: 3.13.1 debug: 4.3.1 - eslint: 7.26.0 + eslint: 7.27.0 execa: 4.1.0 keypress: 0.2.1 lodash.debounce: 4.0.8 @@ -1670,8 +1670,8 @@ packages: - supports-color dev: true - /eslint/7.26.0: - resolution: {integrity: sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==} + /eslint/7.27.0: + resolution: {integrity: sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true dependencies: @@ -1683,16 +1683,18 @@ packages: debug: 4.3.1 doctrine: 3.0.0 enquirer: 2.3.6 + escape-string-regexp: 4.0.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 eslint-visitor-keys: 2.1.0 espree: 7.3.1 esquery: 1.4.0 esutils: 2.0.3 + fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 functional-red-black-tree: 1.0.1 glob-parent: 5.1.2 - globals: 13.8.0 + globals: 13.9.0 ignore: 4.0.6 import-fresh: 3.3.0 imurmurhash: 0.1.4 @@ -1700,7 +1702,7 @@ packages: js-yaml: 3.14.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 - lodash: 4.17.21 + lodash.merge: 4.6.2 minimatch: 3.0.4 natural-compare: 1.4.0 optionator: 0.9.1 @@ -1709,7 +1711,7 @@ packages: semver: 7.3.5 strip-ansi: 6.0.0 strip-json-comments: 3.1.1 - table: 6.7.0 + table: 6.7.1 text-table: 0.2.0 v8-compile-cache: 2.3.0 transitivePeerDependencies: @@ -1866,7 +1868,7 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.4 - picomatch: 2.2.3 + picomatch: 2.3.0 dev: true /fast-json-stable-stringify/2.1.0: @@ -2100,8 +2102,8 @@ packages: type-fest: 0.8.1 dev: true - /globals/13.8.0: - resolution: {integrity: sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==} + /globals/13.9.0: + resolution: {integrity: sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -2490,8 +2492,8 @@ packages: ci-info: 2.0.0 dev: true - /is-core-module/2.3.0: - resolution: {integrity: sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==} + /is-core-module/2.4.0: + resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} dependencies: has: 1.0.3 dev: true @@ -3142,7 +3144,7 @@ packages: normalize-package-data: 2.5.0 read-pkg-up: 7.0.1 redent: 3.0.0 - trim-newlines: 3.0.0 + trim-newlines: 3.0.1 type-fest: 0.13.1 yargs-parser: 18.1.3 dev: true @@ -3180,7 +3182,7 @@ packages: engines: {node: '>=8.6'} dependencies: braces: 3.0.2 - picomatch: 2.2.3 + picomatch: 2.3.0 dev: true /mime-db/1.47.0: @@ -3316,8 +3318,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /normalize-url/4.5.0: - resolution: {integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==} + /normalize-url/4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} engines: {node: '>=8'} dev: true @@ -3596,7 +3598,7 @@ packages: /parse5/3.0.3: resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} dependencies: - '@types/node': 15.0.2 + '@types/node': 15.6.1 dev: true /pascalcase/0.1.1: @@ -3633,8 +3635,8 @@ packages: engines: {node: '>=8'} dev: true - /path-parse/1.0.6: - resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-type/3.0.0: @@ -3654,8 +3656,8 @@ packages: dev: true optional: true - /picomatch/2.2.3: - resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==} + /picomatch/2.3.0: + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} engines: {node: '>=8.6'} dev: true @@ -3845,7 +3847,7 @@ packages: resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} engines: {node: '>=8.10.0'} dependencies: - picomatch: 2.2.3 + picomatch: 2.3.0 dev: true /redent/3.0.0: @@ -3979,8 +3981,8 @@ packages: /resolve/1.20.0: resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: - is-core-module: 2.3.0 - path-parse: 1.0.6 + is-core-module: 2.4.0 + path-parse: 1.0.7 dev: true /responselike/1.0.2: @@ -4219,20 +4221,20 @@ packages: engines: {node: '>=0.10.0'} dev: true - /spatial-controls/4.0.2_three@0.128.0: - resolution: {integrity: sha512-LPkv4ZubxL81ToeJSfMKbmhuSaN2pWftl64jjNfmHS6tbCt3yq8A8jvscls6xFNLEbMcWNRmqGAVysKS9M86hw==} + /spatial-controls/4.1.0_three@0.129.0: + resolution: {integrity: sha512-PGmMbl9se4bsbU5Id2G2ouZeAfmJK6dTBlTdSybQTeiImOLC5nXixn6ewjIlCVMK9/3OSdgN09/ZQudjwhx2xQ==} engines: {node: '>= 0.14.0'} peerDependencies: - three: '>= 0.126.0 < 0.129.0' + three: '>= 0.126.0 < 0.130.0' dependencies: - three: 0.128.0 + three: 0.129.0 dev: true /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.7 + spdx-license-ids: 3.0.9 dev: true /spdx-exceptions/2.3.0: @@ -4243,11 +4245,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.7 + spdx-license-ids: 3.0.9 dev: true - /spdx-license-ids/3.0.7: - resolution: {integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==} + /spdx-license-ids/3.0.9: + resolution: {integrity: sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==} dev: true /split-string/3.1.0: @@ -4317,7 +4319,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.0 + es-abstract: 1.18.3 dev: true /string.prototype.trimend/1.0.4: @@ -4427,11 +4429,11 @@ packages: dev: true optional: true - /table/6.7.0: - resolution: {integrity: sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==} + /table/6.7.1: + resolution: {integrity: sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.3.0 + ajv: 8.5.0 lodash.clonedeep: 4.5.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 @@ -4456,19 +4458,19 @@ packages: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true - /three-demo/5.0.4_dat.gui@0.7.7+three@0.128.0: - resolution: {integrity: sha512-cVSvByeIpaMEEpbsTvPI57+mz3Aphv5mnNawMXNcXqUasPhv1UKfCcyq7TcpsSIqEvB3JTFtOcjfvoAj99MJug==} + /three-demo/5.0.5_dat.gui@0.7.7+three@0.129.0: + resolution: {integrity: sha512-awYDbEKyOglPjTSl+GwvFBcYP5VZoIg2P67Y6RqtNNOd7y8eNmJScySCoyjkLtjkgl5w0S+BsFDQaC0Fmb+Q6g==} engines: {node: '>= 0.14.0'} peerDependencies: dat.gui: '>= 0.0.0 < 1.0.0' - three: '>= 0.126.0 < 0.129.0' + three: '>= 0.126.0 < 0.130.0' dependencies: dat.gui: 0.7.7 - three: 0.128.0 + three: 0.129.0 dev: true - /three/0.128.0: - resolution: {integrity: sha512-i0ap/E+OaSfzw7bD1TtYnPo3VEplkl70WX5fZqZnfZsE3k3aSFudqrrC9ldFZfYFkn1zwDmBcdGfiIm/hnbyZA==} + /three/0.129.0: + resolution: {integrity: sha512-wiWio1yVRg2Oj6WEWsTHQo5eSzYpEwSBtPSi3OofNpvFbf26HFfb9kw4FZJNjII4qxzp0b1xLB11+tKkBGB1ZA==} dev: true /time-zone/1.0.0: @@ -4532,8 +4534,8 @@ packages: dev: true optional: true - /trim-newlines/3.0.0: - resolution: {integrity: sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==} + /trim-newlines/3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true @@ -4609,8 +4611,8 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript/4.2.4: - resolution: {integrity: sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==} + /typescript/4.3.2: + resolution: {integrity: sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -4714,6 +4716,7 @@ packages: /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true dev: true optional: true diff --git a/src/core/Selection.js b/src/core/Selection.js index 492193e3f..f3e6f67c5 100644 --- a/src/core/Selection.js +++ b/src/core/Selection.js @@ -27,6 +27,15 @@ export class Selection extends Set { this.currentLayer = layer; + /** + * Controls whether objects that are added to this selection should be + * removed from all other layers. + * + * @type {Boolean} + */ + + this.exclusive = false; + if(iterable !== undefined) { this.set(iterable); @@ -119,7 +128,7 @@ export class Selection extends Set { * * @param {Object3D} object - An object. * @return {Number} Returns 0 if the given object is currently selected, or -1 otherwise. - * @deprecated Added for backward compatibility. Use has instead. + * @deprecated Added for backward compatibility. Use `has` instead. */ indexOf(object) { @@ -131,16 +140,26 @@ export class Selection extends Set { /** * Adds an object to this selection. * + * If {@link exclusive} is set to `true`, the object will also be removed from + * all other layers. + * * @param {Object3D} object - The object that should be selected. * @return {Selection} This selection. */ add(object) { - object.layers.enable(this.layer); - super.add(object); + if(this.exclusive) { - return this; + object.layers.set(this.layer); + + } else { + + object.layers.enable(this.layer); + + } + + return super.add(object); } diff --git a/src/materials/glsl/mask/shader.frag b/src/materials/glsl/mask/shader.frag index 616851eef..3645e4e0e 100644 --- a/src/materials/glsl/mask/shader.frag +++ b/src/materials/glsl/mask/shader.frag @@ -50,19 +50,13 @@ void main() { #ifdef INVERTED - if(mask > 0.0) { - - discard; - - } + // (mask > 0.0) ? 0.0 : 1.0; + mask = step(mask, 0.0); #else - if(mask == 0.0) { - - discard; - - } + // (mask > 0.0) ? 1.0 : 0.0; + mask = 1.0 - step(mask, 0.0); #endif @@ -76,15 +70,17 @@ void main() { #endif - #if MASK_FUNCTION == 1 + #endif - gl_FragColor = mask * texture2D(inputBuffer, vUv); + #if MASK_FUNCTION == 2 - #else + // MULTIPLY_RGB_SET_ALPHA + gl_FragColor = vec4(mask * texture2D(inputBuffer, vUv).rgb, mask); - gl_FragColor = vec4(mask * texture2D(inputBuffer, vUv).rgb, mask); + #else - #endif + // DISCARD / MULTIPLY + gl_FragColor = mask * texture2D(inputBuffer, vUv); #endif