UNPKG

@thi.ng/webgl

Version:

WebGL & GLSL abstraction layer

82 lines (81 loc) 2.5 kB
import { equivArrayLike } from "@thi.ng/equiv"; import { IDENT22, IDENT33, IDENT44 } from "@thi.ng/matrices/constants"; import { ZERO2, ZERO3, ZERO4 } from "@thi.ng/vectors/api"; const __uniformS = (fn) => (gl, loc, defaultVal = 0) => { let prev; return (x) => { x = x === void 0 ? defaultVal : x; if (x !== prev) { gl["uniform1" + fn](loc, x); prev = x; } }; }; const __uniformV = (fn, sysDefault) => (gl, loc, defaultVal = sysDefault) => { let prev = []; return (x) => { x = x === void 0 ? defaultVal : x; if (!equivArrayLike(prev, x)) { gl["uniform" + fn](loc, x); prev = [...x]; } }; }; const __uniformM = (fn, sysDefault) => (gl, loc, defaultVal = sysDefault) => { let prev = []; return (x) => { x = x === void 0 ? defaultVal : x; if (!equivArrayLike(prev, x)) { gl["uniformMatrix" + fn](loc, false, x); prev = [...x]; } }; }; const Z1 = [0]; const UNIFORM_SETTERS = { bool: __uniformS("i"), float: __uniformS("f"), int: __uniformS("i"), uint: __uniformS("ui"), bvec2: __uniformV("2iv", ZERO2), bvec3: __uniformV("3iv", ZERO3), bvec4: __uniformV("4iv", ZERO4), ivec2: __uniformV("2iv", ZERO2), ivec3: __uniformV("3iv", ZERO3), ivec4: __uniformV("4iv", ZERO4), vec2: __uniformV("2fv", ZERO2), vec3: __uniformV("3fv", ZERO3), vec4: __uniformV("4fv", ZERO4), mat2: __uniformM("2fv", IDENT22), mat3: __uniformM("3fv", IDENT33), mat4: __uniformM("4fv", IDENT44), sampler2D: __uniformS("i"), sampler2DShadow: __uniformS("i"), sampler3D: __uniformS("i"), samplerCube: __uniformS("i"), samplerCubeShadow: __uniformS("i"), "bool[]": __uniformV("1iv", Z1), "float[]": __uniformV("1fv", Z1), "int[]": __uniformV("1iv", Z1), "uint[]": __uniformV("1uiv", Z1), "bvec2[]": __uniformV("2iv", ZERO2), "bvec3[]": __uniformV("3iv", ZERO3), "bvec4[]": __uniformV("4iv", ZERO4), "ivec2[]": __uniformV("2iv", ZERO2), "ivec3[]": __uniformV("3iv", ZERO3), "ivec4[]": __uniformV("4iv", ZERO4), "vec2[]": __uniformV("2fv", ZERO2), "vec3[]": __uniformV("3fv", ZERO3), "vec4[]": __uniformV("4fv", ZERO4), "mat2[]": __uniformM("2fv", ZERO2), "mat3[]": __uniformM("3fv", ZERO3), "mat4[]": __uniformM("4fv", ZERO4), "sampler2D[]": __uniformV("1iv", Z1), "sampler2DShadow[]": __uniformV("1iv", Z1), "sampler3D[]": __uniformV("1iv", Z1), "samplerCube[]": __uniformV("1iv", Z1), "samplerCubeShadow[]": __uniformV("1iv", Z1) }; export { UNIFORM_SETTERS };