glre 0.34.0 → 0.35.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/README.md +96 -98
- package/dist/index.cjs +26 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +30 -25
- package/dist/index.js +26 -28
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +26 -28
- package/dist/native.cjs.map +1 -1
- package/dist/native.d.ts +13 -11
- package/dist/native.js +26 -28
- package/dist/native.js.map +1 -1
- package/dist/react.cjs +26 -28
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +26 -28
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +26 -28
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.ts +1 -1
- package/dist/solid.js +26 -28
- package/dist/solid.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +10 -2
- package/src/node/code.ts +6 -4
- package/src/node/index.ts +4 -3
- package/src/node/parse.ts +34 -31
- package/src/node/scope.ts +3 -2
- package/src/node/utils.ts +2 -2
- package/src/types.ts +12 -10
- package/src/utils/program.ts +10 -11
- package/src/webgl.ts +17 -8
- package/src/webgpu.ts +11 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/node/const.ts","../src/node/utils.ts","../src/node/infer.ts","../src/node/parse.ts","../src/node/code.ts","../src/node/scope.ts","../src/node/node.ts","../src/node/index.ts","../src/utils/program.ts","../src/webgpu.ts","../src/utils/pipeline.ts"],"sourcesContent":["import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nimport { float, fract, int, iResolution, position, vec4, vertexIndex } from './node'\nexport * from './node'\nexport * from './types'\nexport * from './utils/helpers'\nexport * from './utils/pipeline'\nexport * from './utils/program'\nexport * from './webgl'\nexport * from './webgpu'\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\n\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\nlet iTime = performance.now()\n\nconst defaultFragment = () => vec4(fract(position.xy.div(iResolution)), 0, 1)\nconst defaultVertex = () =>\n vec4(\n float(int(vertexIndex).mod(int(2)))\n .mul(4)\n .sub(1),\n float(int(vertexIndex).div(int(2)))\n .mul(4)\n .sub(1),\n 0,\n 1\n )\n\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event<Partial<GL>>({\n isNative: false,\n isWebGL: true,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n webgl: {},\n webgpu: {},\n }) as EventState<GL>\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)), gl)\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)), gl)\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)), gl)\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex || defaultVertex()\n gl.fs = gl.fs || gl.frag || gl.fragment || defaultFragment()\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n gl((await webgl(gl)) as GL)\n } else gl((await webgpu(gl)) as GL)\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.queue.flush()\n gl.render()\n return gl.isLoop\n })\n if (gl.isNative) return\n window.addEventListener('resize', gl.resize)\n gl.el.addEventListener('mousemove', gl.mousemove)\n })\n\n gl('clean', () => {\n gl.frame.stop()\n gl.frame.clean(gl.render)\n if (gl.isNative) return\n window.removeEventListener('resize', gl.resize)\n gl.el.removeEventListener('mousemove', gl.mousemove)\n })\n\n gl('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl('loop', () => {\n iTime = performance.now() / 1000\n gl.uniform('iTime', iTime)\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested as cached } from 'reev'\nimport { fragment, vertex } from './node'\nimport { is } from './utils/helpers'\nimport { createAttrib, createIbo, createProgram, createTexture, createVbo, getStride } from './utils/program'\nimport type { GL, WebGLState } from './types'\n\nexport const webgl = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgl2')!\n const config = { isWebGL: true, gl }\n const fs = fragment(gl.fs, config)\n const vs = vertex(gl.vs, config)\n const pg = createProgram(c, vs, fs, () => void (gl.isLoop = false))!\n c.useProgram(pg)\n\n let _activeUnit = 0\n const uniforms = cached((key) => c.getUniformLocation(pg, key))\n const attribs = cached((key) => c.getAttribLocation(pg, key))\n const units = cached(() => _activeUnit++)\n\n const clean = () => c.deleteProgram(pg)\n\n const render = () => {\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size!)\n c.drawArrays(c.TRIANGLES, 0, 3)\n }\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribs(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(gl.count!, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n const loc = uniforms(key)\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\n const _texture = (key: string, src: string) => {\n const image = new Image()\n Object.assign(image, { src, crossOrigin: 'anonymous' })\n image.decode().then(() => {\n const loc = uniforms(key)\n const unit = units(key)\n createTexture(c, image, loc, unit)\n })\n }\n\n return { render, clean, _attribute, _uniform, _texture, webgl: { context: c, program: pg } as WebGLState }\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","export const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\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 unknown as keyof typeof TYPE_MAPPING\n\nexport const CONVERSIONS = [\n 'toBool',\n 'toUint',\n 'toInt',\n 'toFloat',\n 'toBvec2',\n 'toIvec2',\n 'toUvec2',\n 'toVec2',\n 'toBvec3',\n 'toIvec3',\n 'toUvec3',\n 'toVec3',\n 'toBvec4',\n 'toIvec4',\n 'toUvec4',\n 'toVec4',\n 'toColor',\n 'toMat2',\n 'toMat3',\n 'toMat4',\n] as const\n\nexport const OPERATORS = {\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} as const\n\nexport const OPERATOR_KEYS = Object.keys(OPERATORS) as (keyof typeof OPERATORS)[]\n\n// All shader functions (type inference now handled by inferFrom)\nexport const FUNCTIONS = [\n // Float return functions\n 'dot',\n 'distance',\n 'length',\n 'lengthSq',\n 'determinant',\n 'luminance',\n // Bool return functions\n 'all',\n 'any',\n // Component-wise functions (preserve input type)\n 'abs',\n 'sign',\n 'floor',\n 'ceil',\n 'round',\n 'fract',\n 'trunc',\n 'sin',\n 'cos',\n 'tan',\n 'asin',\n 'acos',\n 'atan',\n 'sinh',\n 'cosh',\n 'tanh',\n 'asinh',\n 'acosh',\n 'atanh',\n 'exp',\n 'exp2',\n 'log',\n 'log2',\n 'sqrt',\n 'inverseSqrt',\n 'normalize',\n 'oneMinus',\n 'saturate',\n 'negate',\n 'reciprocal',\n 'dFdx',\n 'dFdy',\n 'fwidth',\n 'degrees',\n 'radians',\n // Vector functions\n 'cross',\n 'reflect',\n 'refract',\n // Multi-argument functions\n 'min',\n 'max',\n 'mix',\n 'clamp',\n 'step',\n 'smoothstep',\n 'pow',\n 'atan2',\n // Texture functions\n 'texture',\n 'textureLod',\n 'textureSize',\n 'cubeTexture',\n // Utility functions\n 'faceforward',\n 'bitcast',\n 'cbrt',\n 'difference',\n 'equals',\n 'pow2',\n 'pow3',\n 'pow4',\n 'transformDirection',\n] as const\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\n// Function return type mapping for method chaining\nexport const FUNCTION_RETURN_TYPES = {\n // Always return vec4\n texture: 'vec4',\n cubeTexture: 'vec4',\n textureSize: 'vec4',\n // Always return float\n length: 'float',\n lengthSq: 'float',\n distance: 'float',\n dot: 'float',\n // Always return bool\n all: 'bool',\n any: 'bool',\n // Always return vec3\n cross: 'vec3',\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\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 = [\n 'equal',\n 'notEqual',\n 'lessThan',\n 'lessThanEqual',\n 'greaterThan',\n 'greaterThanEqual',\n] as const\n\nexport const LOGICAL_OPERATORS = ['and', 'or'] 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","import { is } from '../utils/helpers'\nimport {\n CONSTANTS,\n CONVERSIONS,\n FUNCTIONS,\n OPERATOR_KEYS,\n OPERATORS,\n TYPE_MAPPING,\n WGSL_TO_GLSL_BUILTIN,\n} from './const'\nimport type { Constants, Conversions, Functions, NodeContext, NodeProxy, Operators, Swizzles, X } from './types'\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 isConversion = (key: unknown): key is Conversions => {\n return CONVERSIONS.includes(key as Conversions)\n}\n\nexport const isNodeProxy = <T extends Constants>(x: unknown): x is NodeProxy<T> => {\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 Constants => {\n if (!is.str(type)) return false\n return CONSTANTS.includes(type)\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 = () => `i${count++}`\n\nexport const formatConversions = <T extends Constants>(x: 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: X<string>) => {\n return OPERATORS[op as keyof typeof OPERATORS] || op\n}\n\nexport const getBluiltin = (id: string) => {\n return WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n}\n\nexport const conversionToConstant = (conversionKey: string): Constants => {\n const index = CONVERSIONS.indexOf(conversionKey as Conversions)\n return index !== -1 ? CONSTANTS[index] : 'float'\n}\n\nexport const getEventFun = (c: NodeContext, id: string, isAttribute = false, isTexture = false) => {\n if (c.isWebGL) {\n if (isAttribute) return (value: any) => c.gl?.attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (isAttribute) return (value: any) => c.gl?._attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nexport const safeEventCall = <T extends Constants>(x: X<T>, fun: (value: unknown) => void) => {\n if (!x) return\n if (!isNodeProxy(x)) return fun(x) // for uniform(1)\n if (x.type !== 'conversion') return\n const value = x.props.children?.slice(1).filter(Boolean)\n if (!value?.length) return // for uniform(vec2())\n fun(value)\n}\n\nexport const initNodeContext = (c: NodeContext) => {\n if (!c.code) {\n c.code = {\n headers: new Map(),\n fragInputs: new Map(),\n vertInputs: new Map(),\n vertOutputs: new Map(),\n vertVaryings: new Map(),\n dependencies: new Map(),\n }\n if (!c.isWebGL) {\n c.code.fragInputs.set('position', '@builtin(position) position: vec4f')\n c.code.vertOutputs.set('position', '@builtin(position) position: vec4f')\n }\n }\n return c\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\nexport const sortHeadersByDependencies = (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","import { is } from '../utils/helpers'\nimport {\n BUILTIN_TYPES,\n COMPARISON_OPERATORS,\n COMPONENT_COUNT_TO_TYPE,\n FUNCTION_RETURN_TYPES,\n LOGICAL_OPERATORS,\n} from './const'\nimport { isConstants, isNodeProxy, isSwizzle } from './utils'\nimport type { Constants as C, NodeContext, NodeProxy, X } 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\n// Unified logic with types.ts InferOperator type\nconst inferOperator = <T extends C>(L: T, R: T, op: string): T => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return 'bool' as T\n if (L === R) return L\n // broadcast\n if (L === 'float' || L === 'int') return R\n if (R === 'float' || R === 'int') return L\n // mat * vec → vec\n if (L === 'mat4' && R === 'vec4') return R\n if (L === 'mat3' && R === 'vec3') return R\n if (L === 'mat2' && R === 'vec2') return R\n // vec * mat → vec\n if (L === 'vec4' && R === 'mat4') return L\n if (L === 'vec3' && R === 'mat3') return L\n if (L === 'vec2' && R === 'mat2') return L\n return L\n}\n\nexport const inferPrimitiveType = <T extends C>(x: X) => {\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 return 'float' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n}\n\nconst inferFromArray = <T extends C>(arr: X<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 new Error(`glre node system error: defined scope return mismatch`)\n return ret\n}\n\nexport const inferFunction = <T extends C>(x: X) => {\n return FUNCTION_RETURN_TYPES[x as keyof typeof FUNCTION_RETURN_TYPES] as T\n}\n\nexport const inferImpl = <T extends C>(target: NodeProxy<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 === 'ternary') return inferOperator(infer(y, c), infer(z, c), 'add')\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'function') return inferFunction(x) || infer(y, c)\n if (type === 'define' && isConstants(layout?.type)) return layout?.type as T\n if (type === 'attribute' && is.arr(x) && c.gl?.count) return inferFromCount(x.length / c.gl.count)\n if (type === 'member') {\n if (isSwizzle(x)) return inferFromCount(x.length)\n if (isNodeProxy(y) && is.str(x)) {\n const field = (y as any).props.fields?.[x] // for variable node of struct member\n if (field) return infer(field, c)\n }\n return 'float' as T // fallback @TODO FIX\n }\n if (inferFrom) return inferFromArray(inferFrom, c)\n return infer(x, c) // for uniform\n}\n\nexport const infer = <T extends C>(target: X<T>, c?: NodeContext | null): T => {\n if (!c) c = {}\n if (!isNodeProxy(target)) return inferPrimitiveType(target)\n if (is.arr(target)) return inferFromCount(target.length)\n if (!c.infers) c.infers = new WeakMap<NodeProxy<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\n}\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { infer } from './infer'\nimport { formatConversions, addDependency } from './utils'\nimport type { Constants, NodeContext, NodeProps, NodeProxy, X } from './types'\n\nexport const parseArray = (children: X[], c: NodeContext) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\nexport const parseTexture = (c: NodeContext, y: X, z: X, w: X) => {\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: X, y: X, children: X[]) => {\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: X, children: X[]) => {\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: X, y: X) => {\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 = formatConversions(type)\n return `var ${varName}: ${wgslType} = ${code(x, c)};`\n}\n\nexport const parseDefine = (c: NodeContext, props: NodeProps, returnType: Constants) => {\n const { id, children = [], layout } = props\n const [x, ...args] = children\n const argParams: [name: string, type: string][] = []\n const params: string[] = []\n if (layout?.inputs)\n for (const input of layout.inputs) {\n argParams.push([input.name, input.type])\n }\n else\n for (let i = 0; i < args.length; i++) {\n argParams.push([`p${i}`, infer(args[i], c)])\n }\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}: ${formatConversions(type, c)}`)\n ret.push(`fn ${id}(${params}) -> ${formatConversions(returnType, c)} {`)\n }\n const scopeCode = code(x, c)\n if (scopeCode) ret.push(scopeCode)\n ret.push('}')\n return ret.join('\\n')\n}\n\nexport const parseStructHead = (c: NodeContext, id: string, fields: Record<string, NodeProxy> = {}) => {\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}: ${formatConversions(type, c)},`)\n }\n const ret = lines.join('\\n ')\n return `struct ${id} {\\n ${ret}\\n};`\n}\n\nexport const parseStruct = (\n c: NodeContext,\n id: string,\n instanceId = '',\n fields?: Record<string, NodeProxy>,\n initialValues?: Record<string, NodeProxy>\n) => {\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 * headers\n */\nexport const parseVaryingHead = (c: NodeContext, id: string, type: string) => {\n return c.isWebGL\n ? `${type} ${id};`\n : `@location(${c.code?.vertVaryings?.size || 0}) ${id}: ${formatConversions(type, c)}`\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 = formatConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\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 = formatConversions(type, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, type: Constants, value: string) => {\n return c.isWebGL ? `const ${type} ${id} = ${value};` : `const ${id}: ${formatConversions(type, c)} = ${value};`\n}\n","import { is } from '../utils/helpers'\nimport { infer } from './infer'\nimport {\n parseArray,\n parseAttribHead,\n parseConstantHead,\n parseDeclare,\n parseDefine,\n parseIf,\n parseStruct,\n parseStructHead,\n parseSwitch,\n parseTexture,\n parseVaryingHead,\n parseUniformHead,\n} from './parse'\nimport { getBluiltin, getOperator, formatConversions, safeEventCall, getEventFun, initNodeContext } from './utils'\nimport type { Constants, NodeContext, X } from './types'\n\nexport const code = <T extends Constants>(target: X<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 const { type, props } = target\n const { id = '', 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(y, c)}.${code(x, c)}`\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 `${formatConversions(x, c)}(${parseArray(children.slice(1), c)})`\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, c)}`\n return `(${code(y, c)} ${getOperator(x)} ${code(z, c)})`\n }\n if (type === 'function') {\n if (x === 'negate') return `(-${parseArray(children.slice(1), c)})`\n if (x === 'texture') return parseTexture(c, y, z, w)\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 === 'loop')\n return c.isWebGL\n ? `for (int i = 0; i < ${code(x, c)}; i += 1) {\\n${code(y, c)}\\n}`\n : `for (var i: i32 = 0; i < ${code(x, c)}; i++) {\\n${code(y, c)}\\n}`\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, infer(target, c)))\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, fields, 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(id)\n if (id === 'position') return 'out.position'\n const field = `@builtin(${id}) ${id}: ${formatConversions(infer(target, c), c)}`\n if (c.isFrag) {\n c.code?.fragInputs.set(id, field)\n } else c.code?.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute') {\n const fun = getEventFun(c, id, true)\n safeEventCall(x, fun)\n target.listeners.add(fun)\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 const fun = getEventFun(c, id, false, varType === 'texture')\n safeEventCall(x, fun)\n target.listeners.add(fun)\n head = parseUniformHead(c, id, varType)\n }\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 { conversion, node } from './node'\nimport { getId } from './utils'\nimport type { FnLayout, NodeProps, NodeProxy, X, Constants, Int } from './types'\n\nlet scope: NodeProxy | null = null\nlet define: NodeProxy | null = null\n\nconst addToScope = (x: NodeProxy) => {\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\n const { props } = define\n if (!props.inferFrom) props.inferFrom = []\n props.inferFrom.push(x)\n}\n\nexport const toVar = <T extends Constants>(x: X<T>, id?: string): NodeProxy<T> => {\n if (!id) id = getId()\n const y = node<T>('variable', { id, inferFrom: [x] })\n const z = node('declare', null, x, y)\n addToScope(z)\n return y\n}\n\nexport const assign = <T extends Constants>(x: X<T>, y: X<T>): X<T> => {\n const z = node('assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = <T extends Constants>(x: X<T>): NodeProxy<T> => {\n const y = node<T>('return', { inferFrom: [x] }, x)\n addToScope(y)\n return y\n}\n\nexport const struct = <T extends Record<string, NodeProxy>>(fields: T, id = getId()) => {\n return (initialValues: T = {} as T, instanceId = getId()) => {\n const x = node('variable', { id: instanceId, inferFrom: [id] })\n const y = node('struct', { id, fields, initialValues }, x)\n addToScope(y)\n return x\n }\n}\n\nconst scoped = (x: NodeProxy, fun: () => NodeProxy | void, y = define) => {\n // cache to revert\n const _scope = scope\n const _define = define\n // update\n scope = x\n define = y\n if (_scope) x.props.parent = _scope\n const z = fun()\n if (z) Return(z)\n // revert\n scope = _scope\n define = _define\n}\n\nexport const If = (x: NodeProxy, fun: () => void) => {\n const y = node('scope')\n scoped(y, fun)\n const ifNode = node('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = node('scope')\n scoped(_y, _fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = node('scope')\n scoped(_x, _fun)\n ifNode.props.children!.push(_x)\n },\n })\n return ret()\n}\n\nexport const Loop = (x: NodeProxy, fun: (params: { i: Int }) => void) => {\n const y = node('scope')\n scoped(y, () => fun({ i: node<'int'>('variable', { id: 'i', inferFrom: [conversion('int', 0)] }) }))\n const ret = node('loop', null, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Switch = (x: NodeProxy) => {\n const switchNode = node('switch', null, x)\n addToScope(switchNode)\n const ret = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const y = node('scope')\n scoped(y, 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 = node('scope')\n scoped(scope, fun)\n switchNode.props.children!.push(scope)\n },\n })\n return ret()\n}\n\nexport const Fn = <ReturnType extends Constants, Args extends Constants[]>(\n fun: (paramVars: NodeProxy[]) => NodeProxy<ReturnType> | void,\n defaultId = getId()\n) => {\n let layout: FnLayout\n const ret = (...args: X<Args[number]>[]): NodeProxy<ReturnType> => {\n const id = layout?.name || defaultId\n const x = node('scope')\n const paramVars: NodeProxy[] = []\n const paramDefs: NodeProps[] = []\n if (layout?.inputs)\n for (const input of layout.inputs) {\n paramDefs.push({ id: input.name, inferFrom: [conversion(input.type)] })\n }\n else\n for (let i = 0; i < args.length; i++) {\n paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n }\n for (const props of paramDefs) paramVars.push(node('variable', props))\n const y = node<ReturnType>('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars), y)\n return y\n }\n ret.setLayout = (_layout: FnLayout) => {\n layout = _layout\n return ret\n }\n return ret\n}\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { assign, toVar } from './scope'\nimport { conversionToConstant, isConversion, isFunction, isOperator, getId } from './utils'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, X, Constants as C } from './types'\n\nconst toPrimitive = (x: X, hint: string) => {\n if (hint === 'string') return code(x)\n}\n\nexport const node = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {\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 === 'assign') return assign.bind(null, x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive.bind(null, x)\n if (key === 'listeners') return listeners\n if (isOperator(key)) return (...y: X[]) => operator(key, x, ...y)\n if (isFunction(key)) return (...y: X[]) => function_(key, x, ...y)\n if (isConversion(key)) return () => conversion(conversionToConstant(key), x)\n if (is.str(key)) return member(key, x) // for struct and swizzling\n }\n const set = (_: unknown, key: string, y: X) => {\n if (key === 'value') listeners.forEach((fun) => fun(y))\n if (is.str(key)) member(key, x).assign(y)\n return true\n }\n const x = new Proxy({}, { get, set }) as unknown as NodeProxy<T>\n return x\n}\n\n// headers with proper type inference\nexport const attribute = <T extends C>(x: X, id = getId()) => node<T>('attribute', { id }, x)\nexport const constant = <T extends C>(x: X<T>, id = getId()) => node<T>('constant', { id }, x)\nexport const uniform = <T extends C>(x: X<T>, id = getId()) => node<T>('uniform', { id }, x)\nexport const variable = <T extends C>(id = getId()) => node<T>('variable', { id })\nexport const builtin = <T extends C>(id = getId()) => node<T>('builtin', { id })\nexport const vertexStage = <T extends C>(x: X<T>, id = getId()) => {\n return node<T>('varying', { id, inferFrom: [x] }, x)\n}\n\n// Node shorthands with proper typing\nexport const member = <T extends C>(key: string, x: X) => node<T>('member', null, key, x)\nexport const select = <T extends C>(x: X<T>, y: X<T>, z: X) => node<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE\nexport const operator = <T extends C>(key: Operators, ...x: X[]) => node<T>('operator', null, key, ...x)\nexport const function_ = <T extends C>(key: Functions, ...x: X[]) => node<T>('function', null, key, ...x)\nexport const conversion = <T extends C>(key: T, ...x: X[]) => node<T>('conversion', null, key, ...x)\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { builtin, conversion as c, function_ as f, uniform as u } from './node'\nimport { hex2rgb, sortHeadersByDependencies } from './utils'\nimport type { Constants as C, NodeContext, X, Vec2, Float } from './types'\nexport * from './code'\nexport * from './node'\nexport * from './scope'\nexport * from './types'\nexport * from './utils'\n\nconst GLSL_FRAGMENT_HEAD = `\n#version 300 es\nprecision mediump float;\nout vec4 fragColor;\n`.trim()\n\nconst generateHead = (x: X, c: NodeContext) => {\n const body = code(x, c)\n let head = ''\n if (c.isWebGL && c.code?.dependencies) {\n const sorted = sortHeadersByDependencies(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 return [head, body]\n}\n\nconst generateStruct = (id: string, map: Map<string, string>) => {\n return `struct ${id} {\\n ${Array.from(map.values()).join(',\\n ')}\\n}`\n}\n\nexport const vertex = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.isFrag = false // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) ret.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) ret.push(`out ${code}`)\n ret.push(head)\n ret.push('void main() {')\n ret.push(` gl_Position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` ${id} = ${code};`)\n } else {\n if (c.code?.vertInputs?.size) ret.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) ret.push(generateStruct('Out', c.code.vertOutputs))\n ret.push(head)\n ret.push('@vertex')\n ret.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n ret.push(' var out: Out;')\n ret.push(` out.position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` out.${id} = ${code};`)\n ret.push(' return out;')\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const fragment = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.isFrag = true // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push(GLSL_FRAGMENT_HEAD)\n for (const code of c.code?.fragInputs?.values() || []) ret.push(`in ${code}`)\n ret.push(head)\n ret.push(`void main() {\\n fragColor = ${body};`)\n } else {\n if (c.code?.fragInputs?.size) ret.push(generateStruct('Out', c.code.fragInputs))\n ret.push(head)\n ret.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n ret.push(` return ${body};`)\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\n// Builtin Variables\nexport const position = builtin<'vec4'>('position')\nexport const vertexIndex = builtin<'uint'>('vertex_index')\nexport const instanceIndex = builtin<'uint'>('instance_index')\nexport const frontFacing = builtin<'bool'>('front_facing')\nexport const fragDepth = builtin<'float'>('frag_depth')\nexport const sampleIndex = builtin<'uint'>('sample_index')\nexport const sampleMask = builtin<'uint'>('sample_mask')\nexport const pointCoord = builtin<'vec2'>('point_coord')\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = builtin<'vec3'>('position')\nexport const positionWorld = builtin<'vec3'>('positionWorld')\nexport const positionView = builtin<'vec3'>('positionView')\nexport const normalLocal = builtin<'vec3'>('normalLocal')\nexport const normalWorld = builtin<'vec3'>('normalWorld')\nexport const normalView = builtin<'vec3'>('normalView')\nexport const screenCoordinate = builtin<'vec2'>('screenCoordinate')\nexport const screenUV = builtin<'vec2'>('screenUV')\n\n// Type constructors with proper type inference\nexport const float = (x?: X) => c('float', x)\nexport const int = (x?: X) => c('int', x)\nexport const uint = (x?: X) => c('uint', x)\nexport const bool = (x?: X) => c('bool', x)\nexport const vec2 = (x?: X, y?: X) => c('vec2', x, y)\nexport const vec3 = (x?: X, y?: X, z?: X) => c('vec3', x, y, z)\nexport const vec4 = (x?: X, y?: X, z?: X, w?: X) => c('vec4', x, y, z, w)\nexport const mat2 = (...args: X[]) => c('mat2', ...args)\nexport const mat3 = (...args: X[]) => c('mat3', ...args)\nexport const mat4 = (...args: X[]) => c('mat4', ...args)\nexport const ivec2 = (x?: X, y?: X) => c('ivec2', x, y)\nexport const ivec3 = (x?: X, y?: X, z?: X) => c('ivec3', x, y, z)\nexport const ivec4 = (x?: X, y?: X, z?: X, w?: X) => c('ivec4', x, y, z, w)\nexport const uvec2 = (x?: X, y?: X) => c('uvec2', x, y)\nexport const uvec3 = (x?: X, y?: X, z?: X) => c('uvec3', x, y, z)\nexport const uvec4 = (x?: X, y?: X, z?: X, w?: X) => c('uvec4', x, y, z, w)\nexport const bvec2 = (x?: X, y?: X) => c('bvec2', x, y)\nexport const bvec3 = (x?: X, y?: X, z?: X) => c('bvec3', x, y, z)\nexport const bvec4 = (x?: X, y?: X, z?: X, w?: X) => c('bvec4', x, y, z, w)\nexport const texture2D = (x?: X) => c('texture', x)\nexport const sampler2D = () => c('sampler2D')\nexport const color = (r?: X, g?: X, b?: X) => {\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: Vec2 = u(vec2(), 'iResolution')\nexport const iMouse: Vec2 = u(vec2(), 'iMouse')\nexport const iTime: Float = u(float(), 'iTime')\nexport const uv = position.xy.div(iResolution)\n\n// Texture Functions - always return vec4\nexport const texture = (x: X, y: X, z?: X) => f<'vec4'>('texture', x, y, z)\nexport const cubeTexture = (x: X, y: X, z?: X) => f<'vec4'>('cubeTexture', x, y, z)\nexport const textureSize = (x: X, y?: X) => f<'vec4'>('textureSize', x, y)\n\n// Functions that always return float regardless of input\nexport const length = (x: X) => f<'float'>('length', x)\nexport const lengthSq = (x: X) => f<'float'>('lengthSq', x)\nexport const distance = (x: X, y: X) => f<'float'>('distance', x, y)\nexport const dot = (x: X, y: X) => f<'float'>('dot', x, y)\n\n// Functions that 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// Functions that always return vec3 (cross product only works with vec3)\nexport const cross = (x: X<'vec3'>, y: X<'vec3'>) => f<'vec3'>('cross', x, y)\n\n// Component-wise functions - preserve input type (T -> T)\nexport const abs = <T extends C>(x: X<T>) => f<T>('abs', x)\nexport const sign = <T extends C>(x: X<T>) => f<T>('sign', x)\nexport const floor = <T extends C>(x: X<T>) => f<T>('floor', x)\nexport const ceil = <T extends C>(x: X<T>) => f<T>('ceil', x)\nexport const round = <T extends C>(x: X<T>) => f<T>('round', x)\nexport const fract = <T extends C>(x: X<T>) => f<T>('fract', x)\nexport const trunc = <T extends C>(x: X<T>) => f<T>('trunc', x)\nexport const sin = <T extends C>(x: X<T>) => f<T>('sin', x)\nexport const cos = <T extends C>(x: X<T>) => f<T>('cos', x)\nexport const tan = <T extends C>(x: X<T>) => f<T>('tan', x)\nexport const asin = <T extends C>(x: X<T>) => f<T>('asin', x)\nexport const acos = <T extends C>(x: X<T>) => f<T>('acos', x)\nexport const atan = <T extends C>(x: X<T>) => f<T>('atan', x)\nexport const sinh = <T extends C>(x: X<T>) => f<T>('sinh', x)\nexport const cosh = <T extends C>(x: X<T>) => f<T>('cosh', x)\nexport const tanh = <T extends C>(x: X<T>) => f<T>('tanh', x)\nexport const asinh = <T extends C>(x: X<T>) => f<T>('asinh', x)\nexport const acosh = <T extends C>(x: X<T>) => f<T>('acosh', x)\nexport const atanh = <T extends C>(x: X<T>) => f<T>('atanh', 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 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 sqrt = <T extends C>(x: X<T>) => f<T>('sqrt', x)\nexport const inverseSqrt = <T extends C>(x: X<T>) => f<T>('inverseSqrt', x)\nexport const normalize = <T extends C>(x: X<T>) => f<T>('normalize', x)\nexport const oneMinus = <T extends C>(x: X<T>) => f<T>('oneMinus', x)\nexport const saturate = <T extends C>(x: X<T>) => f<T>('saturate', x)\nexport const negate = <T extends C>(x: X<T>) => f<T>('negate', x)\nexport const reciprocal = <T extends C>(x: X<T>) => f<T>('reciprocal', 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 fwidth = <T extends C>(x: X<T>) => f<T>('fwidth', x)\nexport const degrees = <T extends C>(x: X<T>) => f<T>('degrees', x)\nexport const radians = <T extends C>(x: X<T>) => f<T>('radians', x)\n\n// Functions where first argument determines return type\nexport const reflect = <T extends C>(I: X<T>, N: X) => f<T>('reflect', I, N)\nexport const refract = <T extends C>(I: X<T>, N: X, eta: X) => f<T>('refract', I, N, eta)\n\n// Functions with highest priority type among arguments (using first arg for simplicity)\nexport const min = <T extends C>(x: X<T>, y: X) => f<T>('min', x, y)\nexport const max = <T extends C>(x: X<T>, y: X) => f<T>('max', x, y)\nexport const mix = <T extends C>(x: X<T>, y: X, a: X) => f<T>('mix', x, y, a)\nexport const clamp = <T extends C>(x: X<T>, minVal: X, maxVal: X) => f<T>('clamp', x, minVal, maxVal)\nexport const step = <T extends C>(edge: X, x: X<T>) => f<T>('step', edge, x)\nexport const smoothstep = <T extends C>(e0: X, e1: X, x: X<T>) => f<T>('smoothstep', e0, e1, x)\n\n// Two-argument functions with highest priority type\nexport const atan2 = <T extends C>(y: X<T>, x: X) => f<T>('atan2', y, x)\nexport const pow = <T extends C>(x: X<T>, y: X) => f<T>('pow', x, y)\n\n// Component-wise power functions\nexport const pow2 = <T extends C>(x: X<T>) => f<T>('pow2', x)\nexport const pow3 = <T extends C>(x: X<T>) => f<T>('pow3', x)\nexport const pow4 = <T extends C>(x: X<T>) => f<T>('pow4', x)\n\n// Utility functions\nexport const bitcast = <T extends C>(x: X<T>, y: X) => f<T>('bitcast', x, y)\nexport const cbrt = <T extends C>(x: X<T>) => f<T>('cbrt', x)\nexport const difference = <T extends C>(x: X<T>, y: X) => f<T>('difference', x, y)\nexport const equals = (x: X, y: X) => f<'bool'>('equals', x, y)\nexport const faceforward = <T extends C>(N: X<T>, I: X, Nref: X) => f<T>('faceforward', N, I, Nref)\nexport const transformDirection = <T extends C>(dir: X<T>, matrix: X) => f<T>('transformDirection', dir, matrix)\n","const createShader = (c: WebGLRenderingContext, source: string, type: number) => {\n const shader = c.createShader(type)\n if (!shader) throw new Error('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 console.warn(`Could not compile shader: ${error}`)\n}\n\nexport const createProgram = (c: WebGLRenderingContext, vert: string, frag: string, onError = () => {}) => {\n const pg = c.createProgram()\n const fs = createShader(c, frag, c.FRAGMENT_SHADER)\n const vs = createShader(c, vert, c.VERTEX_SHADER)\n if (!fs || !vs) return onError()\n c.attachShader(pg, vs)\n c.attachShader(pg, fs)\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 onError()\n console.warn(`Could not link program: ${error}`)\n}\n\nexport const createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const getStride = (count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n return Math.floor(stride)\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n stride: number,\n loc: any,\n vbo: WebGLBuffer,\n ibo?: WebGLBuffer\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n if (ibo) c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createTexture = (c: WebGLRenderingContext, img: HTMLImageElement, loc: any, unit: number) => {\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, img)\n 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}\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport {\n createAttribBuffer,\n createBindings,\n createBindGroup,\n createDepthTexture,\n createDescriptor,\n createDevice,\n createPipeline,\n createTextureSampler,\n createUniformBuffer,\n createVertexBuffers,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\nimport { fragment, vertex } from './node'\n\nexport const webgpu = async (gl: Partial<GL>) => {\n const context = gl.el!.getContext('webgpu') as GPUCanvasContext\n const { device, format } = await createDevice(context)\n const bindings = createBindings()\n let frag: string\n let vert: string\n let flush = (_pass: GPURenderPassEncoder) => {}\n let imageLoading = 0\n let needsUpdate = true\n let depthTexture: GPUTexture\n\n const uniforms = cached((_key, value: number[]) => {\n needsUpdate = true\n const { array, buffer } = createUniformBuffer(device, value)\n const { binding, group } = bindings.uniform()\n return { binding, group, array, buffer }\n })\n\n const textures = cached((_key, width = 0, height = 0) => {\n needsUpdate = true\n const { texture, sampler } = createTextureSampler(device, width, height)\n const { binding, group } = bindings.texture()\n return { binding, group, texture, sampler, view: texture.createView() }\n })\n\n const attribs = cached((_key, value: number[]) => {\n needsUpdate = true\n const stride = value.length / gl.count!\n const { location } = bindings.attrib()\n const { array, buffer } = createAttribBuffer(device, value)\n return { array, buffer, location, stride }\n })\n\n const update = () => {\n const { vertexBuffers, bufferLayouts } = createVertexBuffers(attribs.map.values())\n const { bindGroups, bindGroupLayouts } = createBindGroup(\n device,\n uniforms.map.values(),\n textures.map.values()\n )\n const pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, vert, frag)\n flush = (pass) => {\n pass.setPipeline(pipeline)\n bindGroups.forEach((v, i) => pass.setBindGroup(i, v))\n vertexBuffers.forEach((v, i) => pass.setVertexBuffer(i, v))\n pass.draw(gl.count!, 1, 0, 0)\n pass.end()\n }\n }\n\n const render = () => {\n if (!frag || !vert) {\n const config = { isWebGL: false, gl }\n frag = fragment(gl.fs, config)\n vert = vertex(gl.vs, config)\n }\n if (imageLoading) return // MEMO: loading after build node\n if (needsUpdate) update()\n needsUpdate = false\n const encoder = device.createCommandEncoder()\n flush(encoder.beginRenderPass(createDescriptor(context, depthTexture)))\n device.queue.submit([encoder.finish()])\n }\n\n const resize = () => {\n const canvas = gl.el as HTMLCanvasElement\n depthTexture?.destroy()\n depthTexture = createDepthTexture(device, canvas.width, canvas.height)\n }\n\n const clean = () => {\n depthTexture?.destroy()\n }\n\n const _attribute = (key = '', value: number[]) => {\n const { array, buffer } = attribs(key, value)\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n if (is.num(value)) value = [value]\n const { array, buffer } = uniforms(key, value)\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _texture = (key: string, src: string) => {\n imageLoading++\n const source = Object.assign(new Image(), { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n const { width, height } = source\n const { texture } = textures(key, width, height)\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n imageLoading--\n })\n }\n\n resize()\n\n return {\n webgpu: { device, uniforms, textures, attribs } as WebGPUState,\n render,\n resize,\n clean,\n _attribute,\n _uniform,\n _texture,\n }\n}\n","import type { AttribData, TextureData, UniformData } from '../types'\n\n/**\n * initialize\n */\nexport const createDevice = async (c: GPUCanvasContext) => {\n const gpu = navigator.gpu\n const format = gpu.getPreferredCanvasFormat()\n const adapter = await gpu.requestAdapter()\n const device = await adapter!.requestDevice()\n c.configure({ device, format, alphaMode: 'opaque' })\n return { device, format }\n}\n\nexport const createBindings = () => {\n let uniform = 0\n let texture = 0\n let attrib = 0\n return {\n uniform: () => {\n const group = Math.floor(uniform / 12)\n const binding = uniform % 12\n uniform++\n return { group, binding }\n },\n texture: () => {\n const baseGroup = Math.floor(uniform / 12) + 1\n const group = baseGroup + Math.floor(texture / 6)\n const binding = (texture % 6) * 2\n texture++\n return { group, binding }\n },\n attrib: () => {\n const location = attrib\n attrib++\n return { location }\n },\n }\n}\n\n/**\n * pipeline update\n */\nconst getVertexFormat = (stride: number): GPUVertexFormat => {\n if (stride === 2) return 'float32x2'\n if (stride === 3) return 'float32x3'\n if (stride === 4) return 'float32x4'\n return 'float32'\n}\n\nexport const createVertexBuffers = (attribs: Iterable<AttribData>) => {\n const vertexBuffers: GPUBuffer[] = []\n const bufferLayouts: GPUVertexBufferLayout[] = []\n for (const { buffer, location, stride } of attribs) {\n vertexBuffers[location] = buffer\n bufferLayouts[location] = {\n arrayStride: stride * 4,\n attributes: [\n {\n shaderLocation: location,\n offset: 0,\n format: getVertexFormat(stride),\n },\n ],\n }\n }\n return { vertexBuffers, bufferLayouts }\n}\n\nexport const createBindGroup = (\n device: GPUDevice,\n uniforms: Iterable<UniformData>,\n textures: Iterable<TextureData>\n) => {\n const groups = new Map<number, { layouts: GPUBindGroupLayoutEntry[]; bindings: GPUBindGroupEntry[] }>()\n const ret = { bindGroups: [] as GPUBindGroup[], bindGroupLayouts: [] as GPUBindGroupLayout[] }\n const add = (i: number, layout: GPUBindGroupLayoutEntry, binding: GPUBindGroupEntry) => {\n if (!groups.has(i)) groups.set(i, { layouts: [], bindings: [] })\n const { layouts, bindings } = groups.get(i)!\n layouts.push(layout)\n bindings.push(binding)\n }\n for (const { binding, buffer, group: i } of uniforms) {\n add(i, { binding, visibility: 3, buffer: { type: 'uniform' } }, { binding, resource: { buffer } })\n }\n for (const { binding: b, group: i, sampler, view } of textures) {\n add(i, { binding: b, visibility: 2, sampler: {} }, { binding: b, resource: sampler })\n add(i, { binding: b + 1, visibility: 2, texture: {} }, { binding: b + 1, resource: view })\n }\n for (const [i, { layouts, bindings }] of groups) {\n ret.bindGroupLayouts[i] = device.createBindGroupLayout({ entries: layouts })\n ret.bindGroups[i] = device.createBindGroup({ layout: ret.bindGroupLayouts[i], entries: bindings })\n }\n return ret\n}\n\nexport const createPipeline = (\n device: GPUDevice,\n format: GPUTextureFormat,\n bufferLayouts: GPUVertexBufferLayout[],\n bindGroupLayouts: GPUBindGroupLayout[],\n vs: string,\n fs: string\n) => {\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ label: 'vert', code: vs }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ label: 'frag', code: fs }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout: device.createPipelineLayout({ bindGroupLayouts }),\n primitive: { topology: 'triangle-list' },\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n })\n}\n\n/**\n * buffers\n */\nexport const createUniformBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const size = Math.ceil(array.byteLength / 256) * 256\n const buffer = device.createBuffer({ size, usage: 72 }) // 72 is GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n return { array, buffer }\n}\n\nexport const createAttribBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const buffer = device.createBuffer({ size: array.byteLength, usage: 40 }) // 40 is GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n return { array, buffer }\n}\n\nexport const createDescriptor = (c: GPUCanvasContext, depthTexture: GPUTexture) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear' as GPULoadOp,\n storeOp: 'store' as GPUStoreOp,\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n depthClearValue: 1.0,\n depthLoadOp: 'clear' as GPULoadOp,\n depthStoreOp: 'store' as GPUStoreOp,\n },\n } as GPURenderPassDescriptor\n}\n\n/**\n * textures\n */\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 }) // 22 is GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return { texture, sampler }\n}\n\nexport const createDepthTexture = (device: GPUDevice, width: number, height: number) => {\n return device.createTexture({\n size: [width, height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n })\n}\n"],"mappings":"AAAA,OAAS,WAAAA,GAAS,SAAAC,OAAa,OAC/B,OAAS,eAAAC,GAAa,eAAAC,OAAmB,OCDzC,OAAS,UAAUC,OAAc,OCA1B,IAAMC,EAAK,CACV,IAAK,MAAM,QACX,IAAMC,GAA6B,OAAOA,GAAM,UAChD,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAO,UAAUA,CAAC,EACpD,IAAMA,GAA8B,OAAOA,GAAM,WACjD,IAAMA,GAA+B,OAAOA,EAAM,IAClD,IAAMA,GAA0BA,IAAM,KACtC,IAAMA,GAAkCA,aAAa,IACrD,IAAMA,GAA2CA,aAAa,IAC9D,IAAMA,GAA4B,CAAC,CAACA,GAAKA,EAAE,YAAY,OAAS,SAChE,IAAMA,GAA4B,OAAOA,GAAM,UAAY,OAAO,MAAMA,CAAC,CACjF,EAUaC,GAAO,CAAmBC,EAAiCC,IAAiCD,EAAI,QAAQC,CAAE,EAE1GC,GAAQ,CAAoCF,KAAoCG,IAAgB,CACrGJ,GAAKC,EAAMI,GAAMA,EAAE,GAAGD,CAAI,CAAC,CACnC,EAKaE,GAAU,CAACC,EAAI,GAAIC,EAAO,IAAKC,EAAK,MAAQF,EAAE,MAAMC,CAAI,EAAE,KAAKC,CAAE,EACjEC,GAAM,CAACC,EAAM,SAAWA,EAAI,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,GAAK,GAC/DC,GAAM,CAACL,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAU,EACjDM,GAAM,CAACN,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAUA,EAAI,EAAI,EAAI,GAC7DO,GAAM,CAACC,EAAQ,EAAGC,EAAQ,MAC/BA,GAAS,GACTA,EAAQ,KAAK,IAAI,GAAIA,CAAK,EAC1BD,GAASC,EACTD,EAAQ,KAAK,MAAMA,CAAK,EACxBA,GAASC,EACFD,GCxCR,IAAME,EAAe,CACpB,KAAM,OACN,KAAM,MACN,IAAK,MACL,MAAO,MACP,MAAO,aACP,MAAO,QACP,MAAO,QACP,KAAM,QACN,MAAO,aACP,MAAO,QACP,MAAO,QACP,KAAM,QACN,MAAO,aACP,MAAO,QACP,MAAO,QACP,KAAM,QACN,MAAO,QACP,KAAM,UACN,KAAM,UACN,KAAM,UACN,QAAS,kBACT,UAAW,UACX,OAAQ,QAChB,EAEaC,EAAY,OAAO,KAAKD,CAAY,EAEpCE,EAAc,CACnB,SACA,SACA,QACA,UACA,UACA,UACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,SACA,SACA,QACR,EAEaC,EAAY,CACjB,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,MAAO,KACP,SAAU,KACV,SAAU,IACV,cAAe,KACf,YAAa,IACb,iBAAkB,KAClB,IAAK,KACL,GAAI,KACJ,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,UAAW,KACX,WAAY,IACpB,EAEaC,GAAgB,OAAO,KAAKD,CAAS,EAGrCE,GAAY,CAEjB,MACA,WACA,SACA,WACA,cACA,YAEA,MACA,MAEA,MACA,OACA,QACA,OACA,QACA,QACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,cACA,YACA,WACA,WACA,SACA,aACA,OACA,OACA,SACA,UACA,UAEA,QACA,UACA,UAEA,MACA,MACA,MACA,QACA,OACA,aACA,MACA,QAEA,UACA,aACA,cACA,cAEA,cACA,UACA,OACA,aACA,SACA,OACA,OACA,OACA,oBACR,EAEaC,GAA0B,CAC/B,EAAG,QACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,GAAI,MACZ,EAGaC,GAAwB,CAE7B,QAAS,OACT,YAAa,OACb,YAAa,OAEb,OAAQ,QACR,SAAU,QACV,SAAU,QACV,IAAK,QAEL,IAAK,OACL,IAAK,OAEL,MAAO,MACf,EAEaC,GAAgB,CAErB,SAAU,OACV,aAAc,OACd,eAAgB,OAChB,aAAc,OACd,WAAY,QACZ,aAAc,OACd,YAAa,OACb,YAAa,OAGb,cAAe,OACf,cAAe,OACf,aAAc,OACd,YAAa,OACb,YAAa,OACb,WAAY,OACZ,i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","names":["durable","event","createFrame","createQueue","cached","is","a","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","TYPE_MAPPING","CONSTANTS","CONVERSIONS","OPERATORS","OPERATOR_KEYS","FUNCTIONS","COMPONENT_COUNT_TO_TYPE","FUNCTION_RETURN_TYPES","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","WGSL_TO_GLSL_BUILTIN","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isConversion","CONVERSIONS","isNodeProxy","x","isConstants","type","CONSTANTS","hex2rgb","hex","r","g","b","count","getId","formatConversions","c","TYPE_MAPPING","getOperator","op","OPERATORS","getBluiltin","id","WGSL_TO_GLSL_BUILTIN","conversionToConstant","conversionKey","index","getEventFun","isAttribute","isTexture","value","safeEventCall","fun","initNodeContext","addDependency","sortHeadersByDependencies","headers","dependencies","sorted","visited","visiting","visit","deps","dep","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","COMPARISON_OPERATORS","LOGICAL_OPERATORS","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferFromCount","count","inferFromArray","arr","c","ret","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","isSwizzle","isNodeProxy","field","parseArray","children","c","x","is","code","parseTexture","y","z","w","_y","args","parseIf","ret","i","isElse","parseSwitch","parseDeclare","type","infer","varName","wgslType","formatConversions","parseDefine","props","returnType","id","layout","argParams","params","input","paramId","addDependency","scopeCode","parseStructHead","fields","lines","key","fieldType","parseStruct","instanceId","initialValues","ordered","parseVaryingHead","parseUniformHead","isTexture","group","binding","parseAttribHead","location","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","type","props","id","children","fields","initialValues","x","y","z","w","formatConversions","getOperator","parseTexture","child","parseIf","parseSwitch","parseDeclare","parseDefine","infer","parseStructHead","parseStruct","field","parseVaryingHead","getBluiltin","fun","getEventFun","safeEventCall","parseAttribHead","head","varType","parseUniformHead","parseConstantHead","scope","define","addToScope","x","props","toVar","id","getId","y","node","z","assign","Return","struct","fields","initialValues","instanceId","scoped","fun","_scope","_define","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","defaultId","layout","args","paramVars","paramDefs","input","i","_layout","toPrimitive","x","hint","code","node","type","props","args","listeners","get","_","key","toVar","assign","isOperator","y","operator","isFunction","function_","isConversion","conversion","conversionToConstant","is","member","set","fun","attribute","id","getId","constant","uniform","variable","builtin","vertexStage","select","z","GLSL_FRAGMENT_HEAD","generateHead","x","c","body","code","head","sortHeadersByDependencies","value","generateStruct","id","map","vertex","is","ret","main","fragment","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","positionLocal","positionWorld","positionView","normalLocal","normalWorld","normalView","screenCoordinate","screenUV","float","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","hex2rgb","iResolution","uniform","iMouse","iTime","uv","texture","function_","cubeTexture","textureSize","length","lengthSq","distance","dot","all","any","cross","abs","sign","floor","ceil","round","fract","trunc","sin","cos","tan","asin","acos","atan","sinh","cosh","tanh","asinh","acosh","atanh","exp","exp2","log","log2","sqrt","inverseSqrt","normalize","oneMinus","saturate","negate","reciprocal","dFdx","dFdy","fwidth","degrees","radians","reflect","I","N","refract","eta","min","max","mix","a","clamp","minVal","maxVal","step","edge","smoothstep","e0","e1","atan2","pow","pow2","pow3","pow4","bitcast","cbrt","difference","equals","faceforward","Nref","transformDirection","dir","matrix","createShader","c","source","type","shader","error","createProgram","vert","frag","onError","pg","fs","vs","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","config","fs","fragment","vs","vertex","pg","createProgram","_activeUnit","uniforms","cached","key","attribs","units","value","iboValue","loc","vbo","createVbo","ibo","createIbo","str","getStride","createAttrib","is","l","src","image","unit","createTexture","cached","createDevice","c","gpu","format","device","createBindings","uniform","texture","attrib","group","binding","location","getVertexFormat","stride","createVertexBuffers","attribs","vertexBuffers","bufferLayouts","buffer","createBindGroup","uniforms","textures","groups","ret","add","layout","layouts","bindings","i","b","sampler","view","createPipeline","bindGroupLayouts","vs","fs","createUniformBuffer","value","array","size","createAttribBuffer","createDescriptor","depthTexture","createTextureSampler","width","height","createDepthTexture","webgpu","gl","context","device","format","createDevice","bindings","createBindings","frag","vert","flush","_pass","imageLoading","needsUpdate","depthTexture","uniforms","cached","_key","value","array","buffer","createUniformBuffer","binding","group","textures","width","height","texture","sampler","createTextureSampler","attribs","stride","location","createAttribBuffer","update","vertexBuffers","bufferLayouts","createVertexBuffers","bindGroups","bindGroupLayouts","createBindGroup","pipeline","createPipeline","pass","v","i","render","config","fragment","vertex","encoder","createDescriptor","resize","canvas","createDepthTexture","clean","_attribute","key","_uniform","is","_texture","src","source","isGL","a","is","isServer","isWebGPUSupported","iTime","defaultFragment","vec4","fract","position","iResolution","defaultVertex","float","int","vertexIndex","createGL","props","gl","event","createQueue","createFrame","durable","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","src_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/node/const.ts","../src/node/utils.ts","../src/node/infer.ts","../src/node/parse.ts","../src/node/code.ts","../src/node/scope.ts","../src/node/node.ts","../src/node/index.ts","../src/utils/program.ts","../src/webgpu.ts","../src/utils/pipeline.ts"],"sourcesContent":["import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nimport { float, fract, int, iResolution, position, vec4, vertexIndex } from './node'\nexport * from './node'\nexport * from './types'\nexport * from './utils/helpers'\nexport * from './utils/pipeline'\nexport * from './utils/program'\nexport * from './webgl'\nexport * from './webgpu'\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\n\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\nlet iTime = performance.now()\n\nconst defaultFragment = () => vec4(fract(position.xy.div(iResolution)), 0, 1)\nconst defaultVertex = () =>\n vec4(\n float(int(vertexIndex).mod(int(2)))\n .mul(4)\n .sub(1),\n float(int(vertexIndex).div(int(2)))\n .mul(4)\n .sub(1),\n 0,\n 1\n )\n\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event({\n isNative: false,\n isWebGL: true,\n isError: false,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n webgl: {},\n webgpu: {},\n loading: 0,\n error() {\n gl.isError = true\n gl.isLoop = false\n gl.clean()\n },\n }) as EventState<GL>\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)), gl)\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)), gl)\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)), gl)\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex || defaultVertex()\n gl.fs = gl.fs || gl.frag || gl.fragment || defaultFragment()\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n gl((await webgl(gl)) as GL)\n } else gl((await webgpu(gl)) as GL)\n if (gl.isError) return // stop if error\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.queue.flush()\n if (gl.loading) return true // wait for textures @TODO FIX\n gl.render()\n return gl.isLoop\n })\n if (gl.isNative) return\n window.addEventListener('resize', gl.resize)\n gl.el.addEventListener('mousemove', gl.mousemove)\n })\n\n gl('clean', () => {\n gl.frame.stop()\n if (gl.isNative) return\n window.removeEventListener('resize', gl.resize)\n gl.el.removeEventListener('mousemove', gl.mousemove)\n })\n\n gl('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl('loop', () => {\n iTime = performance.now() / 1000\n gl.uniform('iTime', iTime)\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested as cached } from 'reev'\nimport { fragment, vertex } from './node'\nimport { is } from './utils/helpers'\nimport { createAttrib, createIbo, createProgram, createTexture, createVbo, getStride } from './utils/program'\nimport type { GL, WebGLState } from './types'\n\nexport const webgl = async (gl: GL) => {\n const c = gl.el!.getContext('webgl2')!\n const config = { isWebGL: true, gl }\n const fs = fragment(gl.fs, config)\n const vs = vertex(gl.vs, config)\n const pg = createProgram(c, vs, fs, gl.error)!\n c.useProgram(pg)\n\n let activeUnit = 0\n const uniforms = cached((key) => c.getUniformLocation(pg, key))\n const attribs = cached((key) => c.getAttribLocation(pg, key))\n const units = cached(() => activeUnit++)\n\n const clean = () => {\n c.deleteProgram(pg)\n c.getExtension('WEBGL_lose_context')?.loseContext()\n gl.el.width = 1\n gl.el.height = 1\n }\n\n const render = () => {\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size)\n c.drawArrays(c.TRIANGLES, 0, 3)\n }\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribs(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(gl.count, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n const loc = uniforms(key)\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\n const _texture = (key: string, src: string) => {\n gl.loading++\n const image = new Image()\n Object.assign(image, { src, crossOrigin: 'anonymous' })\n image.decode().then(() => {\n const loc = uniforms(key)\n const unit = units(key)\n createTexture(c, image, loc, unit)\n gl.loading--\n })\n }\n\n const webgl: WebGLState = { context: c, program: pg }\n\n return { webgl, render, clean, _attribute, _uniform, _texture }\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","export const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\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 unknown as keyof typeof TYPE_MAPPING\n\nexport const CONVERSIONS = [\n 'toBool',\n 'toUint',\n 'toInt',\n 'toFloat',\n 'toBvec2',\n 'toIvec2',\n 'toUvec2',\n 'toVec2',\n 'toBvec3',\n 'toIvec3',\n 'toUvec3',\n 'toVec3',\n 'toBvec4',\n 'toIvec4',\n 'toUvec4',\n 'toVec4',\n 'toColor',\n 'toMat2',\n 'toMat3',\n 'toMat4',\n] as const\n\nexport const OPERATORS = {\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} as const\n\nexport const OPERATOR_KEYS = Object.keys(OPERATORS) as (keyof typeof OPERATORS)[]\n\n// All shader functions (type inference now handled by inferFrom)\nexport const FUNCTIONS = [\n // Float return functions\n 'dot',\n 'distance',\n 'length',\n 'lengthSq',\n 'determinant',\n 'luminance',\n // Bool return functions\n 'all',\n 'any',\n // Component-wise functions (preserve input type)\n 'abs',\n 'sign',\n 'floor',\n 'ceil',\n 'round',\n 'fract',\n 'trunc',\n 'sin',\n 'cos',\n 'tan',\n 'asin',\n 'acos',\n 'atan',\n 'sinh',\n 'cosh',\n 'tanh',\n 'asinh',\n 'acosh',\n 'atanh',\n 'exp',\n 'exp2',\n 'log',\n 'log2',\n 'sqrt',\n 'inverseSqrt',\n 'normalize',\n 'oneMinus',\n 'saturate',\n 'negate',\n 'reciprocal',\n 'dFdx',\n 'dFdy',\n 'fwidth',\n 'degrees',\n 'radians',\n // Vector functions\n 'cross',\n 'reflect',\n 'refract',\n // Multi-argument functions\n 'min',\n 'max',\n 'mix',\n 'clamp',\n 'step',\n 'smoothstep',\n 'pow',\n 'atan2',\n // Texture functions\n 'texture',\n 'textureLod',\n 'textureSize',\n 'cubeTexture',\n // Utility functions\n 'faceforward',\n 'bitcast',\n 'cbrt',\n 'difference',\n 'equals',\n 'pow2',\n 'pow3',\n 'pow4',\n 'transformDirection',\n] as const\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\n// Function return type mapping for method chaining\nexport const FUNCTION_RETURN_TYPES = {\n // Always return vec4\n texture: 'vec4',\n cubeTexture: 'vec4',\n textureSize: 'vec4',\n // Always return float\n length: 'float',\n lengthSq: 'float',\n distance: 'float',\n dot: 'float',\n // Always return bool\n all: 'bool',\n any: 'bool',\n // Always return vec3\n cross: 'vec3',\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\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 = [\n 'equal',\n 'notEqual',\n 'lessThan',\n 'lessThanEqual',\n 'greaterThan',\n 'greaterThanEqual',\n] as const\n\nexport const LOGICAL_OPERATORS = ['and', 'or'] 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","import { is } from '../utils/helpers'\nimport {\n CONSTANTS,\n CONVERSIONS,\n FUNCTIONS,\n OPERATOR_KEYS,\n OPERATORS,\n TYPE_MAPPING,\n WGSL_TO_GLSL_BUILTIN,\n} from './const'\nimport type { Constants, Conversions, Functions, NodeContext, NodeProxy, Operators, Swizzles, X } from './types'\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 isConversion = (key: unknown): key is Conversions => {\n return CONVERSIONS.includes(key as Conversions)\n}\n\nexport const isNodeProxy = <T extends Constants>(x: unknown): x is NodeProxy<T> => {\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 Constants => {\n if (!is.str(type)) return false\n return CONSTANTS.includes(type)\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 formatConversions = <T extends Constants>(x: 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: X<string>) => {\n return OPERATORS[op as keyof typeof OPERATORS] || op\n}\n\nexport const getBluiltin = (id: string) => {\n return WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n}\n\nexport const conversionToConstant = (conversionKey: string): Constants => {\n const index = CONVERSIONS.indexOf(conversionKey as Conversions)\n return index !== -1 ? CONSTANTS[index] : 'float'\n}\n\nexport const getEventFun = (c: NodeContext, id: string, isAttribute = false, isTexture = false) => {\n if (c.isWebGL) {\n if (isAttribute) return (value: any) => c.gl?.attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (isAttribute) return (value: any) => c.gl?._attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nexport const safeEventCall = <T extends Constants>(x: X<T>, fun: (value: unknown) => void) => {\n if (is.und(x)) return\n if (!isNodeProxy(x)) return fun(x) // for uniform(1)\n if (x.type !== 'conversion') return\n const value = x.props.children?.slice(1).filter(Boolean)\n if (!value?.length) return // for uniform(vec2())\n fun(value)\n}\n\nexport const initNodeContext = (c: NodeContext) => {\n if (!c.code) {\n c.code = {\n headers: new Map(),\n fragInputs: new Map(),\n vertInputs: new Map(),\n vertOutputs: new Map(),\n vertVaryings: new Map(),\n dependencies: new Map(),\n }\n if (!c.isWebGL) {\n c.code.fragInputs.set('position', '@builtin(position) position: vec4f')\n c.code.vertOutputs.set('position', '@builtin(position) position: vec4f')\n }\n }\n return c\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\nexport const sortHeadersByDependencies = (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","import { is } from '../utils/helpers'\nimport {\n BUILTIN_TYPES,\n COMPARISON_OPERATORS,\n COMPONENT_COUNT_TO_TYPE,\n FUNCTION_RETURN_TYPES,\n LOGICAL_OPERATORS,\n} from './const'\nimport { isConstants, isNodeProxy, isSwizzle } from './utils'\nimport type { Constants as C, NodeContext, NodeProxy, X } 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\n// Unified logic with types.ts InferOperator type\nconst inferOperator = <T extends C>(L: T, R: T, op: string): T => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return 'bool' as T\n if (L === R) return L\n // broadcast\n if (L === 'float' || L === 'int') return R\n if (R === 'float' || R === 'int') return L\n // mat * vec → vec\n if (L === 'mat4' && R === 'vec4') return R\n if (L === 'mat3' && R === 'vec3') return R\n if (L === 'mat2' && R === 'vec2') return R\n // vec * mat → vec\n if (L === 'vec4' && R === 'mat4') return L\n if (L === 'vec3' && R === 'mat3') return L\n if (L === 'vec2' && R === 'mat2') return L\n return L\n}\n\nexport const inferPrimitiveType = <T extends C>(x: X) => {\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 return 'float' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n}\n\nconst inferFromArray = <T extends C>(arr: X<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 new Error(`glre node system error: defined scope return mismatch`)\n return ret\n}\n\nexport const inferFunction = <T extends C>(x: X) => {\n return FUNCTION_RETURN_TYPES[x as keyof typeof FUNCTION_RETURN_TYPES] as T\n}\n\nexport const inferImpl = <T extends C>(target: NodeProxy<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 === 'ternary') return inferOperator(infer(y, c), infer(z, c), 'add')\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'function') return inferFunction(x) || infer(y, c)\n if (type === 'define' && isConstants(layout?.type)) return layout?.type as T\n if (type === 'attribute' && is.arr(x) && c.gl?.count) return inferFromCount(x.length / c.gl.count)\n if (type === 'member') {\n if (isSwizzle(x)) return inferFromCount(x.length)\n if (isNodeProxy(y) && is.str(x)) {\n const field = (y as any).props.fields?.[x] // for variable node of struct member\n if (field) return infer(field, c)\n }\n return 'float' as T // fallback @TODO FIX\n }\n if (inferFrom) return inferFromArray(inferFrom, c)\n return infer(x, c) // for uniform\n}\n\nexport const infer = <T extends C>(target: X<T>, c?: NodeContext | null): T => {\n if (!c) c = {}\n if (!isNodeProxy(target)) return inferPrimitiveType(target)\n if (is.arr(target)) return inferFromCount(target.length)\n if (!c.infers) c.infers = new WeakMap<NodeProxy<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\n}\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { infer } from './infer'\nimport { formatConversions, addDependency } from './utils'\nimport type { Constants, NodeContext, NodeProps, NodeProxy, X } from './types'\n\nexport const parseArray = (children: X[], c: NodeContext) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\nexport const parseTexture = (c: NodeContext, y: X, z: X, w: X) => {\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: X, y: X, children: X[]) => {\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: X, children: X[]) => {\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: X, y: X) => {\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 = formatConversions(type)\n return `var ${varName}: ${wgslType} = ${code(x, c)};`\n}\n\nexport const parseStructHead = (c: NodeContext, id: string, fields: Record<string, NodeProxy> = {}) => {\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}: ${formatConversions(type, c)},`)\n }\n const ret = lines.join('\\n ')\n return `struct ${id} {\\n ${ret}\\n};`\n}\n\nexport const parseStruct = (\n c: NodeContext,\n id: string,\n instanceId = '',\n fields?: Record<string, NodeProxy>,\n initialValues?: Record<string, NodeProxy>\n) => {\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, returnType: Constants) => {\n const { id, children = [], layout } = props\n const [x, ...args] = children\n const argParams: [name: string, type: string][] = []\n const params: string[] = []\n if (layout?.inputs)\n for (const input of layout.inputs) {\n argParams.push([input.name, input.type])\n }\n else\n for (let i = 0; i < args.length; i++) {\n argParams.push([`p${i}`, infer(args[i], c)])\n }\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}: ${formatConversions(type, c)}`)\n ret.push(`fn ${id}(${params}) -> ${formatConversions(returnType, c)} {`)\n }\n const scopeCode = code(x, c)\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: string) => {\n return c.isWebGL\n ? `${type} ${id};`\n : `@location(${c.code?.vertVaryings?.size || 0}) ${id}: ${formatConversions(type, c)}`\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 = formatConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\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 = formatConversions(type, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, type: Constants, value: string) => {\n return c.isWebGL ? `const ${type} ${id} = ${value};` : `const ${id}: ${formatConversions(type, c)} = ${value};`\n}\n","import { is } from '../utils/helpers'\nimport { infer } from './infer'\nimport {\n parseArray,\n parseAttribHead,\n parseConstantHead,\n parseDeclare,\n parseDefine,\n parseIf,\n parseStruct,\n parseStructHead,\n parseSwitch,\n parseTexture,\n parseVaryingHead,\n parseUniformHead,\n} from './parse'\nimport { getBluiltin, getOperator, formatConversions, safeEventCall, getEventFun, initNodeContext } from './utils'\nimport type { Constants, NodeContext, X } from './types'\n\nexport const code = <T extends Constants>(target: X<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 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(y, c)}.${code(x, c)}`\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 `${formatConversions(x, c)}(${parseArray(children.slice(1), c)})`\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, 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 === 'oneMinus') return `(1.0-${code(y, c)})`\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 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 === 'loop')\n return c.isWebGL\n ? `for (int ${id} = 0; ${id} < ${code(x, c)}; ${id} += 1) {\\n${code(y, c)}\\n}`\n : `for (var ${id}: i32 = 0; ${id} < ${code(x, c)}; ${id}++) {\\n${code(y, c)}\\n}`\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, infer(target, c)))\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, fields, 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(id)\n if (id === 'position') return 'out.position'\n const field = `@builtin(${id}) ${id}: ${formatConversions(infer(target, c), c)}`\n if (c.isFrag) {\n c.code?.fragInputs.set(id, field)\n } else c.code?.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute') {\n const fun = getEventFun(c, id, true)\n safeEventCall(x, fun)\n target.listeners.add(fun)\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 const fun = getEventFun(c, id, false, varType === 'texture')\n safeEventCall(x, fun)\n target.listeners.add(fun)\n head = parseUniformHead(c, id, varType)\n }\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 { conversion, node } from './node'\nimport { getId } from './utils'\nimport type { FnLayout, NodeProps, NodeProxy, X, Constants, Int } from './types'\n\nlet scope: NodeProxy | null = null\nlet define: NodeProxy | null = null\n\nconst addToScope = (x: NodeProxy) => {\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\n const { props } = define\n if (!props.inferFrom) props.inferFrom = []\n props.inferFrom.push(x)\n}\n\nexport const toVar = <T extends Constants>(x: X<T>, id?: string): NodeProxy<T> => {\n if (!id) id = getId()\n const y = node<T>('variable', { id, inferFrom: [x] })\n const z = node('declare', null, x, y)\n addToScope(z)\n return y\n}\n\nexport const assign = <T extends Constants>(x: X<T>, y: X<T>): X<T> => {\n const z = node('assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = <T extends Constants>(x: X<T>): NodeProxy<T> => {\n const y = node<T>('return', { inferFrom: [x] }, x)\n addToScope(y)\n return y\n}\n\nexport const struct = <T extends Record<string, NodeProxy>>(fields: T, id = getId()) => {\n return (initialValues: T = {} as T, instanceId = getId()) => {\n const x = node('variable', { id: instanceId, inferFrom: [id] })\n const y = node('struct', { id, fields, initialValues }, x)\n addToScope(y)\n return x\n }\n}\n\nconst scoped = (x: NodeProxy, fun: () => NodeProxy | void, y = define) => {\n // cache to revert\n const _scope = scope\n const _define = define\n // update\n scope = x\n define = y\n if (_scope) x.props.parent = _scope\n const z = fun()\n if (z) Return(z)\n // revert\n scope = _scope\n define = _define\n}\n\nexport const If = (x: NodeProxy, fun: () => void) => {\n const y = node('scope')\n scoped(y, fun)\n const ifNode = node('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = node('scope')\n scoped(_y, _fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = node('scope')\n scoped(_x, _fun)\n ifNode.props.children!.push(_x)\n },\n })\n return ret()\n}\n\nexport const Loop = (x: NodeProxy, fun: (params: { i: Int }) => void) => {\n const y = node('scope')\n const id = getId()\n scoped(y, () => fun({ i: node<'int'>('variable', { id, inferFrom: [conversion('int', 0)] }) }))\n const ret = node('loop', { id }, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Switch = (x: NodeProxy) => {\n const switchNode = node('switch', null, x)\n addToScope(switchNode)\n const ret = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const y = node('scope')\n scoped(y, 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 = node('scope')\n scoped(scope, fun)\n switchNode.props.children!.push(scope)\n },\n })\n return ret()\n}\n\nexport const Fn = <ReturnType extends Constants, Args extends Constants[]>(\n fun: (paramVars: NodeProxy[]) => NodeProxy<ReturnType> | void,\n defaultId = getId()\n) => {\n let layout: FnLayout\n const ret = (...args: X<Args[number]>[]): NodeProxy<ReturnType> => {\n const id = layout?.name || defaultId\n const x = node('scope')\n const paramVars: NodeProxy[] = []\n const paramDefs: NodeProps[] = []\n if (layout?.inputs)\n for (const input of layout.inputs) {\n paramDefs.push({ id: input.name, inferFrom: [conversion(input.type)] })\n }\n else\n for (let i = 0; i < args.length; i++) {\n paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n }\n for (const props of paramDefs) paramVars.push(node('variable', props))\n const y = node<ReturnType>('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars), y)\n return y\n }\n ret.setLayout = (_layout: FnLayout) => {\n layout = _layout\n return ret\n }\n return ret\n}\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { assign, toVar } from './scope'\nimport { conversionToConstant, isConversion, isFunction, isOperator, getId } from './utils'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, X, Constants as C } from './types'\n\nconst toPrimitive = (x: X, hint: string) => {\n if (hint === 'string') return code(x)\n}\n\nexport const node = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {\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 === 'assign') return assign.bind(null, x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive.bind(null, x)\n if (key === 'listeners') return listeners\n if (isOperator(key)) return (...y: X[]) => operator(key, x, ...y)\n if (isFunction(key)) return (...y: X[]) => function_(key, x, ...y)\n if (isConversion(key)) return () => conversion(conversionToConstant(key), x)\n if (is.str(key)) return member(key, x) // for struct and swizzling\n }\n const set = (_: unknown, key: string, y: X) => {\n if (key === 'value') listeners.forEach((fun) => fun(y))\n if (is.str(key)) member(key, x).assign(y)\n return true\n }\n const x = new Proxy({}, { get, set }) as unknown as NodeProxy<T>\n return x\n}\n\n// headers with proper type inference\nexport const attribute = <T extends C>(x: X, id = getId()) => node<T>('attribute', { id }, x)\nexport const constant = <T extends C>(x: X<T>, id = getId()) => node<T>('constant', { id }, x)\nexport const uniform = <T extends C>(x: X<T>, id = getId()) => node<T>('uniform', { id }, x)\nexport const variable = <T extends C>(id = getId()) => node<T>('variable', { id })\nexport const builtin = <T extends C>(id = getId()) => node<T>('builtin', { id })\nexport const vertexStage = <T extends C>(x: X<T>, id = getId()) => {\n return node<T>('varying', { id, inferFrom: [x] }, x)\n}\n\n// Node shorthands with proper typing\nexport const member = <T extends C>(key: string, x: X) => node<T>('member', null, key, x)\nexport const select = <T extends C>(x: X<T>, y: X<T>, z: X) => node<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE\nexport const operator = <T extends C>(key: Operators, ...x: X[]) => node<T>('operator', null, key, ...x)\nexport const function_ = <T extends C>(key: Functions, ...x: X[]) => node<T>('function', null, key, ...x)\nexport const conversion = <T extends C>(key: T, ...x: X[]) => node<T>('conversion', null, key, ...x)\n","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { builtin, conversion as c, function_ as f, uniform as u } from './node'\nimport { hex2rgb, sortHeadersByDependencies } from './utils'\nimport type { Constants as C, NodeContext, X, Vec2, Float, NodeProxy } from './types'\nexport * from './code'\nexport * from './node'\nexport * from './scope'\nexport * from './types'\nexport * from './utils'\n\nconst GLSL_FRAGMENT_HEAD = `\n#version 300 es\nprecision mediump float;\nout vec4 fragColor;\n`.trim()\n\nconst generateHead = (x: X, c: NodeContext) => {\n const body = code(x, c)\n let head = ''\n if (c.isWebGL && c.code?.dependencies) {\n const sorted = sortHeadersByDependencies(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 return [head, body]\n}\n\nconst generateStruct = (id: string, map: Map<string, string>) => {\n return `struct ${id} {\\n ${Array.from(map.values()).join(',\\n ')}\\n}`\n}\n\nexport const vertex = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.isFrag = false // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) ret.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) ret.push(`out ${code}`)\n ret.push(head)\n ret.push('void main() {')\n ret.push(` gl_Position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` ${id} = ${code};`)\n } else {\n if (c.code?.vertInputs?.size) ret.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) ret.push(generateStruct('Out', c.code.vertOutputs))\n ret.push(head)\n ret.push('@vertex')\n ret.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n ret.push(' var out: Out;')\n ret.push(` out.position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` out.${id} = ${code};`)\n ret.push(' return out;')\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const fragment = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.isFrag = true // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push(GLSL_FRAGMENT_HEAD)\n for (const code of c.code?.fragInputs?.values() || []) ret.push(`in ${code}`)\n ret.push(head)\n ret.push(`void main() {\\n fragColor = ${body};`)\n } else {\n if (c.code?.fragInputs?.size) ret.push(generateStruct('Out', c.code.fragInputs))\n ret.push(head)\n ret.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n ret.push(` return ${body};`)\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\n// Builtin Variables\nexport const position = builtin<'vec4'>('position')\nexport const vertexIndex = builtin<'uint'>('vertex_index')\nexport const instanceIndex = builtin<'uint'>('instance_index')\nexport const frontFacing = builtin<'bool'>('front_facing')\nexport const fragDepth = builtin<'float'>('frag_depth')\nexport const sampleIndex = builtin<'uint'>('sample_index')\nexport const sampleMask = builtin<'uint'>('sample_mask')\nexport const pointCoord = builtin<'vec2'>('point_coord')\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = builtin<'vec3'>('position')\nexport const positionWorld = builtin<'vec3'>('positionWorld')\nexport const positionView = builtin<'vec3'>('positionView')\nexport const normalLocal = builtin<'vec3'>('normalLocal')\nexport const normalWorld = builtin<'vec3'>('normalWorld')\nexport const normalView = builtin<'vec3'>('normalView')\nexport const screenCoordinate = builtin<'vec2'>('screenCoordinate')\nexport const screenUV = builtin<'vec2'>('screenUV')\n\n// Type constructors with proper type inference\nexport const float = (x?: X) => c('float', x)\nexport const int = (x?: X) => c('int', x)\nexport const uint = (x?: X) => c('uint', x)\nexport const bool = (x?: X) => c('bool', x)\nexport const vec2 = (x?: X, y?: X) => c('vec2', x, y)\nexport const vec3 = (x?: X, y?: X, z?: X) => c('vec3', x, y, z)\nexport const vec4 = (x?: X, y?: X, z?: X, w?: X) => c('vec4', x, y, z, w)\nexport const mat2 = (...args: X[]) => c('mat2', ...args)\nexport const mat3 = (...args: X[]) => c('mat3', ...args)\nexport const mat4 = (...args: X[]) => c('mat4', ...args)\nexport const ivec2 = (x?: X, y?: X) => c('ivec2', x, y)\nexport const ivec3 = (x?: X, y?: X, z?: X) => c('ivec3', x, y, z)\nexport const ivec4 = (x?: X, y?: X, z?: X, w?: X) => c('ivec4', x, y, z, w)\nexport const uvec2 = (x?: X, y?: X) => c('uvec2', x, y)\nexport const uvec3 = (x?: X, y?: X, z?: X) => c('uvec3', x, y, z)\nexport const uvec4 = (x?: X, y?: X, z?: X, w?: X) => c('uvec4', x, y, z, w)\nexport const bvec2 = (x?: X, y?: X) => c('bvec2', x, y)\nexport const bvec3 = (x?: X, y?: X, z?: X) => c('bvec3', x, y, z)\nexport const bvec4 = (x?: X, y?: X, z?: X, w?: X) => c('bvec4', x, y, z, w)\nexport const texture2D = (x?: X) => c('texture', x)\nexport const sampler2D = () => c('sampler2D')\nexport const color = (r?: X, g?: X, b?: X) => {\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: Vec2 = u(vec2(), 'iResolution')\nexport const iMouse: Vec2 = u(vec2(), 'iMouse')\nexport const iTime: Float = u(float(), 'iTime')\nexport const uv = position.xy.div(iResolution)\n\n// Texture Functions - always return vec4\nexport const texture = (x: X, y: X, z?: X) => f<'vec4'>('texture', x, y, z)\nexport const cubeTexture = (x: X, y: X, z?: X) => f<'vec4'>('cubeTexture', x, y, z)\nexport const textureSize = (x: X, y?: X) => f<'vec4'>('textureSize', x, y)\n\n// Functions that always return float regardless of input\nexport const length = (x: X) => f<'float'>('length', x)\nexport const lengthSq = (x: X) => f<'float'>('lengthSq', x)\nexport const distance = (x: X, y: X) => f<'float'>('distance', x, y)\nexport const dot = (x: X, y: X) => f<'float'>('dot', x, y)\n\n// Functions that 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// Functions that always return vec3 (cross product only works with vec3)\nexport const cross = (x: X<'vec3'>, y: X<'vec3'>) => f<'vec3'>('cross', x, y)\n\n// Component-wise functions - preserve input type (T -> T)\nexport const abs = <T extends C>(x: X<T>) => f<T>('abs', x)\nexport const sign = <T extends C>(x: X<T>) => f<T>('sign', x)\nexport const floor = <T extends C>(x: X<T>) => f<T>('floor', x)\nexport const ceil = <T extends C>(x: X<T>) => f<T>('ceil', x)\nexport const round = <T extends C>(x: X<T>) => f<T>('round', x)\nexport const fract = <T extends C>(x: X<T>) => f<T>('fract', x)\nexport const trunc = <T extends C>(x: X<T>) => f<T>('trunc', x)\nexport const sin = <T extends C>(x: X<T>) => f<T>('sin', x)\nexport const cos = <T extends C>(x: X<T>) => f<T>('cos', x)\nexport const tan = <T extends C>(x: X<T>) => f<T>('tan', x)\nexport const asin = <T extends C>(x: X<T>) => f<T>('asin', x)\nexport const acos = <T extends C>(x: X<T>) => f<T>('acos', x)\nexport const atan = <T extends C>(x: X<T>) => f<T>('atan', x)\nexport const sinh = <T extends C>(x: X<T>) => f<T>('sinh', x)\nexport const cosh = <T extends C>(x: X<T>) => f<T>('cosh', x)\nexport const tanh = <T extends C>(x: X<T>) => f<T>('tanh', x)\nexport const asinh = <T extends C>(x: X<T>) => f<T>('asinh', x)\nexport const acosh = <T extends C>(x: X<T>) => f<T>('acosh', x)\nexport const atanh = <T extends C>(x: X<T>) => f<T>('atanh', 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 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 sqrt = <T extends C>(x: X<T>) => f<T>('sqrt', x)\nexport const inverseSqrt = <T extends C>(x: X<T>) => f<T>('inverseSqrt', x)\nexport const normalize = <T extends C>(x: X<T>) => f<T>('normalize', x)\nexport const oneMinus = <T extends C>(x: X<T>) => f<T>('oneMinus', x)\nexport const saturate = <T extends C>(x: X<T>) => f<T>('saturate', x)\nexport const negate = <T extends C>(x: X<T>) => f<T>('negate', x)\nexport const reciprocal = <T extends C>(x: X<T>) => f<T>('reciprocal', 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 fwidth = <T extends C>(x: X<T>) => f<T>('fwidth', x)\nexport const degrees = <T extends C>(x: X<T>) => f<T>('degrees', x)\nexport const radians = <T extends C>(x: X<T>) => f<T>('radians', x)\n\n// Functions where first argument determines return type\nexport const reflect = <T extends C>(I: X<T>, N: X) => f<T>('reflect', I, N)\nexport const refract = <T extends C>(I: X<T>, N: X, eta: X) => f<T>('refract', I, N, eta)\n\n// Functions with highest priority type among arguments (using first arg for simplicity)\nexport const min = <T extends C>(x: X<T>, y: X) => f<T>('min', x, y)\nexport const max = <T extends C>(x: X<T>, y: X) => f<T>('max', x, y)\nexport const mix = <T extends C>(x: X<T>, y: X, a: X) => f<T>('mix', x, y, a)\nexport const clamp = <T extends C>(x: X<T>, minVal: X, maxVal: X) => f<T>('clamp', x, minVal, maxVal)\nexport const step = <T extends C>(edge: X, x: X<T>) => f<T>('step', edge, x)\nexport const smoothstep = <T extends C>(e0: X, e1: X, x: X<T>) => f<T>('smoothstep', e0, e1, x)\n\n// Two-argument functions with highest priority type\nexport const atan2 = <T extends C>(y: X<T>, x: X) => f<T>('atan2', y, x)\nexport const pow = <T extends C>(x: X<T>, y: X) => f<T>('pow', x, y)\n\n// Component-wise power functions\nexport const pow2 = <T extends C>(x: X<T>) => f<T>('pow2', x)\nexport const pow3 = <T extends C>(x: X<T>) => f<T>('pow3', x)\nexport const pow4 = <T extends C>(x: X<T>) => f<T>('pow4', x)\n\n// Utility functions\nexport const bitcast = <T extends C>(x: X<T>, y: X) => f<T>('bitcast', x, y)\nexport const cbrt = <T extends C>(x: X<T>) => f<T>('cbrt', x)\nexport const difference = <T extends C>(x: X<T>, y: X) => f<T>('difference', x, y)\nexport const equals = (x: X, y: X) => f<'bool'>('equals', x, y)\nexport const faceforward = <T extends C>(N: X<T>, I: X, Nref: X) => f<T>('faceforward', N, I, Nref)\nexport const transformDirection = <T extends C>(dir: X<T>, matrix: X) => f<T>('transformDirection', dir, matrix)\nexport const mod = <T extends C>(x: NodeProxy<T>, y: X<T>) => x.sub(x.div(y).floor().mul(y))\n","const createShader = (c: WebGLRenderingContext, 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\nexport const createProgram = (c: WebGLRenderingContext, vert: string, frag: string, onError = console.warn) => {\n const pg = c.createProgram()\n const fs = createShader(c, frag, c.FRAGMENT_SHADER, onError)\n const vs = createShader(c, vert, c.VERTEX_SHADER, onError)\n if (!fs || !vs) return\n c.attachShader(pg, vs!)\n c.attachShader(pg, fs!)\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 onError(`Could not link program: ${error}`)\n}\n\nexport const createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const getStride = (count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n return Math.floor(stride)\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n stride: number,\n loc: any,\n vbo: WebGLBuffer,\n ibo?: WebGLBuffer\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n if (ibo) c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createTexture = (c: WebGLRenderingContext, img: HTMLImageElement, loc: any, unit: number) => {\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, img)\n 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}\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport {\n createAttribBuffer,\n createBindings,\n createBindGroup,\n createDepthTexture,\n createDescriptor,\n createDevice,\n createPipeline,\n createTextureSampler,\n createUniformBuffer,\n createVertexBuffers,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\nimport { fragment, vertex } from './node'\n\nexport const webgpu = async (gl: GL) => {\n const context = gl.el!.getContext('webgpu') as GPUCanvasContext\n const { device, format } = await createDevice(context)\n device.onuncapturederror = (e) => gl.error(e.error.message)\n const bindings = createBindings()\n let frag: string\n let vert: string\n let flush = (_pass: GPURenderPassEncoder) => {}\n let needsUpdate = true\n let depthTexture: GPUTexture\n\n const uniforms = cached((_key, value: number[]) => {\n needsUpdate = true\n const { array, buffer } = createUniformBuffer(device, value)\n const { binding, group } = bindings.uniform()\n return { binding, group, array, buffer }\n })\n\n const textures = cached((_key, width = 0, height = 0) => {\n needsUpdate = true\n const { texture, sampler } = createTextureSampler(device, width, height)\n const { binding, group } = bindings.texture()\n return { binding, group, texture, sampler, view: texture.createView() }\n })\n\n const attribs = cached((_key, value: number[]) => {\n needsUpdate = true\n const stride = value.length / gl.count\n const { location } = bindings.attrib()\n const { array, buffer } = createAttribBuffer(device, value)\n return { array, buffer, location, stride }\n })\n\n const update = () => {\n const { vertexBuffers, bufferLayouts } = createVertexBuffers(attribs.map.values())\n const { bindGroups, bindGroupLayouts } = createBindGroup(\n device,\n uniforms.map.values(),\n textures.map.values()\n )\n const pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, vert, frag)\n flush = (pass) => {\n pass.setPipeline(pipeline)\n bindGroups.forEach((v, i) => pass.setBindGroup(i, v))\n vertexBuffers.forEach((v, i) => pass.setVertexBuffer(i, v))\n pass.draw(gl.count, 1, 0, 0)\n pass.end()\n }\n }\n\n const render = () => {\n if (!frag || !vert) {\n const config = { isWebGL: false, gl }\n frag = fragment(gl.fs, config)\n vert = vertex(gl.vs, config)\n }\n if (gl.loading) return // MEMO: loading after build node\n if (needsUpdate) update()\n needsUpdate = false\n const encoder = device.createCommandEncoder()\n flush(encoder.beginRenderPass(createDescriptor(context, depthTexture)))\n device.queue.submit([encoder.finish()])\n }\n\n const resize = () => {\n const canvas = gl.el as HTMLCanvasElement\n depthTexture?.destroy()\n depthTexture = createDepthTexture(device, canvas.width, canvas.height)\n }\n\n const clean = () => {\n device.destroy()\n depthTexture?.destroy()\n for (const { texture } of textures.map.values()) texture.destroy()\n for (const { buffer } of uniforms.map.values()) buffer.destroy()\n for (const { buffer } of attribs.map.values()) buffer.destroy()\n }\n\n const _attribute = (key = '', value: number[]) => {\n const { array, buffer } = attribs(key, value)\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n if (is.num(value)) value = [value]\n const { array, buffer } = uniforms(key, value)\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _texture = (key: string, src: string) => {\n gl.loading++\n const source = Object.assign(new Image(), { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n const { width, height } = source\n const { texture } = textures(key, width, height)\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n gl.loading--\n })\n }\n\n resize()\n\n return {\n webgpu: { device, uniforms, textures, attribs } as WebGPUState,\n render,\n resize,\n clean,\n _attribute,\n _uniform,\n _texture,\n }\n}\n","import type { AttribData, TextureData, UniformData } from '../types'\n\n/**\n * initialize\n */\nexport const createDevice = async (c: GPUCanvasContext) => {\n const gpu = navigator.gpu\n const format = gpu.getPreferredCanvasFormat()\n const adapter = await gpu.requestAdapter()\n const device = await adapter!.requestDevice()\n c.configure({ device, format, alphaMode: 'opaque' })\n return { device, format }\n}\n\nexport const createBindings = () => {\n let uniform = 0\n let texture = 0\n let attrib = 0\n return {\n uniform: () => {\n const group = Math.floor(uniform / 12)\n const binding = uniform % 12\n uniform++\n return { group, binding }\n },\n texture: () => {\n const baseGroup = Math.floor(uniform / 12) + 1\n const group = baseGroup + Math.floor(texture / 6)\n const binding = (texture % 6) * 2\n texture++\n return { group, binding }\n },\n attrib: () => {\n const location = attrib\n attrib++\n return { location }\n },\n }\n}\n\n/**\n * pipeline update\n */\nconst getVertexFormat = (stride: number): GPUVertexFormat => {\n if (stride === 2) return 'float32x2'\n if (stride === 3) return 'float32x3'\n if (stride === 4) return 'float32x4'\n return 'float32'\n}\n\nexport const createVertexBuffers = (attribs: Iterable<AttribData>) => {\n const vertexBuffers: GPUBuffer[] = []\n const bufferLayouts: GPUVertexBufferLayout[] = []\n for (const { buffer, location, stride } of attribs) {\n vertexBuffers[location] = buffer\n bufferLayouts[location] = {\n arrayStride: stride * 4,\n attributes: [\n {\n shaderLocation: location,\n offset: 0,\n format: getVertexFormat(stride),\n },\n ],\n }\n }\n return { vertexBuffers, bufferLayouts }\n}\n\nexport const createBindGroup = (\n device: GPUDevice,\n uniforms: Iterable<UniformData>,\n textures: Iterable<TextureData>\n) => {\n const groups = new Map<number, { layouts: GPUBindGroupLayoutEntry[]; bindings: GPUBindGroupEntry[] }>()\n const ret = { bindGroups: [] as GPUBindGroup[], bindGroupLayouts: [] as GPUBindGroupLayout[] }\n const add = (i: number, layout: GPUBindGroupLayoutEntry, binding: GPUBindGroupEntry) => {\n if (!groups.has(i)) groups.set(i, { layouts: [], bindings: [] })\n const { layouts, bindings } = groups.get(i)!\n layouts.push(layout)\n bindings.push(binding)\n }\n for (const { binding, buffer, group: i } of uniforms) {\n add(i, { binding, visibility: 3, buffer: { type: 'uniform' } }, { binding, resource: { buffer } })\n }\n for (const { binding: b, group: i, sampler, view } of textures) {\n add(i, { binding: b, visibility: 2, sampler: {} }, { binding: b, resource: sampler })\n add(i, { binding: b + 1, visibility: 2, texture: {} }, { binding: b + 1, resource: view })\n }\n for (const [i, { layouts, bindings }] of groups) {\n ret.bindGroupLayouts[i] = device.createBindGroupLayout({ entries: layouts })\n ret.bindGroups[i] = device.createBindGroup({ layout: ret.bindGroupLayouts[i], entries: bindings })\n }\n return ret\n}\n\nexport const createPipeline = (\n device: GPUDevice,\n format: GPUTextureFormat,\n bufferLayouts: GPUVertexBufferLayout[],\n bindGroupLayouts: GPUBindGroupLayout[],\n vs: string,\n fs: string\n) => {\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ label: 'vert', code: vs }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ label: 'frag', code: fs }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout: device.createPipelineLayout({ bindGroupLayouts }),\n primitive: { topology: 'triangle-list' },\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n })\n}\n\n/**\n * buffers\n */\nexport const createUniformBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const size = Math.ceil(array.byteLength / 256) * 256\n const buffer = device.createBuffer({ size, usage: 72 }) // 72 is GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n return { array, buffer }\n}\n\nexport const createAttribBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const buffer = device.createBuffer({ size: array.byteLength, usage: 40 }) // 40 is GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n return { array, buffer }\n}\n\nexport const createDescriptor = (c: GPUCanvasContext, depthTexture: GPUTexture) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear' as GPULoadOp,\n storeOp: 'store' as GPUStoreOp,\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n depthClearValue: 1.0,\n depthLoadOp: 'clear' as GPULoadOp,\n depthStoreOp: 'store' as GPUStoreOp,\n },\n } as GPURenderPassDescriptor\n}\n\n/**\n * textures\n */\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 }) // 22 is GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return { texture, sampler }\n}\n\nexport const createDepthTexture = (device: GPUDevice, width: number, height: number) => {\n return device.createTexture({\n size: [width, height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n })\n}\n"],"mappings":"AAAA,OAAS,WAAAA,GAAS,SAAAC,OAAa,OAC/B,OAAS,eAAAC,GAAa,eAAAC,OAAmB,OCDzC,OAAS,UAAUC,OAAc,OCA1B,IAAMC,EAAK,CACV,IAAK,MAAM,QACX,IAAMC,GAA6B,OAAOA,GAAM,UAChD,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAOA,GAAM,SAC/C,IAAMA,GAA4B,OAAO,UAAUA,CAAC,EACpD,IAAMA,GAA8B,OAAOA,GAAM,WACjD,IAAMA,GAA+B,OAAOA,EAAM,IAClD,IAAMA,GAA0BA,IAAM,KACtC,IAAMA,GAAkCA,aAAa,IACrD,IAAMA,GAA2CA,aAAa,IAC9D,IAAMA,GAA4B,CAAC,CAACA,GAAKA,EAAE,YAAY,OAAS,SAChE,IAAMA,GAA4B,OAAOA,GAAM,UAAY,OAAO,MAAMA,CAAC,CACjF,EAUaC,GAAO,CAAmBC,EAAiCC,IAAiCD,EAAI,QAAQC,CAAE,EAE1GC,GAAQ,CAAoCF,KAAoCG,IAAgB,CACrGJ,GAAKC,EAAMI,GAAMA,EAAE,GAAGD,CAAI,CAAC,CACnC,EAKaE,GAAU,CAACC,EAAI,GAAIC,EAAO,IAAKC,EAAK,MAAQF,EAAE,MAAMC,CAAI,EAAE,KAAKC,CAAE,EACjEC,GAAM,CAACC,EAAM,SAAWA,EAAI,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,GAAK,GAC/DC,GAAM,CAACL,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAU,EACjDM,GAAM,CAACN,EAAI,IAAM,GAAGA,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,QAAUA,EAAI,EAAI,EAAI,GAC7DO,GAAM,CAACC,EAAQ,EAAGC,EAAQ,MAC/BA,GAAS,GACTA,EAAQ,KAAK,IAAI,GAAIA,CAAK,EAC1BD,GAASC,EACTD,EAAQ,KAAK,MAAMA,CAAK,EACxBA,GAASC,EACFD,GCxCR,IAAME,EAAe,CACpB,KAAM,OACN,KAAM,MACN,IAAK,MACL,MAAO,MACP,MAAO,aACP,MAAO,QACP,MAAO,QACP,KAAM,QACN,MAAO,aACP,MAAO,QACP,MAAO,QACP,KAAM,QACN,MAAO,aACP,MAAO,QACP,MAAO,QACP,KAAM,QACN,MAAO,QACP,KAAM,UACN,KAAM,UACN,KAAM,UACN,QAAS,kBACT,UAAW,UACX,OAAQ,QAChB,EAEaC,EAAY,OAAO,KAAKD,CAAY,EAEpCE,EAAc,CACnB,SACA,SACA,QACA,UACA,UACA,UACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,SACA,SACA,QACR,EAEaC,EAAY,CACjB,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,MAAO,KACP,SAAU,KACV,SAAU,IACV,cAAe,KACf,YAAa,IACb,iBAAkB,KAClB,IAAK,KACL,GAAI,KACJ,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,UAAW,KACX,WAAY,IACpB,EAEaC,GAAgB,OAAO,KAAKD,CAAS,EAGrCE,GAAY,CAEjB,MACA,WACA,SACA,WACA,cACA,YAEA,MACA,MAEA,MACA,OACA,QACA,OACA,QACA,QACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,cACA,YACA,WACA,WACA,SACA,aACA,OACA,OACA,SACA,UACA,UAEA,QACA,UACA,UAEA,MACA,MACA,MACA,QACA,OACA,aACA,MACA,QAEA,UACA,aACA,cACA,cAEA,cACA,UACA,OACA,aACA,SACA,OACA,OACA,OACA,oBACR,EAEaC,EAA0B,CAC/B,EAAG,QACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,GAAI,MACZ,EAGaC,GAAwB,CAE7B,QAAS,OACT,YAAa,OACb,YAAa,OAEb,OAAQ,QACR,SAAU,QACV,SAAU,QACV,IAAK,QAEL,IAAK,OACL,IAAK,OAEL,MAAO,MACf,EAEaC,GAAgB,CAErB,SAAU,OACV,aAAc,OACd,eAAgB,OAChB,aAAc,OACd,WAAY,QACZ,aAAc,OACd,YAAa,OACb,YAAa,OAGb,cAAe,OACf,cAAe,OACf,aAAc,OACd,YAAa,OACb,YAAa,OACb,WAAY,OACZ,i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","names":["durable","event","createFrame","createQueue","cached","is","a","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","TYPE_MAPPING","CONSTANTS","CONVERSIONS","OPERATORS","OPERATOR_KEYS","FUNCTIONS","COMPONENT_COUNT_TO_TYPE","FUNCTION_RETURN_TYPES","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","WGSL_TO_GLSL_BUILTIN","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isConversion","CONVERSIONS","isNodeProxy","x","isConstants","type","CONSTANTS","hex2rgb","hex","r","g","b","count","getId","formatConversions","c","TYPE_MAPPING","getOperator","op","OPERATORS","getBluiltin","id","WGSL_TO_GLSL_BUILTIN","conversionToConstant","conversionKey","index","getEventFun","isAttribute","isTexture","value","safeEventCall","fun","initNodeContext","addDependency","sortHeadersByDependencies","headers","dependencies","sorted","visited","visiting","visit","deps","dep","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","COMPARISON_OPERATORS","LOGICAL_OPERATORS","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferFromCount","count","inferFromArray","arr","c","ret","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","isSwizzle","isNodeProxy","field","parseArray","children","c","x","is","code","parseTexture","y","z","w","_y","args","parseIf","ret","i","isElse","parseSwitch","parseDeclare","type","infer","varName","wgslType","formatConversions","parseStructHead","id","fields","lines","key","fieldType","addDependency","parseStruct","instanceId","initialValues","ordered","parseDefine","props","returnType","layout","argParams","params","input","paramId","scopeCode","parseVaryingHead","parseUniformHead","isTexture","group","binding","parseAttribHead","location","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","type","props","id","children","fields","initialValues","x","y","z","w","formatConversions","getOperator","parseTexture","child","parseIf","parseSwitch","parseDeclare","parseDefine","infer","parseStructHead","parseStruct","field","parseVaryingHead","getBluiltin","fun","getEventFun","safeEventCall","parseAttribHead","head","varType","parseUniformHead","parseConstantHead","scope","define","addToScope","x","props","toVar","id","getId","y","node","z","assign","Return","struct","fields","initialValues","instanceId","scoped","fun","_scope","_define","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","defaultId","layout","args","paramVars","paramDefs","input","i","_layout","toPrimitive","x","hint","code","node","type","props","args","listeners","get","_","key","toVar","assign","isOperator","y","operator","isFunction","function_","isConversion","conversion","conversionToConstant","is","member","set","fun","attribute","id","getId","constant","uniform","variable","builtin","vertexStage","select","z","GLSL_FRAGMENT_HEAD","generateHead","x","c","body","code","head","sortHeadersByDependencies","value","generateStruct","id","map","vertex","is","ret","fragment","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","positionLocal","positionWorld","positionView","normalLocal","normalWorld","normalView","screenCoordinate","screenUV","float","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","hex2rgb","iResolution","uniform","iMouse","iTime","uv","texture","function_","cubeTexture","textureSize","length","lengthSq","distance","dot","all","any","cross","abs","sign","floor","ceil","round","fract","trunc","sin","cos","tan","asin","acos","atan","sinh","cosh","tanh","asinh","acosh","atanh","exp","exp2","log","log2","sqrt","inverseSqrt","normalize","oneMinus","saturate","negate","reciprocal","dFdx","dFdy","fwidth","degrees","radians","reflect","I","N","refract","eta","min","max","mix","a","clamp","minVal","maxVal","step","edge","smoothstep","e0","e1","atan2","pow","pow2","pow3","pow4","bitcast","cbrt","difference","equals","faceforward","Nref","transformDirection","dir","matrix","mod","createShader","c","source","type","onError","shader","error","createProgram","vert","frag","pg","fs","vs","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","config","fs","fragment","vs","vertex","pg","createProgram","activeUnit","uniforms","cached","key","attribs","units","value","iboValue","loc","vbo","createVbo","ibo","createIbo","str","getStride","createAttrib","is","l","src","image","unit","createTexture","cached","createDevice","c","gpu","format","device","createBindings","uniform","texture","attrib","group","binding","location","getVertexFormat","stride","createVertexBuffers","attribs","vertexBuffers","bufferLayouts","buffer","createBindGroup","uniforms","textures","groups","ret","add","i","layout","layouts","bindings","b","sampler","view","createPipeline","bindGroupLayouts","vs","fs","createUniformBuffer","value","array","size","createAttribBuffer","createDescriptor","depthTexture","createTextureSampler","width","height","createDepthTexture","webgpu","gl","context","device","format","createDevice","e","bindings","createBindings","frag","vert","flush","_pass","needsUpdate","depthTexture","uniforms","cached","_key","value","array","buffer","createUniformBuffer","binding","group","textures","width","height","texture","sampler","createTextureSampler","attribs","stride","location","createAttribBuffer","update","vertexBuffers","bufferLayouts","createVertexBuffers","bindGroups","bindGroupLayouts","createBindGroup","pipeline","createPipeline","pass","v","i","render","config","fragment","vertex","encoder","createDescriptor","resize","canvas","createDepthTexture","clean","_attribute","key","_uniform","is","_texture","src","source","isGL","a","is","isServer","isWebGPUSupported","iTime","defaultFragment","vec4","fract","position","iResolution","defaultVertex","float","int","vertexIndex","createGL","props","gl","event","createQueue","createFrame","durable","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","src_default"]}
|