glre 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/solid.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/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","../src/solid.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'\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\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)))\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)))\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)))\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex\n gl.fs = gl.fs || gl.frag || gl.fragment\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 { 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 pg = createProgram(c, gl.vs, gl.fs, () => void (gl.isLoop = false))!\n c.useProgram(pg)\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 const state = { context: c, program: pg } as WebGLState\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 { webgl: state, 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 CONSTANTS = [\n 'bool',\n 'uint',\n 'int',\n 'float',\n 'bvec2',\n 'ivec2',\n 'uvec2',\n 'vec2',\n 'bvec3',\n 'ivec3',\n 'uvec3',\n 'vec3',\n 'bvec4',\n 'ivec4',\n 'uvec4',\n 'vec4',\n 'color',\n 'mat2',\n 'mat3',\n 'mat4',\n] as const\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\nexport const SCALAR_RETURN_FUNCTIONS = ['dot', 'distance', 'length', 'lengthSq', 'determinant', 'luminance'] as const\n\nexport const BOOL_RETURN_FUNCTIONS = ['all', 'any'] as const\n\nexport const PRESERVE_TYPE_FUNCTIONS = [\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 '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] as const\n\nexport const VEC3_RETURN_FUNCTIONS = ['cross'] as const\n\nexport const FIRST_ARG_TYPE_FUNCTIONS = ['reflect', 'refract'] as const\n\nexport const HIGHEST_TYPE_FUNCTIONS = ['min', 'max', 'mix', 'clamp', 'step', 'smoothstep'] as const\n\nexport const VEC4_RETURN_FUNCTIONS = ['texture', 'textureLod', 'textureSize', 'cubeTexture'] as const\n\nexport const ADDITIONAL_FUNCTIONS = [\n 'atan2',\n 'degrees',\n 'faceforward',\n 'bitcast',\n 'cbrt',\n 'difference',\n 'equals',\n 'pow',\n 'pow2',\n 'pow3',\n 'pow4',\n 'radians',\n 'transformDirection',\n] as const\n\nexport const FUNCTIONS = [\n ...SCALAR_RETURN_FUNCTIONS,\n ...BOOL_RETURN_FUNCTIONS,\n ...PRESERVE_TYPE_FUNCTIONS,\n ...VEC3_RETURN_FUNCTIONS,\n ...FIRST_ARG_TYPE_FUNCTIONS,\n ...HIGHEST_TYPE_FUNCTIONS,\n ...VEC4_RETURN_FUNCTIONS,\n ...ADDITIONAL_FUNCTIONS,\n] as const\n\nexport const TYPE_MAPPING = {\n float: 'f32',\n int: 'i32',\n uint: 'u32',\n bool: 'bool',\n vec2: 'vec2f',\n vec3: 'vec3f',\n vec4: 'vec4f',\n mat2: 'mat2x2f',\n mat3: 'mat3x3f',\n mat4: 'mat4x4f',\n ivec2: 'vec2i',\n ivec3: 'vec3i',\n ivec4: 'vec4i',\n uvec2: 'vec2u',\n uvec3: 'vec3u',\n uvec4: 'vec4u',\n bvec2: 'vec2<bool>',\n bvec3: 'vec3<bool>',\n bvec4: 'vec4<bool>',\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\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 { code } from './code'\nimport { infer } from './infer'\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 {\n Constants,\n Conversions,\n Functions,\n NodeConfig,\n NodeProps,\n NodeProxy,\n Operators,\n Swizzles,\n X,\n} 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 = (x: unknown): x is NodeProxy => {\n if (!x) return false\n if (typeof x !== 'object') return false // @ts-ignore\n return x.isProxy\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 joins = (children: X[], c: NodeConfig) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\nexport const formatConversions = (x: X, c?: NodeConfig) => {\n if (!is.str(x)) return ''\n if (c?.isWebGL) return x\n return TYPE_MAPPING[x as keyof typeof TYPE_MAPPING]\n}\n\nexport const getOperator = (op: X) => {\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\nconst generateHead = (c: NodeConfig) => {\n return Array.from(c.headers!)\n .map(([, v]) => v)\n .join('\\n')\n}\n\nexport const generateDefine = (props: NodeProps, c: NodeConfig) => {\n const { id, children = [], layout } = props\n const [x, y, ...args] = children\n const returnType = layout?.type && layout?.type !== 'auto' ? layout?.type : y ? infer(y, c) : 'void'\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 let ret = ''\n if (c?.isWebGL) {\n for (const [id, type] of argParams) params.push(`${type} ${id}`)\n ret += `${returnType} ${id}(${params}) {\\n`\n } else {\n for (const [id, type] of argParams) params.push(`${id}: ${formatConversions(type, c)}`)\n ret += `fn ${id}(${params}) -> ${formatConversions(returnType, c)} {\\n`\n }\n const scopeCode = code(x, c)\n if (scopeCode) ret += scopeCode + '\\n'\n if (y) ret += `return ${code(y, c)};`\n ret += '\\n}'\n return ret\n}\n\nconst GLSL_FRAGMENT_HEAD = `\n#version 300 es\nprecision mediump float;\nout vec4 fragColor;\n`.trim()\n\nconst WGSL_FRAGMENT_HEAD = `\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n`.trim()\n\nconst generateFragmentMain = (body: string, head: string, isWebGL = true) => {\n let ret = ''\n if (isWebGL) ret += GLSL_FRAGMENT_HEAD\n if (head) ret += '\\n' + head + '\\n'\n if (isWebGL) ret += `void main() {\\n fragColor = ${body};`\n else {\n ret += WGSL_FRAGMENT_HEAD + '\\n'\n ret += ` return ${body};`\n }\n ret += '\\n}'\n return ret\n}\n\nconst generateVertexMain = (_body: string, _head: string, isWebGL = true) => {\n if (isWebGL) return ``\n return ``\n}\n\nexport const fragment = (x: X, c: NodeConfig = {}) => {\n const body = code(x, c)\n const head = generateHead(c)\n const main = generateFragmentMain(body, head, c.isWebGL)\n console.log(`// ↓↓↓ generated ↓↓↓\\n\\n${main}\\n\\n`)\n return main\n}\n\nexport const vertex = (x: X, c: NodeConfig) => {\n const body = code(x, c)\n const head = generateHead(c)\n return generateVertexMain(body, head, c.isWebGL)\n}\n","import { is } from '../utils/helpers'\nimport {\n BOOL_RETURN_FUNCTIONS,\n BUILTIN_TYPES,\n COMPARISON_OPERATORS,\n COMPONENT_COUNT_TO_TYPE,\n CONSTANTS,\n FIRST_ARG_TYPE_FUNCTIONS,\n HIGHEST_TYPE_FUNCTIONS,\n LOGICAL_OPERATORS,\n PRESERVE_TYPE_FUNCTIONS,\n SCALAR_RETURN_FUNCTIONS,\n VEC3_RETURN_FUNCTIONS,\n VEC4_RETURN_FUNCTIONS,\n} from './const'\nimport { isNodeProxy } from './utils'\nimport type { Constants, NodeConfig, NodeProxy, X } from './types'\n\nconst getHighestPriorityType = (args: X[], c: NodeConfig) => {\n return args.reduce((highest, current) => {\n const currentType = infer(current, c)\n const highestPriority = CONSTANTS.indexOf(highest as any)\n const currentPriority = CONSTANTS.indexOf(currentType as any)\n return currentPriority > highestPriority ? currentType : highest\n }, 'float') as Constants\n}\n\nconst inferBuiltin = (id: string | undefined): Constants => {\n return BUILTIN_TYPES[id as keyof typeof BUILTIN_TYPES]!\n}\n\nconst inferFunction = (funcName: string, args: X[], c: NodeConfig): Constants => {\n const firstArgType = args.length > 0 ? infer(args[0], c) : 'float'\n if (FIRST_ARG_TYPE_FUNCTIONS.includes(funcName as any)) return firstArgType\n if (SCALAR_RETURN_FUNCTIONS.includes(funcName as any)) return 'float'\n if (BOOL_RETURN_FUNCTIONS.includes(funcName as any)) return 'bool'\n if (PRESERVE_TYPE_FUNCTIONS.includes(funcName as any)) return firstArgType\n if (VEC3_RETURN_FUNCTIONS.includes(funcName as any)) return 'vec3'\n if (VEC4_RETURN_FUNCTIONS.includes(funcName as any)) return 'vec4'\n if (HIGHEST_TYPE_FUNCTIONS.includes(funcName as any)) return getHighestPriorityType(args, c)\n return firstArgType\n}\n\nconst inferOperator = (leftType: string, rightType: string, op: string): Constants => {\n if (COMPARISON_OPERATORS.includes(op as any)) return 'bool'\n if (LOGICAL_OPERATORS.includes(op as any)) return 'bool'\n if (leftType === rightType) return leftType as Constants\n if (leftType.includes('vec') && !rightType.includes('vec')) return leftType as Constants\n if (rightType.includes('vec') && !leftType.includes('vec')) return rightType as Constants\n const leftPriority = CONSTANTS.indexOf(leftType as any)\n const rightPriority = CONSTANTS.indexOf(rightType as any)\n return (leftPriority >= rightPriority ? leftType : rightType) as Constants\n}\n\nconst inferPrimitiveType = (x: any): Constants => {\n if (is.bol(x)) return 'bool'\n if (is.num(x)) return 'float' // Number.isInteger(x) ? 'int' : 'float' // @TODO FIX\n if (is.arr(x)) return COMPONENT_COUNT_TO_TYPE[x.length as keyof typeof COMPONENT_COUNT_TO_TYPE] || 'float'\n return 'float'\n}\n\nconst inferSwizzle = (count: number): Constants => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE]!\n}\n\nexport const inferImpl = (target: NodeProxy, c: NodeConfig): Constants => {\n const { type, props } = target\n const { id, children = [], inferFrom } = props\n const [x, y, z] = children\n if (inferFrom) return infer(inferFrom, c)\n if (type === 'conversion') return x as Constants\n if (type === 'operator') return inferOperator(infer(y, c), infer(z, c), x as string)\n if (type === 'function') return inferFunction(x as string, children.slice(1), c)\n if (type === 'swizzle') return inferSwizzle((x as string).length)\n if (type === 'ternary') return inferOperator(infer(y, c), infer(z, c), 'add')\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'define') {\n if (props.layout?.type && props.layout?.type !== 'auto') return props.layout.type as Constants\n return y ? infer(y, c) : 'void'\n }\n return infer(x, c)\n}\n\nexport const infer = (target: X, c?: NodeConfig | null): Constants => {\n if (!c) c = {}\n if (!isNodeProxy(target)) return inferPrimitiveType(target)\n if (!c.infers) c.infers = new WeakMap<NodeProxy, Constants>()\n if (c.infers.has(target)) return c.infers.get(target)!\n const ret = inferImpl(target, c)\n c.infers.set(target, ret)\n return ret\n}\n","import { is } from '../utils/helpers'\nimport { infer } from './infer'\nimport { getBluiltin, getOperator, generateDefine, formatConversions, joins } from './utils'\nimport type { NodeConfig, X } from './types'\n\nexport const code = (target: X, c?: NodeConfig | null): string => {\n if (!c) c = {}\n if (!c.headers) c.headers = new Map()\n if (is.str(target)) return target\n if (is.num(target)) {\n const ret = `${target}`\n if (ret.includes('.')) return ret\n return ret + '.0'\n }\n if (is.bol(target)) return target ? 'true' : 'false'\n if (!target) return '' // ignore if no target\n const { type, props } = target\n const { id = '', children = [] } = props\n const [x, y, z] = children\n /**\n * headers\n */\n let head = ''\n if (type === 'attribute') {\n if (c.headers.has(id)) return id\n head = `${infer(target, c)} ${id}`\n }\n if (type === 'uniform') {\n if (c.headers.has(id)) return id\n if (!c.binding) c.binding = 0\n const varType = infer(target, c)\n head = c.isWebGL\n ? `uniform ${varType} ${id};`\n : `@group(0) @binding(${c.binding++}) var<uniform> ${id}: ${formatConversions(varType, c)};`\n }\n if (type === 'constant') {\n if (c.headers.has(id)) return id\n const varType = infer(target, c)\n const value = code(x, c)\n head = c.isWebGL\n ? `const ${varType} ${id} = ${value};`\n : `const ${id}: ${formatConversions(varType, c)} = ${value};`\n }\n if (type === 'varying') {\n if (c.headers.has(id)) return id\n head = `${infer(target, c)} ${id}`\n }\n if (head) {\n c.headers.set(id, head)\n c.onMount?.(id)\n return id\n }\n /**\n * variables\n */\n if (type === 'variable') return id\n if (type === 'swizzle') return `${code(y, c)}.${code(x, c)}`\n if (type === 'ternary') return `(${code(x, c)} ? ${code(y, c)} : ${code(z, c)})`\n if (type === 'builtin') return c?.isWebGL ? getBluiltin(id) : id\n if (type === 'conversion') return `${formatConversions(x, c)}(${joins(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 `(-${joins(children.slice(1), c)})`\n return `${x}(${joins(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 === 'loop')\n return c.isWebGL\n ? `for (int i = 0; i < ${x}; i += 1) {\\n${code(y, c)}\\n}`\n : `for (var i: i32 = 0; i < ${x}; i++) {\\n${code(y, c)}\\n}`\n if (type === 'define') {\n const args = children.slice(2)\n const ret = `${id}(${args.map((arg) => code(arg, c))})`\n if (c.headers.has(id)) return ret\n c.headers.set(id, generateDefine(props, c))\n return ret\n }\n if (type === 'if') {\n let ret = `if (${code(x, c)}) {\\n${code(y, c)}\\n}`\n for (let i = 2; i < children.length; i += 2) {\n const isElseIf = i >= children.length - 1\n ret += !isElseIf\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 if (type === 'switch') {\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 if (type === 'declare') {\n const varType = infer(x, c)\n const varName = (y as any)?.props?.id\n if (c.isWebGL) return `${varType} ${varName} = ${code(x, c)};`\n const wgslType = formatConversions(varType)\n return `var ${varName}: ${wgslType} = ${code(x, c)};`\n }\n return code(x, c)\n}\n","import { int } from '.'\nimport { conversion, node } from './node'\nimport { getId } from './utils'\nimport type { FnLayout, NodeProps, NodeProxy, X } from './types'\n\nlet _scope: NodeProxy | null = null\n\nconst scoped = (x: NodeProxy | null, fun = () => {}) => {\n const prev = _scope\n _scope = x\n fun()\n _scope = prev\n}\n\nconst addToScope = (x: NodeProxy) => {\n if (!_scope) return // ignore\n if (!_scope.props.children) _scope.props.children = []\n _scope.props.children.push(x)\n}\n\nexport const toVar = (x: X, id?: string) => {\n if (!id) id = getId()\n const y = node('variable', { id, inferFrom: x })\n const z = node('declare', null, x, y)\n addToScope(z)\n return y\n}\n\nexport const assign = (x: X, y: X) => {\n const z = node('assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const If = (x: X, 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: X, fun: (params: { i: NodeProxy }) => void) => {\n const y = node('scope')\n scoped(y, () => fun({ i: node('variable', { id: 'i', inferFrom: int(0) }) }))\n const ret = node('loop', null, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Switch = (x: X) => {\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\n return ret()\n}\n\nexport const Fn = (fun: (paramVars: NodeProxy[]) => NodeProxy) => {\n let layout: FnLayout\n const ret = (...args: X[]) => {\n const id = layout?.name || getId()\n const x = node('scope')\n let y: NodeProxy | undefined\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 scoped(x, () => (y = fun(paramVars)))\n return node('define', { id, layout }, x, y, ...args)\n }\n ret.setLayout = (newLayout: FnLayout) => {\n layout = newLayout\n return ret\n }\n return ret\n}\n","import { code } from './code'\nimport { assign, toVar } from './scope'\nimport { conversionToConstant, isConversion, isFunction, isOperator, isSwizzle } from './utils'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, Swizzles, X } from './types'\n\nconst toPrimitive = (x: X, hint: string) => {\n if (hint === 'string') return code(x)\n}\n\nexport const node = (type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\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 (isSwizzle(key)) return swizzle(key, x)\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 }\n const set = (_: unknown, key: string, y: X) => {\n if (isSwizzle(key)) {\n swizzle(key, x).assign(y)\n return true\n }\n return false\n }\n const x = new Proxy({}, { get, set }) as unknown as NodeProxy\n return x\n}\n\n// headers\nexport const attribute = (x: X, id?: string) => node('varying', { id }, x)\nexport const uniform = (x: X, id?: string) => node('uniform', { id }, x)\nexport const varying = (x: X, id?: string) => node('varying', { id }, x)\nexport const constant = (x: X, id?: string) => node('constant', { id }, x)\nexport const variable = (id: string) => node('variable', { id })\nexport const builtin = (id: string) => node('builtin', { id })\n\n// Node shorthands\nexport const swizzle = (key: Swizzles, arg: X) => node('swizzle', null, key, arg)\nexport const operator = (key: Operators, ...args: X[]) => node('operator', null, key, ...args)\nexport const function_ = (key: Functions, ...args: X[]) => node('function', null, key, ...args)\nexport const conversion = (key: string, ...args: X[]) => node('conversion', null, key, ...args)\n\n// x ? y : z\nexport const select = (x: X, y: X, z: X) => node('ternary', null, x, y, z)\n","import { builtin, conversion as c, function_ as f, uniform } from './node'\nimport { hex2rgb } from './utils'\nimport { is } from '../utils/helpers'\nimport type { X } from './types'\nexport * from './code'\nexport * from './const'\nexport * from './infer'\nexport * from './node'\nexport * from './scope'\nexport * from './types'\nexport * from './utils'\n\n// Builtin Variables\nexport const position = builtin('position')\nexport const vertexIndex = builtin('vertex_index')\nexport const instanceIndex = builtin('instance_index')\nexport const frontFacing = builtin('front_facing')\nexport const fragDepth = builtin('frag_depth')\nexport const sampleIndex = builtin('sample_index')\nexport const sampleMask = builtin('sample_mask')\nexport const pointCoord = builtin('point_coord')\n\n// TSL Compatible Builtin Variables\nexport const normalLocal = builtin('normalLocal')\nexport const normalWorld = builtin('normalWorld')\nexport const normalView = builtin('normalView')\nexport const positionLocal = builtin('position')\nexport const positionWorld = builtin('positionWorld')\nexport const positionView = builtin('positionView')\nexport const screenCoordinate = builtin('screenCoordinate')\nexport const screenUV = builtin('screenUV')\n\n// Type constructors\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 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\nexport const iResolution = uniform(vec2(1280, 800), 'iResolution')\nexport const iMouse = uniform(vec2(0, 0), 'iMouse')\nexport const iTime = uniform(float(0), 'iTime')\n\n// Texture Functions\nexport const texture = (x: X, y: X, z?: X) => f('texture', x, y, z)\nexport const cubeTexture = (x: X, y: X, z?: X) => f('cubeTexture', x, y, z)\nexport const textureSize = (x: X, y?: X) => f('textureSize', x, y)\n\n// Math Functions\nexport const abs = (x: X) => f('abs', x)\nexport const acos = (x: X) => f('acos', x)\nexport const all = (x: X) => f('all', x)\nexport const any = (x: X) => f('any', x)\nexport const asin = (x: X) => f('asin', x)\nexport const atan = (y: X, x?: X) => (x !== undefined ? f('atan', y, x) : f('atan', y))\nexport const atan2 = (y: X, x: X) => f('atan', y, x)\nexport const bitcast = (x: X, y: X) => f('bitcast', x, y)\nexport const cbrt = (x: X) => f('cbrt', x)\nexport const ceil = (x: X) => f('ceil', x)\nexport const clamp = (x: X, min: X, max: X) => f('clamp', x, min, max)\nexport const cos = (x: X) => f('cos', x)\nexport const cross = (x: X, y: X) => f('cross', x, y)\nexport const dFdx = (p: X) => f('dFdx', p)\nexport const dFdy = (p: X) => f('dFdy', p)\nexport const degrees = (radians: X) => f('degrees', radians)\nexport const difference = (x: X, y: X) => f('difference', x, y)\nexport const distance = (x: X, y: X) => f('distance', x, y)\nexport const dot = (x: X, y: X) => f('dot', x, y)\nexport const equals = (x: X, y: X) => f('equals', x, y)\nexport const exp = (x: X) => f('exp', x)\nexport const exp2 = (x: X) => f('exp2', x)\nexport const faceforward = (N: X, I: X, Nref: X) => f('faceforward', N, I, Nref)\nexport const floor = (x: X) => f('floor', x)\nexport const fract = (x: X) => f('fract', x)\nexport const fwidth = (x: X) => f('fwidth', x)\nexport const inverseSqrt = (x: X) => f('inverseSqrt', x)\nexport const length = (x: X) => f('length', x)\nexport const lengthSq = (x: X) => f('lengthSq', x)\nexport const log = (x: X) => f('log', x)\nexport const log2 = (x: X) => f('log2', x)\nexport const max = (x: X, y: X) => f('max', x, y)\nexport const min = (x: X, y: X) => f('min', x, y)\nexport const mix = (x: X, y: X, a: X) => f('mix', x, y, a)\nexport const negate = (x: X) => f('negate', x)\nexport const normalize = (x: X) => f('normalize', x)\nexport const oneMinus = (x: X) => f('oneMinus', x)\nexport const pow = (x: X, y: X) => f('pow', x, y)\nexport const pow2 = (x: X) => f('pow2', x)\nexport const pow3 = (x: X) => f('pow3', x)\nexport const pow4 = (x: X) => f('pow4', x)\nexport const radians = (degrees: X) => f('radians', degrees)\nexport const reciprocal = (x: X) => f('reciprocal', x)\nexport const reflect = (I: X, N: X) => f('reflect', I, N)\nexport const refract = (I: X, N: X, eta: X) => f('refract', I, N, eta)\nexport const round = (x: X) => f('round', x)\nexport const saturate = (x: X) => f('saturate', x)\nexport const sign = (x: X) => f('sign', x)\nexport const sin = (x: X) => f('sin', x)\nexport const smoothstep = (e0: X, e1: X, x: X) => f('smoothstep', e0, e1, x)\nexport const sqrt = (x: X) => f('sqrt', x)\nexport const step = (edge: X, x: X) => f('step', edge, x)\nexport const tan = (x: X) => f('tan', x)\nexport const transformDirection = (dir: X, matrix: X) => f('transformDirection', dir, matrix)\nexport const trunc = (x: X) => f('trunc', x)\n","import { fragment, isNodeProxy, vertex } from '../node'\nimport type { NodeProxy } from '../node'\n\nexport const defaultVertexGLSL = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}\n`\n\nexport const defaultFragmentGLSL = /* cpp */ `\n#version 300 es\nprecision mediump float;\nuniform vec2 iResolution;\nout vec4 fragColor;\nvoid main() {\n fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n}\n`\n\nconst 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 = (\n c: WebGLRenderingContext,\n vs: string | NodeProxy = defaultVertexGLSL,\n fs: string | NodeProxy = defaultFragmentGLSL,\n onError = () => {}\n) => {\n if (isNodeProxy(fs)) fs = fragment(fs, { isWebGL: true })\n if (isNodeProxy(vs)) vs = vertex(fs, { isWebGL: true })\n const pg = c.createProgram()\n const _vs = createShader(c, vs, c.VERTEX_SHADER)\n const _fs = createShader(c, fs, c.FRAGMENT_SHADER)\n if (!_vs || !_fs) 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 pg: ${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 createDevice,\n createPipeline,\n createDescriptor,\n createUniformBuffer,\n createBindGroup,\n createTextureSampler,\n createVertexBuffer,\n createBufferLayout,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\n\nexport const webgpu = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgpu') as any\n const { device, format } = await createDevice(c)\n const state = {\n device,\n context: c,\n resources: [[], []],\n loadingImg: 0,\n needsUpdate: true,\n } as WebGPUState\n\n const bindGroups = [] as any[]\n const vertexBuffers = [] as any[]\n const bufferLayouts = [] as any[]\n\n const attributes = cached((_, value: number[]) => {\n const { array, buffer } = createVertexBuffer(device, value)\n vertexBuffers.push(buffer)\n bufferLayouts.push(createBufferLayout(bufferLayouts.length, array.length, gl.count))\n state.needsUpdate = true\n return { array, buffer }\n })\n\n const uniforms = cached((_, value: number[]) => {\n const { array, buffer } = createUniformBuffer(device, value)\n state.resources[0].push({ buffer })\n state.needsUpdate = true\n return { array, buffer }\n })\n\n const textures = cached((_, { width, height }: HTMLImageElement) => {\n const { texture, sampler } = createTextureSampler(device, width, height)\n state.resources[1].push(sampler, texture.createView())\n state.needsUpdate = true\n return { texture, width, height }\n })\n\n const update = () => {\n const bindGroupLayouts = [] as any\n bindGroups.length = 0\n state.resources.forEach((resource) => {\n if (!resource.length) return\n const { layout, bindGroup } = createBindGroup(device, resource)\n bindGroupLayouts.push(layout)\n bindGroups.push(bindGroup)\n })\n state.pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, gl.vs, gl.fs)\n }\n\n const render = () => {\n if (state.loadingImg) return // ignore if loading img\n if (state.needsUpdate) update() // first rendering\n state.needsUpdate = false\n const encoder = device.createCommandEncoder()\n const pass = encoder.beginRenderPass(createDescriptor(c))\n pass.setPipeline(state.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 device.queue.submit([encoder.finish()])\n }\n\n const clean = () => {}\n\n const _attribute = (key = '', value: number[]) => {\n const { array, buffer } = attributes(key, 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 state.loadingImg++\n const source = Object.assign(new Image(), { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n const { texture, width, height } = textures(key, source)\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n state.loadingImg--\n })\n }\n\n return { webgpu: state, render, clean, _attribute, _uniform, _texture }\n}\n","import { fragment, isNodeProxy, vertex } from '../node'\nimport type { NodeProxy } from '../node'\nimport type { GPUContext, GPUDevice, GPUPipeline } from '../types'\n\nconst defaultVertexWGSL = `\n@vertex\nfn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {\n let x = f32(vertex_index % 2u) * 4.0 - 1.0;\n let y = f32(vertex_index / 2u) * 4.0 - 1.0;\n return vec4f(x, y, 0.0, 1.0);\n}\n`\n\nconst defaultFragmentWGSL = `\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n return vec4f(position.xy / iResolution, 0.0, 1.0);\n}\n`\n\nexport const createDevice = async (c: GPUContext) => {\n const gpu = (navigator as any).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 createPipeline = (\n device: GPUDevice,\n format: string,\n bufferLayouts: any[],\n bindGroupLayouts: any[],\n vs: string | NodeProxy = defaultVertexWGSL,\n fs: string | NodeProxy = defaultFragmentWGSL\n) => {\n if (isNodeProxy(vs)) vs = vertex(vs, { isWebGL: false })\n if (isNodeProxy(fs)) fs = fragment(fs, { isWebGL: false })\n const layout = device.createPipelineLayout({ bindGroupLayouts })\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ code: vs.trim() }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ code: fs.trim() }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout,\n primitive: { topology: 'triangle-list' },\n }) as GPUPipeline\n}\n\nexport const createBindGroup = (device: GPUDevice, resources: any[]) => {\n const entries0 = [] as any[]\n const entries1 = [] as any[]\n resources.forEach((resource, binding) => {\n if (!resource) return\n const isUniform = 'buffer' in resource // @ts-ignore\n const isTexture = resource instanceof GPUTextureView // @ts-ignore\n const isSampler = resource instanceof GPUSampler // @ts-ignore\n if (isUniform) entries0.push({ binding, visibility: 3, buffer: { type: 'uniform' } })\n else if (isTexture) entries0.push({ binding, visibility: 2, texture: {} })\n else if (isSampler) entries0.push({ binding, visibility: 2, sampler: {} })\n else return\n entries1.push({ binding, resource })\n })\n const layout = device.createBindGroupLayout({ entries: entries0 })\n const bindGroup = device.createBindGroup({ layout, entries: entries1 })\n return { layout, bindGroup }\n}\n\nexport const createDescriptor = (c: GPUContext) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n }\n}\n\nexport const alignTo256 = (size: number) => Math.ceil(size / 256) * 256\n\nexport const createVertexBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const buffer = device.createBuffer({ size: array.byteLength, usage: 40 }) // 40 === // GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n return { array, buffer }\n}\n\nexport const createUniformBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const size = alignTo256(array.byteLength)\n const buffer = device.createBuffer({ size, usage: 72 }) as Buffer // 72 === GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n return { array, buffer }\n}\n\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 })\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return { texture, sampler }\n}\n\nconst getVertexStride = (dataLength: number, vertexCount: number) => {\n return dataLength / vertexCount\n}\n\nconst getVertexFormat = (stride: number) => {\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 createBufferLayout = (shaderLocation: number, dataLength: number, count = 6) => {\n const stride = getVertexStride(dataLength, count)\n return {\n arrayStride: stride * 4,\n attributes: [\n {\n shaderLocation,\n offset: 0,\n format: getVertexFormat(stride),\n },\n ],\n }\n}\n","import { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const onGL = (props?: Partial<GL>) => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (el: HTMLCanvasElement | null) => {\n if (el) {\n gl.el = el\n gl.mount()\n } else gl.clean()\n }\n return gl\n}\n"],"mappings":"AAAA,OAAS,WAAAA,EAAS,SAAAC,OAAa,OAC/B,OAAS,eAAAC,GAAa,eAAAC,OAAmB,OCDzC,OAAS,UAAUC,MAAc,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,EAAY,CACjB,OACA,OACA,MACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,QACA,OACA,OACA,MACR,EAEaC,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,EAAgB,OAAO,KAAKD,CAAS,EAErCE,EAA0B,CAAC,MAAO,WAAY,SAAU,WAAY,cAAe,WAAW,EAE9FC,EAAwB,CAAC,MAAO,KAAK,EAErCC,EAA0B,CAC/B,MACA,OACA,QACA,OACA,QACA,QACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,cACA,YACA,WACA,WACA,SACA,aACA,OACA,OACA,QACR,EAEaC,EAAwB,CAAC,OAAO,EAEhCC,EAA2B,CAAC,UAAW,SAAS,EAEhDC,EAAyB,CAAC,MAAO,MAAO,MAAO,QAAS,OAAQ,YAAY,EAE5EC,EAAwB,CAAC,UAAW,aAAc,cAAe,aAAa,EAE9EC,GAAuB,CAC5B,QACA,UACA,cACA,UACA,OACA,aACA,SACA,MACA,OACA,OACA,OACA,UACA,oBACR,EAEaC,EAAY,CACjB,GAAGR,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACX,EAEaE,EAAe,CACpB,MAAO,MACP,IAAK,MACL,KAAM,MACN,KAAM,OACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,UACN,KAAM,UACN,KAAM,UACN,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,aACP,MAAO,aACP,MAAO,YACf,EAEaC,EAA0B,CAC/B,EAAG,QACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,GAAI,MACZ,EAEaC,GAAgB,CAErB,SAAU,OACV,aA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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","CONSTANTS","CONVERSIONS","OPERATORS","OPERATOR_KEYS","SCALAR_RETURN_FUNCTIONS","BOOL_RETURN_FUNCTIONS","PRESERVE_TYPE_FUNCTIONS","VEC3_RETURN_FUNCTIONS","FIRST_ARG_TYPE_FUNCTIONS","HIGHEST_TYPE_FUNCTIONS","VEC4_RETURN_FUNCTIONS","ADDITIONAL_FUNCTIONS","FUNCTIONS","TYPE_MAPPING","COMPONENT_COUNT_TO_TYPE","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","WGSL_TO_GLSL_BUILTIN","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isConversion","CONVERSIONS","isNodeProxy","x","count","getId","joins","children","c","x","is","code","formatConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getBluiltin","id","WGSL_TO_GLSL_BUILTIN","conversionToConstant","conversionKey","index","CONVERSIONS","CONSTANTS","generateHead","v","generateDefine","props","layout","y","args","returnType","infer","argParams","params","input","i","ret","type","scopeCode","GLSL_FRAGMENT_HEAD","WGSL_FRAGMENT_HEAD","generateFragmentMain","body","head","isWebGL","generateVertexMain","_body","_head","fragment","main","vertex","getHighestPriorityType","args","c","highest","current","currentType","infer","highestPriority","CONSTANTS","inferBuiltin","id","BUILTIN_TYPES","inferFunction","funcName","firstArgType","FIRST_ARG_TYPE_FUNCTIONS","SCALAR_RETURN_FUNCTIONS","BOOL_RETURN_FUNCTIONS","PRESERVE_TYPE_FUNCTIONS","VEC3_RETURN_FUNCTIONS","VEC4_RETURN_FUNCTIONS","HIGHEST_TYPE_FUNCTIONS","inferOperator","leftType","rightType","op","COMPARISON_OPERATORS","LOGICAL_OPERATORS","leftPriority","rightPriority","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferSwizzle","count","inferImpl","target","type","props","children","inferFrom","y","z","isNodeProxy","ret","code","target","c","is","ret","type","props","id","children","x","y","z","head","infer","varType","formatConversions","value","getBluiltin","joins","getOperator","child","args","arg","generateDefine","i","isElseIf","varName","wgslType","_scope","addToScope","x","_scope","toVar","id","getId","y","node","z","assign","toPrimitive","x","hint","code","node","type","props","args","get","_","key","toVar","assign","isSwizzle","swizzle","isOperator","y","operator","isFunction","function_","isConversion","conversion","conversionToConstant","set","uniform","x","id","node","builtin","id","node","swizzle","key","arg","operator","args","function_","conversion","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","normalLocal","normalWorld","normalView","positionLocal","positionWorld","positionView","screenCoordinate","screenUV","float","x","conversion","vec2","x","y","conversion","iResolution","uniform","vec2","iMouse","iTime","float","defaultVertexGLSL","defaultFragmentGLSL","createShader","c","source","type","shader","error","createProgram","vs","fs","onError","isNodeProxy","fragment","vertex","pg","_vs","_fs","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","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","defaultVertexWGSL","defaultFragmentWGSL","createDevice","c","gpu","format","device","createPipeline","bufferLayouts","bindGroupLayouts","vs","fs","isNodeProxy","vertex","fragment","layout","createBindGroup","resources","entries0","entries1","resource","binding","isUniform","isTexture","isSampler","bindGroup","createDescriptor","alignTo256","size","createVertexBuffer","value","array","buffer","createUniformBuffer","createTextureSampler","width","height","texture","sampler","getVertexStride","dataLength","vertexCount","getVertexFormat","stride","createBufferLayout","shaderLocation","count","webgpu","gl","c","device","format","createDevice","state","bindGroups","vertexBuffers","bufferLayouts","attributes","cached","_","value","array","buffer","createVertexBuffer","createBufferLayout","uniforms","createUniformBuffer","textures","width","height","texture","sampler","createTextureSampler","update","bindGroupLayouts","resource","layout","bindGroup","createBindGroup","createPipeline","encoder","pass","createDescriptor","v","i","key","is","src","source","isGL","a","is","isServer","isWebGPUSupported","iTime","createGL","props","gl","event","createQueue","createFrame","durable","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","onGL","props","gl","isGL","createGL","el"]}
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","../src/solid.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, uint, 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 { 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 pg = createProgram(c, gl.vs, gl.fs, () => void (gl.isLoop = false), gl)!\n c.useProgram(pg)\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 CONSTANTS = [\n 'bool',\n 'uint',\n 'int',\n 'float',\n 'bvec2',\n 'ivec2',\n 'uvec2',\n 'vec2',\n 'bvec3',\n 'ivec3',\n 'uvec3',\n 'vec3',\n 'bvec4',\n 'ivec4',\n 'uvec4',\n 'vec4',\n 'color',\n 'mat2',\n 'mat3',\n 'mat4',\n 'texture',\n 'sampler2D',\n] as const\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\nexport const SCALAR_RETURN_FUNCTIONS = ['dot', 'distance', 'length', 'lengthSq', 'determinant', 'luminance'] as const\n\nexport const BOOL_RETURN_FUNCTIONS = ['all', 'any'] as const\n\nexport const PRESERVE_TYPE_FUNCTIONS = [\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 '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] as const\n\nexport const VEC3_RETURN_FUNCTIONS = ['cross'] as const\n\nexport const FIRST_ARG_TYPE_FUNCTIONS = ['reflect', 'refract'] as const\n\nexport const HIGHEST_TYPE_FUNCTIONS = ['min', 'max', 'mix', 'clamp', 'step', 'smoothstep'] as const\n\nexport const VEC4_RETURN_FUNCTIONS = ['texture', 'textureLod', 'textureSize', 'cubeTexture'] as const\n\nexport const ADDITIONAL_FUNCTIONS = [\n 'atan2',\n 'degrees',\n 'faceforward',\n 'bitcast',\n 'cbrt',\n 'difference',\n 'equals',\n 'pow',\n 'pow2',\n 'pow3',\n 'pow4',\n 'radians',\n 'transformDirection',\n] as const\n\nexport const FUNCTIONS = [\n ...SCALAR_RETURN_FUNCTIONS,\n ...BOOL_RETURN_FUNCTIONS,\n ...PRESERVE_TYPE_FUNCTIONS,\n ...VEC3_RETURN_FUNCTIONS,\n ...FIRST_ARG_TYPE_FUNCTIONS,\n ...HIGHEST_TYPE_FUNCTIONS,\n ...VEC4_RETURN_FUNCTIONS,\n ...ADDITIONAL_FUNCTIONS,\n] as const\n\nexport const TYPE_MAPPING = {\n float: 'f32',\n int: 'i32',\n uint: 'u32',\n bool: 'bool',\n vec2: 'vec2f',\n vec3: 'vec3f',\n vec4: 'vec4f',\n mat2: 'mat2x2f',\n mat3: 'mat3x3f',\n mat4: 'mat4x4f',\n ivec2: 'vec2i',\n ivec3: 'vec3i',\n ivec4: 'vec4i',\n uvec2: 'vec2u',\n uvec3: 'vec3u',\n uvec4: 'vec4u',\n bvec2: 'vec2<bool>',\n bvec3: 'vec3<bool>',\n bvec4: 'vec4<bool>',\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\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 { code } from './code'\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 = (x: unknown): x is NodeProxy => {\n if (!x) return false\n if (typeof x !== 'object') return false // @ts-ignore\n return x.isProxy\n}\n\nexport const isConstantsType = (type?: Constants | 'auto'): type is Constants => {\n if (!type) return false\n if (type === 'auto') return false\n return true\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 joins = (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 formatConversions = (x: X, c?: NodeContext) => {\n if (!is.str(x)) return ''\n if (c?.isWebGL) return x\n return TYPE_MAPPING[x as keyof typeof TYPE_MAPPING]\n}\n\nexport const getOperator = (op: X) => {\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","import { is } from '../utils/helpers'\nimport {\n BOOL_RETURN_FUNCTIONS,\n BUILTIN_TYPES,\n COMPARISON_OPERATORS,\n COMPONENT_COUNT_TO_TYPE,\n CONSTANTS,\n FIRST_ARG_TYPE_FUNCTIONS,\n HIGHEST_TYPE_FUNCTIONS,\n LOGICAL_OPERATORS,\n PRESERVE_TYPE_FUNCTIONS,\n SCALAR_RETURN_FUNCTIONS,\n VEC3_RETURN_FUNCTIONS,\n VEC4_RETURN_FUNCTIONS,\n} from './const'\nimport { isConstantsType, isNodeProxy } from './utils'\nimport type { Constants, NodeContext, NodeProxy, X } from './types'\n\nconst getHighestPriorityType = (args: X[], c: NodeContext) => {\n return args.reduce((highest, current) => {\n const currentType = infer(current, c)\n const highestPriority = CONSTANTS.indexOf(highest as any)\n const currentPriority = CONSTANTS.indexOf(currentType as any)\n return currentPriority > highestPriority ? currentType : highest\n }, 'float') as Constants\n}\n\nconst inferBuiltin = (id: string | undefined): Constants => {\n return BUILTIN_TYPES[id as keyof typeof BUILTIN_TYPES]!\n}\n\nconst inferFunction = (funcName: string, args: X[], c: NodeContext): Constants => {\n const firstArgType = args.length > 0 ? infer(args[0], c) : 'float'\n if (FIRST_ARG_TYPE_FUNCTIONS.includes(funcName as any)) return firstArgType\n if (SCALAR_RETURN_FUNCTIONS.includes(funcName as any)) return 'float'\n if (BOOL_RETURN_FUNCTIONS.includes(funcName as any)) return 'bool'\n if (PRESERVE_TYPE_FUNCTIONS.includes(funcName as any)) return firstArgType\n if (VEC3_RETURN_FUNCTIONS.includes(funcName as any)) return 'vec3'\n if (VEC4_RETURN_FUNCTIONS.includes(funcName as any)) return 'vec4'\n if (HIGHEST_TYPE_FUNCTIONS.includes(funcName as any)) return getHighestPriorityType(args, c)\n return firstArgType\n}\n\nconst inferOperator = (leftType: string, rightType: string, op: string): Constants => {\n if (COMPARISON_OPERATORS.includes(op as any)) return 'bool'\n if (LOGICAL_OPERATORS.includes(op as any)) return 'bool'\n if (leftType === rightType) return leftType as Constants\n if (leftType.includes('vec') && !rightType.includes('vec')) return leftType as Constants\n if (rightType.includes('vec') && !leftType.includes('vec')) return rightType as Constants\n const leftPriority = CONSTANTS.indexOf(leftType as any)\n const rightPriority = CONSTANTS.indexOf(rightType as any)\n return (leftPriority >= rightPriority ? leftType : rightType) as Constants\n}\n\nexport const inferPrimitiveType = (x: any): Constants => {\n if (is.bol(x)) return 'bool'\n if (is.num(x)) return 'float'\n if (is.arr(x)) return COMPONENT_COUNT_TO_TYPE[x.length as keyof typeof COMPONENT_COUNT_TO_TYPE] || 'float'\n return 'float'\n}\n\nconst inferSwizzle = (count: number): Constants => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE]!\n}\n\nconst inferFromArray = (arr: X[], c: NodeContext): Constants => {\n if (arr.length === 0) return 'void'\n const ret = infer(arr[0], c)\n for (const x of arr.slice(1))\n if (ret !== infer(x)) throw new Error(`glre node system error: defined scope return mismatch`)\n return ret\n}\n\nexport const inferImpl = (target: NodeProxy, c: NodeContext): Constants => {\n const { type, props } = target\n const { id, children = [], layout, inferFrom } = props\n const [x, y, z] = children\n if (type === 'conversion') return x as Constants\n if (type === 'operator') return inferOperator(infer(y, c), infer(z, c), x as string)\n if (type === 'function') return inferFunction(x as string, children.slice(1), c)\n if (type === 'swizzle') return inferSwizzle((x as string).length)\n if (type === 'ternary') return inferOperator(infer(y, c), infer(z, c), 'add')\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'define' && isConstantsType(layout?.type)) return layout?.type\n if (inferFrom) return inferFromArray(inferFrom, c)\n return infer(x, c)\n}\n\nexport const infer = (target: X, c?: NodeContext | null): Constants => {\n if (!c) c = {}\n if (!isNodeProxy(target)) return inferPrimitiveType(target)\n if (!c.infers) c.infers = new WeakMap<NodeProxy, Constants>()\n if (c.infers.has(target)) return c.infers.get(target)!\n const ret = inferImpl(target, c)\n c.infers.set(target, ret)\n return ret\n}\n","import { infer } from './infer'\nimport { formatConversions, joins } from './utils'\nimport { code } from './code'\nimport type { Constants, NodeContext, NodeProps, X } from './types'\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(${joins(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 varType = infer(x, c)\n const varName = (y as any)?.props?.id\n if (c.isWebGL) return `${varType} ${varName} = ${code(x, c)};`\n const wgslType = formatConversions(varType)\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 [id, type] of argParams) params.push(`${type} ${id}`)\n ret.push(`${returnType} ${id}(${params}) {`)\n } else {\n for (const [id, type] of argParams) params.push(`${id}: ${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, varType: string) => {\n return c.isWebGL\n ? `${varType} ${id};`\n : `@location(${c.vertVaryings!.size}) ${id}: ${formatConversions(varType, c)}`\n}\n\nexport const parseUniformHead = (c: NodeContext, id: string, varType: Constants) => {\n const isTexture = varType === 'sampler2D' || varType === 'texture'\n if (c.isWebGL)\n return isTexture //\n ? `uniform sampler2D ${id};`\n : `uniform ${varType} ${id};`\n if (isTexture) {\n const { group = 1, binding = 0 } = c.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.webgpu?.uniforms.map.get(id) || {}\n const wgslType = formatConversions(varType, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\n}\n\nexport const parseAttribHead = (c: NodeContext, id: string, varType: Constants) => {\n if (c.isWebGL) return `${varType} ${id};`\n const { location = 0 } = c.webgpu?.attribs.map.get(id) || {}\n const wgslType = formatConversions(varType, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, varType: Constants, value: string) => {\n return c.isWebGL\n ? `const ${varType} ${id} = ${value};`\n : `const ${id}: ${formatConversions(varType, c)} = ${value};`\n}\n","import { is } from '../utils/helpers'\nimport { infer } from './infer'\nimport { getBluiltin, getOperator, formatConversions, joins } from './utils'\nimport type { NodeContext, X } from './types'\nimport {\n parseAttribHead,\n parseConstantHead,\n parseUniformHead,\n parseDeclare,\n parseDefine,\n parseIf,\n parseSwitch,\n parseTexture,\n parseVaryingHead,\n} from './parse'\n\nexport const code = (target: X, c?: NodeContext | null): string => {\n if (!c) c = {}\n if (!c.headers) c.headers = new Map()\n if (!c.vertVaryings) c.vertVaryings = new Map()\n if (!c.fragInputs) c.fragInputs = new Map()\n if (!c.vertInputs) c.vertInputs = new Map()\n if (!c.vertOutputs) {\n c.vertOutputs = new Map()\n if (!c.isWebGL) {\n c.fragInputs.set('position', '@builtin(position) position: vec4f')\n c.vertOutputs.set('position', '@builtin(position) position: vec4f')\n }\n }\n if (is.str(target)) return target\n if (is.num(target)) {\n const ret = `${target}`\n if (ret.includes('.')) return ret\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 = [] } = props\n const [x, y, z, w] = children\n /**\n * variables\n */\n if (type === 'variable') return id\n if (type === 'swizzle') return `${code(y, c)}.${code(x, c)}`\n if (type === 'ternary')\n return c.isWebGL\n ? `(${code(x, c)} ? ${code(y, c)} : ${code(z, c)})`\n : `select(${code(x, c)}, ${code(y, c)}, ${code(z, c)})`\n if (type === 'conversion') return `${formatConversions(x, c)}(${joins(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 `(-${joins(children.slice(1), c)})`\n if (x === 'texture') return parseTexture(c, y, z, w)\n return `${x}(${joins(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 < ${x}; i += 1) {\\n${code(y, c)}\\n}`\n : `for (var i: i32 = 0; i < ${x}; 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 const ret = `${id}(${joins(children.slice(1), c)})`\n if (c.headers.has(id)) return ret\n c.headers.set(id, parseDefine(c, props, infer(target, c)))\n return ret\n }\n /**\n * headers\n */\n if (type === 'varying') {\n if (c.vertOutputs.has(id)) return c.isWebGL ? `${id}` : `out.${id}`\n const field = parseVaryingHead(c, id, infer(target, c))\n c.fragInputs.set(id, field)\n c.vertOutputs.set(id, field)\n c.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.fragInputs.set(id, field)\n } else c.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute') {\n c.vertInputs.set(id, parseAttribHead(c, id, infer(target, c)))\n return c.isWebGL ? `${id}` : `in.${id}`\n }\n if (c.headers.has(id)) return id // must last\n let head = ''\n if (type === 'uniform') head = parseUniformHead(c, id, infer(target, c))\n if (type === 'constant') head = parseConstantHead(c, id, infer(target, c), code(x, c))\n if (head) {\n c.headers.set(id, head)\n return id\n }\n return code(x, c)\n}\n","import { int } from '.'\nimport { conversion, node } from './node'\nimport { getId } from './utils'\nimport type { FnLayout, NodeProps, NodeProxy, X } 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 = (x: X, id?: string) => {\n if (!id) id = getId()\n const y = node('variable', { id, inferFrom: [x] })\n const z = node('declare', null, x, y)\n addToScope(z)\n return y\n}\n\nexport const assign = (x: X, y: X) => {\n const z = node('assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = (x: X) => {\n const y = node('return', { inferFrom: [x] }, x)\n addToScope(y)\n return y\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: X, 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: X, fun: (params: { i: NodeProxy }) => void) => {\n const y = node('scope')\n scoped(y, () => fun({ i: node('variable', { id: 'i', inferFrom: [int(0)] }) }))\n const ret = node('loop', null, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Switch = (x: X) => {\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\n return ret()\n}\n\nexport const Fn = (fun: (paramVars: NodeProxy[]) => NodeProxy) => {\n let layout: FnLayout\n const ret = (...args: X[]) => {\n const id = layout?.name || getId()\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('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars), y)\n return y\n }\n ret.setLayout = (newLayout: FnLayout) => {\n layout = newLayout\n return ret\n }\n return ret\n}\n","import { code } from './code'\nimport { assign, toVar } from './scope'\nimport { conversionToConstant, isConversion, isFunction, isOperator, isSwizzle, getId, isNodeProxy } from './utils'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, Swizzles, X } from './types'\n\nconst toPrimitive = (x: X, hint: string) => {\n if (hint === 'string') return code(x)\n}\n\nexport const node = (type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\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 (isSwizzle(key)) return swizzle(key, x)\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 }\n const set = (_: unknown, key: string, y: X) => {\n if (isSwizzle(key)) {\n swizzle(key, x).assign(y)\n return true\n }\n return false\n }\n const x = new Proxy({}, { get, set }) as unknown as NodeProxy\n return x\n}\n\n// headers\nexport const attribute = (x: X, id = getId()) => node('attribute', { id }, x)\nexport const constant = (x: X, id = getId()) => node('constant', { id }, x)\nexport const uniform = (x: X, id = getId()) => node('uniform', { id }, x)\nexport const variable = (id = getId()) => node('variable', { id })\nexport const builtin = (id = getId()) => node('builtin', { id })\nexport const vertexStage = (x: X, id = getId()) => node('varying', { id, inferFrom: [x] }, x)\n\n// Node shorthands\nexport const swizzle = (key: Swizzles, x: X) => node('swizzle', null, key, x)\nexport const operator = (key: Operators, ...x: X[]) => node('operator', null, key, ...x)\nexport const function_ = (key: Functions, ...x: X[]) => node('function', null, key, ...x)\nexport const conversion = (key: string, ...x: X[]) => node('conversion', null, key, ...x)\nexport const select = (x: X, y: X, z: X) => node('ternary', null, x, y, z) // x ? y : z\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 } from './utils'\nimport type { NodeContext, X } 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 const head = Array.from(c.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 c.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.vertInputs!.values()) ret.push(`in ${code}`)\n for (const code of c.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.vertVaryings!.entries()) ret.push(` ${id} = ${code};`)\n } else {\n if (c.vertInputs?.size) ret.push(generateStruct('In', c.vertInputs))\n if (c.vertOutputs?.size) ret.push(generateStruct('Out', c.vertOutputs))\n ret.push(head)\n ret.push('@vertex')\n ret.push(`fn main(${c.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n ret.push(' var out: Out;')\n ret.push(` out.position = ${body};`)\n for (const [id, code] of c.vertVaryings!.entries()) ret.push(` out.${id} = ${code};`)\n ret.push(' return out;')\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n')\n console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const fragment = (x: X, c: NodeContext) => {\n c.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.fragInputs!.values()) ret.push(`in ${code}`)\n ret.push(head)\n ret.push(`void main() {\\n fragColor = ${body};`)\n } else {\n if (c.fragInputs?.size) ret.push(generateStruct('Out', c.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')\n console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\n// Builtin Variables\nexport const position = builtin('position')\nexport const vertexIndex = builtin('vertex_index')\nexport const instanceIndex = builtin('instance_index')\nexport const frontFacing = builtin('front_facing')\nexport const fragDepth = builtin('frag_depth')\nexport const sampleIndex = builtin('sample_index')\nexport const sampleMask = builtin('sample_mask')\nexport const pointCoord = builtin('point_coord')\n\n// TSL Compatible Builtin Variables\nexport const normalLocal = builtin('normalLocal')\nexport const normalWorld = builtin('normalWorld')\nexport const normalView = builtin('normalView')\nexport const positionLocal = builtin('position')\nexport const positionWorld = builtin('positionWorld')\nexport const positionView = builtin('positionView')\nexport const screenCoordinate = builtin('screenCoordinate')\nexport const screenUV = builtin('screenUV')\n\n// Type constructors\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 = () => c('texture')\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\nexport const iResolution = u(vec2(1280, 800), 'iResolution')\nexport const iMouse = u(vec2(0, 0), 'iMouse')\nexport const iTime = u(float(0), 'iTime')\nexport const uv = () => position.xy.div(iResolution)\n\n// Texture Functions\nexport const texture = (x: X, y: X, z?: X) => f('texture', x, y, z)\nexport const cubeTexture = (x: X, y: X, z?: X) => f('cubeTexture', x, y, z)\nexport const textureSize = (x: X, y?: X) => f('textureSize', x, y)\n\n// Math Functions\nexport const abs = (x: X) => f('abs', x)\nexport const acos = (x: X) => f('acos', x)\nexport const all = (x: X) => f('all', x)\nexport const any = (x: X) => f('any', x)\nexport const asin = (x: X) => f('asin', x)\nexport const atan = (y: X, x?: X) => (x !== undefined ? f('atan', y, x) : f('atan', y))\nexport const atan2 = (y: X, x: X) => f('atan', y, x)\nexport const bitcast = (x: X, y: X) => f('bitcast', x, y)\nexport const cbrt = (x: X) => f('cbrt', x)\nexport const ceil = (x: X) => f('ceil', x)\nexport const clamp = (x: X, min: X, max: X) => f('clamp', x, min, max)\nexport const cos = (x: X) => f('cos', x)\nexport const cross = (x: X, y: X) => f('cross', x, y)\nexport const dFdx = (p: X) => f('dFdx', p)\nexport const dFdy = (p: X) => f('dFdy', p)\nexport const degrees = (radians: X) => f('degrees', radians)\nexport const difference = (x: X, y: X) => f('difference', x, y)\nexport const distance = (x: X, y: X) => f('distance', x, y)\nexport const dot = (x: X, y: X) => f('dot', x, y)\nexport const equals = (x: X, y: X) => f('equals', x, y)\nexport const exp = (x: X) => f('exp', x)\nexport const exp2 = (x: X) => f('exp2', x)\nexport const faceforward = (N: X, I: X, Nref: X) => f('faceforward', N, I, Nref)\nexport const floor = (x: X) => f('floor', x)\nexport const fract = (x: X) => f('fract', x)\nexport const fwidth = (x: X) => f('fwidth', x)\nexport const inverseSqrt = (x: X) => f('inverseSqrt', x)\nexport const length = (x: X) => f('length', x)\nexport const lengthSq = (x: X) => f('lengthSq', x)\nexport const log = (x: X) => f('log', x)\nexport const log2 = (x: X) => f('log2', x)\nexport const max = (x: X, y: X) => f('max', x, y)\nexport const min = (x: X, y: X) => f('min', x, y)\nexport const mix = (x: X, y: X, a: X) => f('mix', x, y, a)\nexport const negate = (x: X) => f('negate', x)\nexport const normalize = (x: X) => f('normalize', x)\nexport const oneMinus = (x: X) => f('oneMinus', x)\nexport const pow = (x: X, y: X) => f('pow', x, y)\nexport const pow2 = (x: X) => f('pow2', x)\nexport const pow3 = (x: X) => f('pow3', x)\nexport const pow4 = (x: X) => f('pow4', x)\nexport const radians = (degrees: X) => f('radians', degrees)\nexport const reciprocal = (x: X) => f('reciprocal', x)\nexport const reflect = (I: X, N: X) => f('reflect', I, N)\nexport const refract = (I: X, N: X, eta: X) => f('refract', I, N, eta)\nexport const round = (x: X) => f('round', x)\nexport const saturate = (x: X) => f('saturate', x)\nexport const sign = (x: X) => f('sign', x)\nexport const sin = (x: X) => f('sin', x)\nexport const smoothstep = (e0: X, e1: X, x: X) => f('smoothstep', e0, e1, x)\nexport const sqrt = (x: X) => f('sqrt', x)\nexport const step = (edge: X, x: X) => f('step', edge, x)\nexport const tan = (x: X) => f('tan', x)\nexport const transformDirection = (dir: X, matrix: X) => f('transformDirection', dir, matrix)\nexport const trunc = (x: X) => f('trunc', x)\n","import { fragment, vertex } from '../node'\nimport type { X } from '../node'\nimport { is } from './helpers'\n\nconst 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, vs: X, fs: string | X, onError = () => {}, gl?: any) => {\n const config = { isWebGL: true, gl }\n if (!is.str(fs)) fs = fragment(fs, config)\n if (!is.str(vs)) vs = vertex(vs, config)\n const pg = c.createProgram()\n const _vs = createShader(c, vs, c.VERTEX_SHADER)\n const _fs = createShader(c, fs, c.FRAGMENT_SHADER)\n if (!_vs || !_fs) 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 pg: ${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 createBindGroup,\n createBindings,\n createDepthTexture,\n createDescriptor,\n createDevice,\n createPipeline,\n createTextureSampler,\n createUniformBuffer,\n createVertexBuffers,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\n\nexport const webgpu = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgpu') as GPUCanvasContext\n const { device, format } = await createDevice(c)\n const bindings = createBindings()\n let imageLoading = 0\n let needsUpdate = true\n let depthTexture: GPUTexture\n let _render = (_pass: GPURenderPassEncoder) => {}\n\n const uniforms = cached((_key, value: number[]) => {\n needsUpdate = true\n const { group, binding } = bindings.uniform()\n const { array, buffer } = createUniformBuffer(device, value)\n return { array, buffer, binding, group }\n })\n\n const textures = cached((_key, { width, height }: HTMLImageElement) => {\n needsUpdate = true\n const { group, binding } = bindings.texture()\n const { texture, sampler } = createTextureSampler(device, width, height)\n return { texture, sampler, binding, group }\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)\n const { bindGroups, bindGroupLayouts } = createBindGroup(device, uniforms.map, textures.map)\n const pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, webgpu, gl.vs, gl.fs)\n _render = (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 (imageLoading) return\n if (needsUpdate) update()\n needsUpdate = false\n const encoder = device.createCommandEncoder()\n _render(encoder.beginRenderPass(createDescriptor(c, 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 texture = textures(key, source)\n device.queue.copyExternalImageToTexture(\n { source },\n { texture: texture.texture },\n { width: source.width, height: source.height }\n )\n imageLoading--\n })\n }\n\n resize()\n\n const webgpu = { device, uniforms, textures, attribs } as WebGPUState\n\n return { webgpu, render, resize, clean, _attribute, _uniform, _texture }\n}\n","import { fragment, vertex } from '../node'\nimport type { X } from '../node'\nimport type { AttribData, TextureData, UniformData, WebGPUState } from '../types'\nimport { is } from './helpers'\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\nexport const createPipeline = (\n device: GPUDevice,\n format: GPUTextureFormat,\n bufferLayouts: GPUVertexBufferLayout[],\n bindGroupLayouts: GPUBindGroupLayout[],\n webgpu: WebGPUState,\n vs: string | X,\n fs: string | X\n) => {\n const config = { isWebGL: false, webgpu }\n if (!is.str(fs)) fs = fragment(fs, config)\n if (!is.str(vs)) vs = vertex(vs, config)\n const layout = device.createPipelineLayout({ bindGroupLayouts })\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ code: vs.trim() }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ code: fs.trim() }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout,\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\n/**\n * uniforms\n */\nexport const createBindGroup = (\n device: GPUDevice,\n uniforms: Map<string, UniformData>,\n textures: Map<string, TextureData>\n) => {\n const groups = new Map<number, any>()\n const getGroup = (i = 0) => {\n if (!groups.has(i)) groups.set(i, { entries0: [], entries1: [] })\n return groups.get(i)\n }\n for (const { binding, buffer, group: i } of uniforms.values()) {\n const { entries0, entries1 } = getGroup(i)\n entries0.push({ binding, visibility: 3, buffer: { type: 'uniform' } })\n entries1.push({ binding, resource: { buffer } })\n }\n for (const { binding, group: i, sampler, texture } of textures.values()) {\n const { entries0, entries1 } = getGroup(i)\n entries0.push({ binding, visibility: 2, sampler: {} })\n entries0.push({ binding: binding + 1, visibility: 2, texture: {} })\n entries1.push({ binding, resource: sampler })\n entries1.push({ binding: binding + 1, resource: texture.createView() })\n }\n const ret = { bindGroups: [] as GPUBindGroup[], bindGroupLayouts: [] as GPUBindGroupLayout[] }\n for (const [i, { entries0, entries1 }] of groups) {\n ret.bindGroupLayouts[i] = device.createBindGroupLayout({ entries: entries0 })\n ret.bindGroups[i] = device.createBindGroup({ layout: ret.bindGroupLayouts[i], entries: entries1 })\n }\n return ret\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\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\n/**\n * attribs\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: Map<string, 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","import { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const onGL = (props?: Partial<GL>) => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (el: HTMLCanvasElement | null) => {\n if (el) {\n gl.el = el\n gl.mount()\n } else gl.clean()\n }\n return gl\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,EAAY,CACjB,OACA,OACA,MACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,QACA,OACA,OACA,OACA,UACA,WACR,EAEaC,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,EAErCE,EAA0B,CAAC,MAAO,WAAY,SAAU,WAAY,cAAe,WAAW,EAE9FC,EAAwB,CAAC,MAAO,KAAK,EAErCC,EAA0B,CAC/B,MACA,OACA,QACA,OACA,QACA,QACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,cACA,YACA,WACA,WACA,SACA,aACA,OACA,OACA,QACR,EAEaC,EAAwB,CAAC,OAAO,EAEhCC,EAA2B,CAAC,UAAW,SAAS,EAEhDC,GAAyB,CAAC,MAAO,MAAO,MAAO,QAAS,OAAQ,YAAY,EAE5EC,GAAwB,CAAC,UAAW,aAAc,cAAe,aAAa,EAE9EC,GAAuB,CAC5B,QACA,UACA,cACA,UACA,OACA,aACA,SACA,MACA,OACA,OACA,OACA,UACA,oBACR,EAEaC,GAAY,CACjB,GAAGR,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,GACH,GAAGC,GACH,GAAGC,EACX,EAEaE,GAAe,CACpB,MAAO,MACP,IAAK,MACL,KAAM,MACN,KAAM,OACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,UACN,KAAM,UACN,KAAM,UACN,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,aACP,MAAO,aACP,MAAO,YACf,EAEaC,GAA0B,CAC/B,EAAG,QACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,GAAI,MACZ,EAEaC,GAAgB,CAErB,SA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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","CONSTANTS","CONVERSIONS","OPERATORS","OPERATOR_KEYS","SCALAR_RETURN_FUNCTIONS","BOOL_RETURN_FUNCTIONS","PRESERVE_TYPE_FUNCTIONS","VEC3_RETURN_FUNCTIONS","FIRST_ARG_TYPE_FUNCTIONS","HIGHEST_TYPE_FUNCTIONS","VEC4_RETURN_FUNCTIONS","ADDITIONAL_FUNCTIONS","FUNCTIONS","TYPE_MAPPING","COMPONENT_COUNT_TO_TYPE","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","WGSL_TO_GLSL_BUILTIN","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isConversion","CONVERSIONS","isNodeProxy","x","isConstantsType","type","hex2rgb","hex","r","g","b","count","getId","joins","children","c","code","formatConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getBluiltin","id","WGSL_TO_GLSL_BUILTIN","conversionToConstant","conversionKey","index","CONSTANTS","getHighestPriorityType","args","c","highest","current","currentType","infer","highestPriority","CONSTANTS","inferBuiltin","id","BUILTIN_TYPES","inferFunction","funcName","firstArgType","FIRST_ARG_TYPE_FUNCTIONS","SCALAR_RETURN_FUNCTIONS","BOOL_RETURN_FUNCTIONS","PRESERVE_TYPE_FUNCTIONS","VEC3_RETURN_FUNCTIONS","VEC4_RETURN_FUNCTIONS","HIGHEST_TYPE_FUNCTIONS","inferOperator","leftType","rightType","op","COMPARISON_OPERATORS","LOGICAL_OPERATORS","leftPriority","rightPriority","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferSwizzle","count","inferFromArray","arr","ret","inferImpl","target","type","props","children","layout","inferFrom","y","z","isConstantsType","isNodeProxy","parseTexture","c","y","z","w","joins","_y","code","args","parseIf","x","children","ret","isElse","parseSwitch","i","parseDeclare","varType","infer","varName","wgslType","formatConversions","parseDefine","props","returnType","id","layout","argParams","params","input","type","scopeCode","parseVaryingHead","parseUniformHead","isTexture","group","binding","parseAttribHead","location","parseConstantHead","value","code","target","c","is","ret","type","props","id","children","x","y","z","w","formatConversions","joins","getOperator","parseTexture","child","parseIf","parseSwitch","parseDeclare","parseDefine","infer","field","parseVaryingHead","getBluiltin","parseAttribHead","head","parseUniformHead","parseConstantHead","scope","define","addToScope","x","props","toVar","id","getId","y","node","z","assign","Return","scoped","fun","_scope","_define","If","ifNode","ret","_x","_fun","_y","Loop","int","Switch","switchNode","values","Fn","layout","args","paramVars","paramDefs","input","conversion","i","newLayout","toPrimitive","x","hint","code","node","type","props","args","get","_","key","toVar","assign","isSwizzle","swizzle","isOperator","y","operator","isFunction","function_","isConversion","conversion","conversionToConstant","set","attribute","id","getId","constant","uniform","variable","builtin","vertexStage","select","z","GLSL_FRAGMENT_HEAD","generateHead","x","c","body","code","generateStruct","id","map","vertex","head","ret","main","fragment","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","normalLocal","normalWorld","normalView","positionLocal","positionWorld","positionView","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","is","hex2rgb","iResolution","uniform","iMouse","iTime","uv","texture","function_","cubeTexture","textureSize","abs","acos","all","any","asin","atan","atan2","bitcast","cbrt","ceil","clamp","min","max","cos","cross","dFdx","p","dFdy","degrees","radians","difference","distance","dot","equals","exp","exp2","faceforward","N","I","Nref","floor","fract","fwidth","inverseSqrt","length","lengthSq","log","log2","mix","a","negate","normalize","oneMinus","pow","pow2","pow3","pow4","reciprocal","reflect","refract","eta","round","saturate","sign","sin","smoothstep","e0","e1","sqrt","step","edge","tan","transformDirection","dir","matrix","trunc","createShader","c","source","type","shader","error","createProgram","vs","fs","onError","gl","config","is","fragment","vertex","pg","_vs","_fs","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","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","createPipeline","bufferLayouts","bindGroupLayouts","webgpu","vs","fs","config","is","fragment","vertex","layout","createUniformBuffer","value","array","size","buffer","createAttribBuffer","createBindGroup","uniforms","textures","groups","getGroup","i","entries0","entries1","sampler","ret","createDescriptor","depthTexture","createTextureSampler","width","height","createDepthTexture","getVertexFormat","stride","createVertexBuffers","attribs","vertexBuffers","webgpu","gl","c","device","format","createDevice","bindings","createBindings","imageLoading","needsUpdate","depthTexture","_render","_pass","uniforms","cached","_key","value","group","binding","array","buffer","createUniformBuffer","textures","width","height","texture","sampler","createTextureSampler","attribs","stride","location","createAttribBuffer","update","vertexBuffers","bufferLayouts","createVertexBuffers","bindGroups","bindGroupLayouts","createBindGroup","pipeline","createPipeline","pass","v","i","render","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","onGL","props","gl","isGL","createGL","el"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glre",
3
- "version": "0.30.0",
3
+ "version": "0.32.0",
4
4
  "author": "tseijp",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -44,7 +44,7 @@
44
44
  "default": "./dist/react.js"
45
45
  },
46
46
  "require": "./dist/react.cjs",
47
- "default": "./dist/react.cjs"
47
+ "default": "./dist/react.js"
48
48
  },
49
49
  "./native": {
50
50
  "types": "./dist/native.d.ts",
@@ -57,7 +57,7 @@
57
57
  "default": "./dist/native.js"
58
58
  },
59
59
  "require": "./dist/native.cjs",
60
- "default": "./dist/native.cjs"
60
+ "default": "./dist/native.js"
61
61
  },
62
62
  "./solid": {
63
63
  "types": "./dist/solid.d.ts",
@@ -70,7 +70,7 @@
70
70
  "default": "./dist/solid.js"
71
71
  },
72
72
  "require": "./dist/solid.cjs",
73
- "default": "./dist/solid.cjs"
73
+ "default": "./dist/solid.js"
74
74
  },
75
75
  ".": {
76
76
  "types": "./dist/index.d.ts",
@@ -83,7 +83,7 @@
83
83
  "default": "./dist/index.js"
84
84
  },
85
85
  "require": "./dist/index.cjs",
86
- "default": "./dist/index.cjs"
86
+ "default": "./dist/index.js"
87
87
  },
88
88
  "./*": {
89
89
  "types": "./dist/index.d.ts",
@@ -96,7 +96,7 @@
96
96
  "default": "./dist/index.js"
97
97
  },
98
98
  "require": "./dist/index.cjs",
99
- "default": "./dist/index.cjs"
99
+ "default": "./dist/index.js"
100
100
  }
101
101
  },
102
102
  "files": [
@@ -106,6 +106,7 @@
106
106
  "README.md"
107
107
  ],
108
108
  "dependencies": {
109
+ "@webgpu/types": "*",
109
110
  "reev": "0.12.0",
110
111
  "refr": "0.7.0"
111
112
  },
package/src/index.ts CHANGED
@@ -5,6 +5,8 @@ import { webgpu } from './webgpu'
5
5
  import { is } from './utils/helpers'
6
6
  import type { EventState } from 'reev'
7
7
  import type { GL } from './types'
8
+ import { float, fract, int, iResolution, position, uint, vec4, vertexIndex } from './node'
9
+ export * from './node'
8
10
  export * from './types'
9
11
  export * from './utils/helpers'
10
12
  export * from './utils/pipeline'
@@ -29,6 +31,19 @@ export const isWebGPUSupported = () => {
29
31
 
30
32
  let iTime = performance.now()
31
33
 
34
+ const defaultFragment = () => vec4(fract(position.xy.div(iResolution)), 0, 1)
35
+ const defaultVertex = () =>
36
+ vec4(
37
+ float(int(vertexIndex).mod(int(2)))
38
+ .mul(4)
39
+ .sub(1),
40
+ float(int(vertexIndex).div(int(2)))
41
+ .mul(4)
42
+ .sub(1),
43
+ 0,
44
+ 1
45
+ )
46
+
32
47
  export const createGL = (props?: Partial<GL>) => {
33
48
  const gl = event<Partial<GL>>({
34
49
  isNative: false,
@@ -45,14 +60,14 @@ export const createGL = (props?: Partial<GL>) => {
45
60
  gl.queue = createQueue()
46
61
  gl.frame = createFrame()
47
62
 
48
- gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)))
49
- gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)))
50
- gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)))
63
+ gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)), gl)
64
+ gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)), gl)
65
+ gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)), gl)
51
66
  gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })
52
67
 
53
68
  gl('mount', async () => {
54
- gl.vs = gl.vs || gl.vert || gl.vertex
55
- gl.fs = gl.fs || gl.frag || gl.fragment
69
+ gl.vs = gl.vs || gl.vert || gl.vertex || defaultVertex()
70
+ gl.fs = gl.fs || gl.frag || gl.fragment || defaultFragment()
56
71
  if (!isWebGPUSupported()) gl.isWebGL = true
57
72
  if (gl.isWebGL) {
58
73
  gl((await webgl(gl)) as GL)