Common GLSL math constants (with 11 decimals) available both as ES modules strings and as GLSL files for use with glslify.
npm install glsl-constants
import * as glslConstants from "glsl-constants";
import * as glslRotate from "glsl-rotate";
const shader = /* glsl */ `
${glslConstants.GAMMA}
${glslConstants.RECIPROCAL_GAMMA}
${glslConstants.TAU}
${glslConstants.PI}
${glslConstants.HALF_PI}
${glslConstants.QUARTER_PI}
${glslConstants.RECIPROCAL_PI}
${glslConstants.RECIPROCAL_TAU}
${glslConstants.TO_RADIANS}
${glslConstants.TO_DEGREES}
// ...
vec3 toGamma(vec3 v) {
return pow(v, vec3(RECIPROCAL_GAMMA));
}
${glslRotate.rotate}
void main() {
vec2 p2d = vec2(1.0, 0.0);
p2d = rotate(p2d, TAU);
p2d = rotate(p2d, PI);
p2d = rotate(p2d, HALF_PI);
p2d = rotate(p2d, QUARTER_PI);
p2d = rotate(p2d, PHI);
p2d = rotate(p2d, RECIPROCAL_PI);
p2d = rotate(p2d, RECIPROCAL_TAU);
p2d = rotate(p2d, 90.0 * TO_RADIANS);
// ...
gl_FragColor.rgb = toGamma(color.rgb);
}
`;
#pragma glslify: GAMMA = require(glsl-constants/GAMMA)
#pragma glslify: TAU = require(glsl-constants/TAU)
#pragma glslify: PI = require(glsl-constants/PI)
#pragma glslify: HALF_PI = require(glsl-constants/HALF_PI)
#pragma glslify: QUARTER_PI = require(glsl-constants/QUARTER_PI)
#pragma glslify: PHI = require(glsl-constants/PHI)
#pragma glslify: RECIPROCAL_PI = require(glsl-constants/RECIPROCAL_PI)
#pragma glslify: RECIPROCAL_TAU = require(glsl-constants/RECIPROCAL_TAU)
#pragma glslify: TO_RADIANS = require(glsl-constants/TO_RADIANS)
#pragma glslify: TO_DEGREES = require(glsl-constants/TO_DEGREES)
// ...
vec3 toGamma(vec3 v) {
return pow(v, vec3(RECIPROCAL_GAMMA));
}
#pragma glslify: rotate = require(glsl-rotate)
void main() {
vec2 p2d = vec2(1.0, 0.0);
p2d = rotate(p2d, TAU);
p2d = rotate(p2d, PI);
p2d = rotate(p2d, HALF_PI);
p2d = rotate(p2d, QUARTER_PI);
p2d = rotate(p2d, PHI);
p2d = rotate(p2d, RECIPROCAL_PI);
p2d = rotate(p2d, RECIPROCAL_TAU);
p2d = rotate(p2d, 90.0 * TO_RADIANS);
// ...
gl_FragColor.rgb = toGamma(color.rgb);
}
MIT. See license file.