@thi.ng/shader-ast-js
Version:
Customizable JS codegen, compiler & runtime for @thi.ng/shader-ast
150 lines (149 loc) • 4.23 kB
JavaScript
import { identity } from "@thi.ng/api/fn";
import { mat22n, mat33n, mat44n } from "@thi.ng/matrices/matn";
import { mat22v, mat33v, mat44v } from "@thi.ng/matrices/matv";
import { ZERO3, ZERO4 } from "@thi.ng/vectors/api";
import { fromBVec2, fromBVec3, fromBVec4 } from "@thi.ng/vectors/from-bvec";
import { setVN3, setVN4 } from "@thi.ng/vectors/setvn";
import { setVV4 } from "@thi.ng/vectors/setvv";
import {
setSwizzle2,
setSwizzle3,
setSwizzle4,
swizzle2,
swizzle3,
swizzle4
} from "@thi.ng/vectors/swizzle";
import { BVEC2, BVEC3, BVEC4 } from "./env/bvec.js";
import { FLOAT } from "./env/float.js";
import { INT } from "./env/int.js";
import { IVEC2 } from "./env/ivec2.js";
import { IVEC3 } from "./env/ivec3.js";
import { IVEC4 } from "./env/ivec4.js";
import { MAT2 } from "./env/mat2.js";
import { MAT3 } from "./env/mat3.js";
import { MAT4 } from "./env/mat4.js";
import { UINT } from "./env/uint.js";
import { UVEC2 } from "./env/uvec2.js";
import { UVEC3 } from "./env/uvec3.js";
import { UVEC4 } from "./env/uvec4.js";
import { VEC2 } from "./env/vec2.js";
import { VEC3 } from "./env/vec3.js";
import { VEC4 } from "./env/vec4.js";
import {
POOL_IVEC2,
POOL_IVEC3,
POOL_IVEC4,
POOL_UVEC2,
POOL_UVEC3,
POOL_UVEC4,
POOL_VEC2,
POOL_VEC3,
POOL_VEC4
} from "./pool.js";
const { next: $2, uniform: $n2 } = POOL_VEC2;
const { next: $3, uniform: $n3 } = POOL_VEC3;
const { next: $4, uniform: $n4 } = POOL_VEC4;
const { next: $i2, uniform: $ni2 } = POOL_IVEC2;
const { next: $i3, uniform: $ni3 } = POOL_IVEC3;
const { next: $i4, uniform: $ni4 } = POOL_IVEC4;
const { next: $u2, uniform: $nu2 } = POOL_UVEC2;
const { next: $u3, uniform: $nu3 } = POOL_UVEC3;
const { next: $u4, uniform: $nu4 } = POOL_UVEC4;
const SAMPLER_TODO = {
texelFetch: () => ZERO4,
texelFetchOffset: () => ZERO4,
texture: () => ZERO4,
texturen: () => 0,
textureGrad: () => ZERO4,
textureGradn: () => 0,
textureLod: () => ZERO4,
textureLodn: () => 0,
textureOffset: () => ZERO4,
textureOffsetn: () => 0,
textureProj: () => ZERO4,
textureProjn: () => 0,
textureSize: () => ZERO3
};
const JS_DEFAULT_ENV = {
vec2: VEC2(POOL_VEC2),
vec2b: (v) => fromBVec2($2(), v),
vec2i: identity,
vec2n: $n2,
vec2u: identity,
vec3: VEC3(POOL_VEC3),
vec3b: (v) => fromBVec3($3(), v),
vec3i: identity,
vec3n: $n3,
vec3u: identity,
vec3vn: (a, n) => setVN3($3(), a, n),
vec4: VEC4(POOL_VEC4),
vec4b: (v) => fromBVec4($4(), v),
vec4i: identity,
vec4n: $n4,
vec4u: identity,
vec4vn: (a, n) => setVN4($4(), a, n),
vec4vnn: (a, z, w) => setVV4($4(), a, [z, w]),
vec4vv: (a, b) => setVV4($4(), a, b),
mat2n: (n) => mat22n($4(), n),
mat2vv: (a, b) => mat22v($4(), a, b),
mat3n: (n) => mat33n([], n),
mat3vvv: (a, b, c) => mat33v([], a, b, c),
mat4n: (n) => mat44n([], n),
mat4vvvv: (a, b, c, d) => mat44v([], a, b, c, d),
swizzle2: (a, b, c) => swizzle2($2(), a, b, c),
swizzle3: (a, b, c, d) => swizzle3($3(), a, b, c, d),
swizzle4: (a, b, c, d, e) => swizzle4($4(), a, b, c, d, e),
set_swizzle2: setSwizzle2,
set_swizzle3: setSwizzle3,
set_swizzle4: setSwizzle4,
float: FLOAT,
int: INT,
uint: UINT,
bvec2: BVEC2,
bvec2n: (n) => (n = !!n, [n, n]),
bvec3: BVEC3,
bvec3n: (n) => (n = !!n, [n, n, n]),
bvec4: BVEC4,
bvec4n: (n) => (n = !!n, [n, n, n, n]),
ivec2: IVEC2,
ivec2b: (v) => fromBVec2($i2(), v),
ivec2n: $ni2,
ivec3: IVEC3,
ivec3b: (v) => fromBVec3($i3(), v),
ivec3n: $ni3,
ivec4: IVEC4,
ivec4b: (v) => fromBVec4($i4(), v),
ivec4n: $ni4,
uvec2: UVEC2,
uvec2b: (v) => fromBVec2($u2(), v),
uvec2n: $nu2,
uvec3: UVEC3,
uvec3b: (v) => fromBVec3($u3(), v),
uvec3n: $nu3,
uvec4: UVEC4,
uvec4b: (v) => fromBVec4($u4(), v),
uvec4n: $nu4,
mat2: MAT2,
mat3: MAT3,
mat4: MAT4,
sampler1D: SAMPLER_TODO,
sampler2D: SAMPLER_TODO,
sampler3D: SAMPLER_TODO,
samplerCube: SAMPLER_TODO,
sampler2DShadow: SAMPLER_TODO,
samplerCubeShadow: SAMPLER_TODO,
pools: {
vec2: POOL_VEC2,
vec3: POOL_VEC3,
vec4: POOL_VEC4,
ivec2: POOL_IVEC2,
ivec3: POOL_IVEC3,
ivec4: POOL_IVEC4,
uvec2: POOL_UVEC2,
uvec3: POOL_UVEC3,
uvec4: POOL_UVEC4
}
};
export {
JS_DEFAULT_ENV
};