https://github.com/dmnsgn/glsl-conditionals
Daniel Holden's functions designed to avoid conditionals in GLSL, available both as ES modules strings and as GLSL files for use with glslify.
https://github.com/dmnsgn/glsl-conditionals
glsl glsl-conditionals glslify shader webgl
Last synced: 3 months ago
JSON representation
Daniel Holden's functions designed to avoid conditionals in GLSL, available both as ES modules strings and as GLSL files for use with glslify.
- Host: GitHub
- URL: https://github.com/dmnsgn/glsl-conditionals
- Owner: dmnsgn
- License: mit
- Created: 2016-08-29T18:35:04.000Z (almost 10 years ago)
- Default Branch: main
- Last Pushed: 2025-02-11T08:45:28.000Z (over 1 year ago)
- Last Synced: 2025-12-20T00:16:01.373Z (6 months ago)
- Topics: glsl, glsl-conditionals, glslify, shader, webgl
- Language: GLSL
- Homepage: https://dmnsgn.github.io/glsl-conditionals/
- Size: 48.8 KB
- Stars: 62
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.MD
Awesome Lists containing this project
README
# glsl-conditionals
[](https://www.npmjs.com/package/glsl-conditionals)
[](https://www.npmjs.com/package/glsl-conditionals)
[](https://bundlephobia.com/package/glsl-conditionals)
[](https://github.com/dmnsgn/glsl-conditionals/blob/main/package.json)
[](https://github.com/microsoft/TypeScript)
[](https://conventionalcommits.org)
[](https://github.com/prettier/prettier)
[](https://github.com/eslint/eslint)
[](https://github.com/dmnsgn/glsl-conditionals/blob/main/LICENSE.md)
[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.
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.
[](https://paypal.me/dmnsgn)
[](https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3)
[](https://twitter.com/dmnsgn)
## Installation
```bash
npm install glsl-conditionals
```
## Usage
### ESM
```js
import * as glslConditionals from "glsl-conditionals";
const shader = /* glsl */ `
// Comparisons
${glslConditionals.WHEN_EQ}
${glslConditionals.WHEN_NEQ}
${glslConditionals.WHEN_GT}
${glslConditionals.WHEN_LT}
${glslConditionals.WHEN_GE}
${glslConditionals.WHEN_LE}
// Logical operators
${glslConditionals.WHEN_AND}
${glslConditionals.WHEN_OR}
${glslConditionals.WHEN_XOR}
${glslConditionals.WHEN_NOT}
void main() {
float x = 10.0;
float y = 0.0;
y += 5.0 * when_eq(x, 0.0);
y += 5.0 * when_eq(x, 0.0);
y += 5.0 * when_neq(x, 0.0);
y += 5.0 * when_gt(x, 0.0);
y += 5.0 * when_lt(x, 0.0);
y += 5.0 * when_ge(x, 0.0);
y += 5.0 * when_le(x, 0.0);
y += 5.0 * when_and(x, 0.0);
y += 5.0 * when_or(x, 0.0);
y += 5.0 * when_xor(x, 0.0);
y += 5.0 * when_not(x, 0.0);
// ...
}
`;
```
### glslify
```glsl
// Comparisons
#pragma glslify: when_eq = require(glsl-conditionals/when_eq)
#pragma glslify: when_neq = require(glsl-conditionals/when_neq)
#pragma glslify: when_gt = require(glsl-conditionals/when_gt)
#pragma glslify: when_lt = require(glsl-conditionals/when_lt)
#pragma glslify: when_ge = require(glsl-conditionals/when_ge)
#pragma glslify: when_le = require(glsl-conditionals/when_le)
// Logical operators
#pragma glslify: when_and = require(glsl-conditionals/when_and)
#pragma glslify: when_or = require(glsl-conditionals/when_or)
#pragma glslify: when_xor = require(glsl-conditionals/when_xor)
#pragma glslify: when_not = require(glsl-conditionals/when_not)
void main() {
float x = 10.0;
float y = 0.0;
y += 5.0 * when_eq(x, 0.0);
y += 5.0 * when_eq(x, 0.0);
y += 5.0 * when_neq(x, 0.0);
y += 5.0 * when_gt(x, 0.0);
y += 5.0 * when_lt(x, 0.0);
y += 5.0 * when_ge(x, 0.0);
y += 5.0 * when_le(x, 0.0);
y += 5.0 * when_and(x, 0.0);
y += 5.0 * when_or(x, 0.0);
y += 5.0 * when_xor(x, 0.0);
y += 5.0 * when_not(x, 0.0);
// ...
}
```
## License
MIT. See [license file](https://github.com/dmnsgn/glsl-conditionals/blob/main/LICENSE.md).