glsl-conditionals
v2.0.2
Published
Daniel Holden's functions designed to avoid conditionals in GLSL, available both as ES modules strings and as GLSL files for use with glslify.
Downloads
40
Maintainers
Readme
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.
Disclaimer: you might not need this as it is highly hardware dependant and branching might not equate more operations in modern GPUs. Also it can make your shader harder to visually parse.
Installation
npm install glsl-conditionals
Usage
ESM
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
// 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.