├── .editorconfig ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE.MD ├── README.md ├── index.html ├── index.js ├── package-lock.json ├── package.json ├── test └── index.glsl ├── when_and.glsl ├── when_and.glsl.js ├── when_eq.glsl ├── when_eq.glsl.js ├── when_ge.glsl ├── when_ge.glsl.js ├── when_gt.glsl ├── when_gt.glsl.js ├── when_le.glsl ├── when_le.glsl.js ├── when_lt.glsl ├── when_lt.glsl.js ├── when_neq.glsl ├── when_neq.glsl.js ├── when_not.glsl ├── when_not.glsl.js ├── when_or.glsl ├── when_or.glsl.js ├── when_xor.glsl └── when_xor.glsl.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | /types 4 | /lib 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /web_modules 2 | /examples 3 | /docs 4 | /coverage 5 | /test 6 | /.github 7 | screenshot.* 8 | index.html 9 | tsconfig.json 10 | .editorconfig 11 | .nojekyll 12 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. 4 | 5 | ## [2.0.2](https://github.com/dmnsgn/glsl-conditionals/compare/v2.0.1...v2.0.2) (2024-07-06) 6 | 7 | 8 | 9 | ## [2.0.1](https://github.com/dmnsgn/glsl-conditionals/compare/v2.0.0...v2.0.1) (2022-06-14) 10 | 11 | 12 | 13 | # 2.0.0 (2022-06-13) 14 | 15 | 16 | ### Code Refactoring 17 | 18 | * use ES modules ([869a196](https://github.com/dmnsgn/glsl-conditionals/commit/869a1967ef9f42e4ef1e87fe99117173193c7fa6)) 19 | 20 | 21 | ### BREAKING CHANGES 22 | 23 | * switch to type module 24 | -------------------------------------------------------------------------------- /LICENSE.MD: -------------------------------------------------------------------------------- 1 | Copyright (C) 2013 by Damien Holden 2 | Copyright (C) 2016 Damien Seguin 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # glsl-conditionals 2 | 3 | [![npm version](https://img.shields.io/npm/v/glsl-conditionals)](https://www.npmjs.com/package/glsl-conditionals) 4 | [![stability-frozen](https://img.shields.io/badge/stability-frozen-brightgreen.svg)](https://www.npmjs.com/package/glsl-conditionals) 5 | [![npm minzipped size](https://img.shields.io/bundlephobia/minzip/glsl-conditionals)](https://bundlephobia.com/package/glsl-conditionals) 6 | [![dependencies](https://img.shields.io/librariesio/release/npm/glsl-conditionals)](https://github.com/dmnsgn/glsl-conditionals/blob/main/package.json) 7 | [![types](https://img.shields.io/npm/types/glsl-conditionals)](https://github.com/microsoft/TypeScript) 8 | [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-fa6673.svg)](https://conventionalcommits.org) 9 | [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://github.com/prettier/prettier) 10 | [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://github.com/eslint/eslint) 11 | [![license](https://img.shields.io/github/license/dmnsgn/glsl-conditionals)](https://github.com/dmnsgn/glsl-conditionals/blob/main/LICENSE.md) 12 | 13 | [Daniel Holden's functions designed to avoid conditionals](https://theorangeduck.com/page/avoiding-shader-conditionals) in GLSL, available both as ES modules strings and as GLSL files for use with glslify. 14 | 15 | Disclaimer: you might not need this as it is highly hardware dependant and [branching might not equate more operations in modern GPUs](https://iquilezles.org/articles/gpuconditionals/). Also it can make your shader harder to visually parse. 16 | 17 | [![paypal](https://img.shields.io/badge/donate-paypal-informational?logo=paypal)](https://paypal.me/dmnsgn) 18 | [![coinbase](https://img.shields.io/badge/donate-coinbase-informational?logo=coinbase)](https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3) 19 | [![twitter](https://img.shields.io/twitter/follow/dmnsgn?style=social)](https://twitter.com/dmnsgn) 20 | 21 | ## Installation 22 | 23 | ```bash 24 | npm install glsl-conditionals 25 | ``` 26 | 27 | ## Usage 28 | 29 | ### ESM 30 | 31 | ```js 32 | import * as glslConditionals from "glsl-conditionals"; 33 | 34 | const shader = /* glsl */ ` 35 | // Comparisons 36 | ${glslConditionals.WHEN_EQ} 37 | ${glslConditionals.WHEN_NEQ} 38 | 39 | ${glslConditionals.WHEN_GT} 40 | ${glslConditionals.WHEN_LT} 41 | 42 | ${glslConditionals.WHEN_GE} 43 | ${glslConditionals.WHEN_LE} 44 | 45 | // Logical operators 46 | ${glslConditionals.WHEN_AND} 47 | ${glslConditionals.WHEN_OR} 48 | ${glslConditionals.WHEN_XOR} 49 | ${glslConditionals.WHEN_NOT} 50 | 51 | void main() { 52 | float x = 10.0; 53 | float y = 0.0; 54 | 55 | y += 5.0 * when_eq(x, 0.0); 56 | y += 5.0 * when_eq(x, 0.0); 57 | y += 5.0 * when_neq(x, 0.0); 58 | y += 5.0 * when_gt(x, 0.0); 59 | y += 5.0 * when_lt(x, 0.0); 60 | y += 5.0 * when_ge(x, 0.0); 61 | y += 5.0 * when_le(x, 0.0); 62 | y += 5.0 * when_and(x, 0.0); 63 | y += 5.0 * when_or(x, 0.0); 64 | y += 5.0 * when_xor(x, 0.0); 65 | y += 5.0 * when_not(x, 0.0); 66 | 67 | // ... 68 | } 69 | `; 70 | ``` 71 | 72 | ### glslify 73 | 74 | ```glsl 75 | // Comparisons 76 | #pragma glslify: when_eq = require(glsl-conditionals/when_eq) 77 | #pragma glslify: when_neq = require(glsl-conditionals/when_neq) 78 | 79 | #pragma glslify: when_gt = require(glsl-conditionals/when_gt) 80 | #pragma glslify: when_lt = require(glsl-conditionals/when_lt) 81 | 82 | #pragma glslify: when_ge = require(glsl-conditionals/when_ge) 83 | #pragma glslify: when_le = require(glsl-conditionals/when_le) 84 | 85 | // Logical operators 86 | #pragma glslify: when_and = require(glsl-conditionals/when_and) 87 | #pragma glslify: when_or = require(glsl-conditionals/when_or) 88 | #pragma glslify: when_xor = require(glsl-conditionals/when_xor) 89 | #pragma glslify: when_not = require(glsl-conditionals/when_not) 90 | 91 | void main() { 92 | float x = 10.0; 93 | float y = 0.0; 94 | 95 | y += 5.0 * when_eq(x, 0.0); 96 | y += 5.0 * when_eq(x, 0.0); 97 | y += 5.0 * when_neq(x, 0.0); 98 | y += 5.0 * when_gt(x, 0.0); 99 | y += 5.0 * when_lt(x, 0.0); 100 | y += 5.0 * when_ge(x, 0.0); 101 | y += 5.0 * when_le(x, 0.0); 102 | y += 5.0 * when_and(x, 0.0); 103 | y += 5.0 * when_or(x, 0.0); 104 | y += 5.0 * when_xor(x, 0.0); 105 | y += 5.0 * when_not(x, 0.0); 106 | 107 | // ... 108 | } 109 | ``` 110 | 111 | ## License 112 | 113 | MIT. See [license file](https://github.com/dmnsgn/glsl-conditionals/blob/main/LICENSE.md). 114 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | glsl-conditionals by Damien Seguin (https://github.com/dmnsgn) 9 | 10 | 29 | 33 | 34 | 35 |
36 |

glsl-conditionals

37 |
38 | 39 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | export { default as WHEN_AND } from "./when_and.glsl.js"; 2 | 3 | export { default as WHEN_EQ } from "./when_eq.glsl.js"; 4 | 5 | export { 6 | default as WHEN_GE, 7 | dependencies as WHEN_GE_DEPENDENCIES, 8 | } from "./when_ge.glsl.js"; 9 | 10 | export { default as WHEN_GT } from "./when_gt.glsl.js"; 11 | 12 | export { 13 | default as WHEN_LE, 14 | dependencies as WHEN_LE_DEPENDENCIES, 15 | } from "./when_le.glsl.js"; 16 | 17 | export { default as WHEN_LT } from "./when_lt.glsl.js"; 18 | 19 | export { default as WHEN_NEQ } from "./when_neq.glsl.js"; 20 | 21 | export { default as WHEN_NOT } from "./when_not.glsl.js"; 22 | 23 | export { default as WHEN_OR } from "./when_or.glsl.js"; 24 | 25 | export { default as WHEN_XOR } from "./when_xor.glsl.js"; 26 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "glsl-conditionals", 3 | "version": "2.0.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "glsl-conditionals", 9 | "version": "2.0.2", 10 | "funding": [ 11 | { 12 | "type": "individual", 13 | "url": "https://paypal.me/dmnsgn" 14 | }, 15 | { 16 | "type": "individual", 17 | "url": "https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3" 18 | } 19 | ], 20 | "license": "MIT", 21 | "devDependencies": { 22 | "glslify": "^7.1.1" 23 | }, 24 | "engines": { 25 | "node": ">=16.0.0", 26 | "npm": ">=7.0.0" 27 | } 28 | }, 29 | "node_modules/@choojs/findup": { 30 | "version": "0.2.1", 31 | "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", 32 | "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", 33 | "dev": true, 34 | "dependencies": { 35 | "commander": "^2.15.1" 36 | }, 37 | "bin": { 38 | "findup": "bin/findup.js" 39 | } 40 | }, 41 | "node_modules/acorn": { 42 | "version": "7.4.1", 43 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 44 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 45 | "dev": true, 46 | "bin": { 47 | "acorn": "bin/acorn" 48 | }, 49 | "engines": { 50 | "node": ">=0.4.0" 51 | } 52 | }, 53 | "node_modules/bl": { 54 | "version": "2.2.1", 55 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 56 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 57 | "dev": true, 58 | "dependencies": { 59 | "readable-stream": "^2.3.5", 60 | "safe-buffer": "^5.1.1" 61 | } 62 | }, 63 | "node_modules/buffer-from": { 64 | "version": "1.1.2", 65 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 66 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 67 | "dev": true 68 | }, 69 | "node_modules/commander": { 70 | "version": "2.20.3", 71 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 72 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 73 | "dev": true 74 | }, 75 | "node_modules/concat-stream": { 76 | "version": "1.6.2", 77 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 78 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 79 | "dev": true, 80 | "engines": [ 81 | "node >= 0.8" 82 | ], 83 | "dependencies": { 84 | "buffer-from": "^1.0.0", 85 | "inherits": "^2.0.3", 86 | "readable-stream": "^2.2.2", 87 | "typedarray": "^0.0.6" 88 | } 89 | }, 90 | "node_modules/core-util-is": { 91 | "version": "1.0.3", 92 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 93 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 94 | "dev": true 95 | }, 96 | "node_modules/deep-is": { 97 | "version": "0.1.4", 98 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 99 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 100 | "dev": true 101 | }, 102 | "node_modules/duplexify": { 103 | "version": "3.7.1", 104 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", 105 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", 106 | "dev": true, 107 | "dependencies": { 108 | "end-of-stream": "^1.0.0", 109 | "inherits": "^2.0.1", 110 | "readable-stream": "^2.0.0", 111 | "stream-shift": "^1.0.0" 112 | } 113 | }, 114 | "node_modules/end-of-stream": { 115 | "version": "1.4.4", 116 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 117 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 118 | "dev": true, 119 | "dependencies": { 120 | "once": "^1.4.0" 121 | } 122 | }, 123 | "node_modules/escodegen": { 124 | "version": "1.14.3", 125 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", 126 | "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", 127 | "dev": true, 128 | "dependencies": { 129 | "esprima": "^4.0.1", 130 | "estraverse": "^4.2.0", 131 | "esutils": "^2.0.2", 132 | "optionator": "^0.8.1" 133 | }, 134 | "bin": { 135 | "escodegen": "bin/escodegen.js", 136 | "esgenerate": "bin/esgenerate.js" 137 | }, 138 | "engines": { 139 | "node": ">=4.0" 140 | }, 141 | "optionalDependencies": { 142 | "source-map": "~0.6.1" 143 | } 144 | }, 145 | "node_modules/esprima": { 146 | "version": "4.0.1", 147 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 148 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 149 | "dev": true, 150 | "bin": { 151 | "esparse": "bin/esparse.js", 152 | "esvalidate": "bin/esvalidate.js" 153 | }, 154 | "engines": { 155 | "node": ">=4" 156 | } 157 | }, 158 | "node_modules/estraverse": { 159 | "version": "4.3.0", 160 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 161 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 162 | "dev": true, 163 | "engines": { 164 | "node": ">=4.0" 165 | } 166 | }, 167 | "node_modules/esutils": { 168 | "version": "2.0.3", 169 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 170 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 171 | "dev": true, 172 | "engines": { 173 | "node": ">=0.10.0" 174 | } 175 | }, 176 | "node_modules/events": { 177 | "version": "3.3.0", 178 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 179 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 180 | "dev": true, 181 | "engines": { 182 | "node": ">=0.8.x" 183 | } 184 | }, 185 | "node_modules/falafel": { 186 | "version": "2.2.5", 187 | "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", 188 | "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", 189 | "dev": true, 190 | "dependencies": { 191 | "acorn": "^7.1.1", 192 | "isarray": "^2.0.1" 193 | }, 194 | "engines": { 195 | "node": ">=0.4.0" 196 | } 197 | }, 198 | "node_modules/fast-levenshtein": { 199 | "version": "2.0.6", 200 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 201 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 202 | "dev": true 203 | }, 204 | "node_modules/from2": { 205 | "version": "2.3.0", 206 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 207 | "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", 208 | "dev": true, 209 | "dependencies": { 210 | "inherits": "^2.0.1", 211 | "readable-stream": "^2.0.0" 212 | } 213 | }, 214 | "node_modules/function-bind": { 215 | "version": "1.1.1", 216 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 217 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 218 | "dev": true 219 | }, 220 | "node_modules/glsl-inject-defines": { 221 | "version": "1.0.3", 222 | "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", 223 | "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", 224 | "dev": true, 225 | "dependencies": { 226 | "glsl-token-inject-block": "^1.0.0", 227 | "glsl-token-string": "^1.0.1", 228 | "glsl-tokenizer": "^2.0.2" 229 | } 230 | }, 231 | "node_modules/glsl-resolve": { 232 | "version": "0.0.1", 233 | "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", 234 | "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", 235 | "dev": true, 236 | "dependencies": { 237 | "resolve": "^0.6.1", 238 | "xtend": "^2.1.2" 239 | } 240 | }, 241 | "node_modules/glsl-resolve/node_modules/resolve": { 242 | "version": "0.6.3", 243 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", 244 | "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", 245 | "dev": true 246 | }, 247 | "node_modules/glsl-resolve/node_modules/xtend": { 248 | "version": "2.2.0", 249 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", 250 | "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", 251 | "dev": true, 252 | "engines": { 253 | "node": ">=0.4" 254 | } 255 | }, 256 | "node_modules/glsl-token-assignments": { 257 | "version": "2.0.2", 258 | "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", 259 | "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", 260 | "dev": true 261 | }, 262 | "node_modules/glsl-token-defines": { 263 | "version": "1.0.0", 264 | "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", 265 | "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", 266 | "dev": true, 267 | "dependencies": { 268 | "glsl-tokenizer": "^2.0.0" 269 | } 270 | }, 271 | "node_modules/glsl-token-depth": { 272 | "version": "1.1.2", 273 | "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", 274 | "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", 275 | "dev": true 276 | }, 277 | "node_modules/glsl-token-descope": { 278 | "version": "1.0.2", 279 | "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", 280 | "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", 281 | "dev": true, 282 | "dependencies": { 283 | "glsl-token-assignments": "^2.0.0", 284 | "glsl-token-depth": "^1.1.0", 285 | "glsl-token-properties": "^1.0.0", 286 | "glsl-token-scope": "^1.1.0" 287 | } 288 | }, 289 | "node_modules/glsl-token-inject-block": { 290 | "version": "1.1.0", 291 | "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", 292 | "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", 293 | "dev": true 294 | }, 295 | "node_modules/glsl-token-properties": { 296 | "version": "1.0.1", 297 | "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", 298 | "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", 299 | "dev": true 300 | }, 301 | "node_modules/glsl-token-scope": { 302 | "version": "1.1.2", 303 | "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", 304 | "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", 305 | "dev": true 306 | }, 307 | "node_modules/glsl-token-string": { 308 | "version": "1.0.1", 309 | "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", 310 | "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", 311 | "dev": true 312 | }, 313 | "node_modules/glsl-token-whitespace-trim": { 314 | "version": "1.0.0", 315 | "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", 316 | "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", 317 | "dev": true 318 | }, 319 | "node_modules/glsl-tokenizer": { 320 | "version": "2.1.5", 321 | "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", 322 | "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", 323 | "dev": true, 324 | "dependencies": { 325 | "through2": "^0.6.3" 326 | } 327 | }, 328 | "node_modules/glsl-tokenizer/node_modules/isarray": { 329 | "version": "0.0.1", 330 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 331 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 332 | "dev": true 333 | }, 334 | "node_modules/glsl-tokenizer/node_modules/readable-stream": { 335 | "version": "1.0.34", 336 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 337 | "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", 338 | "dev": true, 339 | "dependencies": { 340 | "core-util-is": "~1.0.0", 341 | "inherits": "~2.0.1", 342 | "isarray": "0.0.1", 343 | "string_decoder": "~0.10.x" 344 | } 345 | }, 346 | "node_modules/glsl-tokenizer/node_modules/string_decoder": { 347 | "version": "0.10.31", 348 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 349 | "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", 350 | "dev": true 351 | }, 352 | "node_modules/glsl-tokenizer/node_modules/through2": { 353 | "version": "0.6.5", 354 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 355 | "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", 356 | "dev": true, 357 | "dependencies": { 358 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 359 | "xtend": ">=4.0.0 <4.1.0-0" 360 | } 361 | }, 362 | "node_modules/glslify": { 363 | "version": "7.1.1", 364 | "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", 365 | "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", 366 | "dev": true, 367 | "dependencies": { 368 | "bl": "^2.2.1", 369 | "concat-stream": "^1.5.2", 370 | "duplexify": "^3.4.5", 371 | "falafel": "^2.1.0", 372 | "from2": "^2.3.0", 373 | "glsl-resolve": "0.0.1", 374 | "glsl-token-whitespace-trim": "^1.0.0", 375 | "glslify-bundle": "^5.0.0", 376 | "glslify-deps": "^1.2.5", 377 | "minimist": "^1.2.5", 378 | "resolve": "^1.1.5", 379 | "stack-trace": "0.0.9", 380 | "static-eval": "^2.0.5", 381 | "through2": "^2.0.1", 382 | "xtend": "^4.0.0" 383 | }, 384 | "bin": { 385 | "glslify": "bin.js" 386 | } 387 | }, 388 | "node_modules/glslify-bundle": { 389 | "version": "5.1.1", 390 | "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", 391 | "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", 392 | "dev": true, 393 | "dependencies": { 394 | "glsl-inject-defines": "^1.0.1", 395 | "glsl-token-defines": "^1.0.0", 396 | "glsl-token-depth": "^1.1.1", 397 | "glsl-token-descope": "^1.0.2", 398 | "glsl-token-scope": "^1.1.1", 399 | "glsl-token-string": "^1.0.1", 400 | "glsl-token-whitespace-trim": "^1.0.0", 401 | "glsl-tokenizer": "^2.0.2", 402 | "murmurhash-js": "^1.0.0", 403 | "shallow-copy": "0.0.1" 404 | } 405 | }, 406 | "node_modules/glslify-deps": { 407 | "version": "1.3.2", 408 | "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", 409 | "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", 410 | "dev": true, 411 | "dependencies": { 412 | "@choojs/findup": "^0.2.0", 413 | "events": "^3.2.0", 414 | "glsl-resolve": "0.0.1", 415 | "glsl-tokenizer": "^2.0.0", 416 | "graceful-fs": "^4.1.2", 417 | "inherits": "^2.0.1", 418 | "map-limit": "0.0.1", 419 | "resolve": "^1.0.0" 420 | } 421 | }, 422 | "node_modules/graceful-fs": { 423 | "version": "4.2.10", 424 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 425 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 426 | "dev": true 427 | }, 428 | "node_modules/has": { 429 | "version": "1.0.3", 430 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 431 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 432 | "dev": true, 433 | "dependencies": { 434 | "function-bind": "^1.1.1" 435 | }, 436 | "engines": { 437 | "node": ">= 0.4.0" 438 | } 439 | }, 440 | "node_modules/inherits": { 441 | "version": "2.0.4", 442 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 443 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 444 | "dev": true 445 | }, 446 | "node_modules/is-core-module": { 447 | "version": "2.9.0", 448 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 449 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 450 | "dev": true, 451 | "dependencies": { 452 | "has": "^1.0.3" 453 | }, 454 | "funding": { 455 | "url": "https://github.com/sponsors/ljharb" 456 | } 457 | }, 458 | "node_modules/isarray": { 459 | "version": "2.0.5", 460 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 461 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 462 | "dev": true 463 | }, 464 | "node_modules/levn": { 465 | "version": "0.3.0", 466 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 467 | "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", 468 | "dev": true, 469 | "dependencies": { 470 | "prelude-ls": "~1.1.2", 471 | "type-check": "~0.3.2" 472 | }, 473 | "engines": { 474 | "node": ">= 0.8.0" 475 | } 476 | }, 477 | "node_modules/map-limit": { 478 | "version": "0.0.1", 479 | "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 480 | "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", 481 | "dev": true, 482 | "dependencies": { 483 | "once": "~1.3.0" 484 | } 485 | }, 486 | "node_modules/map-limit/node_modules/once": { 487 | "version": "1.3.3", 488 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 489 | "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", 490 | "dev": true, 491 | "dependencies": { 492 | "wrappy": "1" 493 | } 494 | }, 495 | "node_modules/minimist": { 496 | "version": "1.2.6", 497 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 498 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 499 | "dev": true 500 | }, 501 | "node_modules/murmurhash-js": { 502 | "version": "1.0.0", 503 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 504 | "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", 505 | "dev": true 506 | }, 507 | "node_modules/once": { 508 | "version": "1.4.0", 509 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 510 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 511 | "dev": true, 512 | "dependencies": { 513 | "wrappy": "1" 514 | } 515 | }, 516 | "node_modules/optionator": { 517 | "version": "0.8.3", 518 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 519 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 520 | "dev": true, 521 | "dependencies": { 522 | "deep-is": "~0.1.3", 523 | "fast-levenshtein": "~2.0.6", 524 | "levn": "~0.3.0", 525 | "prelude-ls": "~1.1.2", 526 | "type-check": "~0.3.2", 527 | "word-wrap": "~1.2.3" 528 | }, 529 | "engines": { 530 | "node": ">= 0.8.0" 531 | } 532 | }, 533 | "node_modules/path-parse": { 534 | "version": "1.0.7", 535 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 536 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 537 | "dev": true 538 | }, 539 | "node_modules/prelude-ls": { 540 | "version": "1.1.2", 541 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 542 | "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", 543 | "dev": true, 544 | "engines": { 545 | "node": ">= 0.8.0" 546 | } 547 | }, 548 | "node_modules/process-nextick-args": { 549 | "version": "2.0.1", 550 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 551 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 552 | "dev": true 553 | }, 554 | "node_modules/readable-stream": { 555 | "version": "2.3.7", 556 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 557 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 558 | "dev": true, 559 | "dependencies": { 560 | "core-util-is": "~1.0.0", 561 | "inherits": "~2.0.3", 562 | "isarray": "~1.0.0", 563 | "process-nextick-args": "~2.0.0", 564 | "safe-buffer": "~5.1.1", 565 | "string_decoder": "~1.1.1", 566 | "util-deprecate": "~1.0.1" 567 | } 568 | }, 569 | "node_modules/readable-stream/node_modules/isarray": { 570 | "version": "1.0.0", 571 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 572 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 573 | "dev": true 574 | }, 575 | "node_modules/readable-stream/node_modules/safe-buffer": { 576 | "version": "5.1.2", 577 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 578 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 579 | "dev": true 580 | }, 581 | "node_modules/resolve": { 582 | "version": "1.22.0", 583 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 584 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 585 | "dev": true, 586 | "dependencies": { 587 | "is-core-module": "^2.8.1", 588 | "path-parse": "^1.0.7", 589 | "supports-preserve-symlinks-flag": "^1.0.0" 590 | }, 591 | "bin": { 592 | "resolve": "bin/resolve" 593 | }, 594 | "funding": { 595 | "url": "https://github.com/sponsors/ljharb" 596 | } 597 | }, 598 | "node_modules/safe-buffer": { 599 | "version": "5.2.1", 600 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 601 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 602 | "dev": true, 603 | "funding": [ 604 | { 605 | "type": "github", 606 | "url": "https://github.com/sponsors/feross" 607 | }, 608 | { 609 | "type": "patreon", 610 | "url": "https://www.patreon.com/feross" 611 | }, 612 | { 613 | "type": "consulting", 614 | "url": "https://feross.org/support" 615 | } 616 | ] 617 | }, 618 | "node_modules/shallow-copy": { 619 | "version": "0.0.1", 620 | "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", 621 | "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", 622 | "dev": true 623 | }, 624 | "node_modules/source-map": { 625 | "version": "0.6.1", 626 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 627 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 628 | "dev": true, 629 | "optional": true, 630 | "engines": { 631 | "node": ">=0.10.0" 632 | } 633 | }, 634 | "node_modules/stack-trace": { 635 | "version": "0.0.9", 636 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", 637 | "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", 638 | "dev": true, 639 | "engines": { 640 | "node": "*" 641 | } 642 | }, 643 | "node_modules/static-eval": { 644 | "version": "2.1.0", 645 | "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", 646 | "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", 647 | "dev": true, 648 | "dependencies": { 649 | "escodegen": "^1.11.1" 650 | } 651 | }, 652 | "node_modules/stream-shift": { 653 | "version": "1.0.1", 654 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 655 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", 656 | "dev": true 657 | }, 658 | "node_modules/string_decoder": { 659 | "version": "1.1.1", 660 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 661 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 662 | "dev": true, 663 | "dependencies": { 664 | "safe-buffer": "~5.1.0" 665 | } 666 | }, 667 | "node_modules/string_decoder/node_modules/safe-buffer": { 668 | "version": "5.1.2", 669 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 670 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 671 | "dev": true 672 | }, 673 | "node_modules/supports-preserve-symlinks-flag": { 674 | "version": "1.0.0", 675 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 676 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 677 | "dev": true, 678 | "engines": { 679 | "node": ">= 0.4" 680 | }, 681 | "funding": { 682 | "url": "https://github.com/sponsors/ljharb" 683 | } 684 | }, 685 | "node_modules/through2": { 686 | "version": "2.0.5", 687 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 688 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 689 | "dev": true, 690 | "dependencies": { 691 | "readable-stream": "~2.3.6", 692 | "xtend": "~4.0.1" 693 | } 694 | }, 695 | "node_modules/type-check": { 696 | "version": "0.3.2", 697 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 698 | "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", 699 | "dev": true, 700 | "dependencies": { 701 | "prelude-ls": "~1.1.2" 702 | }, 703 | "engines": { 704 | "node": ">= 0.8.0" 705 | } 706 | }, 707 | "node_modules/typedarray": { 708 | "version": "0.0.6", 709 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 710 | "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", 711 | "dev": true 712 | }, 713 | "node_modules/util-deprecate": { 714 | "version": "1.0.2", 715 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 716 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 717 | "dev": true 718 | }, 719 | "node_modules/word-wrap": { 720 | "version": "1.2.3", 721 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 722 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 723 | "dev": true, 724 | "engines": { 725 | "node": ">=0.10.0" 726 | } 727 | }, 728 | "node_modules/wrappy": { 729 | "version": "1.0.2", 730 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 731 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 732 | "dev": true 733 | }, 734 | "node_modules/xtend": { 735 | "version": "4.0.2", 736 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 737 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 738 | "dev": true, 739 | "engines": { 740 | "node": ">=0.4" 741 | } 742 | } 743 | }, 744 | "dependencies": { 745 | "@choojs/findup": { 746 | "version": "0.2.1", 747 | "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", 748 | "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", 749 | "dev": true, 750 | "requires": { 751 | "commander": "^2.15.1" 752 | } 753 | }, 754 | "acorn": { 755 | "version": "7.4.1", 756 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 757 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 758 | "dev": true 759 | }, 760 | "bl": { 761 | "version": "2.2.1", 762 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 763 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 764 | "dev": true, 765 | "requires": { 766 | "readable-stream": "^2.3.5", 767 | "safe-buffer": "^5.1.1" 768 | } 769 | }, 770 | "buffer-from": { 771 | "version": "1.1.2", 772 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 773 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 774 | "dev": true 775 | }, 776 | "commander": { 777 | "version": "2.20.3", 778 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 779 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 780 | "dev": true 781 | }, 782 | "concat-stream": { 783 | "version": "1.6.2", 784 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 785 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 786 | "dev": true, 787 | "requires": { 788 | "buffer-from": "^1.0.0", 789 | "inherits": "^2.0.3", 790 | "readable-stream": "^2.2.2", 791 | "typedarray": "^0.0.6" 792 | } 793 | }, 794 | "core-util-is": { 795 | "version": "1.0.3", 796 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 797 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 798 | "dev": true 799 | }, 800 | "deep-is": { 801 | "version": "0.1.4", 802 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 803 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 804 | "dev": true 805 | }, 806 | "duplexify": { 807 | "version": "3.7.1", 808 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", 809 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", 810 | "dev": true, 811 | "requires": { 812 | "end-of-stream": "^1.0.0", 813 | "inherits": "^2.0.1", 814 | "readable-stream": "^2.0.0", 815 | "stream-shift": "^1.0.0" 816 | } 817 | }, 818 | "end-of-stream": { 819 | "version": "1.4.4", 820 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 821 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 822 | "dev": true, 823 | "requires": { 824 | "once": "^1.4.0" 825 | } 826 | }, 827 | "escodegen": { 828 | "version": "1.14.3", 829 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", 830 | "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", 831 | "dev": true, 832 | "requires": { 833 | "esprima": "^4.0.1", 834 | "estraverse": "^4.2.0", 835 | "esutils": "^2.0.2", 836 | "optionator": "^0.8.1", 837 | "source-map": "~0.6.1" 838 | } 839 | }, 840 | "esprima": { 841 | "version": "4.0.1", 842 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 843 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 844 | "dev": true 845 | }, 846 | "estraverse": { 847 | "version": "4.3.0", 848 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 849 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 850 | "dev": true 851 | }, 852 | "esutils": { 853 | "version": "2.0.3", 854 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 855 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 856 | "dev": true 857 | }, 858 | "events": { 859 | "version": "3.3.0", 860 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 861 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 862 | "dev": true 863 | }, 864 | "falafel": { 865 | "version": "2.2.5", 866 | "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", 867 | "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", 868 | "dev": true, 869 | "requires": { 870 | "acorn": "^7.1.1", 871 | "isarray": "^2.0.1" 872 | } 873 | }, 874 | "fast-levenshtein": { 875 | "version": "2.0.6", 876 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 877 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 878 | "dev": true 879 | }, 880 | "from2": { 881 | "version": "2.3.0", 882 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 883 | "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", 884 | "dev": true, 885 | "requires": { 886 | "inherits": "^2.0.1", 887 | "readable-stream": "^2.0.0" 888 | } 889 | }, 890 | "function-bind": { 891 | "version": "1.1.1", 892 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 893 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 894 | "dev": true 895 | }, 896 | "glsl-inject-defines": { 897 | "version": "1.0.3", 898 | "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", 899 | "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", 900 | "dev": true, 901 | "requires": { 902 | "glsl-token-inject-block": "^1.0.0", 903 | "glsl-token-string": "^1.0.1", 904 | "glsl-tokenizer": "^2.0.2" 905 | } 906 | }, 907 | "glsl-resolve": { 908 | "version": "0.0.1", 909 | "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", 910 | "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", 911 | "dev": true, 912 | "requires": { 913 | "resolve": "^0.6.1", 914 | "xtend": "^2.1.2" 915 | }, 916 | "dependencies": { 917 | "resolve": { 918 | "version": "0.6.3", 919 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", 920 | "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", 921 | "dev": true 922 | }, 923 | "xtend": { 924 | "version": "2.2.0", 925 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", 926 | "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", 927 | "dev": true 928 | } 929 | } 930 | }, 931 | "glsl-token-assignments": { 932 | "version": "2.0.2", 933 | "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", 934 | "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", 935 | "dev": true 936 | }, 937 | "glsl-token-defines": { 938 | "version": "1.0.0", 939 | "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", 940 | "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", 941 | "dev": true, 942 | "requires": { 943 | "glsl-tokenizer": "^2.0.0" 944 | } 945 | }, 946 | "glsl-token-depth": { 947 | "version": "1.1.2", 948 | "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", 949 | "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", 950 | "dev": true 951 | }, 952 | "glsl-token-descope": { 953 | "version": "1.0.2", 954 | "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", 955 | "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", 956 | "dev": true, 957 | "requires": { 958 | "glsl-token-assignments": "^2.0.0", 959 | "glsl-token-depth": "^1.1.0", 960 | "glsl-token-properties": "^1.0.0", 961 | "glsl-token-scope": "^1.1.0" 962 | } 963 | }, 964 | "glsl-token-inject-block": { 965 | "version": "1.1.0", 966 | "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", 967 | "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", 968 | "dev": true 969 | }, 970 | "glsl-token-properties": { 971 | "version": "1.0.1", 972 | "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", 973 | "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", 974 | "dev": true 975 | }, 976 | "glsl-token-scope": { 977 | "version": "1.1.2", 978 | "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", 979 | "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", 980 | "dev": true 981 | }, 982 | "glsl-token-string": { 983 | "version": "1.0.1", 984 | "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", 985 | "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", 986 | "dev": true 987 | }, 988 | "glsl-token-whitespace-trim": { 989 | "version": "1.0.0", 990 | "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", 991 | "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", 992 | "dev": true 993 | }, 994 | "glsl-tokenizer": { 995 | "version": "2.1.5", 996 | "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", 997 | "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", 998 | "dev": true, 999 | "requires": { 1000 | "through2": "^0.6.3" 1001 | }, 1002 | "dependencies": { 1003 | "isarray": { 1004 | "version": "0.0.1", 1005 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1006 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 1007 | "dev": true 1008 | }, 1009 | "readable-stream": { 1010 | "version": "1.0.34", 1011 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1012 | "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", 1013 | "dev": true, 1014 | "requires": { 1015 | "core-util-is": "~1.0.0", 1016 | "inherits": "~2.0.1", 1017 | "isarray": "0.0.1", 1018 | "string_decoder": "~0.10.x" 1019 | } 1020 | }, 1021 | "string_decoder": { 1022 | "version": "0.10.31", 1023 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1024 | "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", 1025 | "dev": true 1026 | }, 1027 | "through2": { 1028 | "version": "0.6.5", 1029 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 1030 | "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", 1031 | "dev": true, 1032 | "requires": { 1033 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 1034 | "xtend": ">=4.0.0 <4.1.0-0" 1035 | } 1036 | } 1037 | } 1038 | }, 1039 | "glslify": { 1040 | "version": "7.1.1", 1041 | "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", 1042 | "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", 1043 | "dev": true, 1044 | "requires": { 1045 | "bl": "^2.2.1", 1046 | "concat-stream": "^1.5.2", 1047 | "duplexify": "^3.4.5", 1048 | "falafel": "^2.1.0", 1049 | "from2": "^2.3.0", 1050 | "glsl-resolve": "0.0.1", 1051 | "glsl-token-whitespace-trim": "^1.0.0", 1052 | "glslify-bundle": "^5.0.0", 1053 | "glslify-deps": "^1.2.5", 1054 | "minimist": "^1.2.5", 1055 | "resolve": "^1.1.5", 1056 | "stack-trace": "0.0.9", 1057 | "static-eval": "^2.0.5", 1058 | "through2": "^2.0.1", 1059 | "xtend": "^4.0.0" 1060 | } 1061 | }, 1062 | "glslify-bundle": { 1063 | "version": "5.1.1", 1064 | "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", 1065 | "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", 1066 | "dev": true, 1067 | "requires": { 1068 | "glsl-inject-defines": "^1.0.1", 1069 | "glsl-token-defines": "^1.0.0", 1070 | "glsl-token-depth": "^1.1.1", 1071 | "glsl-token-descope": "^1.0.2", 1072 | "glsl-token-scope": "^1.1.1", 1073 | "glsl-token-string": "^1.0.1", 1074 | "glsl-token-whitespace-trim": "^1.0.0", 1075 | "glsl-tokenizer": "^2.0.2", 1076 | "murmurhash-js": "^1.0.0", 1077 | "shallow-copy": "0.0.1" 1078 | } 1079 | }, 1080 | "glslify-deps": { 1081 | "version": "1.3.2", 1082 | "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", 1083 | "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", 1084 | "dev": true, 1085 | "requires": { 1086 | "@choojs/findup": "^0.2.0", 1087 | "events": "^3.2.0", 1088 | "glsl-resolve": "0.0.1", 1089 | "glsl-tokenizer": "^2.0.0", 1090 | "graceful-fs": "^4.1.2", 1091 | "inherits": "^2.0.1", 1092 | "map-limit": "0.0.1", 1093 | "resolve": "^1.0.0" 1094 | } 1095 | }, 1096 | "graceful-fs": { 1097 | "version": "4.2.10", 1098 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1099 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 1100 | "dev": true 1101 | }, 1102 | "has": { 1103 | "version": "1.0.3", 1104 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1105 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1106 | "dev": true, 1107 | "requires": { 1108 | "function-bind": "^1.1.1" 1109 | } 1110 | }, 1111 | "inherits": { 1112 | "version": "2.0.4", 1113 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1114 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1115 | "dev": true 1116 | }, 1117 | "is-core-module": { 1118 | "version": "2.9.0", 1119 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 1120 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 1121 | "dev": true, 1122 | "requires": { 1123 | "has": "^1.0.3" 1124 | } 1125 | }, 1126 | "isarray": { 1127 | "version": "2.0.5", 1128 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 1129 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 1130 | "dev": true 1131 | }, 1132 | "levn": { 1133 | "version": "0.3.0", 1134 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1135 | "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", 1136 | "dev": true, 1137 | "requires": { 1138 | "prelude-ls": "~1.1.2", 1139 | "type-check": "~0.3.2" 1140 | } 1141 | }, 1142 | "map-limit": { 1143 | "version": "0.0.1", 1144 | "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 1145 | "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", 1146 | "dev": true, 1147 | "requires": { 1148 | "once": "~1.3.0" 1149 | }, 1150 | "dependencies": { 1151 | "once": { 1152 | "version": "1.3.3", 1153 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 1154 | "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", 1155 | "dev": true, 1156 | "requires": { 1157 | "wrappy": "1" 1158 | } 1159 | } 1160 | } 1161 | }, 1162 | "minimist": { 1163 | "version": "1.2.6", 1164 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1165 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1166 | "dev": true 1167 | }, 1168 | "murmurhash-js": { 1169 | "version": "1.0.0", 1170 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 1171 | "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", 1172 | "dev": true 1173 | }, 1174 | "once": { 1175 | "version": "1.4.0", 1176 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1177 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1178 | "dev": true, 1179 | "requires": { 1180 | "wrappy": "1" 1181 | } 1182 | }, 1183 | "optionator": { 1184 | "version": "0.8.3", 1185 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1186 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1187 | "dev": true, 1188 | "requires": { 1189 | "deep-is": "~0.1.3", 1190 | "fast-levenshtein": "~2.0.6", 1191 | "levn": "~0.3.0", 1192 | "prelude-ls": "~1.1.2", 1193 | "type-check": "~0.3.2", 1194 | "word-wrap": "~1.2.3" 1195 | } 1196 | }, 1197 | "path-parse": { 1198 | "version": "1.0.7", 1199 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1200 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1201 | "dev": true 1202 | }, 1203 | "prelude-ls": { 1204 | "version": "1.1.2", 1205 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1206 | "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", 1207 | "dev": true 1208 | }, 1209 | "process-nextick-args": { 1210 | "version": "2.0.1", 1211 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1212 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1213 | "dev": true 1214 | }, 1215 | "readable-stream": { 1216 | "version": "2.3.7", 1217 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1218 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1219 | "dev": true, 1220 | "requires": { 1221 | "core-util-is": "~1.0.0", 1222 | "inherits": "~2.0.3", 1223 | "isarray": "~1.0.0", 1224 | "process-nextick-args": "~2.0.0", 1225 | "safe-buffer": "~5.1.1", 1226 | "string_decoder": "~1.1.1", 1227 | "util-deprecate": "~1.0.1" 1228 | }, 1229 | "dependencies": { 1230 | "isarray": { 1231 | "version": "1.0.0", 1232 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1233 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 1234 | "dev": true 1235 | }, 1236 | "safe-buffer": { 1237 | "version": "5.1.2", 1238 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1239 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1240 | "dev": true 1241 | } 1242 | } 1243 | }, 1244 | "resolve": { 1245 | "version": "1.22.0", 1246 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1247 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1248 | "dev": true, 1249 | "requires": { 1250 | "is-core-module": "^2.8.1", 1251 | "path-parse": "^1.0.7", 1252 | "supports-preserve-symlinks-flag": "^1.0.0" 1253 | } 1254 | }, 1255 | "safe-buffer": { 1256 | "version": "5.2.1", 1257 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1258 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1259 | "dev": true 1260 | }, 1261 | "shallow-copy": { 1262 | "version": "0.0.1", 1263 | "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", 1264 | "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", 1265 | "dev": true 1266 | }, 1267 | "source-map": { 1268 | "version": "0.6.1", 1269 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1270 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1271 | "dev": true, 1272 | "optional": true 1273 | }, 1274 | "stack-trace": { 1275 | "version": "0.0.9", 1276 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", 1277 | "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", 1278 | "dev": true 1279 | }, 1280 | "static-eval": { 1281 | "version": "2.1.0", 1282 | "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", 1283 | "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", 1284 | "dev": true, 1285 | "requires": { 1286 | "escodegen": "^1.11.1" 1287 | } 1288 | }, 1289 | "stream-shift": { 1290 | "version": "1.0.1", 1291 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 1292 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", 1293 | "dev": true 1294 | }, 1295 | "string_decoder": { 1296 | "version": "1.1.1", 1297 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1298 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1299 | "dev": true, 1300 | "requires": { 1301 | "safe-buffer": "~5.1.0" 1302 | }, 1303 | "dependencies": { 1304 | "safe-buffer": { 1305 | "version": "5.1.2", 1306 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1307 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1308 | "dev": true 1309 | } 1310 | } 1311 | }, 1312 | "supports-preserve-symlinks-flag": { 1313 | "version": "1.0.0", 1314 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1315 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1316 | "dev": true 1317 | }, 1318 | "through2": { 1319 | "version": "2.0.5", 1320 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1321 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1322 | "dev": true, 1323 | "requires": { 1324 | "readable-stream": "~2.3.6", 1325 | "xtend": "~4.0.1" 1326 | } 1327 | }, 1328 | "type-check": { 1329 | "version": "0.3.2", 1330 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1331 | "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", 1332 | "dev": true, 1333 | "requires": { 1334 | "prelude-ls": "~1.1.2" 1335 | } 1336 | }, 1337 | "typedarray": { 1338 | "version": "0.0.6", 1339 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1340 | "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", 1341 | "dev": true 1342 | }, 1343 | "util-deprecate": { 1344 | "version": "1.0.2", 1345 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1346 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1347 | "dev": true 1348 | }, 1349 | "word-wrap": { 1350 | "version": "1.2.3", 1351 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1352 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1353 | "dev": true 1354 | }, 1355 | "wrappy": { 1356 | "version": "1.0.2", 1357 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1358 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1359 | "dev": true 1360 | }, 1361 | "xtend": { 1362 | "version": "4.0.2", 1363 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1364 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1365 | "dev": true 1366 | } 1367 | } 1368 | } 1369 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "glsl-conditionals", 3 | "version": "2.0.2", 4 | "description": "Daniel Holden's functions designed to avoid conditionals in GLSL, available both as ES modules strings and as GLSL files for use with glslify.", 5 | "keywords": [ 6 | "glsl", 7 | "conditionals", 8 | "glslify", 9 | "webgl", 10 | "shader" 11 | ], 12 | "homepage": "https://github.com/dmnsgn/glsl-conditionals", 13 | "bugs": "https://github.com/dmnsgn/glsl-conditionals/issues", 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/dmnsgn/glsl-conditionals.git" 17 | }, 18 | "funding": [ 19 | { 20 | "type": "individual", 21 | "url": "https://paypal.me/dmnsgn" 22 | }, 23 | { 24 | "type": "individual", 25 | "url": "https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3" 26 | } 27 | ], 28 | "license": "MIT", 29 | "author": "Damien Seguin (https://github.com/dmnsgn)", 30 | "sideEffects": false, 31 | "type": "module", 32 | "exports": { 33 | ".": { 34 | "types": "./types/index.d.ts", 35 | "default": "./index.js" 36 | } 37 | }, 38 | "main": "index.js", 39 | "types": "types/index.d.ts", 40 | "scripts": { 41 | "test": "glslify test/index.glsl" 42 | }, 43 | "devDependencies": { 44 | "glslify": "^7.1.1" 45 | }, 46 | "engines": { 47 | "node": ">=16.0.0", 48 | "npm": ">=7.0.0" 49 | }, 50 | "snowdev": { 51 | "dependencies": [] 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /test/index.glsl: -------------------------------------------------------------------------------- 1 | // Comparisons 2 | #pragma glslify: when_eq = require(../when_eq) 3 | #pragma glslify: when_neq = require(../when_neq) 4 | 5 | #pragma glslify: when_gt = require(../when_gt) 6 | #pragma glslify: when_lt = require(../when_lt) 7 | 8 | #pragma glslify: when_ge = require(../when_ge) 9 | #pragma glslify: when_le = require(../when_le) 10 | 11 | // Logical operators 12 | #pragma glslify: when_and = require(../when_and) 13 | #pragma glslify: when_or = require(../when_or) 14 | #pragma glslify: when_xor = require(../when_xor) 15 | #pragma glslify: when_not = require(../when_not) 16 | 17 | void main() { 18 | float x = 10.0; 19 | float y = 0.0; 20 | 21 | y += 5.0 * when_eq(x, 0.0); 22 | y += 5.0 * when_eq(x, 0.0); 23 | y += 5.0 * when_neq(x, 0.0); 24 | y += 5.0 * when_gt(x, 0.0); 25 | y += 5.0 * when_lt(x, 0.0); 26 | y += 5.0 * when_ge(x, 0.0); 27 | y += 5.0 * when_le(x, 0.0); 28 | y += 5.0 * when_and(x, 0.0); 29 | y += 5.0 * when_or(x, 0.0); 30 | y += 5.0 * when_xor(x, 0.0); 31 | y += 5.0 * when_not(x, 0.0); 32 | 33 | // ... 34 | } 35 | -------------------------------------------------------------------------------- /when_and.glsl: -------------------------------------------------------------------------------- 1 | float when_and(float a, float b) { 2 | return a * b; 3 | } 4 | 5 | vec2 when_and(vec2 a, vec2 b) { 6 | return a * b; 7 | } 8 | 9 | vec3 when_and(vec3 a, vec3 b) { 10 | return a * b; 11 | } 12 | 13 | vec4 when_and(vec4 a, vec4 b) { 14 | return a * b; 15 | } 16 | 17 | #pragma glslify: export(when_and) 18 | -------------------------------------------------------------------------------- /when_and.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_and(float a, float b) { 2 | return a * b; 3 | } 4 | 5 | vec2 when_and(vec2 a, vec2 b) { 6 | return a * b; 7 | } 8 | 9 | vec3 when_and(vec3 a, vec3 b) { 10 | return a * b; 11 | } 12 | 13 | vec4 when_and(vec4 a, vec4 b) { 14 | return a * b; 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_eq.glsl: -------------------------------------------------------------------------------- 1 | float when_eq(float x, float y) { 2 | return 1.0 - abs(sign(x - y)); 3 | } 4 | 5 | vec2 when_eq(vec2 x, vec2 y) { 6 | return 1.0 - abs(sign(x - y)); 7 | } 8 | 9 | vec3 when_eq(vec3 x, vec3 y) { 10 | return 1.0 - abs(sign(x - y)); 11 | } 12 | 13 | vec4 when_eq(vec4 x, vec4 y) { 14 | return 1.0 - abs(sign(x - y)); 15 | } 16 | 17 | #pragma glslify: export(when_eq) 18 | -------------------------------------------------------------------------------- /when_eq.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_eq(float x, float y) { 2 | return 1.0 - abs(sign(x - y)); 3 | } 4 | 5 | vec2 when_eq(vec2 x, vec2 y) { 6 | return 1.0 - abs(sign(x - y)); 7 | } 8 | 9 | vec3 when_eq(vec3 x, vec3 y) { 10 | return 1.0 - abs(sign(x - y)); 11 | } 12 | 13 | vec4 when_eq(vec4 x, vec4 y) { 14 | return 1.0 - abs(sign(x - y)); 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_ge.glsl: -------------------------------------------------------------------------------- 1 | #pragma glslify: when_lt = require('./when_lt') 2 | 3 | float when_ge(float x, float y) { 4 | return 1.0 - when_lt(x, y); 5 | } 6 | 7 | vec2 when_ge(vec2 x, vec2 y) { 8 | return 1.0 - when_lt(x, y); 9 | } 10 | 11 | vec3 when_ge(vec3 x, vec3 y) { 12 | return 1.0 - when_lt(x, y); 13 | } 14 | 15 | vec4 when_ge(vec4 x, vec4 y) { 16 | return 1.0 - when_lt(x, y); 17 | } 18 | 19 | #pragma glslify: export(when_ge) 20 | -------------------------------------------------------------------------------- /when_ge.glsl.js: -------------------------------------------------------------------------------- 1 | export const dependencies = [new URL("./when_lt.glsl.js", import.meta.url)]; 2 | 3 | export default /* glsl */ ` 4 | 5 | float when_ge(float x, float y) { 6 | return 1.0 - when_lt(x, y); 7 | } 8 | 9 | vec2 when_ge(vec2 x, vec2 y) { 10 | return 1.0 - when_lt(x, y); 11 | } 12 | 13 | vec3 when_ge(vec3 x, vec3 y) { 14 | return 1.0 - when_lt(x, y); 15 | } 16 | 17 | vec4 when_ge(vec4 x, vec4 y) { 18 | return 1.0 - when_lt(x, y); 19 | } 20 | 21 | `; 22 | -------------------------------------------------------------------------------- /when_gt.glsl: -------------------------------------------------------------------------------- 1 | float when_gt(float x, float y) { 2 | return max(sign(x - y), 0.0); 3 | } 4 | 5 | vec2 when_gt(vec2 x, vec2 y) { 6 | return max(sign(x - y), 0.0); 7 | } 8 | 9 | vec3 when_gt(vec3 x, vec3 y) { 10 | return max(sign(x - y), 0.0); 11 | } 12 | 13 | vec4 when_gt(vec4 x, vec4 y) { 14 | return max(sign(x - y), 0.0); 15 | } 16 | 17 | #pragma glslify: export(when_gt) 18 | -------------------------------------------------------------------------------- /when_gt.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_gt(float x, float y) { 2 | return max(sign(x - y), 0.0); 3 | } 4 | 5 | vec2 when_gt(vec2 x, vec2 y) { 6 | return max(sign(x - y), 0.0); 7 | } 8 | 9 | vec3 when_gt(vec3 x, vec3 y) { 10 | return max(sign(x - y), 0.0); 11 | } 12 | 13 | vec4 when_gt(vec4 x, vec4 y) { 14 | return max(sign(x - y), 0.0); 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_le.glsl: -------------------------------------------------------------------------------- 1 | #pragma glslify: when_gt = require('./when_gt') 2 | 3 | float when_le(float x, float y) { 4 | return 1.0 - when_gt(x, y); 5 | } 6 | 7 | vec2 when_le(vec2 x, vec2 y) { 8 | return 1.0 - when_gt(x, y); 9 | } 10 | 11 | vec3 when_le(vec3 x, vec3 y) { 12 | return 1.0 - when_gt(x, y); 13 | } 14 | 15 | vec4 when_le(vec4 x, vec4 y) { 16 | return 1.0 - when_gt(x, y); 17 | } 18 | 19 | #pragma glslify: export(when_le) 20 | -------------------------------------------------------------------------------- /when_le.glsl.js: -------------------------------------------------------------------------------- 1 | export const dependencies = [new URL("./when_gt.glsl.js", import.meta.url)]; 2 | 3 | export default /* glsl */ ` 4 | 5 | float when_le(float x, float y) { 6 | return 1.0 - when_gt(x, y); 7 | } 8 | 9 | vec2 when_le(vec2 x, vec2 y) { 10 | return 1.0 - when_gt(x, y); 11 | } 12 | 13 | vec3 when_le(vec3 x, vec3 y) { 14 | return 1.0 - when_gt(x, y); 15 | } 16 | 17 | vec4 when_le(vec4 x, vec4 y) { 18 | return 1.0 - when_gt(x, y); 19 | } 20 | 21 | `; 22 | -------------------------------------------------------------------------------- /when_lt.glsl: -------------------------------------------------------------------------------- 1 | float when_lt(float x, float y) { 2 | return max(sign(y - x), 0.0); 3 | } 4 | 5 | vec2 when_lt(vec2 x, vec2 y) { 6 | return max(sign(y - x), 0.0); 7 | } 8 | 9 | vec3 when_lt(vec3 x, vec3 y) { 10 | return max(sign(y - x), 0.0); 11 | } 12 | 13 | vec4 when_lt(vec4 x, vec4 y) { 14 | return max(sign(y - x), 0.0); 15 | } 16 | 17 | #pragma glslify: export(when_lt) 18 | -------------------------------------------------------------------------------- /when_lt.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_lt(float x, float y) { 2 | return max(sign(y - x), 0.0); 3 | } 4 | 5 | vec2 when_lt(vec2 x, vec2 y) { 6 | return max(sign(y - x), 0.0); 7 | } 8 | 9 | vec3 when_lt(vec3 x, vec3 y) { 10 | return max(sign(y - x), 0.0); 11 | } 12 | 13 | vec4 when_lt(vec4 x, vec4 y) { 14 | return max(sign(y - x), 0.0); 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_neq.glsl: -------------------------------------------------------------------------------- 1 | float when_neq(float x, float y) { 2 | return abs(sign(x - y)); 3 | } 4 | 5 | vec2 when_neq(vec2 x, vec2 y) { 6 | return abs(sign(x - y)); 7 | } 8 | 9 | vec3 when_neq(vec3 x, vec3 y) { 10 | return abs(sign(x - y)); 11 | } 12 | 13 | vec4 when_neq(vec4 x, vec4 y) { 14 | return abs(sign(x - y)); 15 | } 16 | 17 | #pragma glslify: export(when_neq) 18 | -------------------------------------------------------------------------------- /when_neq.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_neq(float x, float y) { 2 | return abs(sign(x - y)); 3 | } 4 | 5 | vec2 when_neq(vec2 x, vec2 y) { 6 | return abs(sign(x - y)); 7 | } 8 | 9 | vec3 when_neq(vec3 x, vec3 y) { 10 | return abs(sign(x - y)); 11 | } 12 | 13 | vec4 when_neq(vec4 x, vec4 y) { 14 | return abs(sign(x - y)); 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_not.glsl: -------------------------------------------------------------------------------- 1 | float when_not(float a, float b) { 2 | return 1.0 - a; 3 | } 4 | 5 | vec2 when_not(vec2 a, vec2 b) { 6 | return 1.0 - a; 7 | } 8 | 9 | vec3 when_not(vec3 a, vec3 b) { 10 | return 1.0 - a; 11 | } 12 | 13 | vec4 when_not(vec4 a, vec4 b) { 14 | return 1.0 - a; 15 | } 16 | 17 | #pragma glslify: export(when_not) 18 | -------------------------------------------------------------------------------- /when_not.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_not(float a, float b) { 2 | return 1.0 - a; 3 | } 4 | 5 | vec2 when_not(vec2 a, vec2 b) { 6 | return 1.0 - a; 7 | } 8 | 9 | vec3 when_not(vec3 a, vec3 b) { 10 | return 1.0 - a; 11 | } 12 | 13 | vec4 when_not(vec4 a, vec4 b) { 14 | return 1.0 - a; 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_or.glsl: -------------------------------------------------------------------------------- 1 | float when_or(float a, float b) { 2 | return min(a + b, 1.0); 3 | } 4 | 5 | vec2 when_or(vec2 a, vec2 b) { 6 | return min(a + b, 1.0); 7 | } 8 | 9 | vec3 when_or(vec3 a, vec3 b) { 10 | return min(a + b, 1.0); 11 | } 12 | 13 | vec4 when_or(vec4 a, vec4 b) { 14 | return min(a + b, 1.0); 15 | } 16 | 17 | #pragma glslify: export(when_or) 18 | -------------------------------------------------------------------------------- /when_or.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_or(float a, float b) { 2 | return min(a + b, 1.0); 3 | } 4 | 5 | vec2 when_or(vec2 a, vec2 b) { 6 | return min(a + b, 1.0); 7 | } 8 | 9 | vec3 when_or(vec3 a, vec3 b) { 10 | return min(a + b, 1.0); 11 | } 12 | 13 | vec4 when_or(vec4 a, vec4 b) { 14 | return min(a + b, 1.0); 15 | } 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /when_xor.glsl: -------------------------------------------------------------------------------- 1 | float when_xor(float a, float b) { 2 | return (a + b) % 2.0; 3 | } 4 | 5 | vec2 when_xor(vec2 a, vec2 b) { 6 | return (a + b) % 2.0; 7 | } 8 | 9 | vec3 when_xor(vec3 a, vec3 b) { 10 | return (a + b) % 2.0; 11 | } 12 | 13 | vec4 when_xor(vec4 a, vec4 b) { 14 | return (a + b) % 2.0; 15 | } 16 | 17 | #pragma glslify: export(when_xor) 18 | -------------------------------------------------------------------------------- /when_xor.glsl.js: -------------------------------------------------------------------------------- 1 | export default /* glsl */ `float when_xor(float a, float b) { 2 | return (a + b) % 2.0; 3 | } 4 | 5 | vec2 when_xor(vec2 a, vec2 b) { 6 | return (a + b) % 2.0; 7 | } 8 | 9 | vec3 when_xor(vec3 a, vec3 b) { 10 | return (a + b) % 2.0; 11 | } 12 | 13 | vec4 when_xor(vec4 a, vec4 b) { 14 | return (a + b) % 2.0; 15 | } 16 | 17 | `; 18 | --------------------------------------------------------------------------------