Nautical Pirate Moustache

    glsl-conditionals
    TypeScript icon, indicating that this package has built-in type declarations

    2.0.1 • Public • Published

    glsl-conditionals

    npm version stability-frozen npm minzipped size dependencies types Conventional Commits styled with prettier linted with eslint license

    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.

    paypal coinbase twitter

    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.

    Install

    npm i glsl-conditionals

    DownloadsWeekly Downloads

    32

    Version

    2.0.1

    License

    MIT

    Unpacked Size

    17.2 kB

    Total Files

    36

    Last publish

    Collaborators

    • dmnsgn