glre 0.27.0 → 0.29.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/native.ts","../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/node/const.ts","../src/node/utils.ts","../src/node/code.ts","../src/node/scope.ts","../src/node/node.ts","../src/node/index.ts","../src/utils/program.ts","../src/webgpu.ts","../src/utils/pipeline.ts"],"sourcesContent":["import { useState } from 'react' // @ts-ignore\n// import { Dimensions } from 'react-native'\nimport { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const useGL = (props: Partial<GL> = {}) => {\n return useState(() => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (ctx: any) => {\n gl.el = {} as any\n gl({\n render() {\n ctx.flush()\n ctx.endFrameEXP()\n },\n })\n gl.mount()\n const resize = () => {\n gl.width = ctx.drawingBufferWidth\n gl.height = ctx.drawingBufferHeight\n gl.resize()\n }\n resize()\n // Dimensions.addEventListener('change', resize)\n }\n return gl({ isNative: true })\n })[0]\n}\n","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 './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\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)!\n const state = { context: c, program: pg } as WebGLState\n c.useProgram(pg)\n\n let _activeUnit = 0\n const uniforms = cached((key) => c.getUniformLocation(pg, key))\n const attribs = cached((key) => c.getAttribLocation(pg, key))\n const units = cached(() => _activeUnit++)\n\n const clean = () => c.deleteProgram(pg)\n\n const render = () => {\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size!)\n c.drawArrays(c.TRIANGLES, 0, 3)\n }\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribs(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(gl.count!, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n const loc = uniforms(key)\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n }\n\n const _texture = (key: string, src: string) => {\n const image = new Image()\n Object.assign(image, { src, crossOrigin: 'anonymous' })\n image.decode().then(() => {\n const loc = uniforms(key)\n const unit = units(key)\n createTexture(c, image, loc, unit)\n })\n }\n\n return { 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 NODE_TYPES = [\n 'float',\n 'int',\n 'uint',\n 'bool',\n 'color',\n 'vec2',\n 'vec3',\n 'vec4',\n 'mat2',\n 'mat3',\n 'mat4',\n 'ivec2',\n 'ivec3',\n 'ivec4',\n 'uvec2',\n 'uvec3',\n 'uvec4',\n 'bvec2',\n 'bvec3',\n 'bvec4',\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 FUNCTIONS = [\n 'abs',\n 'acos',\n 'asin',\n 'atan',\n 'atan2',\n 'ceil',\n 'clamp',\n 'cos',\n 'cross',\n 'degrees',\n 'distance',\n 'dot',\n 'exp',\n 'exp2',\n 'faceforward',\n 'floor',\n 'fract',\n 'length',\n 'all',\n 'any',\n 'bitcast',\n 'cbrt',\n 'dFdx',\n 'dFdy',\n 'difference',\n 'equals',\n 'fwidth',\n 'inverseSqrt',\n 'lengthSq',\n 'log',\n 'log2',\n 'max',\n 'min',\n 'mix',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'pow',\n 'pow2',\n 'pow3',\n 'pow4',\n 'radians',\n 'reciprocal',\n 'reflect',\n 'refract',\n 'round',\n 'saturate',\n 'sign',\n 'sin',\n 'smoothstep',\n 'sqrt',\n 'step',\n 'tan',\n 'transformDirection',\n 'trunc',\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","import { is } from '../utils/helpers'\nimport { code } from './code'\nimport { FUNCTIONS, NODE_TYPES, OPERATOR_KEYS } from './const'\nimport type { Functions, NodeConfig, NodeType, 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 isNodeType = (key: unknown): key is NodeType => {\n return NODE_TYPES.includes(key as NodeType)\n}\n\nexport const isFunction = (key: unknown): key is Functions => {\n return FUNCTIONS.includes(key as Functions)\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 inferType = (target: X, c: NodeConfig): string => {\n if (!target || typeof target !== 'object') return 'float'\n const { type, props } = target\n const { children = [] } = props\n const [x, y, z] = children\n if (type === 'node_type') return x as string\n if (type === 'operator') {\n const left = inferType(y, c)\n const right = inferType(z, c)\n if (left === right) return left\n if (left.includes('vec')) return left\n if (right.includes('vec')) return right\n return 'float'\n }\n if (type === 'math_fun') {\n if (['normalize', 'cross', 'reflect'].includes(x as string)) return inferType(children[1], c)\n if (['dot', 'distance', 'length'].includes(x as string)) return 'float'\n return 'float'\n }\n return 'float'\n}\n\nconst generateUniforms = (c: NodeConfig): string => {\n if (!c.uniforms || c.uniforms.size === 0) return ''\n const uniformList = Array.from(c.uniforms)\n return (\n uniformList\n .map((name, i) => {\n if (c.isWebGL) return `uniform vec2 ${name};`\n else return `@group(0) @binding(${i}) var<uniform> ${name}: vec2f;`\n })\n .join('\\n') + '\\n'\n )\n}\n\nconst generateFragmentMain = (body: string, uniforms: string, isWebGL = true) => {\n if (isWebGL)\n return `\n${uniforms}\n#version 300 es\nprecision mediump float;\nuniform vec2 iResolution;\nuniform vec2 iMouse;\nuniform float iTime;\nout vec4 fragColor;\nvoid main() {\n${body}\n}`.trim()\n return `\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n@group(0) @binding(1) var<uniform> iMouse: vec2f;\n@group(0) @binding(2) var<uniform> iTime: f32;\n${uniforms}\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n${body}\n}`.trim()\n}\n\nexport const fragment = (x: X, c: NodeConfig) => {\n const body = code(x, c)\n const uniforms = generateUniforms(c)\n return generateFragmentMain(body, uniforms, c.isWebGL)\n}\n\nexport const vertex = (x: X, c: NodeConfig) => {\n const body = code(x, c)\n const uniforms = generateUniforms(c)\n return generateFragmentMain(body, uniforms, c.isWebGL)\n}\n","import { is } from '../utils/helpers'\nimport { OPERATORS, TYPE_MAPPING } from './const'\nimport { inferType, 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.uniforms) c.uniforms = new Set()\n if (is.num(target)) return target.toFixed(1)\n if (is.str(target)) return target\n if (!target) return '' // ignore if no target\n\n const { type, props } = target\n const { id = '', children = [] } = props\n const [x, y, z] = children\n\n if (type === 'uniform') {\n c.uniforms.add(id)\n c.onUniform?.(id, props.defaultValue)\n return id\n }\n\n if (type === 'variable') return id\n\n if (type === 'swizzle') return `${code(y, c)}.${code(x, c)}`\n\n if (type === 'node_type') {\n if (!is.str(x)) return id\n const func = !c.isWebGL && x.startsWith('vec') ? `${x}f` : x\n const args = joins(children.slice(1), c)\n return `${func}(${args})`\n }\n\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, c)}`\n const op = OPERATORS[x as keyof typeof OPERATORS]\n return `(${code(y, c)} ${op} ${code(z, c)})`\n }\n\n if (type === 'math_fun') return `${x}(${joins(children.slice(1), c)})`\n\n if (type === 'assign') return `${code(x, c)} = ${code(y, c)};`\n\n if (type === 'scope') return children.map((child) => code(child, c)).join('\\n')\n\n if (type === 'loop') return `for (int i = 0; i < ${x}; i++) {\\n${code(y, c)}\\n}`\n\n if (type === 'fn') {\n let ret = code(x, c)\n if (y) ret += `\\nreturn ${code(y, c)};`\n return ret\n }\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 isLast = i >= children.length - 1\n ret += !isLast\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\n if (type === 'declare') {\n const varType = inferType(y, c) // vec2\n const varName = (x as any)?.props?.id\n if (c.isWebGL) return `${varType} ${varName} = ${code(y, c)};`\n const wgslType = TYPE_MAPPING[varType as keyof typeof TYPE_MAPPING]\n return `var ${varName}: ${wgslType} = ${code(y, c)};`\n }\n\n return code(x, c)\n}\n","import { node } from './node'\nimport { getId } from './utils'\nimport type { NodeProxy, X } from './types'\n\nlet _scope: NodeProxy | null = null\n\nconst scoped = (x: NodeProxy | null, callback = () => {}) => {\n const prev = _scope\n _scope = x\n callback()\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 If = (x: X, callback: () => void) => {\n const y = node('scope')\n scoped(y, callback)\n const ifNode = node('if', null, x, y)\n addToScope(ifNode)\n return {\n ElseIf: (y: X, elseCallback: () => void) => {\n const z = node('scope')\n scoped(z, elseCallback)\n ifNode.props.children!.push(y, z)\n },\n Else: (elseCallback: () => void) => {\n const z = node('scope')\n scoped(z, elseCallback)\n ifNode.props.children!.push(z)\n },\n }\n}\n\nexport const Loop = (x: X, callback?: (params: { i: NodeProxy }) => void) => {\n const y = node('scope')\n scoped(y, () => callback?.({ i: node('variable', { id: 'i' }) }))\n const ret = node('loop', null, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Fn = (callback: (args: X[]) => NodeProxy) => {\n return (...args: X[]) => {\n let result\n const fnScope = node('scope')\n scoped(fnScope, () => (result = callback(args)))\n return node('fn', null, fnScope, result)\n }\n}\n\nexport const toVar = (x: X) => (id: string) => {\n if (!id) id = getId()\n const y = node('variable', { id })\n const z = node('declare', null, y, x)\n addToScope(z)\n return y\n}\n\nexport const assign = (x: X) => (y: X) => {\n const assignNode = node('assign', null, x, y)\n addToScope(assignNode)\n return x\n}\n","import { code } from './code'\nimport { assign, toVar } from './scope'\nimport { getId, isFunction, isOperator, isSwizzle } from './utils'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, Swizzles, X } from './types'\n\nconst toPrimitive = (x: X) => {\n return (hint: string) => {\n if (hint === 'string') return code(x)\n }\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 x = new Proxy(() => {}, {\n get(_, key) {\n if (key === 'type') return type\n if (key === 'props') return props\n if (key === 'toVar') return toVar(x)\n if (key === 'assign') return assign(x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive(x)\n if (isSwizzle(key)) return s(key, x)\n if (isOperator(key)) return (...y: X[]) => o(key, x, ...y)\n if (isFunction(key)) return (...y: X[]) => f(key, x, ...y)\n return toVar(x)('')\n },\n set(_, key, value) {\n if (isSwizzle(key)) {\n s(key, x).assign(value)\n return true\n }\n return false\n },\n }) as unknown as NodeProxy\n return x\n}\n\n// Node shorthands\nexport const v = (...args: X[]) => node('variable', { id: getId() }, ...args)\nexport const u = (key: string, defaultValue?: number | number[]) => node('uniform', { defaultValue }, key)\nexport const s = (key: Swizzles, arg: X) => node('swizzle', null, key, arg)\nexport const n = (key: string, ...args: X[]) => node('node_type', null, key, ...args)\nexport const o = (key: Operators, ...args: X[]) => node('operator', null, key, ...args)\nexport const f = (key: Functions, ...args: X[]) => node('math_fun', null, key, ...args)\n","import { f, n, node, u } from './node'\nimport type { X } from './types'\nexport * from './code'\nexport * from './const'\nexport * from './node'\nexport * from './scope'\nexport * from './types'\nexport * from './utils'\n\n// Default uniforms\nexport const iResolution = u('iResolution', [1280, 800])\nexport const iMouse = u('iMouse', [0, 0])\nexport const iTime = u('iTime', 0)\nexport const fragCoord = node('variable', { id: 'fragCoord' })\n\n// Type constructors\nexport const float = (x: X) => n('float', x)\nexport const int = (x: X) => n('int', x)\nexport const uint = (x: X) => n('uint', x)\nexport const bool = (x: X) => n('bool', x)\nexport const vec2 = (x?: X, y?: X) => n('vec2', x, y)\nexport const vec3 = (x?: X, y?: X, z?: X) => n('vec3', x, y, z)\nexport const vec4 = (x?: X, y?: X, z?: X, w?: X) => n('vec4', x, y, z, w)\nexport const mat2 = (...args: X[]) => n('mat2', ...args)\nexport const mat3 = (...args: X[]) => n('mat3', ...args)\nexport const mat4 = (...args: X[]) => n('mat4', ...args)\nexport const ivec2 = (x?: X, y?: X) => n('ivec2', x, y)\nexport const ivec3 = (x?: X, y?: X, z?: X) => n('ivec3', x, y, z)\nexport const ivec4 = (x?: X, y?: X, z?: X, w?: X) => n('ivec4', x, y, z, w)\nexport const uvec2 = (x?: X, y?: X) => n('uvec2', x, y)\nexport const uvec3 = (x?: X, y?: X, z?: X) => n('uvec3', x, y, z)\nexport const uvec4 = (x?: X, y?: X, z?: X, w?: X) => n('uvec4', x, y, z, w)\nexport const bvec2 = (x?: X, y?: X) => n('bvec2', x, y)\nexport const bvec3 = (x?: X, y?: X, z?: X) => n('bvec3', x, y, z)\nexport const bvec4 = (x?: X, y?: X, z?: X, w?: X) => n('bvec4', x, y, z, w)\n\n// Math Functions\nexport const abs = (x: X) => f('abs', x) // Return the absolute value of the parameter.\nexport const acos = (x: X) => f('acos', x) // Return the arccosine of the parameter.\nexport const all = (x: X) => f('all', x) // Return true if all components of x are true.\nexport const any = (x: X) => f('any', x) // Return true if any component of x is true.\nexport const asin = (x: X) => f('asin', x) // Return the arcsine of the parameter.\nexport const atan = (y: X, x: X) => f('atan', y, x) // Return the arc-tangent of the parameters.\nexport const bitcast = (x: X, y: X) => f('bitcast', x, y) // Reinterpret the bits of a value as a different type.\nexport const cbrt = (x: X) => f('cbrt', x) // Return the cube root of the parameter.\nexport const ceil = (x: X) => f('ceil', x) // Find the nearest integer that is greater than or equal to the parameter.\nexport const clamp = (x: X, min: X, max: X) => f('clamp', x, min, max) // Constrain a value to lie between two further values.\nexport const cos = (x: X) => f('cos', x) // Return the cosine of the parameter.\nexport const cross = (x: X, y: X) => f('cross', x, y) // Calculate the cross product of two vectors.\nexport const dFdx = (p: X) => f('dFdx', p) // Return the partial derivative of an argument with respect to x.\nexport const dFdy = (p: X) => f('dFdy', p) // Return the partial derivative of an argument with respect to y.\nexport const degrees = (radians: X) => f('degrees', radians) // Convert a quantity in radians to degrees.\nexport const difference = (x: X, y: X) => f('difference', x, y) // Calculate the absolute difference between two values.\nexport const distance = (x: X, y: X) => f('distance', x, y) // Calculate the distance between two points.\nexport const dot = (x: X, y: X) => f('dot', x, y) // Calculate the dot product of two vectors.\nexport const equals = (x: X, y: X) => f('equals', x, y) // Return true if x equals y.\nexport const exp = (x: X) => f('exp', x) // Return the natural exponentiation of the parameter.\nexport const exp2 = (x: X) => f('exp2', x) // Return 2 raised to the power of the parameter.\nexport const faceforward = (N: X, I: X, Nref: X) => f('faceforward', N, I, Nref) // Return a vector pointing in the same direction as another.\nexport const floor = (x: X) => f('floor', x) // Find the nearest integer less than or equal to the parameter.\nexport const fract = (x: X) => f('fract', x) // Compute the fractional part of the argument.\nexport const fwidth = (x: X) => f('fwidth', x) // Return the sum of the absolute derivatives in x and y.\nexport const inverseSqrt = (x: X) => f('inverseSqrt', x) // Return the inverse of the square root of the parameter.\nexport const length = (x: X) => f('length', x) // Calculate the length of a vector.\nexport const lengthSq = (x: X) => f('lengthSq', x) // Calculate the squared length of a vector.\nexport const log = (x: X) => f('log', x) // Return the natural logarithm of the parameter.\nexport const log2 = (x: X) => f('log2', x) // Return the base 2 logarithm of the parameter.\nexport const max = (x: X, y: X) => f('max', x, y) // Return the greater of two values.\nexport const min = (x: X, y: X) => f('min', x, y) // Return the lesser of two values.\nexport const mix = (x: X, y: X, a: X) => f('mix', x, y, a) // Linearly interpolate between two values.\nexport const negate = (x: X) => f('negate', x) // Negate the value of the parameter ( -x ).\nexport const normalize = (x: X) => f('normalize', x) // Calculate the unit vector in the same direction as the original vector.\nexport const oneMinus = (x: X) => f('oneMinus', x) // Return 1 minus the parameter.\nexport const pow = (x: X, y: X) => f('pow', x, y) // Return the value of the first parameter raised to the power of the second.\nexport const pow2 = (x: X) => f('pow2', x) // Return the square of the parameter.\nexport const pow3 = (x: X) => f('pow3', x) // Return the cube of the parameter.\nexport const pow4 = (x: X) => f('pow4', x) // Return the fourth power of the parameter.\nexport const radians = (degrees: X) => f('radians', degrees) // Convert a quantity in degrees to radians.\nexport const reciprocal = (x: X) => f('reciprocal', x) // Return the reciprocal of the parameter (1/x).\nexport const reflect = (I: X, N: X) => f('reflect', I, N) // Calculate the reflection direction for an incident vector.\nexport const refract = (I: X, N: X, eta: X) => f('refract', I, N, eta) // Calculate the refraction direction for an incident vector.\nexport const round = (x: X) => f('round', x) // Round the parameter to the nearest integer.\nexport const saturate = (x: X) => f('saturate', x) // Constrain a value between 0 and 1.\nexport const sign = (x: X) => f('sign', x) // Extract the sign of the parameter.\nexport const sin = (x: X) => f('sin', x) // Return the sine of the parameter.\nexport const smoothstep = (e0: X, e1: X, x: X) => f('smoothstep', e0, e1, x) // Perform Hermite interpolation between two values.\nexport const sqrt = (x: X) => f('sqrt', x) // Return the square root of the parameter.\nexport const step = (edge: X, x: X) => f('step', edge, x) // Generate a step function by comparing two values.\nexport const tan = (x: X) => f('tan', x) // Return the tangent of the parameter.\nexport const transformDirection = (dir: X, matrix: X) => f('transformDirection', dir, matrix) // Transform the direction of a vector by a matrix and then normalize the result.\nexport const trunc = (x: X) => f('trunc', x) // Truncate the parameter, removing the fractional part.\n","import { fragment, vertex, X } from '../node'\nimport { is } from './helpers'\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 | X = defaultVertexGLSL,\n fs: string | X = defaultFragmentGLSL\n) => {\n if (!is.str(fs)) fs = fragment(fs, { isWebGL: true })\n if (!is.str(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\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 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, vertex, X } from '../node'\nimport { is } from './helpers'\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 | X = defaultVertexWGSL,\n fs: string | X = defaultFragmentWGSL\n) => {\n if (!is.str(fs)) fs = fragment(fs, { isWebGL: false })\n if (!is.str(vs)) vs = vertex(vs, { 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"],"mappings":"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M,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,GC1CR,IAAME,GAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAEtEC,EAAa,CAClB,QACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACR,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,EAAY,CACjB,MACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,QACA,UACA,WACA,MACA,MACA,OACA,cACA,QACA,QACA,SACA,MACA,MACA,UACA,OACA,OACA,OACA,aACA,SACA,SACA,cACA,WACA,MACA,OACA,MACA,MACA,MACA,SACA,YACA,WACA,MACA,OACA,OACA,OACA,UACA,aACA,UACA,UACA,QACA,WACA,OACA,MACA,aACA,OACA,OACA,MACA,qBACA,OACR,EAEaC,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,ECzHO,IAAMC,EAAaC,GACXC,EAAG,IAAID,CAAG,GAAK,wBAAwB,K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","names":["native_exports","__export","FUNCTIONS","Fn","If","Loop","NODE_TYPES","OPERATORS","OPERATOR_KEYS","SWIZZLES","TYPE_MAPPING","abs","acos","alignTo256","all","any","asin","assign","atan","bitcast","bool","bvec2","bvec3","bvec4","cbrt","ceil","clamp","code","cos","createAttrib","createBindGroup","createBufferLayout","createDescriptor","createDevice","createGL","createIbo","createPipeline","createProgram","createTexture","createTextureSampler","createUniformBuffer","createVbo","createVertexBuffer","cross","dFdx","dFdy","defaultFragmentGLSL","defaultVertexGLSL","degrees","difference","dig","distance","dot","each","equals","exp","exp2","ext","f","faceforward","fig","float","floor","flush","fract","fragCoord","fragment","fwidth","getId","getStride","iMouse","iResolution","iTime","inferType","int","inverseSqrt","is","isFunction","isGL","isNodeType","isOperator","isServer","isSwizzle","isWebGPUSupported","ivec2","ivec3","ivec4","joins","length","lengthSq","log","log2","mat2","mat3","mat4","max","min","mix","n","negate","node","normalize","o","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","replace","round","s","saturate","sig","sign","sin","smoothstep","sqrt","step","tan","toVar","transformDirection","trunc","u","uint","useGL","uvec2","uvec3","uvec4","v","vec2","vec3","vec4","vertex","webgl","webgpu","__toCommonJS","import_react","import_reev","import_refr","import_reev","is","a","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","SWIZZLES","NODE_TYPES","OPERATORS","OPERATOR_KEYS","FUNCTIONS","TYPE_MAPPING","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isNodeType","NODE_TYPES","isFunction","FUNCTIONS","count","getId","joins","children","c","x","code","inferType","target","type","props","y","z","left","right","generateUniforms","name","i","generateFragmentMain","body","uniforms","isWebGL","fragment","vertex","code","target","c","is","type","props","id","children","x","y","z","func","args","joins","op","OPERATORS","child","ret","i","isLast","varType","inferType","varName","wgslType","TYPE_MAPPING","_scope","scoped","x","callback","prev","addToScope","If","y","node","ifNode","elseCallback","z","Loop","ret","Fn","args","result","fnScope","toVar","id","getId","assign","assignNode","toPrimitive","x","hint","code","node","type","props","args","_","key","toVar","assign","isSwizzle","s","isOperator","y","o","isFunction","f","value","v","getId","u","defaultValue","arg","n","iResolution","u","iMouse","iTime","fragCoord","node","float","x","n","int","uint","bool","vec2","y","vec3","z","vec4","w","mat2","args","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4","abs","f","acos","all","any","asin","atan","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","defaultVertexGLSL","defaultFragmentGLSL","createShader","c","source","type","shader","error","createProgram","vs","fs","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","state","_activeUnit","uniforms","cached","key","attribs","units","value","iboValue","loc","vbo","createVbo","ibo","createIbo","str","getStride","createAttrib","is","l","src","image","unit","createTexture","import_reev","defaultVertexWGSL","defaultFragmentWGSL","createDevice","c","gpu","format","device","createPipeline","bufferLayouts","bindGroupLayouts","vs","fs","is","fragment","vertex","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","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","useGL","props","gl","isGL","createGL","ctx"]}
1
+ {"version":3,"sources":["../src/native.ts","../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"],"sourcesContent":["import { useState } from 'react' // @ts-ignore\n// import { Dimensions } from 'react-native'\nimport { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const useGL = (props: Partial<GL> = {}) => {\n return useState(() => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (ctx: any) => {\n gl.el = {} as any\n gl({\n render() {\n ctx.flush()\n ctx.endFrameEXP()\n },\n })\n gl.mount()\n const resize = () => {\n gl.width = ctx.drawingBufferWidth\n gl.height = ctx.drawingBufferHeight\n gl.resize()\n }\n resize()\n // Dimensions.addEventListener('change', resize)\n }\n return gl({ isNative: true })\n })[0]\n}\n","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 './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\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 'bvec3',\n 'bvec4',\n 'ivec2',\n 'ivec3',\n 'ivec4',\n 'uvec2',\n 'uvec3',\n 'uvec4',\n 'vec2',\n 'vec3',\n 'vec4',\n 'color',\n 'mat2',\n 'mat3',\n 'mat4',\n] as const\n\nexport const CONVERSIONS = [\n 'toFloat',\n 'toInt',\n 'toUint',\n 'toBool',\n 'toVec2',\n 'toVec3',\n 'toVec4',\n 'toIvec2',\n 'toIvec3',\n 'toIvec4',\n 'toUvec2',\n 'toUvec3',\n 'toUvec4',\n 'toBvec2',\n 'toBvec3',\n 'toBvec4',\n 'toMat2',\n 'toMat3',\n 'toMat4',\n 'toColor',\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} as const\n","import { NodeProps } from './../../../../node_modules/glre/src/node/types'\nimport { is } from '../utils/helpers'\nimport { code } from './code'\nimport { CONVERSIONS, FUNCTIONS, OPERATOR_KEYS, OPERATORS, TYPE_MAPPING } from './const'\nimport type { Conversions, Functions, NodeConfig, NodeProxy, Operators, Swizzles, X } from './types'\nimport { infer } from './infer'\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\nlet count = 0\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\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\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 = [] } = props\n const [x, y, ...args] = children\n const returnType = y ? infer(y, c) : 'void'\n const params = args.map((arg, i) => [`p${i}`, infer(arg, c)])\n const lines = [code(x, c)]\n if (y) lines.push(`return ${code(y, c)};`)\n if (c?.isWebGL) {\n const paramList = params.map(([name, type]) => `${type} ${name}`)\n return `${returnType} ${id}(${paramList}) {\\n${lines.join('\\n')}\\n}`\n }\n const wgslReturnType = formatConversions(returnType, c)\n const wgslParams = params.map(([name, type]) => `${name}: ${formatConversions(type, c)}`)\n return `fn ${id}(${wgslParams}) -> ${wgslReturnType} {\\n${lines.join('\\n')}\\n}`\n}\n\nconst generateFragmentMain = (body: string, head: string, isWebGL = true) => {\n if (isWebGL)\n return `\n#version 300 es\nprecision mediump float;\nout vec4 fragColor;\n${head}\nvoid main() {\nfragColor = ${body};\n}`.trim()\n return `\n${head}\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\nreturn ${body};\n}`.trim()\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 generateFragmentMain(body, head, c.isWebGL)\n}\n","import { is } from '../utils/helpers'\nimport { isNodeProxy } from './utils'\nimport {\n CONSTANTS,\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 COMPARISON_OPERATORS,\n LOGICAL_OPERATORS,\n COMPONENT_COUNT_TO_TYPE,\n BUILTIN_TYPES,\n} from './const'\nimport type { Constants, NodeConfig, NodeProxy, X } from './types'\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 inferBinaryOpType = (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 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 inferSwizzleType = (count: number): Constants => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE]!\n}\n\nconst inferBuiltinType = (id: string | undefined): Constants => {\n return BUILTIN_TYPES[id as keyof typeof BUILTIN_TYPES]!\n}\n\nconst inferMathType = (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\nexport const inferImpl = (target: NodeProxy, c: NodeConfig): Constants => {\n const { type, props } = target\n const { id, children = [], value } = props\n const [x, y, z] = children\n if (\n type === 'uniform' ||\n type === 'variable' ||\n type === 'constant' ||\n type === 'attribute' ||\n type === 'varying'\n )\n return inferPrimitiveType(value)\n if (type === 'conversion') return x as Constants\n if (type === 'operator') return inferBinaryOpType(infer(y, c), infer(z, c), x as string)\n if (type === 'function') return inferMathType(x as string, children.slice(1), c)\n if (type === 'swizzle') return inferSwizzleType((x as string).length)\n if (type === 'ternary') return inferBinaryOpType(infer(y, c), infer(z, c), 'add')\n if (type === 'define') return y ? infer(y, c) : 'void'\n if (type === 'builtin') return inferBuiltinType(id)\n return 'float'\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 { joins, getOperator, formatConversions, generateDefine } from './utils'\nimport { WGSL_TO_GLSL_BUILTIN } from './const'\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)) return target.toFixed(1)\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 let head = ''\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 === 'attribute') {\n if (c.headers.has(id)) return id\n head = `${infer(target, c)} ${id}`\n }\n if (type === 'constant') {\n if (c.headers.has(id)) return id\n head = `${infer(target, c)} ${id}`\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, props.value)\n return id\n }\n if (type === 'variable') return id\n if (type === 'swizzle') return `${code(y, c)}.${code(x, 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 // Handle special functions that need to be converted to operators\n if (x === 'negate') return `(-${joins(children.slice(1), c)})`\n return `${x}(${joins(children.slice(1), c)})`\n }\n if (type === 'conversion') return `${formatConversions(x, c)}(${joins(children.slice(1), c)})`\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 === '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 === 'loop') return `for (int i = 0; i < ${x}; i++) {\\n${code(y, c)}\\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 === 'ternary') return `(${code(x, c)} ? ${code(y, c)} : ${code(z, c)})`\n if (type === 'declare') {\n const varType = infer(y, c)\n const varName = (x as any)?.props?.id\n if (c.isWebGL) return `${varType} ${varName} = ${code(y, c)};`\n const wgslType = formatConversions(varType)\n return `var ${varName}: ${wgslType} = ${code(y, c)};`\n }\n if (type === 'builtin') {\n if (c?.isWebGL) {\n const glslBuiltin = WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n if (glslBuiltin) return glslBuiltin\n if (id === 'uv') return 'gl_FragCoord.xy'\n }\n return id\n }\n return code(x, c)\n}\n","import { node } from './node'\nimport { getId } from './utils'\nimport type { 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 })\n const z = node('declare', null, y, x)\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 = (condition: X, fun: () => void) => {\n const scope = node('scope')\n scoped(scope, fun)\n const ifNode = node('if', null, condition, scope)\n addToScope(ifNode)\n const createChain = () => ({\n ElseIf: (x: X, _fun: () => void) => {\n const y = node('scope')\n scoped(y, _fun)\n ifNode.props.children!.push(x, y)\n return createChain()\n },\n Else: (_fun: () => void) => {\n const x = node('scope')\n scoped(x, _fun)\n ifNode.props.children!.push(x)\n },\n })\n return createChain()\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' }) }))\n const ret = node('loop', null, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Switch = (value: X) => {\n const switchNode = node('switch', null, value)\n addToScope(switchNode)\n const createChain = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const scope = node('scope')\n scoped(scope, fun)\n // 複数のcase値を処理\n for (const val of values) {\n switchNode.props.children!.push(val, scope)\n }\n return createChain()\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 createChain()\n}\n\nexport const Fn = (fun: (paramVars: NodeProxy[]) => NodeProxy) => {\n const id = getId()\n return (...args: X[]) => {\n const x = node('scope')\n let y: NodeProxy | undefined\n const paramVars: NodeProxy[] = []\n for (let i = 0; i < args.length; i++) {\n const paramId = `p${i}`\n const paramVar = node('variable', { id: paramId })\n paramVars.push(paramVar)\n }\n scoped(x, () => (y = fun(paramVars)))\n return node('define', { id }, x, y, ...args)\n }\n}\n","import { code } from './code'\nimport { assign, toVar } from './scope'\nimport { getId, 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(key, x)\n }\n const set = (_: unknown, key: string, value: X) => {\n if (isSwizzle(key)) {\n swizzle(key, x).assign(value)\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// Node shorthands\nexport const variable = (...args: X[]) => node('variable', { id: getId() }, ...args)\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","import { conversion as c, function_ as f, node } 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// x ? y : z\nexport const select = (x: X, y: X, z: X) => node('ternary', null, x, y, z)\n\n// uniform and attribute\nexport const uniform = (value: number | number[], id?: string) => node('uniform', { id, value })\nexport const varying = (value: number | number[], id?: string) => node('varying', { id, value })\nexport const attribute = (value: number | number[], id?: string) => node('varying', { id, value })\nexport const variable = (id: string) => node('variable', { id })\nexport const builtin = (id: string) => node('builtin', { id })\n\n// Default uniforms\nexport const iResolution = uniform([1280, 800], 'iResolution')\nexport const iMouse = uniform([0, 0], 'iMouse')\nexport const iTime = uniform(0, 'iTime')\n\n// Builtin Variables\nexport const position = node('builtin', { id: 'position' })\nexport const vertexIndex = node('builtin', { id: 'vertex_index' })\nexport const instanceIndex = node('builtin', { id: 'instance_index' })\nexport const frontFacing = node('builtin', { id: 'front_facing' })\nexport const fragDepth = node('builtin', { id: 'frag_depth' })\nexport const sampleIndex = node('builtin', { id: 'sample_index' })\nexport const sampleMask = node('builtin', { id: 'sample_mask' })\nexport const pointCoord = node('builtin', { id: 'point_coord' })\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = node('builtin', { id: 'position' })\nexport const positionWorld = node('builtin', { id: 'positionWorld' })\nexport const positionView = node('builtin', { id: 'positionView' })\nexport const normalLocal = node('builtin', { id: 'normalLocal' })\nexport const normalWorld = node('builtin', { id: 'normalWorld' })\nexport const normalView = node('builtin', { id: 'normalView' })\nexport const screenCoordinate = node('builtin', { id: 'screenCoordinate' })\nexport const screenUV = node('builtin', { id: 'screenUV' })\n\n// Legacy aliases for backward compatibility\nexport const fragCoord = position\nexport const vertexId = vertexIndex\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// 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"],"mappings":"AAAA,OAAS,YAAAA,OAAgB,QCAzB,OAAS,WAAAC,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,GC1CR,IAAME,GAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAEtEC,EAAY,CACjB,OACA,OACA,MACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,QACA,OACA,OACA,MACR,EAEaC,EAAc,CACnB,UACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACR,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,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,GAAY,CACjB,GAAGR,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,GAAGC,EACH,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,EA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","names":["useState","durable","event","createFrame","createQueue","cached","is","a","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","SWIZZLES","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","hex2rgb","hex","r","g","b","getId","joins","children","c","code","formatConversions","TYPE_MAPPING","getOperator","op","OPERATORS","generateHead","v","generateDefine","props","id","y","args","returnType","infer","params","arg","i","lines","paramList","name","type","wgslReturnType","wgslParams","generateFragmentMain","body","head","isWebGL","fragment","main","vertex","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferBinaryOpType","leftType","rightType","op","COMPARISON_OPERATORS","LOGICAL_OPERATORS","leftPriority","CONSTANTS","rightPriority","getHighestPriorityType","args","c","highest","current","currentType","infer","highestPriority","inferSwizzleType","count","inferBuiltinType","id","BUILTIN_TYPES","inferMathType","funcName","firstArgType","FIRST_ARG_TYPE_FUNCTIONS","SCALAR_RETURN_FUNCTIONS","BOOL_RETURN_FUNCTIONS","PRESERVE_TYPE_FUNCTIONS","VEC3_RETURN_FUNCTIONS","VEC4_RETURN_FUNCTIONS","HIGHEST_TYPE_FUNCTIONS","inferImpl","target","type","props","children","value","y","z","isNodeProxy","ret","code","target","c","is","type","props","id","children","x","y","z","head","varType","infer","formatConversions","getOperator","joins","child","args","ret","arg","generateDefine","i","isElseIf","varName","wgslType","glslBuiltin","WGSL_TO_GLSL_BUILTIN","_scope","scoped","x","fun","prev","addToScope","toVar","id","getId","y","node","z","assign","If","condition","scope","ifNode","createChain","_fun","Loop","ret","Switch","value","switchNode","values","val","Fn","args","paramVars","i","paramId","paramVar","toPrimitive","x","hint","code","node","type","props","args","get","_","key","toVar","assign","isSwizzle","swizzle","isOperator","y","operator","isFunction","function_","isConversion","conversion","set","value","swizzle","key","arg","node","operator","args","function_","conversion","select","x","y","z","node","uniform","value","id","varying","attribute","variable","builtin","iResolution","iMouse","iTime","position","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","positionLocal","positionWorld","positionView","normalLocal","normalWorld","normalView","screenCoordinate","screenUV","fragCoord","vertexId","float","conversion","int","uint","bool","vec2","vec3","vec4","w","mat2","args","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4","color","r","g","b","is","hex2rgb","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","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","useGL","props","useState","gl","isGL","createGL","ctx"]}
package/dist/react.cjs ADDED
@@ -0,0 +1,70 @@
1
+ "use strict";var J=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var ot=Object.prototype.hasOwnProperty;var nt=(e,t)=>{for(var r in t)J(e,r,{get:t[r],enumerable:!0})},st=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of rt(t))!ot.call(e,o)&&o!==r&&J(e,o,{get:()=>t[o],enumerable:!(n=tt(t,o))||n.enumerable});return e};var it=e=>st(J({},"__esModule",{value:!0}),e);var ho={};nt(ho,{ADDITIONAL_FUNCTIONS:()=>$e,BOOL_RETURN_FUNCTIONS:()=>M,BUILTIN_TYPES:()=>ne,COMPARISON_OPERATORS:()=>se,COMPONENT_COUNT_TO_TYPE:()=>k,CONSTANTS:()=>C,CONVERSIONS:()=>ee,FIRST_ARG_TYPE_FUNCTIONS:()=>z,FUNCTIONS:()=>re,Fn:()=>_t,HIGHEST_TYPE_FUNCTIONS:()=>W,If:()=>yt,LOGICAL_OPERATORS:()=>ie,Loop:()=>Xt,OPERATORS:()=>$,OPERATOR_KEYS:()=>te,PRESERVE_TYPE_FUNCTIONS:()=>V,SCALAR_RETURN_FUNCTIONS:()=>B,SWIZZLES:()=>mt,Switch:()=>Tt,TYPE_MAPPING:()=>oe,VEC3_RETURN_FUNCTIONS:()=>D,VEC4_RETURN_FUNCTIONS:()=>q,WGSL_TO_GLSL_BUILTIN:()=>ae,abs:()=>gr,acos:()=>br,alignTo256:()=>Ke,all:()=>vr,any:()=>yr,asin:()=>Xr,assign:()=>xe,atan:()=>Tr,atan2:()=>_r,attribute:()=>Nt,bitcast:()=>hr,bool:()=>Zt,builtin:()=>Rt,bvec2:()=>cr,bvec3:()=>pr,bvec4:()=>fr,cbrt:()=>Er,ceil:()=>Pr,clamp:()=>Nr,code:()=>p,color:()=>lr,conversion:()=>b,cos:()=>Sr,createAttrib:()=>_e,createBindGroup:()=>Se,createBufferLayout:()=>Oe,createDescriptor:()=>Re,createDevice:()=>Pe,createGL:()=>Fe,createIbo:()=>Xe,createPipeline:()=>Ne,createProgram:()=>ve,createTexture:()=>he,createTextureSampler:()=>Ce,createUniformBuffer:()=>Le,createVbo:()=>ye,createVertexBuffer:()=>we,cross:()=>Rr,cubeTexture:()=>dr,dFdx:()=>wr,dFdy:()=>Lr,defaultFragmentGLSL:()=>He,defaultVertexGLSL:()=>je,degrees:()=>Cr,difference:()=>Or,dig:()=>ft,distance:()=>Ir,dot:()=>Gr,each:()=>Ae,equals:()=>Ur,exp:()=>Fr,exp2:()=>Ar,ext:()=>ct,faceforward:()=>$r,fig:()=>pt,float:()=>jt,floor:()=>Br,flush:()=>at,formatConversions:()=>R,fract:()=>Mr,fragCoord:()=>kt,fragDepth:()=>Gt,fragment:()=>U,frontFacing:()=>It,function_:()=>i,fwidth:()=>Vr,generateDefine:()=>me,getId:()=>I,getOperator:()=>le,getStride:()=>Te,hex2rgb:()=>fe,iMouse:()=>Lt,iResolution:()=>wt,iTime:()=>Ct,infer:()=>_,inferImpl:()=>ze,instanceIndex:()=>Ot,int:()=>Ht,inverseSqrt:()=>Dr,is:()=>g,isConversion:()=>pe,isFunction:()=>ce,isGL:()=>Ue,isNodeProxy:()=>S,isOperator:()=>ue,isServer:()=>Ze,isSwizzle:()=>Y,isWebGPUSupported:()=>Qe,ivec2:()=>or,ivec3:()=>nr,ivec4:()=>sr,joins:()=>G,length:()=>zr,lengthSq:()=>Wr,log:()=>qr,log2:()=>kr,mat2:()=>er,mat3:()=>tr,mat4:()=>rr,max:()=>Yr,min:()=>jr,mix:()=>Hr,negate:()=>Kr,node:()=>c,normalLocal:()=>Vt,normalView:()=>zt,normalWorld:()=>Dt,normalize:()=>Zr,oneMinus:()=>Qr,operator:()=>We,pointCoord:()=>At,position:()=>qe,positionLocal:()=>$t,positionView:()=>Mt,positionWorld:()=>Bt,pow:()=>Jr,pow2:()=>eo,pow3:()=>to,pow4:()=>ro,radians:()=>oo,reciprocal:()=>no,reflect:()=>so,refract:()=>io,replace:()=>ut,round:()=>ao,sampleIndex:()=>Ut,sampleMask:()=>Ft,saturate:()=>uo,screenCoordinate:()=>Wt,screenUV:()=>qt,select:()=>Et,sig:()=>lt,sign:()=>co,sin:()=>po,smoothstep:()=>fo,sqrt:()=>lo,step:()=>mo,swizzle:()=>ge,tan:()=>xo,texture:()=>mr,textureSize:()=>xr,toVar:()=>de,transformDirection:()=>go,trunc:()=>bo,uint:()=>Kt,uniform:()=>j,useGL:()=>_o,uvec2:()=>ir,uvec3:()=>ar,uvec4:()=>ur,variable:()=>St,varying:()=>Pt,vec2:()=>Qt,vec3:()=>be,vec4:()=>Jt,vertex:()=>F,vertexId:()=>Yt,vertexIndex:()=>ke,webgl:()=>Ee,webgpu:()=>Ie});module.exports=it(ho);var Je=require("react");var O=require("reev"),Z=require("refr");var H=require("reev");var g={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)},Ae=(e,t)=>e.forEach(t),at=(e,...t)=>{Ae(e,r=>r(...t))},ut=(e="",t="_",r="/")=>e.split(t).join(r),ct=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",pt=(e=0)=>`${e}`.split(".")[1]?.length??0,ft=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),lt=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var mt=["x","y","z","w","r","g","b","a","s","t","p","q"],C=["bool","uint","int","float","bvec2","bvec3","bvec4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","vec2","vec3","vec4","color","mat2","mat3","mat4"],ee=["toFloat","toInt","toUint","toBool","toVec2","toVec3","toVec4","toIvec2","toIvec3","toIvec4","toUvec2","toUvec3","toUvec4","toBvec2","toBvec3","toBvec4","toMat2","toMat3","toMat4","toColor"],$={add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},te=Object.keys($),B=["dot","distance","length","lengthSq","determinant","luminance"],M=["all","any"],V=["abs","sign","floor","ceil","round","fract","trunc","sin","cos","tan","asin","acos","atan","exp","exp2","log","log2","sqrt","inverseSqrt","normalize","oneMinus","saturate","negate","reciprocal","dFdx","dFdy","fwidth"],D=["cross"],z=["reflect","refract"],W=["min","max","mix","clamp","step","smoothstep"],q=["texture","textureLod","textureSize","cubeTexture"],$e=["atan2","degrees","faceforward","bitcast","cbrt","difference","equals","pow","pow2","pow3","pow4","radians","transformDirection"],re=[...B,...M,...V,...D,...z,...W,...q,...$e],oe={float:"f32",int:"i32",uint:"u32",bool:"bool",vec2:"vec2f",vec3:"vec3f",vec4:"vec4f",mat2:"mat2x2f",mat3:"mat3x3f",mat4:"mat4x4f",ivec2:"vec2i",ivec3:"vec3i",ivec4:"vec4i",uvec2:"vec2u",uvec3:"vec3u",uvec4:"vec4u",bvec2:"vec2<bool>",bvec3:"vec3<bool>",bvec4:"vec4<bool>"},k={1:"float",2:"vec2",3:"vec3",4:"vec4",9:"mat3",16:"mat4"},ne={position:"vec4",vertex_index:"uint",instance_index:"uint",front_facing:"bool",frag_depth:"float",sample_index:"uint",sample_mask:"uint",point_coord:"vec2",positionLocal:"vec3",positionWorld:"vec3",positionView:"vec3",normalLocal:"vec3",normalWorld:"vec3",normalView:"vec3",screenCoordinate:"vec2",screenUV:"vec2",gl_FragCoord:"vec4",gl_VertexID:"uint",gl_InstanceID:"uint",gl_FrontFacing:"bool",gl_FragDepth:"float",gl_SampleID:"uint",gl_SampleMask:"uint",gl_PointCoord:"vec2",normal:"vec3",uv:"vec2",color:"vec4"},se=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],ie=["and","or"],ae={position:"gl_FragCoord",vertex_index:"gl_VertexID",instance_index:"gl_InstanceID",front_facing:"gl_FrontFacing",frag_depth:"gl_FragDepth",sample_index:"gl_SampleID",sample_mask:"gl_SampleMask",point_coord:"gl_PointCoord"};var Y=e=>g.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),ue=e=>te.includes(e),ce=e=>re.includes(e),pe=e=>ee.includes(e),S=e=>!e||typeof e!="object"?!1:e.isProxy,dt=0,fe=e=>{let t=(e>>16&255)/255,r=(e>>8&255)/255,n=(e&255)/255;return[t,r,n]},I=()=>`i${dt++}`,G=(e,t)=>e.filter(r=>!g.und(r)&&!g.nul(r)).map(r=>p(r,t)).join(", "),R=(e,t)=>g.str(e)?t?.isWebGL?e:oe[e]:"",le=e=>$[e]||e,Be=e=>Array.from(e.headers).map(([,t])=>t).join(`
2
+ `),me=(e,t)=>{let{id:r,children:n=[]}=e,[o,s,...u]=n,a=s?_(s,t):"void",m=u.map((h,T)=>[`p${T}`,_(h,t)]),y=[p(o,t)];if(s&&y.push(`return ${p(s,t)};`),t?.isWebGL){let h=m.map(([T,E])=>`${E} ${T}`);return`${a} ${r}(${h}) {
3
+ ${y.join(`
4
+ `)}
5
+ }`}let f=R(a,t),d=m.map(([h,T])=>`${h}: ${R(T,t)}`);return`fn ${r}(${d}) -> ${f} {
6
+ ${y.join(`
7
+ `)}
8
+ }`},Me=(e,t,r=!0)=>r?`
9
+ #version 300 es
10
+ precision mediump float;
11
+ out vec4 fragColor;
12
+ ${t}
13
+ void main() {
14
+ fragColor = ${e};
15
+ }`.trim():`
16
+ ${t}
17
+ @fragment
18
+ fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
19
+ return ${e};
20
+ }`.trim(),U=(e,t={})=>{let r=p(e,t),n=Be(t),o=Me(r,n,t.isWebGL);return console.log(`// \u2193\u2193\u2193 generated \u2193\u2193\u2193
21
+
22
+ ${o}
23
+
24
+ `),o},F=(e,t)=>{let r=p(e,t),n=Be(t);return Me(r,n,t.isWebGL)};var De=e=>g.bol(e)?"bool":g.num(e)?"float":g.arr(e)&&k[e.length]||"float",Ve=(e,t,r)=>{if(se.includes(r)||ie.includes(r))return"bool";if(e===t||e.includes("vec")&&!t.includes("vec"))return e;if(t.includes("vec")&&!e.includes("vec"))return t;let n=C.indexOf(e),o=C.indexOf(t);return n>=o?e:t},xt=(e,t)=>e.reduce((r,n)=>{let o=_(n,t),s=C.indexOf(r);return C.indexOf(o)>s?o:r},"float"),gt=e=>k[e],bt=e=>ne[e],vt=(e,t,r)=>{let n=t.length>0?_(t[0],r):"float";return z.includes(e)?n:B.includes(e)?"float":M.includes(e)?"bool":V.includes(e)?n:D.includes(e)?"vec3":q.includes(e)?"vec4":W.includes(e)?xt(t,r):n},ze=(e,t)=>{let{type:r,props:n}=e,{id:o,children:s=[],value:u}=n,[a,m,y]=s;return r==="uniform"||r==="variable"||r==="constant"||r==="attribute"||r==="varying"?De(u):r==="conversion"?a:r==="operator"?Ve(_(m,t),_(y,t),a):r==="function"?vt(a,s.slice(1),t):r==="swizzle"?gt(a.length):r==="ternary"?Ve(_(m,t),_(y,t),"add"):r==="define"?m?_(m,t):"void":r==="builtin"?bt(o):"float"},_=(e,t)=>{if(t||(t={}),!S(e))return De(e);if(t.infers||(t.infers=new WeakMap),t.infers.has(e))return t.infers.get(e);let r=ze(e,t);return t.infers.set(e,r),r};var p=(e,t)=>{if(t||(t={}),t.headers||(t.headers=new Map),g.str(e))return e;if(g.num(e))return e.toFixed(1);if(g.bol(e))return e?"true":"false";if(!e)return"";let{type:r,props:n}=e,{id:o="",children:s=[]}=n,[u,a,m]=s,y="";if(r==="uniform"){if(t.headers.has(o))return o;t.binding||(t.binding=0);let f=_(e,t);y=t.isWebGL?`uniform ${f} ${o};`:`@group(0) @binding(${t.binding++}) var<uniform> ${o}: ${R(f,t)};`}if(r==="attribute"){if(t.headers.has(o))return o;y=`${_(e,t)} ${o}`}if(r==="constant"){if(t.headers.has(o))return o;y=`${_(e,t)} ${o}`}if(r==="varying"){if(t.headers.has(o))return o;y=`${_(e,t)} ${o}`}if(y)return t.headers.set(o,y),t.onMount?.(o,n.value),o;if(r==="variable")return o;if(r==="swizzle")return`${p(a,t)}.${p(u,t)}`;if(r==="operator")return u==="not"||u==="bitNot"?`!${p(a,t)}`:`(${p(a,t)} ${le(u)} ${p(m,t)})`;if(r==="function")return u==="negate"?`(-${G(s.slice(1),t)})`:`${u}(${G(s.slice(1),t)})`;if(r==="conversion")return`${R(u,t)}(${G(s.slice(1),t)})`;if(r==="scope")return s.map(f=>p(f,t)).join(`
25
+ `);if(r==="assign")return`${p(u,t)} = ${p(a,t)};`;if(r==="define"){let f=s.slice(2),d=`${o}(${f.map(h=>p(h,t))})`;return t.headers.has(o)||t.headers.set(o,me(n,t)),d}if(r==="loop")return`for (int i = 0; i < ${u}; i++) {
26
+ ${p(a,t)}
27
+ }`;if(r==="if"){let f=`if (${p(u,t)}) {
28
+ ${p(a,t)}
29
+ }`;for(let d=2;d<s.length;d+=2){let h=d>=s.length-1;f+=h?` else {
30
+ ${p(s[d],t)}
31
+ }`:` else if (${p(s[d],t)}) {
32
+ ${p(s[d+1],t)}
33
+ }`}return f}if(r==="switch"){let f=`switch (${p(u,t)}) {
34
+ `;for(let d=1;d<s.length;d+=2)d>=s.length-1&&s.length%2===0?f+=`default:
35
+ ${p(s[d],t)}
36
+ break;
37
+ `:d+1<s.length&&(f+=`case ${p(s[d],t)}:
38
+ ${p(s[d+1],t)}
39
+ break;
40
+ `);return f+="}",f}if(r==="ternary")return`(${p(u,t)} ? ${p(a,t)} : ${p(m,t)})`;if(r==="declare"){let f=_(a,t),d=u?.props?.id;if(t.isWebGL)return`${f} ${d} = ${p(a,t)};`;let h=R(f);return`var ${d}: ${h} = ${p(a,t)};`}if(r==="builtin"){if(t?.isWebGL){let f=ae[o];if(f)return f;if(o==="uv")return"gl_FragCoord.xy"}return o}return p(u,t)};var w=null,L=(e,t=()=>{})=>{let r=w;w=e,t(),w=r},A=e=>{w&&(w.props.children||(w.props.children=[]),w.props.children.push(e))},de=(e,t)=>{t||(t=I());let r=c("variable",{id:t}),n=c("declare",null,r,e);return A(n),r},xe=(e,t)=>{let r=c("assign",null,e,t);return A(r),e},yt=(e,t)=>{let r=c("scope");L(r,t);let n=c("if",null,e,r);A(n);let o=()=>({ElseIf:(s,u)=>{let a=c("scope");return L(a,u),n.props.children.push(s,a),o()},Else:s=>{let u=c("scope");L(u,s),n.props.children.push(u)}});return o()},Xt=(e,t)=>{let r=c("scope");L(r,()=>t({i:c("variable",{id:"i"})}));let n=c("loop",null,e,r);return A(n),n},Tt=e=>{let t=c("switch",null,e);A(t);let r=()=>({Case:(...n)=>o=>{let s=c("scope");L(s,o);for(let u of n)t.props.children.push(u,s);return r()},Default:n=>{let o=c("scope");L(o,n),t.props.children.push(o)}});return r()},_t=e=>{let t=I();return(...r)=>{let n=c("scope"),o,s=[];for(let u=0;u<r.length;u++){let a=`p${u}`,m=c("variable",{id:a});s.push(m)}return L(n,()=>o=e(s)),c("define",{id:t},n,o,...r)}};var ht=(e,t)=>{if(t==="string")return p(e)},c=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let n=(u,a)=>{if(a==="type")return e;if(a==="props")return t;if(a==="toVar")return de.bind(null,s);if(a==="assign")return xe.bind(null,s);if(a==="isProxy")return!0;if(a==="toString")return p.bind(null,s);if(a===Symbol.toPrimitive)return ht.bind(null,s);if(Y(a))return ge(a,s);if(ue(a))return(...m)=>We(a,s,...m);if(ce(a))return(...m)=>i(a,s,...m);if(pe(a))return b(a,s)},o=(u,a,m)=>Y(a)?(ge(a,s).assign(m),!0):!1,s=new Proxy({},{get:n,set:o});return s};var ge=(e,t)=>c("swizzle",null,e,t),We=(e,...t)=>c("operator",null,e,...t),i=(e,...t)=>c("function",null,e,...t),b=(e,...t)=>c("conversion",null,e,...t);var Et=(e,t,r)=>c("ternary",null,e,t,r),j=(e,t)=>c("uniform",{id:t,value:e}),Pt=(e,t)=>c("varying",{id:t,value:e}),Nt=(e,t)=>c("varying",{id:t,value:e}),St=e=>c("variable",{id:e}),Rt=e=>c("builtin",{id:e}),wt=j([1280,800],"iResolution"),Lt=j([0,0],"iMouse"),Ct=j(0,"iTime"),qe=c("builtin",{id:"position"}),ke=c("builtin",{id:"vertex_index"}),Ot=c("builtin",{id:"instance_index"}),It=c("builtin",{id:"front_facing"}),Gt=c("builtin",{id:"frag_depth"}),Ut=c("builtin",{id:"sample_index"}),Ft=c("builtin",{id:"sample_mask"}),At=c("builtin",{id:"point_coord"}),$t=c("builtin",{id:"position"}),Bt=c("builtin",{id:"positionWorld"}),Mt=c("builtin",{id:"positionView"}),Vt=c("builtin",{id:"normalLocal"}),Dt=c("builtin",{id:"normalWorld"}),zt=c("builtin",{id:"normalView"}),Wt=c("builtin",{id:"screenCoordinate"}),qt=c("builtin",{id:"screenUV"}),kt=qe,Yt=ke,jt=e=>b("float",e),Ht=e=>b("int",e),Kt=e=>b("uint",e),Zt=e=>b("bool",e),Qt=(e,t)=>b("vec2",e,t),be=(e,t,r)=>b("vec3",e,t,r),Jt=(e,t,r,n)=>b("vec4",e,t,r,n),er=(...e)=>b("mat2",...e),tr=(...e)=>b("mat3",...e),rr=(...e)=>b("mat4",...e),or=(e,t)=>b("ivec2",e,t),nr=(e,t,r)=>b("ivec3",e,t,r),sr=(e,t,r,n)=>b("ivec4",e,t,r,n),ir=(e,t)=>b("uvec2",e,t),ar=(e,t,r)=>b("uvec3",e,t,r),ur=(e,t,r,n)=>b("uvec4",e,t,r,n),cr=(e,t)=>b("bvec2",e,t),pr=(e,t,r)=>b("bvec3",e,t,r),fr=(e,t,r,n)=>b("bvec4",e,t,r,n),lr=(e,t,r)=>g.num(e)&&g.und(t)&&g.und(r)?be(...fe(e)):be(e,t,r),mr=(e,t,r)=>i("texture",e,t,r),dr=(e,t,r)=>i("cubeTexture",e,t,r),xr=(e,t)=>i("textureSize",e,t),gr=e=>i("abs",e),br=e=>i("acos",e),vr=e=>i("all",e),yr=e=>i("any",e),Xr=e=>i("asin",e),Tr=(e,t)=>t!==void 0?i("atan",e,t):i("atan",e),_r=(e,t)=>i("atan",e,t),hr=(e,t)=>i("bitcast",e,t),Er=e=>i("cbrt",e),Pr=e=>i("ceil",e),Nr=(e,t,r)=>i("clamp",e,t,r),Sr=e=>i("cos",e),Rr=(e,t)=>i("cross",e,t),wr=e=>i("dFdx",e),Lr=e=>i("dFdy",e),Cr=e=>i("degrees",e),Or=(e,t)=>i("difference",e,t),Ir=(e,t)=>i("distance",e,t),Gr=(e,t)=>i("dot",e,t),Ur=(e,t)=>i("equals",e,t),Fr=e=>i("exp",e),Ar=e=>i("exp2",e),$r=(e,t,r)=>i("faceforward",e,t,r),Br=e=>i("floor",e),Mr=e=>i("fract",e),Vr=e=>i("fwidth",e),Dr=e=>i("inverseSqrt",e),zr=e=>i("length",e),Wr=e=>i("lengthSq",e),qr=e=>i("log",e),kr=e=>i("log2",e),Yr=(e,t)=>i("max",e,t),jr=(e,t)=>i("min",e,t),Hr=(e,t,r)=>i("mix",e,t,r),Kr=e=>i("negate",e),Zr=e=>i("normalize",e),Qr=e=>i("oneMinus",e),Jr=(e,t)=>i("pow",e,t),eo=e=>i("pow2",e),to=e=>i("pow3",e),ro=e=>i("pow4",e),oo=e=>i("radians",e),no=e=>i("reciprocal",e),so=(e,t)=>i("reflect",e,t),io=(e,t,r)=>i("refract",e,t,r),ao=e=>i("round",e),uo=e=>i("saturate",e),co=e=>i("sign",e),po=e=>i("sin",e),fo=(e,t,r)=>i("smoothstep",e,t,r),lo=e=>i("sqrt",e),mo=(e,t)=>i("step",e,t),xo=e=>i("tan",e),go=(e,t)=>i("transformDirection",e,t),bo=e=>i("trunc",e);var je=`
41
+ #version 300 es
42
+ void main() {
43
+ float x = float(gl_VertexID % 2) * 4.0 - 1.0;
44
+ float y = float(gl_VertexID / 2) * 4.0 - 1.0;
45
+ gl_Position = vec4(x, y, 0.0, 1.0);
46
+ }
47
+ `,He=`
48
+ #version 300 es
49
+ precision mediump float;
50
+ uniform vec2 iResolution;
51
+ out vec4 fragColor;
52
+ void main() {
53
+ fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
54
+ }
55
+ `,Ye=(e,t,r)=>{let n=e.createShader(r);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,t.trim()),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;let o=e.getShaderInfoLog(n);e.deleteShader(n),console.warn(`Could not compile shader: ${o}`)},ve=(e,t=je,r=He,n=()=>{})=>{S(r)&&(r=U(r,{isWebGL:!0})),S(t)&&(t=F(r,{isWebGL:!0}));let o=e.createProgram(),s=Ye(e,t,e.VERTEX_SHADER),u=Ye(e,r,e.FRAGMENT_SHADER);if(!s||!u)return n();if(e.attachShader(o,s),e.attachShader(o,u),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let a=e.getProgramInfoLog(o);e.deleteProgram(o),n(),console.warn(`Could not link pg: ${a}`)},ye=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r},Xe=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r},Te=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},_e=(e,t,r,n,o)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o)},he=(e,t,r,n)=>{let o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,o)};var Ee=async e=>{let t=e.el.getContext("webgl2"),r=ve(t,e.vs,e.fs,()=>void(e.isLoop=!1));t.useProgram(r);let n=0,o=(0,H.nested)(T=>t.getUniformLocation(r,T)),s=(0,H.nested)(T=>t.getAttribLocation(r,T)),u=(0,H.nested)(()=>n++);return{webgl:{context:t,program:r},render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(T="",E,P)=>{let N=s(T,!0),X=ye(t,E),l=Xe(t,P),x=Te(e.count,E,P);_e(t,x,N,X,l)},_uniform:(T,E)=>{let P=o(T);if(g.num(E))return t.uniform1f(P,E);let N=E.length;if(N<=4)return t[`uniform${N}fv`](P,E);N=Math.sqrt(N)<<0,t[`uniformMatrix${N}fv`](P,!1,E)},_texture:(T,E)=>{let P=new Image;Object.assign(P,{src:E,crossOrigin:"anonymous"}),P.decode().then(()=>{let N=o(T),X=u(T);he(t,P,N,X)})}}};var K=require("reev");var vo=`
56
+ @vertex
57
+ fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
58
+ let x = f32(vertex_index % 2u) * 4.0 - 1.0;
59
+ let y = f32(vertex_index / 2u) * 4.0 - 1.0;
60
+ return vec4f(x, y, 0.0, 1.0);
61
+ }
62
+ `,yo=`
63
+ @group(0) @binding(0) var<uniform> iResolution: vec2f;
64
+
65
+ @fragment
66
+ fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
67
+ return vec4f(position.xy / iResolution, 0.0, 1.0);
68
+ }
69
+ `,Pe=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),o=await(await t.requestAdapter()).requestDevice();return e.configure({device:o,format:r,alphaMode:"opaque"}),{device:o,format:r}},Ne=(e,t,r,n,o=vo,s=yo)=>{S(o)&&(o=F(o,{isWebGL:!1})),S(s)&&(s=U(s,{isWebGL:!1}));let u=e.createPipelineLayout({bindGroupLayouts:n});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:o.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:s.trim()}),entryPoint:"main",targets:[{format:t}]},layout:u,primitive:{topology:"triangle-list"}})},Se=(e,t)=>{let r=[],n=[];t.forEach((u,a)=>{if(!u)return;let m="buffer"in u,y=u instanceof GPUTextureView,f=u instanceof GPUSampler;if(m)r.push({binding:a,visibility:3,buffer:{type:"uniform"}});else if(y)r.push({binding:a,visibility:2,texture:{}});else if(f)r.push({binding:a,visibility:2,sampler:{}});else return;n.push({binding:a,resource:u})});let o=e.createBindGroupLayout({entries:r}),s=e.createBindGroup({layout:o,entries:n});return{layout:o,bindGroup:s}},Re=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),Ke=e=>Math.ceil(e/256)*256,we=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:n}},Le=(e,t)=>{let r=new Float32Array(t),n=Ke(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},Ce=(e,t=1280,r=800)=>{let n=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:n,sampler:o}},Xo=(e,t)=>e/t,To=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",Oe=(e,t,r=6)=>{let n=Xo(t,r);return{arrayStride:n*4,attributes:[{shaderLocation:e,offset:0,format:To(n)}]}};var Ie=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await Pe(t),o={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},s=[],u=[],a=[],m=(0,K.nested)((X,l)=>{let{array:x,buffer:v}=we(r,l);return u.push(v),a.push(Oe(a.length,x.length,e.count)),o.needsUpdate=!0,{array:x,buffer:v}}),y=(0,K.nested)((X,l)=>{let{array:x,buffer:v}=Le(r,l);return o.resources[0].push({buffer:v}),o.needsUpdate=!0,{array:x,buffer:v}}),f=(0,K.nested)((X,{width:l,height:x})=>{let{texture:v,sampler:Q}=Ce(r,l,x);return o.resources[1].push(Q,v.createView()),o.needsUpdate=!0,{texture:v,width:l,height:x}}),d=()=>{let X=[];s.length=0,o.resources.forEach(l=>{if(!l.length)return;let{layout:x,bindGroup:v}=Se(r,l);X.push(x),s.push(v)}),o.pipeline=Ne(r,n,a,X,e.vs,e.fs)};return{webgpu:o,render:()=>{if(o.loadingImg)return;o.needsUpdate&&d(),o.needsUpdate=!1;let X=r.createCommandEncoder(),l=X.beginRenderPass(Re(t));l.setPipeline(o.pipeline),s.forEach((x,v)=>l.setBindGroup(v,x)),u.forEach((x,v)=>l.setVertexBuffer(v,x)),l.draw(e.count,1,0,0),l.end(),r.queue.submit([X.finish()])},clean:()=>{},_attribute:(X="",l)=>{let{array:x,buffer:v}=m(X,l);r.queue.writeBuffer(v,0,x)},_uniform:(X,l)=>{g.num(l)&&(l=[l]);let{array:x,buffer:v}=y(X,l);x.set(l),r.queue.writeBuffer(v,0,x)},_texture:(X,l)=>{o.loadingImg++;let x=Object.assign(new Image,{src:l,crossOrigin:"anonymous"});x.decode().then(()=>{let{texture:v,width:Q,height:et}=f(X,x);r.queue.copyExternalImageToTexture({source:x},{texture:v},{width:Q,height:et}),o.loadingImg--})}}};var Ue=e=>g.obj(e)?"isGL"in e:!1,Ze=()=>typeof window>"u",Qe=()=>Ze()?!1:"gpu"in navigator,Ge=performance.now(),Fe=e=>{let t=(0,O.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=(0,Z.createQueue)(),t.frame=(0,Z.createFrame)(),t.attribute=(0,O.durable)((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=(0,O.durable)((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=(0,O.durable)((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:Ge}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Qe()||(t.isWebGL=!0),t.isWebGL?t(await Ee(t)):t(await Ie(t)),t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.render(),t.isLoop)),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove))}),t("clean",()=>{t.frame.stop(),t.frame.clean(t.render),!t.isNative&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("resize",()=>{let r=t.width||window.innerWidth,n=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=n,t.uniform("iResolution",t.size)}),t("mousemove",(r,n=r.clientX,o=r.clientY)=>{let[s,u]=t.size,{top:a,left:m}=t.el.getBoundingClientRect();t.mouse[0]=(n-a-s/2)/(s/2),t.mouse[1]=-(o-m-u/2)/(u/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{Ge=performance.now()/1e3,t.uniform("iTime",Ge)}),t(e)};var _o=(e={})=>(0,Je.useState)(()=>{let t=Ue(e)?e:Fe(e);return t.ref=r=>{r?(t.el=r,t.mount()):t.clean()},t})[0];0&&(module.exports={ADDITIONAL_FUNCTIONS,BOOL_RETURN_FUNCTIONS,BUILTIN_TYPES,COMPARISON_OPERATORS,COMPONENT_COUNT_TO_TYPE,CONSTANTS,CONVERSIONS,FIRST_ARG_TYPE_FUNCTIONS,FUNCTIONS,Fn,HIGHEST_TYPE_FUNCTIONS,If,LOGICAL_OPERATORS,Loop,OPERATORS,OPERATOR_KEYS,PRESERVE_TYPE_FUNCTIONS,SCALAR_RETURN_FUNCTIONS,SWIZZLES,Switch,TYPE_MAPPING,VEC3_RETURN_FUNCTIONS,VEC4_RETURN_FUNCTIONS,WGSL_TO_GLSL_BUILTIN,abs,acos,alignTo256,all,any,asin,assign,atan,atan2,attribute,bitcast,bool,builtin,bvec2,bvec3,bvec4,cbrt,ceil,clamp,code,color,conversion,cos,createAttrib,createBindGroup,createBufferLayout,createDescriptor,createDevice,createGL,createIbo,createPipeline,createProgram,createTexture,createTextureSampler,createUniformBuffer,createVbo,createVertexBuffer,cross,cubeTexture,dFdx,dFdy,defaultFragmentGLSL,defaultVertexGLSL,degrees,difference,dig,distance,dot,each,equals,exp,exp2,ext,faceforward,fig,float,floor,flush,formatConversions,fract,fragCoord,fragDepth,fragment,frontFacing,function_,fwidth,generateDefine,getId,getOperator,getStride,hex2rgb,iMouse,iResolution,iTime,infer,inferImpl,instanceIndex,int,inverseSqrt,is,isConversion,isFunction,isGL,isNodeProxy,isOperator,isServer,isSwizzle,isWebGPUSupported,ivec2,ivec3,ivec4,joins,length,lengthSq,log,log2,mat2,mat3,mat4,max,min,mix,negate,node,normalLocal,normalView,normalWorld,normalize,oneMinus,operator,pointCoord,position,positionLocal,positionView,positionWorld,pow,pow2,pow3,pow4,radians,reciprocal,reflect,refract,replace,round,sampleIndex,sampleMask,saturate,screenCoordinate,screenUV,select,sig,sign,sin,smoothstep,sqrt,step,swizzle,tan,texture,textureSize,toVar,transformDirection,trunc,uint,uniform,useGL,uvec2,uvec3,uvec4,variable,varying,vec2,vec3,vec4,vertex,vertexId,vertexIndex,webgl,webgpu});
70
+ //# sourceMappingURL=react.cjs.map