glre 0.44.0 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addons.d.ts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/native.d.ts +6 -1
- package/dist/node.cjs +12 -12
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +6 -2
- package/dist/node.js +11 -11
- package/dist/node.js.map +1 -1
- package/dist/react.d.ts +6 -1
- package/dist/solid.d.ts +6 -1
- package/package.json +1 -1
- package/src/node/build.ts +3 -2
- package/src/node/types.ts +7 -1
- package/src/node/utils/index.ts +4 -24
- package/src/node/utils/utils.ts +2 -10
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/node/utils/const.ts","../src/utils/helpers.ts","../src/utils/program.ts","../src/node/utils/utils.ts","../src/node/utils/infer.ts","../src/node/utils/parse.ts","../src/node/utils/index.ts","../src/node/build.ts","../src/node/scope.ts","../src/node/create.ts","../src/node/index.ts"],"sourcesContent":["export const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\n// Unified order with TYPE_MAPPING array\nexport const CONVERSIONS = ['toBool', 'toUInt', 'toInt', 'toFloat', 'toBVec2', 'toIVec2', 'toUVec2', 'toVec2', 'toBVec3', 'toIVec3', 'toUVec3', 'toVec3', 'toBVec4', 'toIVec4', 'toUVec4', 'toVec4', 'toColor', 'toMat2', 'toMat3', 'toMat4'] as const\n\n// Unified order with CONVERSIONS array\nexport const TYPE_MAPPING = {\n bool: 'bool',\n uint: 'u32',\n int: 'i32',\n float: 'f32',\n bvec2: 'vec2<bool>',\n ivec2: 'vec2i',\n uvec2: 'vec2u',\n vec2: 'vec2f',\n bvec3: 'vec3<bool>',\n ivec3: 'vec3i',\n uvec3: 'vec3u',\n vec3: 'vec3f',\n bvec4: 'vec4<bool>',\n ivec4: 'vec4i',\n uvec4: 'vec4u',\n vec4: 'vec4f',\n color: 'color',\n mat2: 'mat2x2f',\n mat3: 'mat3x3f',\n mat4: 'mat4x4f',\n texture: 'texture_2d<f32>',\n sampler2D: 'sampler',\n struct: 'struct',\n} as const\n\nexport const CONSTANTS = Object.keys(TYPE_MAPPING) as (keyof typeof TYPE_MAPPING)[]\n\nexport const OPERATORS = {\n not: '', // IGNORED\n add: '+',\n sub: '-',\n mul: '*',\n div: '/',\n mod: '%',\n equal: '==',\n notEqual: '!=',\n lessThan: '<',\n lessThanEqual: '<=',\n greaterThan: '>',\n greaterThanEqual: '>=',\n and: '&&',\n or: '||',\n bitAnd: '&',\n bitOr: '|',\n bitXor: '^',\n shiftLeft: '<<',\n shiftRight: '>>',\n addAssign: '+=',\n subAssign: '-=',\n mulAssign: '*=',\n divAssign: '/=',\n modAssign: '%=',\n bitAndAssign: '&=',\n bitOrAssign: '|=',\n bitXorAssign: '^=',\n shiftLeftAssign: '<<=',\n shiftRightAssign: '>>=',\n} as const\n\nexport const OPERATOR_KEYS = Object.keys(OPERATORS) as (keyof typeof OPERATORS)[]\n\nexport const COMPONENT_COUNT_TO_TYPE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4',\n 9: 'mat3',\n 16: 'mat4',\n} as const\n\nexport const BUILTIN_TYPES = {\n // WGSL builtin variables\n position: 'vec4',\n vertex_index: 'uint',\n instance_index: 'uint',\n front_facing: 'bool',\n frag_depth: 'float',\n sample_index: 'uint',\n sample_mask: 'uint',\n point_coord: 'vec2',\n global_invocation_id: 'uvec3',\n\n // TSL compatible variables\n positionLocal: 'vec3',\n positionWorld: 'vec3',\n positionView: 'vec3',\n normalLocal: 'vec3',\n normalWorld: 'vec3',\n normalView: 'vec3',\n screenCoordinate: 'vec2',\n screenUV: 'vec2',\n\n // Legacy GLSL variables (for backward compatibility)\n gl_FragCoord: 'vec4',\n gl_VertexID: 'uint',\n gl_InstanceID: 'uint',\n gl_FrontFacing: 'bool',\n gl_FragDepth: 'float',\n gl_SampleID: 'uint',\n gl_SampleMask: 'uint',\n gl_PointCoord: 'vec2',\n\n // Common variables\n normal: 'vec3',\n uv: 'vec2',\n color: 'vec4',\n} as const\n\nexport const COMPARISON_OPERATORS = ['equal', 'notEqual', 'lessThan', 'lessThanEqual', 'greaterThan', 'greaterThanEqual'] as const\n\nexport const LOGICAL_OPERATORS = ['and', 'or'] as const\n\n// Operator type rules [L, R, Result] format (no duplicates, same-type handled by logic)\nexport const OPERATOR_TYPE_RULES = [\n // Scalar broadcast operations (result follows vector type)\n ['float', 'vec2', 'vec2'],\n ['float', 'vec3', 'vec3'],\n ['float', 'vec4', 'vec4'],\n ['int', 'ivec2', 'ivec2'],\n ['int', 'ivec3', 'ivec3'],\n ['int', 'ivec4', 'ivec4'],\n ['uint', 'uvec2', 'uvec2'],\n ['uint', 'uvec3', 'uvec3'],\n ['uint', 'uvec4', 'uvec4'],\n // Matrix-vector operations (mat * vec → vec)\n ['mat2', 'vec2', 'vec2'],\n ['mat3', 'vec3', 'vec3'],\n ['mat4', 'vec4', 'vec4'],\n // Vector-matrix operations (vec * mat → vec)\n ['vec2', 'mat2', 'vec2'],\n ['vec3', 'mat3', 'vec3'],\n ['vec4', 'mat4', 'vec4'],\n] as const\n\nexport const WGSL_TO_GLSL_BUILTIN = {\n position: 'gl_FragCoord',\n vertex_index: 'gl_VertexID',\n instance_index: 'gl_InstanceID',\n front_facing: 'gl_FrontFacing',\n frag_depth: 'gl_FragDepth',\n sample_index: 'gl_SampleID',\n sample_mask: 'gl_SampleMask',\n point_coord: 'gl_PointCoord',\n uv: 'gl_FragCoord.xy',\n} as const\n\n/**\n * 2.1. unified with:\n * 1.1. index.ts functions and\n * 3.1. types.ts _N\n */\n// Function return type mapping for method chaining\nexport const FUNCTION_RETURN_TYPES = {\n // 0. Always return bool\n all: 'bool',\n any: 'bool',\n // 2. Always return float\n determinant: 'float',\n distance: 'float',\n dot: 'float',\n length: 'float',\n lengthSq: 'float',\n luminance: 'float',\n // 3. Always return vec3\n cross: 'vec3',\n // 4. Always return vec4\n cubeTexture: 'vec4',\n texture: 'vec4',\n texelFetch: 'vec4',\n textureLod: 'vec4',\n} as const\n\n/**\n * 2.2. unified with:\n * 1.2. index.ts functions and\n * 3.2. types.ts _N\n */\n// All shader functions (type inference now handled by inferFrom)\nexport const FUNCTIONS = [\n ...(Object.keys(FUNCTION_RETURN_TYPES) as (keyof typeof FUNCTION_RETURN_TYPES)[]),\n // 0. Component-wise functions\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'ceil',\n 'cos',\n 'cosh',\n 'dFdx',\n 'dFdy',\n 'degrees',\n 'exp',\n 'exp2',\n 'floor',\n 'fract',\n 'fwidth',\n 'inverse',\n 'inverseSqrt',\n 'log',\n 'log2',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'radians',\n 'reciprocal',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc',\n 'saturate',\n // 1. Functions where first argument determines return type\n 'atan2',\n 'clamp',\n 'max',\n 'min',\n 'mix',\n 'pow',\n 'reflect',\n 'refract',\n // 2. Functions where not first argument determines return type\n 'smoothstep',\n 'step',\n // @NOTE: mod is operator\n] as const\n\n// Check if two types are the same (for same-type operations)\nconst isSameType = (L: string, R: string): boolean => L === R\n\n// Check if combination exists in rules (handles bidirectional matching)\nconst isValidCombination = (L: string, R: string): boolean => {\n return OPERATOR_TYPE_RULES.some(([left, right, _]) => (left === L && right === R) || (left === R && right === L))\n}\n\n// Type constraint validation for operators ([L, R, Result] format)\nexport const validateOperatorTypes = (L: string, R: string, op: string): boolean => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return isSameType(L, R)\n if (isSameType(L, R)) return true\n return isValidCombination(L, R)\n}\n\n// Get result type for operator (used by inferOperator)\nexport const getOperatorResultType = (L: string, R: string, op: string): string => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return 'bool'\n // Same type operations return the same type\n if (isSameType(L, R)) return L\n const rule = OPERATOR_TYPE_RULES.find(([left, right, _]) => (left === L && right === R) || (left === R && right === L))\n return rule ? rule[2] : L\n}\n","export const is = {\n arr: Array.isArray,\n bol: (a: unknown): a is boolean => typeof a === 'boolean',\n str: (a: unknown): a is string => typeof a === 'string',\n num: (a: unknown): a is number => typeof a === 'number',\n int: (a: unknown): a is number => Number.isInteger(a),\n fun: (a: unknown): a is Function => typeof a === 'function',\n und: (a: unknown): a is undefined => typeof a === 'undefined',\n nul: (a: unknown): a is null => a === null,\n set: (a: unknown): a is Set<unknown> => a instanceof Set,\n map: (a: unknown): a is Map<unknown, unknown> => a instanceof Map,\n obj: (a: unknown): a is object => !!a && a.constructor.name === 'Object',\n nan: (a: unknown): a is number => typeof a === 'number' && Number.isNaN(a),\n}\n\n/**\n * each\n */\ntype EachFn<Value, Key, This> = (this: This, value: Value, key: Key) => void\ntype Eachable<Value = any, Key = any, This = any> = {\n forEach(cb: EachFn<Value, Key, This>, ctx?: This): void\n}\n\nexport const each = <Value, Key, This>(obj: Eachable<Value, Key, This>, fn: EachFn<Value, Key, This>) => obj.forEach(fn)\n\nexport const flush = <Value extends Function, Key, This>(obj: Eachable<Value, Key, This>, ...args: any[]) => {\n each(obj, (f) => f(...args))\n}\n\n/**\n * other\n */\nexport const replace = (x = '', from = '_', to = '/') => x.split(from).join(to)\nexport const ext = (src = '.pdf') => src.split('.').pop()?.toLowerCase() ?? ''\nexport const fig = (x = 0) => `${x}`.split('.')[1]?.length ?? 0\nexport const dig = (x = 0) => `${x}`.split('.')[0]?.length - (x < 0 ? 1 : 0)\nexport const sig = (value = 0, digit = -2) => {\n digit *= -1\n digit = Math.pow(10, digit)\n value *= digit\n value = Math.round(value)\n value /= digit\n return value\n}\n\nexport const isFloat32 = (value: unknown): value is Float32Array => {\n return value instanceof Float32Array\n}\n\nconst loadingImage = (src: string, fun: (source: HTMLImageElement) => void) => {\n const source = new Image()\n Object.assign(source, { src, crossOrigin: 'anonymous' })\n source.decode().then(() => fun(source))\n}\n\nconst loadingVideo = (src: string, fun: (source: HTMLVideoElement) => void) => {\n const source = document.createElement('video')\n source.crossOrigin = 'anonymous'\n source.muted = true\n source.loop = true\n source.src = src\n source.load()\n source.play()\n source.addEventListener('canplay', fun.bind(null, source), { once: true })\n}\n\nexport function loadingTexture(src: string, fun: (source: HTMLVideoElement, isVideo: true) => void): void\n\nexport function loadingTexture(src: string, fun: (source: HTMLImageElement, isVideo: false) => void): void\n\nexport function loadingTexture(src: string | HTMLImageElement | HTMLVideoElement, fun: Function) {\n if (!is.str(src)) return fun(src, src instanceof HTMLVideoElement)\n const isVideo = /\\.(mp4|webm|ogg|avi|mov)$/i.test(src)\n const loader = isVideo ? loadingVideo : loadingImage\n loader(src, (el: HTMLImageElement | HTMLVideoElement) => {\n fun(el as HTMLVideoElement, isVideo)\n })\n}\nconst isValidStride = (stride: number) => [1, 2, 3, 4, 9, 16].includes(stride)\n\nconst calcStride = (arrayLength: number, count = 3) => {\n if (arrayLength % count === 0) return Math.floor(arrayLength / count)\n return -1\n}\n\nexport const getStride = (arrayLength: number, count = 1, error = console.warn) => {\n const ret = calcStride(arrayLength, count)\n if (!isValidStride(ret))\n error(\n `glre attribute error: Invalid attribute length ${arrayLength}. Must divide by vertex count (${count}) with valid stride (1,2,3,4,9,16)`\n )\n return ret\n}\n\nexport const GLSL_FS = /* cpp */ `\n#version 300 es\nprecision highp float;\nprecision highp int;\nout vec4 fragColor;\nuniform vec2 iResolution;\nvoid main() {\n fragColor = vec4(fract((gl_FragCoord.xy / iResolution)), 0.0, 1.0);\n}\n`\n\nexport const GLSL_VS = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}`\n\nexport const WGSL_VS = /* rust */ `\nstruct In { @builtin(vertex_index) vertex_index: u32 }\nstruct Out { @builtin(position) position: vec4f }\n@vertex\nfn main(in: In) -> Out {\n var out: Out;\n var x = f32(in.vertex_index % 2) * 4.0 - 1.0;\n var y = f32(in.vertex_index / 2) * 4.0 - 1.0;\n out.position = vec4f(x, y, 0.0, 1.0);\n return out;\n}\n`.trim()\n\nexport const WGSL_FS = /* rust */ `\nstruct Out { @builtin(position) position: vec4f }\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n@fragment\nfn main(out: Out) -> @location(0) vec4f {\n return vec4f(fract((out.position.xy / iResolution)), 0.0, 1.0);\n}\n`\n","import { is } from './helpers'\nimport type { GL } from '../types'\n\nconst createShader = (c: WebGL2RenderingContext, source: string, type: number, onError = console.warn) => {\n const shader = c.createShader(type)\n if (!shader) return onError('Failed to create shader')\n c.shaderSource(shader, source.trim())\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n c.deleteShader(shader)\n onError(`Could not compile shader: ${error}\\n\\n↓↓↓generated↓↓↓\\n${source}`)\n}\n\nexport const createProgram = (c: WebGL2RenderingContext, frag: string, vert: string, gl: GL) => {\n const pg = c.createProgram()\n const fs = createShader(c, frag, c.FRAGMENT_SHADER, gl.error)\n const vs = createShader(c, vert, c.VERTEX_SHADER, gl.error)\n if (!fs || !vs) return\n c.attachShader(pg, fs!)\n c.attachShader(pg, vs!)\n c.linkProgram(pg)\n if (c.getProgramParameter(pg, c.LINK_STATUS)) return pg\n const error = c.getProgramInfoLog(pg)\n c.deleteProgram(pg)\n gl.error(`Could not link program: ${error}`)\n}\n\nexport const createArrayBuffer = (c: WebGL2RenderingContext, data: number[]) => {\n const array = new Float32Array(data)\n const buffer = c.createBuffer()\n return { array, buffer }\n}\n\nexport const setArrayBuffer = (c: WebGL2RenderingContext, array: Float32Array, buffer: WebGLBuffer, value: number[]) => {\n array.set(value)\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, array, c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n}\n\nexport const updateAttrib = (c: WebGL2RenderingContext, loc: number, stride: number, buffer: WebGLBuffer) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n}\n\nexport const updateInstance = (c: WebGL2RenderingContext, loc: number, stride: number, buffer: WebGLBuffer) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n c.vertexAttribDivisor(loc, 1) // divisor is 1\n}\n\nexport const updateUniform = (c: WebGL2RenderingContext, loc: WebGLUniformLocation, value: number | number[]) => {\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n}\n\nexport const createTexture = (c: WebGL2RenderingContext, el: HTMLImageElement | HTMLVideoElement, loc: WebGLUniformLocation, unit: number, isVideo = false) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, el)\n if (!isVideo) c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n c.uniform1i(loc, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n if (isVideo)\n return () => {\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, el)\n }\n}\n\n/**\n * for gpgpu\n */\ninterface TextureBuffer {\n texture: WebGLTexture\n buffer: WebGLFramebuffer\n}\n\nexport const createStorage = (c: WebGL2RenderingContext, value: number[], width: number, height: number, ping: TextureBuffer, pong: TextureBuffer, unit: number, array: Float32Array) => {\n const particleCount = width * height\n const vectorSize = value.length / particleCount\n for (let i = 0; i < particleCount; i++) {\n for (let j = 0; j < Math.min(vectorSize, 4); j++) {\n array[4 * i + j] = value[i * vectorSize + j] || 0\n }\n }\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, ping.texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA32F, width, height, 0, c.RGBA, c.FLOAT, array)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, pong.texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA32F, width, height, 0, c.RGBA, c.FLOAT, array)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n}\n\nexport const cleanStorage = (c: WebGL2RenderingContext, map: Iterable<{ ping: TextureBuffer; pong: TextureBuffer }>) => {\n for (const { ping, pong } of map) {\n c.deleteTexture(ping.texture)\n c.deleteTexture(pong.texture)\n c.deleteFramebuffer(ping.buffer)\n c.deleteFramebuffer(pong.buffer)\n }\n}\n\nexport const createAttachment = (c: WebGL2RenderingContext, i: TextureBuffer, o: TextureBuffer, loc: WebGLUniformLocation, unit: number, index: number) => {\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, i.texture)\n c.uniform1i(loc, unit)\n if (index === 0) c.bindFramebuffer(c.FRAMEBUFFER, o.buffer)\n const attachment = c.COLOR_ATTACHMENT0 + index\n c.framebufferTexture2D(c.FRAMEBUFFER, attachment, c.TEXTURE_2D, o.texture, 0)\n return attachment\n}\n\n/**\n * utils\n */\nexport const storageSize = (particleCount: number | number[] = 1024) => {\n if (is.num(particleCount)) {\n const sqrt = Math.sqrt(particleCount)\n const size = Math.ceil(sqrt)\n if (!Number.isInteger(sqrt)) console.warn(`GLRE Storage Warning: particleCount (${particleCount}) is not a square. Using ${size}x${size} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`)\n return { x: size, y: size }\n }\n const [x, y, z] = particleCount\n if (z !== undefined) {\n const yz = y * z\n console.warn(`GLRE Storage Warning: 3D particleCount [${x}, ${y}, ${z}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${y} * depth=${z} = ${yz}.`)\n return { x, y: yz }\n }\n return { x, y }\n}\n","import {\n CONSTANTS,\n CONVERSIONS,\n FUNCTIONS,\n OPERATOR_KEYS,\n OPERATORS,\n TYPE_MAPPING,\n WGSL_TO_GLSL_BUILTIN,\n} from './const'\nimport { is } from '../../utils/helpers'\nimport type { Constants as C, Conversions, Functions, NodeContext, Operators, Swizzles, X, Y } from '../types'\nimport { storageSize } from '../../utils/program'\n\nexport const isSwizzle = (key: unknown): key is Swizzles => {\n return is.str(key) && /^[xyzwrgbastpq]{1,4}$/.test(key)\n}\n\nexport const isOperator = (key: unknown): key is Operators => {\n return OPERATOR_KEYS.includes(key as Operators)\n}\n\nexport const isFunction = (key: unknown): key is Functions => {\n return FUNCTIONS.includes(key as Functions)\n}\n\nexport const isElement = (x: unknown): x is Element => {\n if (is.obj(x)) return false\n return x instanceof Element\n}\n\nexport const isConversion = (key: unknown): key is Conversions => {\n return CONVERSIONS.includes(key as Conversions)\n}\n\nexport const isX = (x: unknown): x is X => {\n if (!x) return false\n if (typeof x !== 'object') return false // @ts-ignore\n return x.isProxy\n}\n\nexport const isConstants = (type?: unknown): type is C => {\n if (!is.str(type)) return false\n return CONSTANTS.includes(type as any)\n}\n\nexport const hex2rgb = (hex: number) => {\n const r = ((hex >> 16) & 0xff) / 255\n const g = ((hex >> 8) & 0xff) / 255\n const b = (hex & 0xff) / 255\n return [r, g, b]\n}\n\nlet count = 0\n\nexport const getId = () => `x${count++}`\n\nexport const getBluiltin = (c: NodeContext, id: string) => {\n if (id === 'global_invocation_id') {\n const size = storageSize(c.gl?.particleCount)\n return `uvec3(uint(gl_FragCoord.y) * uint(${size.x}) + uint(gl_FragCoord.x), 0u, 0u)`\n }\n const ret = WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n if (!ret) throw new Error(`Error: unknown builtin variable ${id}`)\n return ret\n}\n\nexport const getConversions = <T extends C>(x: T, c?: NodeContext) => {\n if (!is.str(x)) return ''\n if (c?.isWebGL) return x\n return TYPE_MAPPING[x as keyof typeof TYPE_MAPPING] || x // for struct type\n}\n\nexport const getOperator = (op: Y) => {\n return OPERATORS[op as keyof typeof OPERATORS] || op\n}\n\nexport const getConstant = (conversionKey: string): C => {\n const index = CONVERSIONS.indexOf(conversionKey as Conversions)\n return index !== -1 ? CONSTANTS[index] : 'float'\n}\n\nexport const initNodeContext = (c: NodeContext) => {\n if (c.code) return c\n c.code = {\n headers: new Map(),\n fragInputs: new Map(),\n vertInputs: new Map(),\n vertOutputs: new Map(),\n vertVaryings: new Map(),\n computeInputs: new Map(),\n dependencies: new Map(),\n structStructFields: new Map(),\n }\n if (c.isWebGL) return c\n c.code.fragInputs.set('position', '@builtin(position) position: vec4f')\n c.code.vertOutputs.set('position', '@builtin(position) position: vec4f')\n return c\n}\n\nexport const isArrayAccess = (key: unknown): boolean => {\n return is.num(key) || (is.str(key) && /^\\d+$/.test(key))\n}\n\nexport const addDependency = (c: NodeContext, id = '', type: string) => {\n if (!c.code?.dependencies?.has(id)) c.code!.dependencies.set(id, new Set())\n if (!isConstants(type)) c.code!.dependencies.get(id)!.add(type)\n}\n\n/**\n * uniform ant attribute event listeners\n */\nconst getEventFun = (c: NodeContext, id: string, type: string) => {\n if (c.isWebGL) {\n if (type === 'attribute') return (value: any) => c.gl?.attribute?.(id, value)\n if (type === 'instance') return (value: any) => c.gl?.instance?.(id, value)\n if (type === 'texture') return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (type === 'attribute') return (value: any) => c.gl?._attribute?.(id, value)\n if (type === 'instance') return (value: any) => c.gl?._instance?.(id, value)\n if (type === 'texture') return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nconst safeEventCall = <T extends C>(x: X<T>, fun: (value: unknown) => void) => {\n if (is.und(x)) return\n if (!isX(x)) return fun(x) // for uniform(0) or uniform([0, 1])\n if (x.type !== 'conversion') return\n const args = x.props.children?.slice(1)\n if (is.und(args?.[0])) return // ignore if uniform(vec2())\n fun(args.map((x) => x ?? args[0])) // for uniform(vec2(1)) or uniform(vec2(1, 1))\n}\n\nexport const setupEvent = (c: NodeContext, id: string, type: string, target: X, child: X) => {\n const fun = getEventFun(c, id, type)\n safeEventCall(child, fun)\n target.listeners.add(fun)\n return fun\n}\n","import { isConstants, isElement, isX, isSwizzle } from './utils'\nimport {\n BUILTIN_TYPES,\n COMPONENT_COUNT_TO_TYPE,\n FUNCTION_RETURN_TYPES,\n getOperatorResultType,\n validateOperatorTypes,\n} from './const'\nimport { is, getStride } from '../../utils/helpers'\nimport type { Constants as C, NodeContext, X, Y } from '../types'\n\nconst inferBuiltin = <T extends C>(id: string | undefined) => {\n return BUILTIN_TYPES[id as keyof typeof BUILTIN_TYPES] as T\n}\n\nconst inferOperator = <T extends C>(L: T, R: T, op: string): T => {\n if (!validateOperatorTypes(L, R, op))\n console.warn(`GLRE Type Warning: Invalid operator '${op}' between types '${L}' and '${R}'`)\n return getOperatorResultType(L, R, op) as T\n}\n\nexport const inferPrimitiveType = <T extends C>(x: Y<T>) => {\n if (is.bol(x)) return 'bool' as T\n if (is.str(x)) return 'texture' as T\n if (is.num(x)) return 'float' as T // @TODO FIX: Number.isInteger(x) ? 'int' : 'float'\n if (is.arr(x)) return COMPONENT_COUNT_TO_TYPE[x.length as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n if (isElement(x)) return 'texture' as T\n return 'void' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n const ret = COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n if (!ret)\n throw `glre node system error: Cannot infer type from array length ${count}. Check your data size. Supported: 1(float), 2(vec2), 3(vec3), 4(vec4), 9(mat3), 16(mat4)`\n return ret\n}\n\nconst inferFromArray = <T extends C>(arr: Y<T>[], c: NodeContext) => {\n if (arr.length === 0) return 'void' as T\n const [x] = arr\n if (is.str(x)) return x as T // for struct\n const ret = infer(x, c)\n // for (const x of arr.slice(1))\n // if (ret !== infer(x, c)) throw `glre node system error: defined scope return mismatch`\n return ret\n}\n\nexport const inferFunction = <T extends C>(x: Y) => {\n return FUNCTION_RETURN_TYPES[x as keyof typeof FUNCTION_RETURN_TYPES] as T\n}\n\nexport const inferImpl = <T extends C>(target: X<T>, c: NodeContext): T => {\n const { type, props } = target\n const { id, children = [], inferFrom, layout } = props\n const [x, y, z] = children\n if (type === 'conversion') return x\n if (type === 'operator') return inferOperator(infer(y, c), infer(z, c), x)\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'function') return inferFunction(x) || infer(y, c)\n if (type === 'define') {\n if (isConstants(layout?.type)) return layout?.type as T\n if (!inferFrom || inferFrom.length === 0) return 'void' as T\n return inferFromArray(inferFrom, c)\n }\n if (type === 'attribute' && is.arr(x)) {\n const stride = getStride(x.length, c.gl?.count, c.gl?.error)\n return inferFromCount(stride)\n }\n if (type === 'instance' && is.arr(x)) {\n const stride = getStride(x.length, c.gl?.instanceCount, c.gl?.error)\n return inferFromCount(stride)\n }\n if (type === 'member') {\n if (isSwizzle(y)) return inferFromCount(y.length)\n if (isX(x)) {\n const structType = infer(x, c)\n const fields = c.code?.structStructFields?.get(structType)\n if (fields && fields[y]) return infer(fields[y], c) as T\n }\n return 'float' as T\n }\n if (inferFrom) return inferFromArray(inferFrom, c)\n return x ? infer(x, c) : ('void' as T) // for uniform and storage gather and scatter\n}\n\nexport const infer = <T extends C>(target: Y<T>, c?: NodeContext | null): T => {\n if (!c) c = {}\n if (!isX(target)) return inferPrimitiveType(target)\n if (is.arr(target)) return inferFromCount(target.length)\n if (!c.infers) c.infers = new WeakMap<X<T>, C>()\n if (c.infers.has(target)) return c.infers.get(target) as T\n const ret = inferImpl(target, c)\n c.infers.set(target, ret)\n return ret as T\n}\n","import { code } from '.'\nimport { infer } from './infer'\nimport { getConversions, addDependency } from './utils'\nimport { is } from '../../utils/helpers'\nimport type { Constants, NodeContext, NodeProps, StructFields, Y } from '../types'\nimport { storageSize } from '../../utils/program'\n\nexport const parseArray = (children: Y[], c: NodeContext) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\n// only for webgl\nexport const parseGather = (c: NodeContext, x: Y, y: Y, target: Y) => {\n const parseSwizzle = () => {\n const valueType = infer(target, c)\n if (valueType === 'float') return '.x'\n if (valueType === 'vec2') return '.xy'\n if (valueType === 'vec3') return '.xyz'\n if (valueType === 'vec4') return ''\n throw new Error(`Unsupported storage scatter type: ${valueType}`)\n }\n const indexVar = code(y, c)\n const size = storageSize(c.gl?.particleCount)\n const coordX = `int(${indexVar}) % ${size.x}`\n const coordY = `int(${indexVar}) / ${size.x}`\n return `texelFetch(${code(x, c)}, ivec2(${coordX}, ${coordY}), 0)${parseSwizzle()}`\n}\n\n// only for webgl\nexport const parseScatter = (c: NodeContext, storageNode: Y, valueNode: Y) => {\n const storageId = code(storageNode, c)\n const valueCode = code(valueNode, c)\n const valueType = infer(valueNode, c)\n if (valueType === 'float') return `_${storageId} = vec4(${valueCode}, 0.0, 0.0, 1.0);`\n if (valueType === 'vec2') return `_${storageId} = vec4(${valueCode}, 0.0, 1.0);`\n if (valueType === 'vec3') return `_${storageId} = vec4(${valueCode}, 1.0);`\n if (valueType === 'vec4') return `_${storageId} = ${valueCode};`\n throw new Error(`Unsupported storage scatter type: ${valueType}`)\n}\n\nexport const parseTexture = (c: NodeContext, y: Y, z: Y, w: Y) => {\n if (c.isWebGL) {\n const args = w ? [y, z, w] : [y, z]\n return `texture(${parseArray(args, c)})`\n }\n const _y = code(y, c)\n const args = [_y, _y + 'Sampler', code(z, c)]\n if (!w) return `textureSample(${args})`\n args.push(code(w, c))\n return `textureSampleLevel(${args})`\n}\n\n/**\n * scopes\n */\nexport const parseIf = (c: NodeContext, x: Y, y: Y, children: Y[]) => {\n let ret = `if (${code(x, c)}) {\\n${code(y, c)}\\n}`\n for (let i = 2; i < children.length; i += 2) {\n const isElse = i >= children.length - 1\n ret += !isElse\n ? ` else if (${code(children[i], c)}) {\\n${code(children[i + 1], c)}\\n}`\n : ` else {\\n${code(children[i], c)}\\n}`\n }\n return ret\n}\n\nexport const parseSwitch = (c: NodeContext, x: Y, children: Y[]) => {\n let ret = `switch (${code(x, c)}) {\\n`\n for (let i = 1; i < children.length; i += 2) {\n const isDefault = i >= children.length - 1\n if (isDefault && children.length % 2 === 0) {\n ret += `default:\\n${code(children[i], c)}\\nbreak;\\n`\n } else if (i + 1 < children.length)\n ret += `case ${code(children[i], c)}:\\n${code(children[i + 1], c)}\\nbreak;\\n`\n }\n ret += '}'\n return ret\n}\n\nexport const parseDeclare = (c: NodeContext, x: Y, y: Y) => {\n const type = infer(x, c)\n const varName = (y as any)?.props?.id\n if (c.isWebGL) return `${type} ${varName} = ${code(x, c)};`\n const wgslType = getConversions(type)\n return `var ${varName}: ${wgslType} = ${code(x, c)};`\n}\n\nexport const parseStructHead = (c: NodeContext, id: string, fields: StructFields = {}) => {\n c.code?.structStructFields?.set(id, fields)\n const lines: string[] = []\n for (const key in fields) {\n const fieldType = fields[key]\n const type = infer(fieldType, c)\n if (c.isWebGL) addDependency(c, id, type)\n lines.push(c.isWebGL ? `${type} ${key};` : `${key}: ${getConversions(type, c)},`)\n }\n const ret = lines.join('\\n ')\n return `struct ${id} {\\n ${ret}\\n};`\n}\n\nexport const parseStruct = (c: NodeContext, id: string, instanceId = '', initialValues?: StructFields) => {\n const fields = c.code?.structStructFields?.get(id) || {}\n if (c.isWebGL) {\n if (initialValues) {\n const ordered = []\n for (const key in fields) ordered.push(initialValues[key])\n return `${id} ${instanceId} = ${id}(${parseArray(ordered, c)});`\n } else return `${id} ${instanceId};`\n } else {\n if (initialValues) {\n const ordered = []\n for (const key in fields) ordered.push(initialValues[key])\n return `var ${instanceId}: ${id} = ${id}(${parseArray(ordered, c)});`\n } else return `var ${instanceId}: ${id};`\n }\n}\n\n/**\n * define\n */\nexport const parseDefine = (c: NodeContext, props: NodeProps, target: Y) => {\n const { id, children = [], layout } = props\n const [x, ...args] = children\n const argParams: [name: string, type: Constants][] = []\n const params: string[] = []\n for (let i = 0; i < args.length; i++) {\n const input = layout?.inputs?.[i]\n if (!input) argParams.push([`p${i}`, infer(args[i], c)])\n else argParams.push([input.name, input.type === 'auto' ? infer(args[i], c) : input.type])\n }\n const scopeCode = code(x, c) // build struct headers before inferring returnType\n const returnType = infer(target, c)\n const ret = []\n if (c?.isWebGL) {\n for (const [paramId, type] of argParams) {\n addDependency(c, id!, type)\n params.push(`${type} ${paramId}`)\n }\n addDependency(c, id!, returnType)\n ret.push(`${returnType} ${id}(${params}) {`)\n } else {\n for (const [paramId, type] of argParams) params.push(`${paramId}: ${getConversions(type, c)}`)\n const isVoid = returnType === 'void'\n if (isVoid) {\n ret.push(`fn ${id}(${params}) {`)\n } else ret.push(`fn ${id}(${params}) -> ${getConversions(returnType, c)} {`)\n }\n if (scopeCode) ret.push(scopeCode)\n ret.push('}')\n return ret.join('\\n')\n}\n\n/**\n * headers\n */\nexport const parseVaryingHead = (c: NodeContext, id: string, type: Constants) => {\n return c.isWebGL\n ? `${type} ${id};`\n : `@location(${c.code?.vertVaryings?.size || 0}) ${id}: ${getConversions(type, c)}`\n}\n\nexport const parseAttribHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) return `${type} ${id};`\n const { location = 0 } = c.gl?.webgpu?.attribs.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseUniformHead = (c: NodeContext, id: string, type: Constants) => {\n const isTexture = type === 'sampler2D' || type === 'texture'\n if (c.isWebGL)\n return isTexture //\n ? `uniform sampler2D ${id};`\n : `uniform ${type} ${id};`\n if (isTexture) {\n const { group = 1, binding = 0 } = c.gl?.webgpu?.textures.map.get(id) || {}\n return (\n `@group(${group}) @binding(${binding}) var ${id}Sampler: sampler;\\n` +\n `@group(${group}) @binding(${binding + 1}) var ${id}: texture_2d<f32>;`\n )\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.uniforms.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\n}\n\nexport const parseStorageHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) {\n const ret = `uniform sampler2D ${id};`\n if (c.label !== 'compute') return ret\n const location = c.units?.(id)\n return `${ret}\\nlayout(location = ${location}) out vec4 _${id};` // out texture buffer\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.storages.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<storage, read_write> ${id}: array<${wgslType}>;`\n}\n\nexport const parseLoop = (c: NodeContext, x: Y, y: Y, id: string) => {\n const conditionType = infer(x, c)\n const bodyCode = code(y, c)\n const conditionCode = code(x, c)\n if (c.isWebGL) {\n if (conditionType === 'int')\n return `for (int ${id} = 0; ${id} < ${conditionCode}; ${id} += 1) {\\n${bodyCode}\\n}`\n if (conditionType === 'float')\n return `for (float ${id} = 0.0; ${id} < ${conditionCode}; ${id} += 1.0) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec2')\n return `for (vec2 ${id} = vec2(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y; ${id} += vec2(1.0)) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec3')\n return `for (vec3 ${id} = vec3(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y && ${id}.z < ${conditionCode}.z; ${id} += vec3(1.0)) {\\n${bodyCode}\\n}`\n return `for (int ${id} = 0; ${id} < ${conditionCode}; ${id} += 1) {\\n${bodyCode}\\n}`\n }\n if (conditionType === 'int')\n return `for (var ${id}: i32 = 0; ${id} < ${conditionCode}; ${id}++) {\\n${bodyCode}\\n}`\n if (conditionType === 'float')\n return `for (var ${id}: f32 = 0.0; ${id} < ${conditionCode}; ${id} += 1.0) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec2')\n return `for (var ${id}: vec2f = vec2f(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y; ${id} += vec2f(1.0)) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec3')\n return `for (var ${id}: vec3f = vec3f(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y && ${id}.z < ${conditionCode}.z; ${id} += vec3f(1.0)) {\\n${bodyCode}\\n}`\n return `for (var ${id}: i32 = 0; ${id} < ${conditionCode}; ${id}++) {\\n${bodyCode}\\n}`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, type: Constants, value: string) => {\n return c.isWebGL ? `const ${type} ${id} = ${value};` : `const ${id}: ${getConversions(type, c)} = ${value};`\n}\n","import { infer } from './infer'\nimport {\n parseArray,\n parseAttribHead,\n parseConstantHead,\n parseDeclare,\n parseDefine,\n parseGather,\n parseIf,\n parseLoop,\n parseScatter,\n parseStorageHead,\n parseStruct,\n parseStructHead,\n parseSwitch,\n parseTexture,\n parseUniformHead,\n parseVaryingHead,\n} from './parse'\nimport { getBluiltin, getConversions, getOperator, initNodeContext, isElement, isX, setupEvent } from './utils'\nimport { is } from '../../utils/helpers'\nimport { mod } from '..'\nimport type { Constants as C, NodeContext, Y } from '../types'\n\nexport * from './utils'\n\nexport const code = <T extends C>(target: Y<T>, c?: NodeContext | null): string => {\n if (!c) c = {}\n initNodeContext(c)\n if (is.arr(target)) return parseArray(target, c)\n if (is.str(target)) return target\n if (is.num(target)) {\n const ret = `${target}`\n if (ret.includes('.')) return ret\n // Check if this number should be an integer based on the inferred type\n // For now, keep the original behavior to maintain compatibility\n return ret + '.0'\n }\n if (is.bol(target)) return target ? 'true' : 'false'\n if (!target) return ''\n if (!isX(target)) return ''\n const { type, props = {} } = target\n const { id = 'i', children = [], fields, initialValues } = props\n const [x, y, z, w] = children\n /**\n * variables\n */\n if (type === 'variable') return id\n if (type === 'member') return `${code(x, c)}.${code(y, c)}`\n if (type === 'element') return `${code(x, c)}[${code(y, c)}]`\n if (type === 'gather')\n return c.isWebGL //\n ? parseGather(c, x, y, target)\n : `${code(x, c)}[${code(y, c)}]`\n if (type === 'scatter') {\n const [storageNode, indexNode] = x.props.children ?? [] // x is gather node\n return c.isWebGL\n ? parseScatter(c, storageNode, y) // indexNode is not using\n : `${code(storageNode, c)}[${code(indexNode, c)}] = ${code(y, c)};`\n }\n if (type === 'ternary')\n return c.isWebGL\n ? `(${code(z, c)} ? ${code(x, c)} : ${code(y, c)})`\n : `select(${code(x, c)}, ${code(y, c)}, ${code(z, c)})`\n if (type === 'conversion') return `${getConversions(x, c)}(${parseArray(children.slice(1), c)})`\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, c)}`\n if (x === 'mod') return code(mod(y, z), c)\n if (x.endsWith('Assign')) return `${code(y, c)} ${getOperator(x)} ${code(z, c)};`\n return `(${code(y, c)} ${getOperator(x)} ${code(z, c)})`\n }\n if (type === 'function') {\n if (x === 'negate') return `(-${code(y, c)})`\n if (x === 'reciprocal') return `(1.0 / ${code(y, c)})`\n if (x === 'oneMinus') return `(1.0-${code(y, c)})`\n if (x === 'saturate') return `clamp(${code(y, c)}, 0.0, 1.0)`\n if (x === 'texture') return parseTexture(c, y, z, w)\n if (x === 'atan2' && c.isWebGL) return `atan(${code(y, c)}, ${code(z, c)})`\n if (!c.isWebGL) {\n if (x === 'dFdx') return `dpdx(${code(y, c)})`\n if (x === 'dFdy') return `dpdy(${code(y, c)})`\n }\n return `${x}(${parseArray(children.slice(1), c)})`\n }\n /**\n * scopes\n */\n if (type === 'scope') return children.map((child: any) => code(child, c)).join('\\n')\n if (type === 'assign') return `${code(x, c)} = ${code(y, c)};`\n if (type === 'return') return `return ${code(x, c)};`\n if (type === 'break') return 'break;'\n if (type === 'continue') return 'continue;'\n if (type === 'loop') return parseLoop(c, x, y, id)\n if (type === 'if') return parseIf(c, x, y, children)\n if (type === 'switch') return parseSwitch(c, x, children)\n if (type === 'declare') return parseDeclare(c, x, y)\n if (type === 'define') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseDefine(c, props, target))\n return `${id}(${parseArray(children.slice(1), c)})`\n }\n if (type === 'struct') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseStructHead(c, id, fields))\n return parseStruct(c, id, x.props.id, initialValues)\n }\n /**\n * headers\n */\n if (type === 'varying') {\n if (c.code?.vertOutputs.has(id)) return c.isWebGL ? `${id}` : `out.${id}`\n const field = parseVaryingHead(c, id, infer(target, c))\n c.code?.fragInputs.set(id, field)\n c.code?.vertOutputs.set(id, field)\n c.code?.vertVaryings.set(id, code(x, c))\n return c.isWebGL ? `${id}` : `out.${id}`\n }\n if (type === 'builtin') {\n if (c.isWebGL) return getBluiltin(c, id)\n if (id === 'position') return 'out.position'\n const field = `@builtin(${id}) ${id}: ${getConversions(infer(target, c), c)}`\n if (c.label === 'compute') c.code?.computeInputs.set(id, field)\n else if (c.label === 'frag') c.code?.fragInputs.set(id, field)\n else if (c.label === 'vert') c.code?.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute' || type === 'instance') {\n setupEvent(c, id, type, target, x)\n c.code?.vertInputs.set(id, parseAttribHead(c, id, infer(target, c)))\n return c.isWebGL ? `${id}` : `in.${id}`\n }\n if (c.code?.headers.has(id)) return id // must last\n let head = ''\n if (type === 'uniform') {\n const varType = infer(target, c)\n setupEvent(c, id, varType, target, x)\n head = parseUniformHead(c, id, varType)\n }\n if (type === 'storage') head = parseStorageHead(c, id, infer(target, c))\n if (type === 'constant') head = parseConstantHead(c, id, infer(target, c), code(x, c))\n if (head) {\n c.code?.headers.set(id, head)\n return id\n }\n return code(x, c)\n}\n","import { code } from './utils'\nimport type { NodeContext, X } from './types'\n\nconst topological = (headers: Map<string, string>, dependencies: Map<string, Set<string>>) => {\n const sorted: [string, string][] = []\n const visited = new Set<string>()\n const visiting = new Set<string>()\n const visit = (id: string) => {\n if (visiting.has(id)) return\n if (visited.has(id)) return\n visiting.add(id)\n const deps = dependencies.get(id) || new Set()\n for (const dep of deps) if (headers.has(dep)) visit(dep)\n visiting.delete(id)\n visited.add(id)\n if (headers.has(id)) sorted.push([id, headers.get(id)!])\n }\n for (const [id] of headers) visit(id)\n return sorted\n}\n\nconst build = (x: X, c: NodeContext) => {\n const body = code(x, c)\n let head = ''\n if (c.isWebGL && c.code?.dependencies) {\n const sorted = topological(c.code.headers, c.code.dependencies)\n head = sorted.map(([, value]) => value).join('\\n')\n } else head = Array.from(c.code?.headers?.values() || []).join('\\n')\n let [lines, ret] = body.split('return ')\n if (ret) ret = ret.replace(';', '')\n else [lines, ret] = ['', body]\n return [head, lines.trim(), ret]\n}\n\nconst generateStruct = (id: string, map: Map<string, string>) => {\n return `struct ${id} {\\n ${Array.from(map.values()).join(',\\n ')}\\n}`\n}\n\nconst precisionHead = (result: string[], precision = 'highp') => {\n result.push(`precision ${precision} float;`)\n result.push(`precision ${precision} int;`)\n result.push(`precision ${precision} sampler2D;`)\n result.push(`precision ${precision} samplerCube;`)\n result.push(`precision ${precision} sampler3D;`)\n result.push(`precision ${precision} sampler2DArray;`)\n result.push(`precision ${precision} sampler2DShadow;`)\n result.push(`precision ${precision} samplerCubeShadow;`)\n result.push(`precision ${precision} sampler2DArrayShadow;`)\n result.push(`precision ${precision} isampler2D;`)\n result.push(`precision ${precision} isampler3D;`)\n result.push(`precision ${precision} isamplerCube;`)\n result.push(`precision ${precision} isampler2DArray;`)\n result.push(`precision ${precision} usampler2D;`)\n result.push(`precision ${precision} usampler3D;`)\n result.push(`precision ${precision} usamplerCube;`)\n result.push(`precision ${precision} usampler2DArray;`)\n}\n\n// ref: https://github.com/mrdoob/three.js/blob/master/src/renderers/webgl/WebGLCapabilities.js\nconst getMaxPrecision = (c?: WebGL2RenderingContext, precision = 'highp') => {\n if (!c) return 'highp'\n if (precision === 'highp') {\n const p0 = c.getShaderPrecisionFormat(c.VERTEX_SHADER, c.HIGH_FLOAT)\n const p1 = c.getShaderPrecisionFormat(c.FRAGMENT_SHADER, c.HIGH_FLOAT)\n if (p0 && p0.precision > 0 && p1 && p1.precision > 0) return 'highp'\n precision = 'mediump'\n }\n if (precision === 'mediump') {\n const p0 = c.getShaderPrecisionFormat(c.VERTEX_SHADER, c.MEDIUM_FLOAT)\n const p1 = c.getShaderPrecisionFormat(c.FRAGMENT_SHADER, c.MEDIUM_FLOAT)\n if (p0 && p0.precision > 0 && p1 && p1.precision > 0) return 'mediump'\n precision = 'lowp'\n }\n return 'lowp'\n}\n\nexport const fragment = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'frag' // for varying inputs or outputs\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n precisionHead(result, getMaxPrecision(c.gl?.webgl?.context, c.gl?.precision))\n result.push('out vec4 fragColor;')\n for (const code of c.code?.fragInputs?.values() || []) result.push(`in ${code}`)\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` fragColor = ${ret};`)\n } else {\n if (c.code?.fragInputs?.size) result.push(generateStruct('Out', c.code.fragInputs))\n result.push(head)\n result.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n result.push(` ${lines}`)\n result.push(` return ${ret};`)\n }\n result.push('}')\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const vertex = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'vert' // for varying inputs or outputs\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) result.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) result.push(`out ${code}`)\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` gl_Position = ${ret};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) result.push(` ${id} = ${code};`)\n } else {\n if (c.code?.vertInputs?.size) result.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) result.push(generateStruct('Out', c.code.vertOutputs))\n result.push(head)\n result.push('@vertex')\n result.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n result.push(' var out: Out;')\n result.push(` ${lines}`)\n result.push(` out.position = ${ret};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) result.push(` out.${id} = ${code};`)\n result.push(' return out;')\n }\n result.push('}')\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const compute = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'compute'\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n precisionHead(result, 'highp')\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` ${ret};`)\n result.push('}')\n } else {\n if (c.code?.computeInputs?.size) result.push(generateStruct('In', c.code.computeInputs))\n result.push(head)\n result.push('@compute @workgroup_size(32)')\n result.push(`fn main(${c.code?.computeInputs?.size ? 'in: In' : ''}) {`)\n result.push(` ${lines}`)\n result.push(` ${ret};`)\n result.push('}')\n }\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n","import { conversion, create } from './create'\nimport type {\n FnLayout,\n FnType,\n Constants as C,\n Int,\n NodeProps,\n Struct,\n StructFactory,\n StructFields,\n X,\n Y,\n} from './types'\nimport { getId } from './utils'\n\nlet scope: X | null = null\nlet define: X | null = null\n\nexport const addToScope = <T extends C>(x: X<T>) => {\n if (!scope) return\n if (!scope.props.children) scope.props.children = []\n scope.props.children.push(x)\n if (x.type !== 'return' || !define) return x\n const { props } = define\n if (!props.inferFrom) props.inferFrom = []\n props.inferFrom.push(x)\n return x\n}\n\nexport function toVar<T extends StructFields>(x: Struct<T>, id?: string): Struct<T>\nexport function toVar<T extends C>(x: X<T>, id?: string): X<T> {\n if (!id) id = getId()\n const y = create<T>('variable', { id, inferFrom: [x] })\n const z = create<T>('declare', null, x as X, y)\n addToScope(z)\n return y\n}\n\nexport const assign = <T extends C>(x: X<T>, isScatter = false, y: Y<T>): X<T> => {\n const z = create(isScatter ? 'scatter' : 'assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = <T extends C>(x?: Y<T>): Y<T> => {\n return addToScope(create<T>('return', { inferFrom: [x] }, x))\n}\n\nexport const Break = (): Y => {\n return addToScope(create('break'))\n}\n\nexport const Continue = (): Y => {\n return addToScope(create('continue'))\n}\n\nexport const struct = <T extends StructFields>(fields: T, id = getId()): StructFactory<T> => {\n return (initialValues: StructFields = {}, instanceId = getId()) => {\n const x = create('variable', { id: instanceId, inferFrom: [id] })\n const y = create('struct', { id, fields, initialValues }, x)\n addToScope(y)\n return x as Struct<T>\n }\n}\n\nexport const scoped = (x: X, fun: () => X | void, y = define) => {\n const [_scope, _define] = [scope, define]\n ;[scope, define] = [x, y]\n const z = fun()\n if (z) Return(z)\n ;[scope, define] = [_scope, _define]\n}\n\nexport const Scope = <T extends X>(fun: () => T | void) => {\n const scope = create('scope')\n scoped(scope, fun)\n return scope as T\n}\n\nexport const If = (x: Y, fun: () => void) => {\n const y = Scope(fun)\n const ifNode = create('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = Scope(_fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = Scope(_fun)\n ifNode.props.children!.push(_x)\n },\n })\n return ret()\n}\n\nexport const Loop = (x: Y, fun: (params: { i: Int }) => void) => {\n const id = getId()\n const y = Scope(() => fun({ i: create<'int'>('variable', { id, inferFrom: [conversion('int', 0)] }) }))\n const ret = create('loop', { id }, x, y)\n return addToScope(ret)\n}\n\nexport const Switch = (x: Y) => {\n const switchNode = create('switch', null, x)\n addToScope(switchNode)\n const ret = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const y = Scope(fun)\n for (const _x of values) switchNode.props.children!.push(_x, y)\n return ret()\n }\n },\n Default: (fun: () => void) => {\n const scope = Scope(fun)\n switchNode.props.children!.push(scope)\n },\n })\n return ret()\n}\n\nexport function Fn<T extends X | Struct | void, Args extends any[]>(fun: (args: Args) => T, layout?: FnLayout) {\n const defaultId = getId()\n const ret = (...args: any[]) => {\n const id = layout?.name || defaultId\n const paramVars: X[] = []\n const paramDefs: NodeProps[] = []\n for (let i = 0; i < args.length; i++) {\n const input = layout?.inputs?.[i]\n if (!input) paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n else\n paramDefs.push({\n id: input.name,\n inferFrom:\n input.type === 'auto' ? [args[i]] : [conversion(input.type, args[i])],\n })\n }\n for (const props of paramDefs) paramVars.push(create('variable', props))\n const x = create('scope')\n const y = create('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars as Args) as any, y)\n return y\n }\n ret.getLayout = () => layout\n ret.setLayout = (_layout: FnLayout) => {\n layout = _layout\n return ret\n }\n return ret as unknown as Args extends readonly unknown[] ? FnType<T, Args> : never\n}\n","import { compute, fragment, vertex } from './build'\nimport { addToScope, assign, toVar } from './scope'\nimport { code, getConstant, isConversion, isFunction, isOperator, getId, isArrayAccess } from './utils'\nimport { is } from '../utils/helpers'\nimport type { Bool, Constants as C, Functions, NodeProps, NodeTypes, Operators, X, Y } from './types'\n\nconst toPrimitive = (x: Y, hint: string) => {\n if (hint === 'string') return code(x as any, null)\n}\n\nexport const create = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: Y[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\n const listeners = new Set<(value: any) => void>()\n const get = (_: unknown, key: string | Symbol) => {\n if (key === 'type') return type\n if (key === 'props') return props\n if (key === 'toVar') return toVar.bind(null, x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === 'fragment') return fragment.bind(null, x)\n if (key === 'compute') return compute.bind(null, x)\n if (key === 'vertex') return vertex.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive.bind(null, x)\n if (key === 'listeners') return listeners\n if (key === 'attribute') return (id = getId()) => attribute(x, id)\n if (key === 'instance') return (id = getId()) => instance(x, id)\n if (key === 'constant') return (id = getId()) => constant(x, id)\n if (key === 'uniform') return (id = getId()) => uniform(x, id)\n if (key === 'variable') return (id = getId()) => variable(id)\n if (key === 'builtin') return (id = getId()) => builtin(id)\n if (key === 'vertexStage') return (id = getId()) => vertexStage(x, id)\n if (key === 'element') return (arg: Y) => (type === 'storage' ? gather(x, arg) : element(x, arg))\n if (key === 'member') return (arg: Y) => member(x, arg)\n if (key === 'assign') return assign.bind(null, x, x.type === 'gather')\n if (key === 'select') return select.bind(null, x)\n if (isOperator(key)) {\n return key.endsWith('Assign')\n ? (...args: Y[]) => addToScope(operator(key, x, ...args))\n : (...args: Y[]) => operator(key, x, ...args)\n }\n if (isFunction(key)) return (...args: Y[]) => function_(key, x, ...args)\n if (isConversion(key)) return () => conversion(getConstant(key), x)\n if (is.str(key)) return isArrayAccess(key) ? element(x, key) : member(x, key)\n }\n const set = (_: unknown, key: string, arg: Y) => {\n if (key === 'value') listeners.forEach((fun) => fun(arg))\n if (is.str(key)) member(x, key).assign(arg)\n return true\n }\n const x = new Proxy({}, { get, set }) as unknown as X<T>\n return x\n}\n\n// headers with proper type inference\nexport const attribute = <T extends C>(x: Y<T>, id = getId()) => create<T>('attribute', { id }, x)\nexport const instance = <T extends C>(x: Y<T>, id = getId()) => create<T>('instance', { id }, x)\nexport const constant = <T extends C>(x: Y<T>, id = getId()) => create<T>('constant', { id }, x)\nexport const uniform = <T extends C>(x: Y<T>, id = getId()) => create<T>('uniform', { id }, x)\nexport const storage = <T extends C>(x: Y<T>, id = getId()) => create<T>('storage', { id }, x)\nexport const variable = <T extends C>(id = getId()) => create<T>('variable', { id })\nexport const builtin = <T extends C>(id = getId()) => create<T>('builtin', { id })\nexport const vertexStage = <T extends C>(x: X<T>, id = getId()) => {\n return create<T>('varying', { id, inferFrom: [x] }, x)\n}\n\n// Node shorthands with proper typing\nexport const member = <T extends C>(x: X, index: Y) => create<T>('member', null, x, index)\nexport const element = <T extends C>(x: X, index: Y) => create<T>('element', null, x, index)\nexport const gather = <T extends C>(x: X, index: Y) => create<T>('gather', null, x, index)\nexport const scatter = <T extends C>(x: X, index: Y) => create<T>('scatter', null, x, index)\nexport const select = <T extends C>(x: Y<T>, y: Y<T>, z: Bool) => create<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE\nexport const operator = <T extends C>(key: Operators, ...x: Y[]) => create<T>('operator', null, key, ...x)\nexport const function_ = <T extends C>(key: Functions, ...x: Y[]) => create<T>('function', null, key, ...x)\nexport const conversion = <T extends C>(key: T, ...x: Y[]) => create<T>('conversion', null, key, ...x)\n","import { hex2rgb } from './utils'\nimport { builtin as b, conversion as c, function_ as f, uniform as u } from './create'\nimport { is } from '../utils/helpers'\nimport type { Constants as C, Float, X, Y } from './types'\nexport * from './build'\nexport * from './create'\nexport * from './scope'\nexport * from './types'\n\n// Builtin Variables\nexport const position = b<'vec4'>('position')\nexport const vertexIndex = b<'uint'>('vertex_index')\nexport const instanceIndex = b<'uint'>('instance_index')\nexport const frontFacing = b<'bool'>('front_facing')\nexport const fragDepth = b<'float'>('frag_depth')\nexport const sampleIndex = b<'uint'>('sample_index')\nexport const sampleMask = b<'uint'>('sample_mask')\nexport const pointCoord = b<'vec2'>('point_coord')\nexport const id = b<'uvec3'>('global_invocation_id')\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = b<'vec3'>('position')\nexport const positionWorld = b<'vec3'>('positionWorld')\nexport const positionView = b<'vec3'>('positionView')\nexport const normalLocal = b<'vec3'>('normalLocal')\nexport const normalWorld = b<'vec3'>('normalWorld')\nexport const normalView = b<'vec3'>('normalView')\nexport const screenCoordinate = b<'vec2'>('screenCoordinate')\nexport const screenUV = b<'vec2'>('screenUV')\n\n// Type constructors with proper type inference\nexport const float = (x?: Y) => c('float', x)\nexport const int = (x?: Y) => c('int', x)\nexport const uint = (x?: Y) => c('uint', x)\nexport const bool = (x?: Y) => c('bool', x)\nexport const vec2 = (x?: Y, y?: Y) => c('vec2', x, y)\nexport const vec3 = (x?: Y, y?: Y, z?: Y) => c('vec3', x, y, z)\nexport const vec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('vec4', x, y, z, w)\nexport const mat2 = (...args: Y[]) => c('mat2', ...args)\nexport const mat3 = (...args: Y[]) => c('mat3', ...args)\nexport const mat4 = (...args: Y[]) => c('mat4', ...args)\nexport const ivec2 = (x?: Y, y?: Y) => c('ivec2', x, y)\nexport const ivec3 = (x?: Y, y?: Y, z?: Y) => c('ivec3', x, y, z)\nexport const ivec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('ivec4', x, y, z, w)\nexport const uvec2 = (x?: Y, y?: Y) => c('uvec2', x, y)\nexport const uvec3 = (x?: Y, y?: Y, z?: Y) => c('uvec3', x, y, z)\nexport const uvec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('uvec4', x, y, z, w)\nexport const bvec2 = (x?: Y, y?: Y) => c('bvec2', x, y)\nexport const bvec3 = (x?: Y, y?: Y, z?: Y) => c('bvec3', x, y, z)\nexport const bvec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('bvec4', x, y, z, w)\nexport const texture2D = (x?: Y) => c('texture', x)\nexport const sampler2D = () => c('sampler2D')\nexport const color = (r?: Y, g?: Y, b?: Y) => {\n if (is.num(r) && is.und(g) && is.und(b)) return vec3(...hex2rgb(r))\n return vec3(r, g, b)\n}\n\n// Default uniforms with proper typing\nexport const iResolution = u(vec2(), 'iResolution')\nexport const iMouse = u(vec2(), 'iMouse')\nexport const iTime = u(float(), 'iTime')\nexport const uv = position.xy.div(iResolution)\n\n/**\n * 1.1. unified with:\n * 2.1. const.ts BUILTIN_VARIABLES and\n * 3.1. types.ts _N\n */\n// 0. Always return bool\nexport const all = <T extends C>(x: X<T>) => f<'bool'>('all', x)\nexport const any = <T extends C>(x: X<T>) => f<'bool'>('any', x)\n\n// 2. Always return float with WGSL-compliant type constraints and unified parameter types\nexport const determinant = <T extends 'mat2' | 'mat3' | 'mat4'>(x: X<T>) => f<'float'>('determinant', x)\nexport const distance = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(x: X<T>, y: number | X<U>) =>\n f<'float'>('distance', x, y)\nexport const dot = <T extends 'vec2' | 'vec3' | 'vec4' | 'ivec2' | 'ivec3' | 'ivec4', U extends C>(\n x: X<T>,\n y: number | X<U>\n) => f<T extends `ivec${string}` ? 'int' : 'float'>('dot', x, y)\nexport const length = <T extends 'vec2' | 'vec3' | 'vec4'>(x: X<T>) => f<'float'>('length', x)\nexport const lengthSq = (x: X) => f<'float'>('lengthSq', x)\nexport const luminance = (x: X) => f<'float'>('luminance', x)\n\n// 3. Always return vec3 with vec3 constraint and unified parameter types\nexport const cross = <U extends C = 'vec3'>(x: X<'vec3'>, y: number | X<U>) => f<'vec3'>('cross', x, y)\n\n// 4. Always return vec4\nexport const cubeTexture = (x: X, y: X, z?: X) => f<'vec4'>('cubeTexture', x, y, z)\nexport const texture = (x: X, y: X, z?: X) => f<'vec4'>('texture', x, y, z)\nexport const texelFetch = (x: X, y: X, z?: X) => f<'vec4'>('texelFetch', x, y, z)\nexport const textureLod = (x: X, y: X, z?: X) => f<'vec4'>('textureLod', x, y, z)\n\n/**\n * 1.2. unified with:\n * 2.2. const.ts FUNCTIONS and\n * 3.2. types.ts _N\n */\n// 0. Component-wise functions\nexport const abs = <T extends C>(x: X<T>) => f<T>('abs', x)\nexport const acos = <T extends C>(x: X<T>) => f<T>('acos', x)\nexport const acosh = <T extends C>(x: X<T>) => f<T>('acosh', x)\nexport const asin = <T extends C>(x: X<T>) => f<T>('asin', x)\nexport const asinh = <T extends C>(x: X<T>) => f<T>('asinh', x)\nexport const atan = <T extends C>(x: X<T>) => f<T>('atan', x)\nexport const atanh = <T extends C>(x: X<T>) => f<T>('atanh', x)\nexport const ceil = <T extends C>(x: X<T>) => f<T>('ceil', x)\nexport const cos = <T extends C>(x: X<T>) => f<T>('cos', x)\nexport const cosh = <T extends C>(x: X<T>) => f<T>('cosh', x)\nexport const dFdx = <T extends C>(x: X<T>) => f<T>('dFdx', x)\nexport const dFdy = <T extends C>(x: X<T>) => f<T>('dFdy', x)\nexport const degrees = <T extends C>(x: X<T>) => f<T>('degrees', x)\nexport const exp = <T extends C>(x: X<T>) => f<T>('exp', x)\nexport const exp2 = <T extends C>(x: X<T>) => f<T>('exp2', x)\nexport const floor = <T extends C>(x: X<T>) => f<T>('floor', x)\nexport const fract = <T extends C>(x: X<T>) => f<T>('fract', x)\nexport const fwidth = <T extends C>(x: X<T>) => f<T>('fwidth', x)\nexport const inverseSqrt = <T extends C>(x: X<T>) => f<T>('inverseSqrt', x)\nexport const log = <T extends C>(x: X<T>) => f<T>('log', x)\nexport const log2 = <T extends C>(x: X<T>) => f<T>('log2', x)\nexport const negate = <T extends C>(x: X<T>) => f<T>('negate', x)\nexport const normalize = <T extends 'vec2' | 'vec3' | 'vec4'>(x: X<T>) => f<T>('normalize', x)\nexport const oneMinus = <T extends C>(x: X<T>) => f<T>('oneMinus', x)\nexport const radians = <T extends C>(x: X<T>) => f<T>('radians', x)\nexport const reciprocal = <T extends C>(x: X<T>) => f<T>('reciprocal', x)\nexport const round = <T extends C>(x: X<T>) => f<T>('round', x)\nexport const sign = <T extends C>(x: X<T>) => f<T>('sign', x)\nexport const sin = <T extends C>(x: X<T>) => f<T>('sin', x)\nexport const sinh = <T extends C>(x: X<T>) => f<T>('sinh', x)\nexport const sqrt = <T extends C>(x: X<T>) => f<T>('sqrt', x)\nexport const tan = <T extends C>(x: X<T>) => f<T>('tan', x)\nexport const tanh = <T extends C>(x: X<T>) => f<T>('tanh', x)\nexport const trunc = <T extends C>(x: X<T>) => f<T>('trunc', x)\n\n// 1. Functions where first argument determines return type with unified parameter types\nexport const atan2 = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('atan2', x, y)\nexport const clamp = <T extends C, U extends C>(x: X<T>, min: number | X<U>, max: number | X<U>) =>\n f<T>('clamp', x, min, max)\nexport const max = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('max', x, y)\nexport const min = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('min', x, y)\nexport const mix = <T extends C, U extends C>(x: X<T>, y: number | X<U>, a: number | Float | X<U>) =>\n f<T>('mix', x, y, a)\nexport const pow = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('pow', x, y)\nexport const reflect = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(I: X<T>, N: number | X<U>) =>\n f<T>('reflect', I, N)\nexport const refract = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(\n I: X<T>,\n N: number | X<U>,\n eta: number | Float\n) => f<T>('refract', I, N, eta)\n\n// 2. Functions where not first argument determines return type with unified parameter types\nexport const smoothstep = <T extends C, U extends C>(e0: number | X<U>, e1: number | X<U>, x: X<T>) =>\n f<T>('smoothstep', e0, e1, x)\nexport const step = <T extends C, U extends C>(edge: number | X<U>, x: X<T>) => f<T>('step', edge, x)\nexport const mod = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => {\n return (x as any).sub((x as any).div(y).floor().mul(y)) as X<T>\n}\n"],"mappings":"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","names":["CONVERSIONS","TYPE_MAPPING","CONSTANTS","OPERATORS","OPERATOR_KEYS","COMPONENT_COUNT_TO_TYPE","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","OPERATOR_TYPE_RULES","WGSL_TO_GLSL_BUILTIN","FUNCTION_RETURN_TYPES","FUNCTIONS","isSameType","L","R","isValidCombination","left","right","_","validateOperatorTypes","op","getOperatorResultType","rule","is","a","isValidStride","stride","calcStride","arrayLength","count","getStride","error","ret","WGSL_VS","storageSize","particleCount","is","sqrt","size","x","y","z","yz","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isElement","x","isConversion","CONVERSIONS","isX","isConstants","type","CONSTANTS","hex2rgb","hex","r","g","b","count","getId","getBluiltin","c","id","storageSize","ret","WGSL_TO_GLSL_BUILTIN","getConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getConstant","conversionKey","index","initNodeContext","isArrayAccess","addDependency","getEventFun","value","safeEventCall","fun","args","setupEvent","target","child","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","validateOperatorTypes","getOperatorResultType","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","isElement","inferFromCount","count","ret","inferFromArray","arr","c","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","stride","getStride","isSwizzle","isX","structType","fields","parseArray","children","c","x","is","code","parseGather","y","target","parseSwizzle","valueType","infer","indexVar","size","storageSize","coordX","coordY","parseScatter","storageNode","valueNode","storageId","valueCode","parseTexture","z","w","_y","args","parseIf","ret","i","isElse","parseSwitch","parseDeclare","type","varName","wgslType","getConversions","parseStructHead","id","fields","lines","key","fieldType","addDependency","parseStruct","instanceId","initialValues","ordered","parseDefine","props","layout","argParams","params","input","scopeCode","returnType","paramId","parseVaryingHead","parseAttribHead","location","parseUniformHead","isTexture","group","binding","parseStorageHead","parseLoop","conditionType","bodyCode","conditionCode","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","isX","type","props","id","children","fields","initialValues","x","y","z","w","parseGather","storageNode","indexNode","parseScatter","getConversions","mod","getOperator","parseTexture","child","parseLoop","parseIf","parseSwitch","parseDeclare","parseDefine","parseStructHead","parseStruct","field","parseVaryingHead","infer","getBluiltin","setupEvent","parseAttribHead","head","varType","parseUniformHead","parseStorageHead","parseConstantHead","topological","headers","dependencies","sorted","visited","visiting","visit","id","deps","dep","build","x","c","body","code","head","value","lines","ret","generateStruct","map","precisionHead","result","precision","getMaxPrecision","p0","p1","fragment","main","vertex","compute","scope","define","addToScope","x","props","toVar","id","getId","y","create","z","assign","isScatter","Return","Break","Continue","struct","fields","initialValues","instanceId","scoped","fun","_scope","_define","Scope","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","layout","defaultId","args","paramVars","paramDefs","i","input","_layout","toPrimitive","x","hint","code","create","type","props","args","listeners","get","_","key","toVar","fragment","compute","vertex","id","getId","attribute","instance","constant","uniform","variable","builtin","vertexStage","arg","gather","element","member","assign","select","isOperator","addToScope","operator","isFunction","function_","isConversion","conversion","getConstant","is","isArrayAccess","set","fun","storage","index","scatter","y","z","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","id","positionLocal","positionWorld","positionView","normalLocal","normalWorld","normalView","screenCoordinate","screenUV","float","x","conversion","int","uint","bool","vec2","y","vec3","z","vec4","w","mat2","args","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4","texture2D","sampler2D","color","r","g","b","is","hex2rgb","iResolution","uniform","iMouse","iTime","uv","all","function_","any","determinant","distance","dot","length","lengthSq","luminance","cross","cubeTexture","texture","texelFetch","textureLod","abs","acos","acosh","asin","asinh","atan","atanh","ceil","cos","cosh","dFdx","dFdy","degrees","exp","exp2","floor","fract","fwidth","inverseSqrt","log","log2","negate","normalize","oneMinus","radians","reciprocal","round","sign","sin","sinh","sqrt","tan","tanh","trunc","atan2","clamp","min","max","mix","a","pow","reflect","I","N","refract","eta","smoothstep","e0","e1","step","edge","mod"]}
|
|
1
|
+
{"version":3,"sources":["../src/node/utils/const.ts","../src/utils/helpers.ts","../src/utils/program.ts","../src/node/utils/utils.ts","../src/node/utils/infer.ts","../src/node/utils/parse.ts","../src/node/utils/index.ts","../src/node/build.ts","../src/node/scope.ts","../src/node/create.ts","../src/node/index.ts"],"sourcesContent":["export const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\n// Unified order with TYPE_MAPPING array\nexport const CONVERSIONS = ['toBool', 'toUInt', 'toInt', 'toFloat', 'toBVec2', 'toIVec2', 'toUVec2', 'toVec2', 'toBVec3', 'toIVec3', 'toUVec3', 'toVec3', 'toBVec4', 'toIVec4', 'toUVec4', 'toVec4', 'toColor', 'toMat2', 'toMat3', 'toMat4'] as const\n\n// Unified order with CONVERSIONS array\nexport const TYPE_MAPPING = {\n bool: 'bool',\n uint: 'u32',\n int: 'i32',\n float: 'f32',\n bvec2: 'vec2<bool>',\n ivec2: 'vec2i',\n uvec2: 'vec2u',\n vec2: 'vec2f',\n bvec3: 'vec3<bool>',\n ivec3: 'vec3i',\n uvec3: 'vec3u',\n vec3: 'vec3f',\n bvec4: 'vec4<bool>',\n ivec4: 'vec4i',\n uvec4: 'vec4u',\n vec4: 'vec4f',\n color: 'color',\n mat2: 'mat2x2f',\n mat3: 'mat3x3f',\n mat4: 'mat4x4f',\n texture: 'texture_2d<f32>',\n sampler2D: 'sampler',\n struct: 'struct',\n} as const\n\nexport const CONSTANTS = Object.keys(TYPE_MAPPING) as (keyof typeof TYPE_MAPPING)[]\n\nexport const OPERATORS = {\n not: '', // IGNORED\n add: '+',\n sub: '-',\n mul: '*',\n div: '/',\n mod: '%',\n equal: '==',\n notEqual: '!=',\n lessThan: '<',\n lessThanEqual: '<=',\n greaterThan: '>',\n greaterThanEqual: '>=',\n and: '&&',\n or: '||',\n bitAnd: '&',\n bitOr: '|',\n bitXor: '^',\n shiftLeft: '<<',\n shiftRight: '>>',\n addAssign: '+=',\n subAssign: '-=',\n mulAssign: '*=',\n divAssign: '/=',\n modAssign: '%=',\n bitAndAssign: '&=',\n bitOrAssign: '|=',\n bitXorAssign: '^=',\n shiftLeftAssign: '<<=',\n shiftRightAssign: '>>=',\n} as const\n\nexport const OPERATOR_KEYS = Object.keys(OPERATORS) as (keyof typeof OPERATORS)[]\n\nexport const COMPONENT_COUNT_TO_TYPE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4',\n 9: 'mat3',\n 16: 'mat4',\n} as const\n\nexport const BUILTIN_TYPES = {\n // WGSL builtin variables\n position: 'vec4',\n vertex_index: 'uint',\n instance_index: 'uint',\n front_facing: 'bool',\n frag_depth: 'float',\n sample_index: 'uint',\n sample_mask: 'uint',\n point_coord: 'vec2',\n global_invocation_id: 'uvec3',\n\n // TSL compatible variables\n positionLocal: 'vec3',\n positionWorld: 'vec3',\n positionView: 'vec3',\n normalLocal: 'vec3',\n normalWorld: 'vec3',\n normalView: 'vec3',\n screenCoordinate: 'vec2',\n screenUV: 'vec2',\n\n // Legacy GLSL variables (for backward compatibility)\n gl_FragCoord: 'vec4',\n gl_VertexID: 'uint',\n gl_InstanceID: 'uint',\n gl_FrontFacing: 'bool',\n gl_FragDepth: 'float',\n gl_SampleID: 'uint',\n gl_SampleMask: 'uint',\n gl_PointCoord: 'vec2',\n\n // Common variables\n normal: 'vec3',\n uv: 'vec2',\n color: 'vec4',\n} as const\n\nexport const COMPARISON_OPERATORS = ['equal', 'notEqual', 'lessThan', 'lessThanEqual', 'greaterThan', 'greaterThanEqual'] as const\n\nexport const LOGICAL_OPERATORS = ['and', 'or'] as const\n\n// Operator type rules [L, R, Result] format (no duplicates, same-type handled by logic)\nexport const OPERATOR_TYPE_RULES = [\n // Scalar broadcast operations (result follows vector type)\n ['float', 'vec2', 'vec2'],\n ['float', 'vec3', 'vec3'],\n ['float', 'vec4', 'vec4'],\n ['int', 'ivec2', 'ivec2'],\n ['int', 'ivec3', 'ivec3'],\n ['int', 'ivec4', 'ivec4'],\n ['uint', 'uvec2', 'uvec2'],\n ['uint', 'uvec3', 'uvec3'],\n ['uint', 'uvec4', 'uvec4'],\n // Matrix-vector operations (mat * vec → vec)\n ['mat2', 'vec2', 'vec2'],\n ['mat3', 'vec3', 'vec3'],\n ['mat4', 'vec4', 'vec4'],\n // Vector-matrix operations (vec * mat → vec)\n ['vec2', 'mat2', 'vec2'],\n ['vec3', 'mat3', 'vec3'],\n ['vec4', 'mat4', 'vec4'],\n] as const\n\nexport const WGSL_TO_GLSL_BUILTIN = {\n position: 'gl_FragCoord',\n vertex_index: 'gl_VertexID',\n instance_index: 'gl_InstanceID',\n front_facing: 'gl_FrontFacing',\n frag_depth: 'gl_FragDepth',\n sample_index: 'gl_SampleID',\n sample_mask: 'gl_SampleMask',\n point_coord: 'gl_PointCoord',\n uv: 'gl_FragCoord.xy',\n} as const\n\n/**\n * 2.1. unified with:\n * 1.1. index.ts functions and\n * 3.1. types.ts _N\n */\n// Function return type mapping for method chaining\nexport const FUNCTION_RETURN_TYPES = {\n // 0. Always return bool\n all: 'bool',\n any: 'bool',\n // 2. Always return float\n determinant: 'float',\n distance: 'float',\n dot: 'float',\n length: 'float',\n lengthSq: 'float',\n luminance: 'float',\n // 3. Always return vec3\n cross: 'vec3',\n // 4. Always return vec4\n cubeTexture: 'vec4',\n texture: 'vec4',\n texelFetch: 'vec4',\n textureLod: 'vec4',\n} as const\n\n/**\n * 2.2. unified with:\n * 1.2. index.ts functions and\n * 3.2. types.ts _N\n */\n// All shader functions (type inference now handled by inferFrom)\nexport const FUNCTIONS = [\n ...(Object.keys(FUNCTION_RETURN_TYPES) as (keyof typeof FUNCTION_RETURN_TYPES)[]),\n // 0. Component-wise functions\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'ceil',\n 'cos',\n 'cosh',\n 'dFdx',\n 'dFdy',\n 'degrees',\n 'exp',\n 'exp2',\n 'floor',\n 'fract',\n 'fwidth',\n 'inverse',\n 'inverseSqrt',\n 'log',\n 'log2',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'radians',\n 'reciprocal',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc',\n 'saturate',\n // 1. Functions where first argument determines return type\n 'atan2',\n 'clamp',\n 'max',\n 'min',\n 'mix',\n 'pow',\n 'reflect',\n 'refract',\n // 2. Functions where not first argument determines return type\n 'smoothstep',\n 'step',\n // @NOTE: mod is operator\n] as const\n\n// Check if two types are the same (for same-type operations)\nconst isSameType = (L: string, R: string): boolean => L === R\n\n// Check if combination exists in rules (handles bidirectional matching)\nconst isValidCombination = (L: string, R: string): boolean => {\n return OPERATOR_TYPE_RULES.some(([left, right, _]) => (left === L && right === R) || (left === R && right === L))\n}\n\n// Type constraint validation for operators ([L, R, Result] format)\nexport const validateOperatorTypes = (L: string, R: string, op: string): boolean => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return isSameType(L, R)\n if (isSameType(L, R)) return true\n return isValidCombination(L, R)\n}\n\n// Get result type for operator (used by inferOperator)\nexport const getOperatorResultType = (L: string, R: string, op: string): string => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return 'bool'\n // Same type operations return the same type\n if (isSameType(L, R)) return L\n const rule = OPERATOR_TYPE_RULES.find(([left, right, _]) => (left === L && right === R) || (left === R && right === L))\n return rule ? rule[2] : L\n}\n","export const is = {\n arr: Array.isArray,\n bol: (a: unknown): a is boolean => typeof a === 'boolean',\n str: (a: unknown): a is string => typeof a === 'string',\n num: (a: unknown): a is number => typeof a === 'number',\n int: (a: unknown): a is number => Number.isInteger(a),\n fun: (a: unknown): a is Function => typeof a === 'function',\n und: (a: unknown): a is undefined => typeof a === 'undefined',\n nul: (a: unknown): a is null => a === null,\n set: (a: unknown): a is Set<unknown> => a instanceof Set,\n map: (a: unknown): a is Map<unknown, unknown> => a instanceof Map,\n obj: (a: unknown): a is object => !!a && a.constructor.name === 'Object',\n nan: (a: unknown): a is number => typeof a === 'number' && Number.isNaN(a),\n}\n\n/**\n * each\n */\ntype EachFn<Value, Key, This> = (this: This, value: Value, key: Key) => void\ntype Eachable<Value = any, Key = any, This = any> = {\n forEach(cb: EachFn<Value, Key, This>, ctx?: This): void\n}\n\nexport const each = <Value, Key, This>(obj: Eachable<Value, Key, This>, fn: EachFn<Value, Key, This>) => obj.forEach(fn)\n\nexport const flush = <Value extends Function, Key, This>(obj: Eachable<Value, Key, This>, ...args: any[]) => {\n each(obj, (f) => f(...args))\n}\n\n/**\n * other\n */\nexport const replace = (x = '', from = '_', to = '/') => x.split(from).join(to)\nexport const ext = (src = '.pdf') => src.split('.').pop()?.toLowerCase() ?? ''\nexport const fig = (x = 0) => `${x}`.split('.')[1]?.length ?? 0\nexport const dig = (x = 0) => `${x}`.split('.')[0]?.length - (x < 0 ? 1 : 0)\nexport const sig = (value = 0, digit = -2) => {\n digit *= -1\n digit = Math.pow(10, digit)\n value *= digit\n value = Math.round(value)\n value /= digit\n return value\n}\n\nexport const isFloat32 = (value: unknown): value is Float32Array => {\n return value instanceof Float32Array\n}\n\nconst loadingImage = (src: string, fun: (source: HTMLImageElement) => void) => {\n const source = new Image()\n Object.assign(source, { src, crossOrigin: 'anonymous' })\n source.decode().then(() => fun(source))\n}\n\nconst loadingVideo = (src: string, fun: (source: HTMLVideoElement) => void) => {\n const source = document.createElement('video')\n source.crossOrigin = 'anonymous'\n source.muted = true\n source.loop = true\n source.src = src\n source.load()\n source.play()\n source.addEventListener('canplay', fun.bind(null, source), { once: true })\n}\n\nexport function loadingTexture(src: string, fun: (source: HTMLVideoElement, isVideo: true) => void): void\n\nexport function loadingTexture(src: string, fun: (source: HTMLImageElement, isVideo: false) => void): void\n\nexport function loadingTexture(src: string | HTMLImageElement | HTMLVideoElement, fun: Function) {\n if (!is.str(src)) return fun(src, src instanceof HTMLVideoElement)\n const isVideo = /\\.(mp4|webm|ogg|avi|mov)$/i.test(src)\n const loader = isVideo ? loadingVideo : loadingImage\n loader(src, (el: HTMLImageElement | HTMLVideoElement) => {\n fun(el as HTMLVideoElement, isVideo)\n })\n}\nconst isValidStride = (stride: number) => [1, 2, 3, 4, 9, 16].includes(stride)\n\nconst calcStride = (arrayLength: number, count = 3) => {\n if (arrayLength % count === 0) return Math.floor(arrayLength / count)\n return -1\n}\n\nexport const getStride = (arrayLength: number, count = 1, error = console.warn) => {\n const ret = calcStride(arrayLength, count)\n if (!isValidStride(ret))\n error(\n `glre attribute error: Invalid attribute length ${arrayLength}. Must divide by vertex count (${count}) with valid stride (1,2,3,4,9,16)`\n )\n return ret\n}\n\nexport const GLSL_FS = /* cpp */ `\n#version 300 es\nprecision highp float;\nprecision highp int;\nout vec4 fragColor;\nuniform vec2 iResolution;\nvoid main() {\n fragColor = vec4(fract((gl_FragCoord.xy / iResolution)), 0.0, 1.0);\n}\n`\n\nexport const GLSL_VS = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}`\n\nexport const WGSL_VS = /* rust */ `\nstruct In { @builtin(vertex_index) vertex_index: u32 }\nstruct Out { @builtin(position) position: vec4f }\n@vertex\nfn main(in: In) -> Out {\n var out: Out;\n var x = f32(in.vertex_index % 2) * 4.0 - 1.0;\n var y = f32(in.vertex_index / 2) * 4.0 - 1.0;\n out.position = vec4f(x, y, 0.0, 1.0);\n return out;\n}\n`.trim()\n\nexport const WGSL_FS = /* rust */ `\nstruct Out { @builtin(position) position: vec4f }\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n@fragment\nfn main(out: Out) -> @location(0) vec4f {\n return vec4f(fract((out.position.xy / iResolution)), 0.0, 1.0);\n}\n`\n","import { is } from './helpers'\nimport type { GL } from '../types'\n\nconst createShader = (c: WebGL2RenderingContext, source: string, type: number, onError = console.warn) => {\n const shader = c.createShader(type)\n if (!shader) return onError('Failed to create shader')\n c.shaderSource(shader, source.trim())\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n c.deleteShader(shader)\n onError(`Could not compile shader: ${error}\\n\\n↓↓↓generated↓↓↓\\n${source}`)\n}\n\nexport const createProgram = (c: WebGL2RenderingContext, frag: string, vert: string, gl: GL) => {\n const pg = c.createProgram()\n const fs = createShader(c, frag, c.FRAGMENT_SHADER, gl.error)\n const vs = createShader(c, vert, c.VERTEX_SHADER, gl.error)\n if (!fs || !vs) return\n c.attachShader(pg, fs!)\n c.attachShader(pg, vs!)\n c.linkProgram(pg)\n if (c.getProgramParameter(pg, c.LINK_STATUS)) return pg\n const error = c.getProgramInfoLog(pg)\n c.deleteProgram(pg)\n gl.error(`Could not link program: ${error}`)\n}\n\nexport const createArrayBuffer = (c: WebGL2RenderingContext, data: number[]) => {\n const array = new Float32Array(data)\n const buffer = c.createBuffer()\n return { array, buffer }\n}\n\nexport const setArrayBuffer = (c: WebGL2RenderingContext, array: Float32Array, buffer: WebGLBuffer, value: number[]) => {\n array.set(value)\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, array, c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n}\n\nexport const updateAttrib = (c: WebGL2RenderingContext, loc: number, stride: number, buffer: WebGLBuffer) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n}\n\nexport const updateInstance = (c: WebGL2RenderingContext, loc: number, stride: number, buffer: WebGLBuffer) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n c.vertexAttribDivisor(loc, 1) // divisor is 1\n}\n\nexport const updateUniform = (c: WebGL2RenderingContext, loc: WebGLUniformLocation, value: number | number[]) => {\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n}\n\nexport const createTexture = (c: WebGL2RenderingContext, el: HTMLImageElement | HTMLVideoElement, loc: WebGLUniformLocation, unit: number, isVideo = false) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, el)\n if (!isVideo) c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n c.uniform1i(loc, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n if (isVideo)\n return () => {\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, el)\n }\n}\n\n/**\n * for gpgpu\n */\ninterface TextureBuffer {\n texture: WebGLTexture\n buffer: WebGLFramebuffer\n}\n\nexport const createStorage = (c: WebGL2RenderingContext, value: number[], width: number, height: number, ping: TextureBuffer, pong: TextureBuffer, unit: number, array: Float32Array) => {\n const particleCount = width * height\n const vectorSize = value.length / particleCount\n for (let i = 0; i < particleCount; i++) {\n for (let j = 0; j < Math.min(vectorSize, 4); j++) {\n array[4 * i + j] = value[i * vectorSize + j] || 0\n }\n }\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, ping.texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA32F, width, height, 0, c.RGBA, c.FLOAT, array)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, pong.texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA32F, width, height, 0, c.RGBA, c.FLOAT, array)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n}\n\nexport const cleanStorage = (c: WebGL2RenderingContext, map: Iterable<{ ping: TextureBuffer; pong: TextureBuffer }>) => {\n for (const { ping, pong } of map) {\n c.deleteTexture(ping.texture)\n c.deleteTexture(pong.texture)\n c.deleteFramebuffer(ping.buffer)\n c.deleteFramebuffer(pong.buffer)\n }\n}\n\nexport const createAttachment = (c: WebGL2RenderingContext, i: TextureBuffer, o: TextureBuffer, loc: WebGLUniformLocation, unit: number, index: number) => {\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, i.texture)\n c.uniform1i(loc, unit)\n if (index === 0) c.bindFramebuffer(c.FRAMEBUFFER, o.buffer)\n const attachment = c.COLOR_ATTACHMENT0 + index\n c.framebufferTexture2D(c.FRAMEBUFFER, attachment, c.TEXTURE_2D, o.texture, 0)\n return attachment\n}\n\n/**\n * utils\n */\nexport const storageSize = (particleCount: number | number[] = 1024) => {\n if (is.num(particleCount)) {\n const sqrt = Math.sqrt(particleCount)\n const size = Math.ceil(sqrt)\n if (!Number.isInteger(sqrt)) console.warn(`GLRE Storage Warning: particleCount (${particleCount}) is not a square. Using ${size}x${size} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`)\n return { x: size, y: size }\n }\n const [x, y, z] = particleCount\n if (z !== undefined) {\n const yz = y * z\n console.warn(`GLRE Storage Warning: 3D particleCount [${x}, ${y}, ${z}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${y} * depth=${z} = ${yz}.`)\n return { x, y: yz }\n }\n return { x, y }\n}\n","import { CONSTANTS, CONVERSIONS, FUNCTIONS, OPERATOR_KEYS, OPERATORS, TYPE_MAPPING, WGSL_TO_GLSL_BUILTIN } from './const'\nimport { is } from '../../utils/helpers'\nimport type { Constants as C, Conversions, Functions, NodeContext, Operators, Swizzles, VaryingInfo, X, Y } from '../types'\nimport { storageSize } from '../../utils/program'\n\nexport const isSwizzle = (key: unknown): key is Swizzles => {\n return is.str(key) && /^[xyzwrgbastpq]{1,4}$/.test(key)\n}\n\nexport const isOperator = (key: unknown): key is Operators => {\n return OPERATOR_KEYS.includes(key as Operators)\n}\n\nexport const isFunction = (key: unknown): key is Functions => {\n return FUNCTIONS.includes(key as Functions)\n}\n\nexport const isElement = (x: unknown): x is Element => {\n if (is.obj(x)) return false\n return x instanceof Element\n}\n\nexport const isConversion = (key: unknown): key is Conversions => {\n return CONVERSIONS.includes(key as Conversions)\n}\n\nexport const isX = (x: unknown): x is X => {\n if (!x) return false\n if (typeof x !== 'object') return false // @ts-ignore\n return x.isProxy\n}\n\nexport const isConstants = (type?: unknown): type is C => {\n if (!is.str(type)) return false\n return CONSTANTS.includes(type as any)\n}\n\nexport const hex2rgb = (hex: number) => {\n const r = ((hex >> 16) & 0xff) / 255\n const g = ((hex >> 8) & 0xff) / 255\n const b = (hex & 0xff) / 255\n return [r, g, b]\n}\n\nlet count = 0\n\nexport const getId = () => `x${count++}`\n\nexport const getBluiltin = (c: NodeContext, id: string) => {\n if (id === 'global_invocation_id') {\n const size = storageSize(c.gl?.particleCount)\n return `uvec3(uint(gl_FragCoord.y) * uint(${size.x}) + uint(gl_FragCoord.x), 0u, 0u)`\n }\n const ret = WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n if (!ret) throw new Error(`Error: unknown builtin variable ${id}`)\n return ret\n}\n\nexport const getConversions = <T extends C>(x: T, c?: NodeContext) => {\n if (!is.str(x)) return ''\n if (c?.isWebGL) return x\n return TYPE_MAPPING[x as keyof typeof TYPE_MAPPING] || x // for struct type\n}\n\nexport const getOperator = (op: Y) => {\n return OPERATORS[op as keyof typeof OPERATORS] || op\n}\n\nexport const getConstant = (conversionKey: string): C => {\n const index = CONVERSIONS.indexOf(conversionKey as Conversions)\n return index !== -1 ? CONSTANTS[index] : 'float'\n}\n\nexport const initNodeContext = (c: NodeContext) => {\n if (c.code) return c\n c.code = {\n headers: new Map(),\n fragInputs: new Map(),\n vertInputs: new Map(),\n vertOutputs: new Map(),\n vertVaryings: new Map(),\n computeInputs: new Map(),\n dependencies: new Map(),\n structStructFields: new Map(),\n }\n if (c.isWebGL) return c\n c.code.fragInputs.set('position', '@builtin(position) position: vec4f')\n c.code.vertOutputs.set('position', '@builtin(position) position: vec4f')\n return c\n}\n\nexport const isArrayAccess = (key: unknown): boolean => {\n return is.num(key) || (is.str(key) && /^\\d+$/.test(key))\n}\n\nexport const addDependency = (c: NodeContext, id = '', type: string) => {\n if (!c.code?.dependencies?.has(id)) c.code!.dependencies.set(id, new Set())\n if (!isConstants(type)) c.code!.dependencies.get(id)!.add(type)\n}\n\n/**\n * uniform ant attribute event listeners\n */\nconst getEventFun = (c: NodeContext, id: string, type: string) => {\n if (c.isWebGL) {\n if (type === 'attribute') return (value: any) => c.gl?.attribute?.(id, value)\n if (type === 'instance') return (value: any) => c.gl?.instance?.(id, value)\n if (type === 'texture') return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (type === 'attribute') return (value: any) => c.gl?._attribute?.(id, value)\n if (type === 'instance') return (value: any) => c.gl?._instance?.(id, value)\n if (type === 'texture') return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nconst safeEventCall = <T extends C>(x: X<T>, fun: (value: unknown) => void) => {\n if (is.und(x)) return\n if (!isX(x)) return fun(x) // for uniform(0) or uniform([0, 1])\n if (x.type !== 'conversion') return\n const args = x.props.children?.slice(1)\n if (is.und(args?.[0])) return // ignore if uniform(vec2())\n fun(args.map((x) => x ?? args[0])) // for uniform(vec2(1)) or uniform(vec2(1, 1))\n}\n\nexport const setupEvent = (c: NodeContext, id: string, type: string, target: X, child: X) => {\n const fun = getEventFun(c, id, type)\n safeEventCall(child, fun)\n target.listeners.add(fun)\n return fun\n}\n","import { isConstants, isElement, isX, isSwizzle } from './utils'\nimport {\n BUILTIN_TYPES,\n COMPONENT_COUNT_TO_TYPE,\n FUNCTION_RETURN_TYPES,\n getOperatorResultType,\n validateOperatorTypes,\n} from './const'\nimport { is, getStride } from '../../utils/helpers'\nimport type { Constants as C, NodeContext, X, Y } from '../types'\n\nconst inferBuiltin = <T extends C>(id: string | undefined) => {\n return BUILTIN_TYPES[id as keyof typeof BUILTIN_TYPES] as T\n}\n\nconst inferOperator = <T extends C>(L: T, R: T, op: string): T => {\n if (!validateOperatorTypes(L, R, op))\n console.warn(`GLRE Type Warning: Invalid operator '${op}' between types '${L}' and '${R}'`)\n return getOperatorResultType(L, R, op) as T\n}\n\nexport const inferPrimitiveType = <T extends C>(x: Y<T>) => {\n if (is.bol(x)) return 'bool' as T\n if (is.str(x)) return 'texture' as T\n if (is.num(x)) return 'float' as T // @TODO FIX: Number.isInteger(x) ? 'int' : 'float'\n if (is.arr(x)) return COMPONENT_COUNT_TO_TYPE[x.length as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n if (isElement(x)) return 'texture' as T\n return 'void' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n const ret = COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n if (!ret)\n throw `glre node system error: Cannot infer type from array length ${count}. Check your data size. Supported: 1(float), 2(vec2), 3(vec3), 4(vec4), 9(mat3), 16(mat4)`\n return ret\n}\n\nconst inferFromArray = <T extends C>(arr: Y<T>[], c: NodeContext) => {\n if (arr.length === 0) return 'void' as T\n const [x] = arr\n if (is.str(x)) return x as T // for struct\n const ret = infer(x, c)\n // for (const x of arr.slice(1))\n // if (ret !== infer(x, c)) throw `glre node system error: defined scope return mismatch`\n return ret\n}\n\nexport const inferFunction = <T extends C>(x: Y) => {\n return FUNCTION_RETURN_TYPES[x as keyof typeof FUNCTION_RETURN_TYPES] as T\n}\n\nexport const inferImpl = <T extends C>(target: X<T>, c: NodeContext): T => {\n const { type, props } = target\n const { id, children = [], inferFrom, layout } = props\n const [x, y, z] = children\n if (type === 'conversion') return x\n if (type === 'operator') return inferOperator(infer(y, c), infer(z, c), x)\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'function') return inferFunction(x) || infer(y, c)\n if (type === 'define') {\n if (isConstants(layout?.type)) return layout?.type as T\n if (!inferFrom || inferFrom.length === 0) return 'void' as T\n return inferFromArray(inferFrom, c)\n }\n if (type === 'attribute' && is.arr(x)) {\n const stride = getStride(x.length, c.gl?.count, c.gl?.error)\n return inferFromCount(stride)\n }\n if (type === 'instance' && is.arr(x)) {\n const stride = getStride(x.length, c.gl?.instanceCount, c.gl?.error)\n return inferFromCount(stride)\n }\n if (type === 'member') {\n if (isSwizzle(y)) return inferFromCount(y.length)\n if (isX(x)) {\n const structType = infer(x, c)\n const fields = c.code?.structStructFields?.get(structType)\n if (fields && fields[y]) return infer(fields[y], c) as T\n }\n return 'float' as T\n }\n if (inferFrom) return inferFromArray(inferFrom, c)\n return x ? infer(x, c) : ('void' as T) // for uniform and storage gather and scatter\n}\n\nexport const infer = <T extends C>(target: Y<T>, c?: NodeContext | null): T => {\n if (!c) c = {}\n if (!isX(target)) return inferPrimitiveType(target)\n if (is.arr(target)) return inferFromCount(target.length)\n if (!c.infers) c.infers = new WeakMap<X<T>, C>()\n if (c.infers.has(target)) return c.infers.get(target) as T\n const ret = inferImpl(target, c)\n c.infers.set(target, ret)\n return ret as T\n}\n","import { code } from '.'\nimport { infer } from './infer'\nimport { getConversions, addDependency } from './utils'\nimport { is } from '../../utils/helpers'\nimport type { Constants, NodeContext, NodeProps, StructFields, Y } from '../types'\nimport { storageSize } from '../../utils/program'\n\nexport const parseArray = (children: Y[], c: NodeContext) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\n// only for webgl\nexport const parseGather = (c: NodeContext, x: Y, y: Y, target: Y) => {\n const parseSwizzle = () => {\n const valueType = infer(target, c)\n if (valueType === 'float') return '.x'\n if (valueType === 'vec2') return '.xy'\n if (valueType === 'vec3') return '.xyz'\n if (valueType === 'vec4') return ''\n throw new Error(`Unsupported storage scatter type: ${valueType}`)\n }\n const indexVar = code(y, c)\n const size = storageSize(c.gl?.particleCount)\n const coordX = `int(${indexVar}) % ${size.x}`\n const coordY = `int(${indexVar}) / ${size.x}`\n return `texelFetch(${code(x, c)}, ivec2(${coordX}, ${coordY}), 0)${parseSwizzle()}`\n}\n\n// only for webgl\nexport const parseScatter = (c: NodeContext, storageNode: Y, valueNode: Y) => {\n const storageId = code(storageNode, c)\n const valueCode = code(valueNode, c)\n const valueType = infer(valueNode, c)\n if (valueType === 'float') return `_${storageId} = vec4(${valueCode}, 0.0, 0.0, 1.0);`\n if (valueType === 'vec2') return `_${storageId} = vec4(${valueCode}, 0.0, 1.0);`\n if (valueType === 'vec3') return `_${storageId} = vec4(${valueCode}, 1.0);`\n if (valueType === 'vec4') return `_${storageId} = ${valueCode};`\n throw new Error(`Unsupported storage scatter type: ${valueType}`)\n}\n\nexport const parseTexture = (c: NodeContext, y: Y, z: Y, w: Y) => {\n if (c.isWebGL) {\n const args = w ? [y, z, w] : [y, z]\n return `texture(${parseArray(args, c)})`\n }\n const _y = code(y, c)\n const args = [_y, _y + 'Sampler', code(z, c)]\n if (!w) return `textureSample(${args})`\n args.push(code(w, c))\n return `textureSampleLevel(${args})`\n}\n\n/**\n * scopes\n */\nexport const parseIf = (c: NodeContext, x: Y, y: Y, children: Y[]) => {\n let ret = `if (${code(x, c)}) {\\n${code(y, c)}\\n}`\n for (let i = 2; i < children.length; i += 2) {\n const isElse = i >= children.length - 1\n ret += !isElse\n ? ` else if (${code(children[i], c)}) {\\n${code(children[i + 1], c)}\\n}`\n : ` else {\\n${code(children[i], c)}\\n}`\n }\n return ret\n}\n\nexport const parseSwitch = (c: NodeContext, x: Y, children: Y[]) => {\n let ret = `switch (${code(x, c)}) {\\n`\n for (let i = 1; i < children.length; i += 2) {\n const isDefault = i >= children.length - 1\n if (isDefault && children.length % 2 === 0) {\n ret += `default:\\n${code(children[i], c)}\\nbreak;\\n`\n } else if (i + 1 < children.length)\n ret += `case ${code(children[i], c)}:\\n${code(children[i + 1], c)}\\nbreak;\\n`\n }\n ret += '}'\n return ret\n}\n\nexport const parseDeclare = (c: NodeContext, x: Y, y: Y) => {\n const type = infer(x, c)\n const varName = (y as any)?.props?.id\n if (c.isWebGL) return `${type} ${varName} = ${code(x, c)};`\n const wgslType = getConversions(type)\n return `var ${varName}: ${wgslType} = ${code(x, c)};`\n}\n\nexport const parseStructHead = (c: NodeContext, id: string, fields: StructFields = {}) => {\n c.code?.structStructFields?.set(id, fields)\n const lines: string[] = []\n for (const key in fields) {\n const fieldType = fields[key]\n const type = infer(fieldType, c)\n if (c.isWebGL) addDependency(c, id, type)\n lines.push(c.isWebGL ? `${type} ${key};` : `${key}: ${getConversions(type, c)},`)\n }\n const ret = lines.join('\\n ')\n return `struct ${id} {\\n ${ret}\\n};`\n}\n\nexport const parseStruct = (c: NodeContext, id: string, instanceId = '', initialValues?: StructFields) => {\n const fields = c.code?.structStructFields?.get(id) || {}\n if (c.isWebGL) {\n if (initialValues) {\n const ordered = []\n for (const key in fields) ordered.push(initialValues[key])\n return `${id} ${instanceId} = ${id}(${parseArray(ordered, c)});`\n } else return `${id} ${instanceId};`\n } else {\n if (initialValues) {\n const ordered = []\n for (const key in fields) ordered.push(initialValues[key])\n return `var ${instanceId}: ${id} = ${id}(${parseArray(ordered, c)});`\n } else return `var ${instanceId}: ${id};`\n }\n}\n\n/**\n * define\n */\nexport const parseDefine = (c: NodeContext, props: NodeProps, target: Y) => {\n const { id, children = [], layout } = props\n const [x, ...args] = children\n const argParams: [name: string, type: Constants][] = []\n const params: string[] = []\n for (let i = 0; i < args.length; i++) {\n const input = layout?.inputs?.[i]\n if (!input) argParams.push([`p${i}`, infer(args[i], c)])\n else argParams.push([input.name, input.type === 'auto' ? infer(args[i], c) : input.type])\n }\n const scopeCode = code(x, c) // build struct headers before inferring returnType\n const returnType = infer(target, c)\n const ret = []\n if (c?.isWebGL) {\n for (const [paramId, type] of argParams) {\n addDependency(c, id!, type)\n params.push(`${type} ${paramId}`)\n }\n addDependency(c, id!, returnType)\n ret.push(`${returnType} ${id}(${params}) {`)\n } else {\n for (const [paramId, type] of argParams) params.push(`${paramId}: ${getConversions(type, c)}`)\n const isVoid = returnType === 'void'\n if (isVoid) {\n ret.push(`fn ${id}(${params}) {`)\n } else ret.push(`fn ${id}(${params}) -> ${getConversions(returnType, c)} {`)\n }\n if (scopeCode) ret.push(scopeCode)\n ret.push('}')\n return ret.join('\\n')\n}\n\n/**\n * headers\n */\nexport const parseVaryingHead = (c: NodeContext, id: string, type: Constants) => {\n return c.isWebGL\n ? `${type} ${id};`\n : `@location(${c.code?.vertVaryings?.size || 0}) ${id}: ${getConversions(type, c)}`\n}\n\nexport const parseAttribHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) return `${type} ${id};`\n const { location = 0 } = c.gl?.webgpu?.attribs.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseUniformHead = (c: NodeContext, id: string, type: Constants) => {\n const isTexture = type === 'sampler2D' || type === 'texture'\n if (c.isWebGL)\n return isTexture //\n ? `uniform sampler2D ${id};`\n : `uniform ${type} ${id};`\n if (isTexture) {\n const { group = 1, binding = 0 } = c.gl?.webgpu?.textures.map.get(id) || {}\n return (\n `@group(${group}) @binding(${binding}) var ${id}Sampler: sampler;\\n` +\n `@group(${group}) @binding(${binding + 1}) var ${id}: texture_2d<f32>;`\n )\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.uniforms.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\n}\n\nexport const parseStorageHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) {\n const ret = `uniform sampler2D ${id};`\n if (c.label !== 'compute') return ret\n const location = c.units?.(id)\n return `${ret}\\nlayout(location = ${location}) out vec4 _${id};` // out texture buffer\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.storages.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<storage, read_write> ${id}: array<${wgslType}>;`\n}\n\nexport const parseLoop = (c: NodeContext, x: Y, y: Y, id: string) => {\n const conditionType = infer(x, c)\n const bodyCode = code(y, c)\n const conditionCode = code(x, c)\n if (c.isWebGL) {\n if (conditionType === 'int')\n return `for (int ${id} = 0; ${id} < ${conditionCode}; ${id} += 1) {\\n${bodyCode}\\n}`\n if (conditionType === 'float')\n return `for (float ${id} = 0.0; ${id} < ${conditionCode}; ${id} += 1.0) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec2')\n return `for (vec2 ${id} = vec2(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y; ${id} += vec2(1.0)) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec3')\n return `for (vec3 ${id} = vec3(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y && ${id}.z < ${conditionCode}.z; ${id} += vec3(1.0)) {\\n${bodyCode}\\n}`\n return `for (int ${id} = 0; ${id} < ${conditionCode}; ${id} += 1) {\\n${bodyCode}\\n}`\n }\n if (conditionType === 'int')\n return `for (var ${id}: i32 = 0; ${id} < ${conditionCode}; ${id}++) {\\n${bodyCode}\\n}`\n if (conditionType === 'float')\n return `for (var ${id}: f32 = 0.0; ${id} < ${conditionCode}; ${id} += 1.0) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec2')\n return `for (var ${id}: vec2f = vec2f(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y; ${id} += vec2f(1.0)) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec3')\n return `for (var ${id}: vec3f = vec3f(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y && ${id}.z < ${conditionCode}.z; ${id} += vec3f(1.0)) {\\n${bodyCode}\\n}`\n return `for (var ${id}: i32 = 0; ${id} < ${conditionCode}; ${id}++) {\\n${bodyCode}\\n}`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, type: Constants, value: string) => {\n return c.isWebGL ? `const ${type} ${id} = ${value};` : `const ${id}: ${getConversions(type, c)} = ${value};`\n}\n","import { infer } from './infer'\nimport { parseArray, parseAttribHead, parseConstantHead, parseDeclare, parseDefine, parseGather, parseIf, parseLoop, parseScatter, parseStorageHead, parseStruct, parseStructHead, parseSwitch, parseTexture, parseUniformHead, parseVaryingHead } from './parse'\nimport { getBluiltin, getConversions, getOperator, initNodeContext, isX, setupEvent } from './utils'\nimport { is } from '../../utils/helpers'\nimport { mod } from '..'\nimport type { Constants as C, NodeContext, Y } from '../types'\n\nexport * from './utils'\n\nexport const code = <T extends C>(target: Y<T>, c?: NodeContext | null): string => {\n if (!c) c = {}\n initNodeContext(c)\n if (is.arr(target)) return parseArray(target, c)\n if (is.str(target)) return target\n if (is.num(target)) {\n const ret = `${target}`\n if (ret.includes('.')) return ret\n // Check if this number should be an integer based on the inferred type\n // For now, keep the original behavior to maintain compatibility\n return ret + '.0'\n }\n if (is.bol(target)) return target ? 'true' : 'false'\n if (!target) return ''\n if (!isX(target)) return ''\n const { type, props = {} } = target\n const { id = 'i', children = [], fields, initialValues } = props\n const [x, y, z, w] = children\n /**\n * variables\n */\n if (type === 'variable') return id\n if (type === 'member') return `${code(x, c)}.${code(y, c)}`\n if (type === 'element') return `${code(x, c)}[${code(y, c)}]`\n if (type === 'gather')\n return c.isWebGL //\n ? parseGather(c, x, y, target)\n : `${code(x, c)}[${code(y, c)}]`\n if (type === 'scatter') {\n const [storageNode, indexNode] = x.props.children ?? [] // x is gather node\n return c.isWebGL\n ? parseScatter(c, storageNode, y) // indexNode is not using\n : `${code(storageNode, c)}[${code(indexNode, c)}] = ${code(y, c)};`\n }\n if (type === 'ternary') return c.isWebGL ? `(${code(z, c)} ? ${code(x, c)} : ${code(y, c)})` : `select(${code(x, c)}, ${code(y, c)}, ${code(z, c)})`\n if (type === 'conversion') return `${getConversions(x, c)}(${parseArray(children.slice(1), c)})`\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, c)}`\n if (x === 'mod') return code(mod(y, z), c)\n if (x.endsWith('Assign')) return `${code(y, c)} ${getOperator(x)} ${code(z, c)};`\n return `(${code(y, c)} ${getOperator(x)} ${code(z, c)})`\n }\n if (type === 'function') {\n if (x === 'negate') return `(-${code(y, c)})`\n if (x === 'reciprocal') return `(1.0 / ${code(y, c)})`\n if (x === 'oneMinus') return `(1.0-${code(y, c)})`\n if (x === 'saturate') return `clamp(${code(y, c)}, 0.0, 1.0)`\n if (x === 'texture') return parseTexture(c, y, z, w)\n if (x === 'atan2' && c.isWebGL) return `atan(${code(y, c)}, ${code(z, c)})`\n if (!c.isWebGL) {\n if (x === 'dFdx') return `dpdx(${code(y, c)})`\n if (x === 'dFdy') return `dpdy(${code(y, c)})`\n }\n return `${x}(${parseArray(children.slice(1), c)})`\n }\n /**\n * scopes\n */\n if (type === 'scope') return children.map((child: any) => code(child, c)).join('\\n')\n if (type === 'assign') return `${code(x, c)} = ${code(y, c)};`\n if (type === 'return') return `return ${code(x, c)};`\n if (type === 'break') return 'break;'\n if (type === 'continue') return 'continue;'\n if (type === 'loop') return parseLoop(c, x, y, id)\n if (type === 'if') return parseIf(c, x, y, children)\n if (type === 'switch') return parseSwitch(c, x, children)\n if (type === 'declare') return parseDeclare(c, x, y)\n if (type === 'define') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseDefine(c, props, target))\n return `${id}(${parseArray(children.slice(1), c)})`\n }\n if (type === 'struct') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseStructHead(c, id, fields))\n return parseStruct(c, id, x.props.id, initialValues)\n }\n /**\n * headers\n */\n if (type === 'varying') {\n if (c.code?.vertOutputs.has(id)) return c.isWebGL ? `${id}` : `out.${id}`\n const field = parseVaryingHead(c, id, infer(target, c))\n c.code?.fragInputs.set(id, field)\n c.code?.vertOutputs.set(id, field)\n c.code?.vertVaryings.set(id, { node: x })\n return c.isWebGL ? `${id}` : `out.${id}`\n }\n if (type === 'builtin') {\n if (c.isWebGL) return getBluiltin(c, id)\n if (id === 'position') return 'out.position'\n const field = `@builtin(${id}) ${id}: ${getConversions(infer(target, c), c)}`\n if (c.label === 'compute') c.code?.computeInputs.set(id, field)\n else if (c.label === 'frag') c.code?.fragInputs.set(id, field)\n else if (c.label === 'vert') c.code?.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute' || type === 'instance') {\n setupEvent(c, id, type, target, x)\n c.code?.vertInputs.set(id, parseAttribHead(c, id, infer(target, c)))\n return c.isWebGL ? `${id}` : `in.${id}`\n }\n if (c.code?.headers.has(id)) return id // must last\n let head = ''\n if (type === 'uniform') {\n const varType = infer(target, c)\n setupEvent(c, id, varType, target, x)\n head = parseUniformHead(c, id, varType)\n }\n if (type === 'storage') head = parseStorageHead(c, id, infer(target, c))\n if (type === 'constant') head = parseConstantHead(c, id, infer(target, c), code(x, c))\n if (head) {\n c.code?.headers.set(id, head)\n return id\n }\n return code(x, c)\n}\n","import { code } from './utils'\nimport type { NodeContext, X } from './types'\n\nconst topological = (headers: Map<string, string>, dependencies: Map<string, Set<string>>) => {\n const sorted: [string, string][] = []\n const visited = new Set<string>()\n const visiting = new Set<string>()\n const visit = (id: string) => {\n if (visiting.has(id)) return\n if (visited.has(id)) return\n visiting.add(id)\n const deps = dependencies.get(id) || new Set()\n for (const dep of deps) if (headers.has(dep)) visit(dep)\n visiting.delete(id)\n visited.add(id)\n if (headers.has(id)) sorted.push([id, headers.get(id)!])\n }\n for (const [id] of headers) visit(id)\n return sorted\n}\n\nconst build = (x: X, c: NodeContext) => {\n const body = code(x, c)\n let head = ''\n if (c.isWebGL && c.code?.dependencies) {\n const sorted = topological(c.code.headers, c.code.dependencies)\n head = sorted.map(([, value]) => value).join('\\n')\n } else head = Array.from(c.code?.headers?.values() || []).join('\\n')\n let [lines, ret] = body.split('return ')\n if (ret) ret = ret.replace(';', '')\n else [lines, ret] = ['', body]\n return [head, lines.trim(), ret]\n}\n\nconst generateStruct = (id: string, map: Map<string, string>) => {\n return `struct ${id} {\\n ${Array.from(map.values()).join(',\\n ')}\\n}`\n}\n\nconst precisionHead = (result: string[], precision = 'highp') => {\n result.push(`precision ${precision} float;`)\n result.push(`precision ${precision} int;`)\n result.push(`precision ${precision} sampler2D;`)\n result.push(`precision ${precision} samplerCube;`)\n result.push(`precision ${precision} sampler3D;`)\n result.push(`precision ${precision} sampler2DArray;`)\n result.push(`precision ${precision} sampler2DShadow;`)\n result.push(`precision ${precision} samplerCubeShadow;`)\n result.push(`precision ${precision} sampler2DArrayShadow;`)\n result.push(`precision ${precision} isampler2D;`)\n result.push(`precision ${precision} isampler3D;`)\n result.push(`precision ${precision} isamplerCube;`)\n result.push(`precision ${precision} isampler2DArray;`)\n result.push(`precision ${precision} usampler2D;`)\n result.push(`precision ${precision} usampler3D;`)\n result.push(`precision ${precision} usamplerCube;`)\n result.push(`precision ${precision} usampler2DArray;`)\n}\n\n// ref: https://github.com/mrdoob/three.js/blob/master/src/renderers/webgl/WebGLCapabilities.js\nconst getMaxPrecision = (c?: WebGL2RenderingContext, precision = 'highp') => {\n if (!c) return 'highp'\n if (precision === 'highp') {\n const p0 = c.getShaderPrecisionFormat(c.VERTEX_SHADER, c.HIGH_FLOAT)\n const p1 = c.getShaderPrecisionFormat(c.FRAGMENT_SHADER, c.HIGH_FLOAT)\n if (p0 && p0.precision > 0 && p1 && p1.precision > 0) return 'highp'\n precision = 'mediump'\n }\n if (precision === 'mediump') {\n const p0 = c.getShaderPrecisionFormat(c.VERTEX_SHADER, c.MEDIUM_FLOAT)\n const p1 = c.getShaderPrecisionFormat(c.FRAGMENT_SHADER, c.MEDIUM_FLOAT)\n if (p0 && p0.precision > 0 && p1 && p1.precision > 0) return 'mediump'\n precision = 'lowp'\n }\n return 'lowp'\n}\n\nexport const fragment = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'frag' // for varying inputs or outputs\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n precisionHead(result, getMaxPrecision(c.gl?.webgl?.context, c.gl?.precision))\n result.push('out vec4 fragColor;')\n for (const code of c.code?.fragInputs?.values() || []) result.push(`in ${code}`)\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` fragColor = ${ret};`)\n } else {\n if (c.code?.fragInputs?.size) result.push(generateStruct('Out', c.code.fragInputs))\n result.push(head)\n result.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n result.push(` ${lines}`)\n result.push(` return ${ret};`)\n }\n result.push('}')\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const vertex = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'vert' // for varying inputs or outputs\n if (c.code) for (const [id, { node }] of c.code.vertVaryings.entries()) c.code.vertVaryings.set(id, { node, code: code(node, c) }) // ① prebuild varying.code because the scope (e.g. output function definitions) is fixed to vertex.\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) result.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) result.push(`out ${code}`)\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` gl_Position = ${ret};`)\n if (c.code) for (const [id, varying] of c.code.vertVaryings.entries()) result.push(` ${id} = ${varying.code!};`) // ② varying.code is already prebuilt\n } else {\n if (c.code?.vertInputs?.size) result.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) result.push(generateStruct('Out', c.code.vertOutputs))\n result.push(head)\n result.push('@vertex')\n result.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n result.push(' var out: Out;')\n result.push(` ${lines}`)\n result.push(` out.position = ${ret};`)\n if (c.code) for (const [id, varying] of c.code.vertVaryings.entries()) result.push(` out.${id} = ${varying.code!};`)\n result.push(' return out;')\n }\n result.push('}')\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const compute = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'compute'\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n precisionHead(result, 'highp')\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` ${ret};`)\n result.push('}')\n } else {\n if (c.code?.computeInputs?.size) result.push(generateStruct('In', c.code.computeInputs))\n result.push(head)\n result.push('@compute @workgroup_size(32)')\n result.push(`fn main(${c.code?.computeInputs?.size ? 'in: In' : ''}) {`)\n result.push(` ${lines}`)\n result.push(` ${ret};`)\n result.push('}')\n }\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n","import { conversion, create } from './create'\nimport type {\n FnLayout,\n FnType,\n Constants as C,\n Int,\n NodeProps,\n Struct,\n StructFactory,\n StructFields,\n X,\n Y,\n} from './types'\nimport { getId } from './utils'\n\nlet scope: X | null = null\nlet define: X | null = null\n\nexport const addToScope = <T extends C>(x: X<T>) => {\n if (!scope) return\n if (!scope.props.children) scope.props.children = []\n scope.props.children.push(x)\n if (x.type !== 'return' || !define) return x\n const { props } = define\n if (!props.inferFrom) props.inferFrom = []\n props.inferFrom.push(x)\n return x\n}\n\nexport function toVar<T extends StructFields>(x: Struct<T>, id?: string): Struct<T>\nexport function toVar<T extends C>(x: X<T>, id?: string): X<T> {\n if (!id) id = getId()\n const y = create<T>('variable', { id, inferFrom: [x] })\n const z = create<T>('declare', null, x as X, y)\n addToScope(z)\n return y\n}\n\nexport const assign = <T extends C>(x: X<T>, isScatter = false, y: Y<T>): X<T> => {\n const z = create(isScatter ? 'scatter' : 'assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = <T extends C>(x?: Y<T>): Y<T> => {\n return addToScope(create<T>('return', { inferFrom: [x] }, x))\n}\n\nexport const Break = (): Y => {\n return addToScope(create('break'))\n}\n\nexport const Continue = (): Y => {\n return addToScope(create('continue'))\n}\n\nexport const struct = <T extends StructFields>(fields: T, id = getId()): StructFactory<T> => {\n return (initialValues: StructFields = {}, instanceId = getId()) => {\n const x = create('variable', { id: instanceId, inferFrom: [id] })\n const y = create('struct', { id, fields, initialValues }, x)\n addToScope(y)\n return x as Struct<T>\n }\n}\n\nexport const scoped = (x: X, fun: () => X | void, y = define) => {\n const [_scope, _define] = [scope, define]\n ;[scope, define] = [x, y]\n const z = fun()\n if (z) Return(z)\n ;[scope, define] = [_scope, _define]\n}\n\nexport const Scope = <T extends X>(fun: () => T | void) => {\n const scope = create('scope')\n scoped(scope, fun)\n return scope as T\n}\n\nexport const If = (x: Y, fun: () => void) => {\n const y = Scope(fun)\n const ifNode = create('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = Scope(_fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = Scope(_fun)\n ifNode.props.children!.push(_x)\n },\n })\n return ret()\n}\n\nexport const Loop = (x: Y, fun: (params: { i: Int }) => void) => {\n const id = getId()\n const y = Scope(() => fun({ i: create<'int'>('variable', { id, inferFrom: [conversion('int', 0)] }) }))\n const ret = create('loop', { id }, x, y)\n return addToScope(ret)\n}\n\nexport const Switch = (x: Y) => {\n const switchNode = create('switch', null, x)\n addToScope(switchNode)\n const ret = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const y = Scope(fun)\n for (const _x of values) switchNode.props.children!.push(_x, y)\n return ret()\n }\n },\n Default: (fun: () => void) => {\n const scope = Scope(fun)\n switchNode.props.children!.push(scope)\n },\n })\n return ret()\n}\n\nexport function Fn<T extends X | Struct | void, Args extends any[]>(fun: (args: Args) => T, layout?: FnLayout) {\n const defaultId = getId()\n const ret = (...args: any[]) => {\n const id = layout?.name || defaultId\n const paramVars: X[] = []\n const paramDefs: NodeProps[] = []\n for (let i = 0; i < args.length; i++) {\n const input = layout?.inputs?.[i]\n if (!input) paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n else\n paramDefs.push({\n id: input.name,\n inferFrom:\n input.type === 'auto' ? [args[i]] : [conversion(input.type, args[i])],\n })\n }\n for (const props of paramDefs) paramVars.push(create('variable', props))\n const x = create('scope')\n const y = create('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars as Args) as any, y)\n return y\n }\n ret.getLayout = () => layout\n ret.setLayout = (_layout: FnLayout) => {\n layout = _layout\n return ret\n }\n return ret as unknown as Args extends readonly unknown[] ? FnType<T, Args> : never\n}\n","import { compute, fragment, vertex } from './build'\nimport { addToScope, assign, toVar } from './scope'\nimport { code, getConstant, isConversion, isFunction, isOperator, getId, isArrayAccess } from './utils'\nimport { is } from '../utils/helpers'\nimport type { Bool, Constants as C, Functions, NodeProps, NodeTypes, Operators, X, Y } from './types'\n\nconst toPrimitive = (x: Y, hint: string) => {\n if (hint === 'string') return code(x as any, null)\n}\n\nexport const create = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: Y[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\n const listeners = new Set<(value: any) => void>()\n const get = (_: unknown, key: string | Symbol) => {\n if (key === 'type') return type\n if (key === 'props') return props\n if (key === 'toVar') return toVar.bind(null, x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === 'fragment') return fragment.bind(null, x)\n if (key === 'compute') return compute.bind(null, x)\n if (key === 'vertex') return vertex.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive.bind(null, x)\n if (key === 'listeners') return listeners\n if (key === 'attribute') return (id = getId()) => attribute(x, id)\n if (key === 'instance') return (id = getId()) => instance(x, id)\n if (key === 'constant') return (id = getId()) => constant(x, id)\n if (key === 'uniform') return (id = getId()) => uniform(x, id)\n if (key === 'variable') return (id = getId()) => variable(id)\n if (key === 'builtin') return (id = getId()) => builtin(id)\n if (key === 'vertexStage') return (id = getId()) => vertexStage(x, id)\n if (key === 'element') return (arg: Y) => (type === 'storage' ? gather(x, arg) : element(x, arg))\n if (key === 'member') return (arg: Y) => member(x, arg)\n if (key === 'assign') return assign.bind(null, x, x.type === 'gather')\n if (key === 'select') return select.bind(null, x)\n if (isOperator(key)) {\n return key.endsWith('Assign')\n ? (...args: Y[]) => addToScope(operator(key, x, ...args))\n : (...args: Y[]) => operator(key, x, ...args)\n }\n if (isFunction(key)) return (...args: Y[]) => function_(key, x, ...args)\n if (isConversion(key)) return () => conversion(getConstant(key), x)\n if (is.str(key)) return isArrayAccess(key) ? element(x, key) : member(x, key)\n }\n const set = (_: unknown, key: string, arg: Y) => {\n if (key === 'value') listeners.forEach((fun) => fun(arg))\n if (is.str(key)) member(x, key).assign(arg)\n return true\n }\n const x = new Proxy({}, { get, set }) as unknown as X<T>\n return x\n}\n\n// headers with proper type inference\nexport const attribute = <T extends C>(x: Y<T>, id = getId()) => create<T>('attribute', { id }, x)\nexport const instance = <T extends C>(x: Y<T>, id = getId()) => create<T>('instance', { id }, x)\nexport const constant = <T extends C>(x: Y<T>, id = getId()) => create<T>('constant', { id }, x)\nexport const uniform = <T extends C>(x: Y<T>, id = getId()) => create<T>('uniform', { id }, x)\nexport const storage = <T extends C>(x: Y<T>, id = getId()) => create<T>('storage', { id }, x)\nexport const variable = <T extends C>(id = getId()) => create<T>('variable', { id })\nexport const builtin = <T extends C>(id = getId()) => create<T>('builtin', { id })\nexport const vertexStage = <T extends C>(x: X<T>, id = getId()) => {\n return create<T>('varying', { id, inferFrom: [x] }, x)\n}\n\n// Node shorthands with proper typing\nexport const member = <T extends C>(x: X, index: Y) => create<T>('member', null, x, index)\nexport const element = <T extends C>(x: X, index: Y) => create<T>('element', null, x, index)\nexport const gather = <T extends C>(x: X, index: Y) => create<T>('gather', null, x, index)\nexport const scatter = <T extends C>(x: X, index: Y) => create<T>('scatter', null, x, index)\nexport const select = <T extends C>(x: Y<T>, y: Y<T>, z: Bool) => create<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE\nexport const operator = <T extends C>(key: Operators, ...x: Y[]) => create<T>('operator', null, key, ...x)\nexport const function_ = <T extends C>(key: Functions, ...x: Y[]) => create<T>('function', null, key, ...x)\nexport const conversion = <T extends C>(key: T, ...x: Y[]) => create<T>('conversion', null, key, ...x)\n","import { hex2rgb } from './utils'\nimport { builtin as b, conversion as c, function_ as f, uniform as u } from './create'\nimport { is } from '../utils/helpers'\nimport type { Constants as C, Float, X, Y } from './types'\nexport * from './build'\nexport * from './create'\nexport * from './scope'\nexport * from './types'\n\n// Builtin Variables\nexport const position = b<'vec4'>('position')\nexport const vertexIndex = b<'uint'>('vertex_index')\nexport const instanceIndex = b<'uint'>('instance_index')\nexport const frontFacing = b<'bool'>('front_facing')\nexport const fragDepth = b<'float'>('frag_depth')\nexport const sampleIndex = b<'uint'>('sample_index')\nexport const sampleMask = b<'uint'>('sample_mask')\nexport const pointCoord = b<'vec2'>('point_coord')\nexport const id = b<'uvec3'>('global_invocation_id')\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = b<'vec3'>('position')\nexport const positionWorld = b<'vec3'>('positionWorld')\nexport const positionView = b<'vec3'>('positionView')\nexport const normalLocal = b<'vec3'>('normalLocal')\nexport const normalWorld = b<'vec3'>('normalWorld')\nexport const normalView = b<'vec3'>('normalView')\nexport const screenCoordinate = b<'vec2'>('screenCoordinate')\nexport const screenUV = b<'vec2'>('screenUV')\n\n// Type constructors with proper type inference\nexport const float = (x?: Y) => c('float', x)\nexport const int = (x?: Y) => c('int', x)\nexport const uint = (x?: Y) => c('uint', x)\nexport const bool = (x?: Y) => c('bool', x)\nexport const vec2 = (x?: Y, y?: Y) => c('vec2', x, y)\nexport const vec3 = (x?: Y, y?: Y, z?: Y) => c('vec3', x, y, z)\nexport const vec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('vec4', x, y, z, w)\nexport const mat2 = (...args: Y[]) => c('mat2', ...args)\nexport const mat3 = (...args: Y[]) => c('mat3', ...args)\nexport const mat4 = (...args: Y[]) => c('mat4', ...args)\nexport const ivec2 = (x?: Y, y?: Y) => c('ivec2', x, y)\nexport const ivec3 = (x?: Y, y?: Y, z?: Y) => c('ivec3', x, y, z)\nexport const ivec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('ivec4', x, y, z, w)\nexport const uvec2 = (x?: Y, y?: Y) => c('uvec2', x, y)\nexport const uvec3 = (x?: Y, y?: Y, z?: Y) => c('uvec3', x, y, z)\nexport const uvec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('uvec4', x, y, z, w)\nexport const bvec2 = (x?: Y, y?: Y) => c('bvec2', x, y)\nexport const bvec3 = (x?: Y, y?: Y, z?: Y) => c('bvec3', x, y, z)\nexport const bvec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('bvec4', x, y, z, w)\nexport const texture2D = (x?: Y) => c('texture', x)\nexport const sampler2D = () => c('sampler2D')\nexport const color = (r?: Y, g?: Y, b?: Y) => {\n if (is.num(r) && is.und(g) && is.und(b)) return vec3(...hex2rgb(r))\n return vec3(r, g, b)\n}\n\n// Default uniforms with proper typing\nexport const iResolution = u(vec2(), 'iResolution')\nexport const iMouse = u(vec2(), 'iMouse')\nexport const iTime = u(float(), 'iTime')\nexport const uv = position.xy.div(iResolution)\n\n/**\n * 1.1. unified with:\n * 2.1. const.ts BUILTIN_VARIABLES and\n * 3.1. types.ts _N\n */\n// 0. Always return bool\nexport const all = <T extends C>(x: X<T>) => f<'bool'>('all', x)\nexport const any = <T extends C>(x: X<T>) => f<'bool'>('any', x)\n\n// 2. Always return float with WGSL-compliant type constraints and unified parameter types\nexport const determinant = <T extends 'mat2' | 'mat3' | 'mat4'>(x: X<T>) => f<'float'>('determinant', x)\nexport const distance = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(x: X<T>, y: number | X<U>) =>\n f<'float'>('distance', x, y)\nexport const dot = <T extends 'vec2' | 'vec3' | 'vec4' | 'ivec2' | 'ivec3' | 'ivec4', U extends C>(\n x: X<T>,\n y: number | X<U>\n) => f<T extends `ivec${string}` ? 'int' : 'float'>('dot', x, y)\nexport const length = <T extends 'vec2' | 'vec3' | 'vec4'>(x: X<T>) => f<'float'>('length', x)\nexport const lengthSq = (x: X) => f<'float'>('lengthSq', x)\nexport const luminance = (x: X) => f<'float'>('luminance', x)\n\n// 3. Always return vec3 with vec3 constraint and unified parameter types\nexport const cross = <U extends C = 'vec3'>(x: X<'vec3'>, y: number | X<U>) => f<'vec3'>('cross', x, y)\n\n// 4. Always return vec4\nexport const cubeTexture = (x: X, y: X, z?: X) => f<'vec4'>('cubeTexture', x, y, z)\nexport const texture = (x: X, y: X, z?: X) => f<'vec4'>('texture', x, y, z)\nexport const texelFetch = (x: X, y: X, z?: X) => f<'vec4'>('texelFetch', x, y, z)\nexport const textureLod = (x: X, y: X, z?: X) => f<'vec4'>('textureLod', x, y, z)\n\n/**\n * 1.2. unified with:\n * 2.2. const.ts FUNCTIONS and\n * 3.2. types.ts _N\n */\n// 0. Component-wise functions\nexport const abs = <T extends C>(x: X<T>) => f<T>('abs', x)\nexport const acos = <T extends C>(x: X<T>) => f<T>('acos', x)\nexport const acosh = <T extends C>(x: X<T>) => f<T>('acosh', x)\nexport const asin = <T extends C>(x: X<T>) => f<T>('asin', x)\nexport const asinh = <T extends C>(x: X<T>) => f<T>('asinh', x)\nexport const atan = <T extends C>(x: X<T>) => f<T>('atan', x)\nexport const atanh = <T extends C>(x: X<T>) => f<T>('atanh', x)\nexport const ceil = <T extends C>(x: X<T>) => f<T>('ceil', x)\nexport const cos = <T extends C>(x: X<T>) => f<T>('cos', x)\nexport const cosh = <T extends C>(x: X<T>) => f<T>('cosh', x)\nexport const dFdx = <T extends C>(x: X<T>) => f<T>('dFdx', x)\nexport const dFdy = <T extends C>(x: X<T>) => f<T>('dFdy', x)\nexport const degrees = <T extends C>(x: X<T>) => f<T>('degrees', x)\nexport const exp = <T extends C>(x: X<T>) => f<T>('exp', x)\nexport const exp2 = <T extends C>(x: X<T>) => f<T>('exp2', x)\nexport const floor = <T extends C>(x: X<T>) => f<T>('floor', x)\nexport const fract = <T extends C>(x: X<T>) => f<T>('fract', x)\nexport const fwidth = <T extends C>(x: X<T>) => f<T>('fwidth', x)\nexport const inverseSqrt = <T extends C>(x: X<T>) => f<T>('inverseSqrt', x)\nexport const log = <T extends C>(x: X<T>) => f<T>('log', x)\nexport const log2 = <T extends C>(x: X<T>) => f<T>('log2', x)\nexport const negate = <T extends C>(x: X<T>) => f<T>('negate', x)\nexport const normalize = <T extends 'vec2' | 'vec3' | 'vec4'>(x: X<T>) => f<T>('normalize', x)\nexport const oneMinus = <T extends C>(x: X<T>) => f<T>('oneMinus', x)\nexport const radians = <T extends C>(x: X<T>) => f<T>('radians', x)\nexport const reciprocal = <T extends C>(x: X<T>) => f<T>('reciprocal', x)\nexport const round = <T extends C>(x: X<T>) => f<T>('round', x)\nexport const sign = <T extends C>(x: X<T>) => f<T>('sign', x)\nexport const sin = <T extends C>(x: X<T>) => f<T>('sin', x)\nexport const sinh = <T extends C>(x: X<T>) => f<T>('sinh', x)\nexport const sqrt = <T extends C>(x: X<T>) => f<T>('sqrt', x)\nexport const tan = <T extends C>(x: X<T>) => f<T>('tan', x)\nexport const tanh = <T extends C>(x: X<T>) => f<T>('tanh', x)\nexport const trunc = <T extends C>(x: X<T>) => f<T>('trunc', x)\n\n// 1. Functions where first argument determines return type with unified parameter types\nexport const atan2 = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('atan2', x, y)\nexport const clamp = <T extends C, U extends C>(x: X<T>, min: number | X<U>, max: number | X<U>) =>\n f<T>('clamp', x, min, max)\nexport const max = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('max', x, y)\nexport const min = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('min', x, y)\nexport const mix = <T extends C, U extends C>(x: X<T>, y: number | X<U>, a: number | Float | X<U>) =>\n f<T>('mix', x, y, a)\nexport const pow = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('pow', x, y)\nexport const reflect = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(I: X<T>, N: number | X<U>) =>\n f<T>('reflect', I, N)\nexport const refract = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(\n I: X<T>,\n N: number | X<U>,\n eta: number | Float\n) => f<T>('refract', I, N, eta)\n\n// 2. Functions where not first argument determines return type with unified parameter types\nexport const smoothstep = <T extends C, U extends C>(e0: number | X<U>, e1: number | X<U>, x: X<T>) =>\n f<T>('smoothstep', e0, e1, x)\nexport const step = <T extends C, U extends C>(edge: number | X<U>, x: X<T>) => f<T>('step', edge, x)\nexport const mod = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => {\n return (x as any).sub((x as any).div(y).floor().mul(y)) as X<T>\n}\n"],"mappings":"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","names":["CONVERSIONS","TYPE_MAPPING","CONSTANTS","OPERATORS","OPERATOR_KEYS","COMPONENT_COUNT_TO_TYPE","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","OPERATOR_TYPE_RULES","WGSL_TO_GLSL_BUILTIN","FUNCTION_RETURN_TYPES","FUNCTIONS","isSameType","L","R","isValidCombination","left","right","_","validateOperatorTypes","op","getOperatorResultType","rule","is","a","isValidStride","stride","calcStride","arrayLength","count","getStride","error","ret","WGSL_VS","storageSize","particleCount","is","sqrt","size","x","y","z","yz","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isElement","x","isConversion","CONVERSIONS","isX","isConstants","type","CONSTANTS","hex2rgb","hex","r","g","b","count","getId","getBluiltin","c","id","storageSize","ret","WGSL_TO_GLSL_BUILTIN","getConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getConstant","conversionKey","index","initNodeContext","isArrayAccess","addDependency","getEventFun","value","safeEventCall","fun","args","setupEvent","target","child","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","validateOperatorTypes","getOperatorResultType","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","isElement","inferFromCount","count","ret","inferFromArray","arr","c","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","stride","getStride","isSwizzle","isX","structType","fields","parseArray","children","c","x","is","code","parseGather","y","target","parseSwizzle","valueType","infer","indexVar","size","storageSize","coordX","coordY","parseScatter","storageNode","valueNode","storageId","valueCode","parseTexture","z","w","_y","args","parseIf","ret","i","isElse","parseSwitch","parseDeclare","type","varName","wgslType","getConversions","parseStructHead","id","fields","lines","key","fieldType","addDependency","parseStruct","instanceId","initialValues","ordered","parseDefine","props","layout","argParams","params","input","scopeCode","returnType","paramId","parseVaryingHead","parseAttribHead","location","parseUniformHead","isTexture","group","binding","parseStorageHead","parseLoop","conditionType","bodyCode","conditionCode","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","isX","type","props","id","children","fields","initialValues","x","y","z","w","parseGather","storageNode","indexNode","parseScatter","getConversions","mod","getOperator","parseTexture","child","parseLoop","parseIf","parseSwitch","parseDeclare","parseDefine","parseStructHead","parseStruct","field","parseVaryingHead","infer","getBluiltin","setupEvent","parseAttribHead","head","varType","parseUniformHead","parseStorageHead","parseConstantHead","topological","headers","dependencies","sorted","visited","visiting","visit","id","deps","dep","build","x","c","body","code","head","value","lines","ret","generateStruct","map","precisionHead","result","precision","getMaxPrecision","p0","p1","fragment","main","vertex","node","varying","compute","scope","define","addToScope","x","props","toVar","id","getId","y","create","z","assign","isScatter","Return","Break","Continue","struct","fields","initialValues","instanceId","scoped","fun","_scope","_define","Scope","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","layout","defaultId","args","paramVars","paramDefs","i","input","_layout","toPrimitive","x","hint","code","create","type","props","args","listeners","get","_","key","toVar","fragment","compute","vertex","id","getId","attribute","instance","constant","uniform","variable","builtin","vertexStage","arg","gather","element","member","assign","select","isOperator","addToScope","operator","isFunction","function_","isConversion","conversion","getConstant","is","isArrayAccess","set","fun","storage","index","scatter","y","z","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","id","positionLocal","positionWorld","positionView","normalLocal","normalWorld","normalView","screenCoordinate","screenUV","float","x","conversion","int","uint","bool","vec2","y","vec3","z","vec4","w","mat2","args","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4","texture2D","sampler2D","color","r","g","b","is","hex2rgb","iResolution","uniform","iMouse","iTime","uv","all","function_","any","determinant","distance","dot","length","lengthSq","luminance","cross","cubeTexture","texture","texelFetch","textureLod","abs","acos","acosh","asin","asinh","atan","atanh","ceil","cos","cosh","dFdx","dFdy","degrees","exp","exp2","floor","fract","fwidth","inverseSqrt","log","log2","negate","normalize","oneMinus","radians","reciprocal","round","sign","sin","sinh","sqrt","tan","tanh","trunc","atan2","clamp","min","max","mix","a","pow","reflect","I","N","refract","eta","smoothstep","e0","e1","step","edge","mod"]}
|