@thi.ng/webgl
Version:
WebGL & GLSL abstraction layer
82 lines (81 loc) • 2.5 kB
JavaScript
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
};