glre 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -115,7 +115,7 @@ npm install glre
115
115
  ```ts
116
116
  import { createRoot } from 'react-dom/client'
117
117
  import { useGL, vec4, fract, fragCoord, iResolution } from 'glre/react'
118
- const frag = vec4(fract(fragCoord.xy / iResolution), 0, 1)
118
+ const frag = vec4(fract(fragCoord.xy.div(iResolution)), 0, 1)
119
119
 
120
120
  const App = () => {
121
121
  const gl = useGL({ frag })
@@ -136,7 +136,7 @@ react-native supported ([codesandbox demo](https://codesandbox.io/p/sandbox/glre
136
136
  import { GLView } from 'expo-gl'
137
137
  import { registerRootComponent } from 'expo'
138
138
  import { useGL, vec4, fract, fragCoord, iResolution } from 'glre/native'
139
- const frag = vec4(fract(fragCoord.xy / iResolution), 0, 1)
139
+ const frag = vec4(fract(fragCoord.xy.div(iResolution)), 0, 1)
140
140
 
141
141
  const App = () => {
142
142
  const gl = useGL({ frag })
@@ -157,7 +157,7 @@ solid js supported ([codesandbox demo](https://codesandbox.io/p/sandbox/glre-sol
157
157
  ```ts
158
158
  import { render } from 'solid-js/web'
159
159
  import { onGL, vec4, fract, fragCoord, iResolution } from 'glre/solid'
160
- const frag = vec4(fract(fragCoord.xy / iResolution), 0, 1)
160
+ const frag = c4(fract(fragCoord.xy.div(iResolution)), 0, 1)
161
161
 
162
162
  const App = () => {
163
163
  const gl = onGL({ frag })
@@ -177,8 +177,9 @@ esm supported ([codesandbox demo](https://codesandbox.io/s/glre-basic-demo3-3bhr
177
177
 
178
178
  ```html
179
179
  <script type="module">
180
- import { createGL, vec4, fract, fragCoord, iResolution } from 'https://esm.sh/glre'
181
- const frag = vec4(fract(fragCoord.xy / iResolution), 0, 1)
180
+ import createGL from 'https://esm.sh/glre'
181
+ import { vec4, fract, fragCoord, iResolution } from 'https://esm.sh/glre'
182
+ const frag = vec4(fract(fragCoord.xy.div(iResolution)), 0, 1)
182
183
  function App() {
183
184
  const el = document.createElement('canvas')
184
185
  createGL({ el, frag }).mount()
@@ -207,7 +208,7 @@ The node system provides various types and functions that mirror GLSL functional
207
208
  import { float, int, vec2, vec3, vec4, mat3, mat4 } from 'glre'
208
209
 
209
210
  // Built-in variables
210
- import { fragCoord, gl_Position, iResolution, iTime } from 'glre'
211
+ import { fragCoord, position, iResolution, iTime } from 'glre'
211
212
 
212
213
  // Math functions
213
214
  import { sin, cos, abs, pow, mix, clamp, normalize } from 'glre'
package/dist/index.d.ts CHANGED
@@ -3,142 +3,200 @@ import { Queue, Frame } from 'refr';
3
3
  export { Frame, Fun, Queue } from 'refr';
4
4
  import { EventState } from 'reev';
5
5
 
6
- declare const TYPES: readonly ["float", "int", "uint", "bool", "color", "vec2", "vec3", "vec4", "mat2", "mat3", "mat4", "ivec2", "ivec3", "ivec4", "uvec2", "uvec3", "uvec4", "bvec2", "bvec3", "bvec4"];
7
- type NodeType = (typeof TYPES)[number];
8
6
  declare const SWIZZLES: readonly ["x", "y", "z", "w", "r", "g", "b", "a", "s", "t", "p", "q"];
9
- type AllSwizzles<T extends string> = T | `${T}${T}` | `${T}${T}${T}` | `${T}${T}${T}${T}`;
10
- type Swillzes = AllSwizzles<'x' | 'y' | 'z' | 'w'> | AllSwizzles<'r' | 'g' | 'b' | 'a'> | AllSwizzles<'p' | 'q'> | AllSwizzles<'s' | 't'>;
11
- declare const OPERATORS: readonly ["add", "sub", "mul", "div", "mod", "equal", "notEqual", "lessThan", "lessThanEqual", "greaterThan", "greaterThanEqual", "and", "or", "not", "assign", "xor", "bitAnd", "bitNot", "bitOr", "bitXor", "shiftLeft", "shiftRight"];
12
- type Operator = (typeof OPERATORS)[number];
7
+ declare const NODE_TYPES: readonly ["float", "int", "uint", "bool", "color", "vec2", "vec3", "vec4", "mat2", "mat3", "mat4", "ivec2", "ivec3", "ivec4", "uvec2", "uvec3", "uvec4", "bvec2", "bvec3", "bvec4"];
8
+ declare const OPERATORS: {
9
+ readonly add: "+";
10
+ readonly sub: "-";
11
+ readonly mul: "*";
12
+ readonly div: "/";
13
+ readonly mod: "%";
14
+ readonly equal: "==";
15
+ readonly notEqual: "!=";
16
+ readonly lessThan: "<";
17
+ readonly lessThanEqual: "<=";
18
+ readonly greaterThan: ">";
19
+ readonly greaterThanEqual: ">=";
20
+ readonly and: "&&";
21
+ readonly or: "||";
22
+ readonly bitAnd: "&";
23
+ readonly bitOr: "|";
24
+ readonly bitXor: "^";
25
+ readonly shiftLeft: "<<";
26
+ readonly shiftRight: ">>";
27
+ };
28
+ declare const OPERATOR_KEYS: (keyof typeof OPERATORS)[];
13
29
  declare const FUNCTIONS: readonly ["abs", "acos", "asin", "atan", "atan2", "ceil", "clamp", "cos", "cross", "degrees", "distance", "dot", "exp", "exp2", "faceforward", "floor", "fract", "length", "all", "any", "bitcast", "cbrt", "dFdx", "dFdy", "difference", "equals", "fwidth", "inverseSqrt", "lengthSq", "log", "log2", "max", "min", "mix", "negate", "normalize", "oneMinus", "pow", "pow2", "pow3", "pow4", "radians", "reciprocal", "reflect", "refract", "round", "saturate", "sign", "sin", "smoothstep", "sqrt", "step", "tan", "transformDirection", "trunc"];
14
- type MathFunction = (typeof FUNCTIONS)[number];
15
- declare const CACHE_BOOLS: readonly [true, false];
16
- declare const CACHE_INTS: readonly [0, 1, 2, 3, 4, 5];
17
- declare const CACHE_FLOATS: readonly [0, 1, 0.5, 2];
18
-
19
- interface Node {
20
- id: string;
21
- type: NodeType;
22
- value?: any;
23
- property?: string;
24
- parent?: Node;
25
- children?: Node[];
26
- operator?: Operator;
27
- mathFunction?: MathFunction;
28
- }
29
- interface ProxyCallback {
30
- path: string[];
31
- args: any[];
32
- }
33
- type NodeCreator = (value?: any) => X;
34
- interface OperatorMethods {
35
- add(x: X | number): X;
36
- sub(x: X | number): X;
37
- mul(x: X | number): X;
38
- div(x: X | number): X;
39
- mod(x: X | number): X;
40
- equal(x: X | number): X;
41
- notEqual(x: X | number): X;
42
- lessThan(x: X | number): X;
43
- lessThanEqual(x: X | number): X;
44
- greaterThan(x: X | number): X;
45
- greaterThanEqual(x: X | number): X;
46
- and(x: X): X;
47
- or(x: X): X;
48
- not(): X;
49
- }
50
- interface MathMethods {
51
- abs(): X;
52
- acos(): X;
53
- asin(): X;
54
- atan(): X;
55
- ceil(): X;
56
- cos(): X;
57
- floor(): X;
58
- fract(): X;
59
- length(): X;
60
- normalize(): X;
61
- sin(): X;
62
- sqrt(): X;
63
- tan(): X;
64
- toVar(): X;
65
- }
66
- type SwizzleProperties = {
67
- [k in Swillzes]: X;
30
+ declare const TYPE_MAPPING: {
31
+ readonly float: "f32";
32
+ readonly int: "i32";
33
+ readonly uint: "u32";
34
+ readonly bool: "bool";
35
+ readonly vec2: "vec2f";
36
+ readonly vec3: "vec3f";
37
+ readonly vec4: "vec4f";
38
+ readonly mat2: "mat2x2f";
39
+ readonly mat3: "mat3x3f";
40
+ readonly mat4: "mat4x4f";
41
+ readonly ivec2: "vec2i";
42
+ readonly ivec3: "vec3i";
43
+ readonly ivec4: "vec4i";
44
+ readonly uvec2: "vec2u";
45
+ readonly uvec3: "vec3u";
46
+ readonly uvec4: "vec4u";
47
+ readonly bvec2: "vec2<bool>";
48
+ readonly bvec3: "vec3<bool>";
49
+ readonly bvec4: "vec4<bool>";
68
50
  };
69
- interface X extends MathMethods, OperatorMethods, SwizzleProperties {
70
- readonly id: string;
71
- readonly type: NodeType;
72
- readonly value: any;
73
- readonly property: string;
74
- (...args: any[]): X;
75
- }
76
- interface UniformNode extends X {
77
- set(value: any): void;
78
- onObjectUpdate(callback: (context: any) => any): UniformNode;
79
- onRenderUpdate(callback: (context: any) => any): UniformNode;
80
- }
81
- interface FunctionNode {
82
- (...args: any[]): X;
83
- call(x: X[]): X;
51
+
52
+ type NodeType = (typeof NODE_TYPES)[number];
53
+ type Functions = (typeof FUNCTIONS)[number];
54
+ type Operators = (typeof OPERATOR_KEYS)[number];
55
+ interface NodeProps {
56
+ id?: string;
57
+ children?: X[];
58
+ defaultValue?: number | number[];
84
59
  }
85
- interface ConditionalNode {
86
- ElseIf(condition: X, callback: () => void): ConditionalNode;
87
- Else(callback: () => void): void;
60
+ interface NodeConfig {
61
+ isWebGL?: boolean;
62
+ uniforms?: Set<string>;
63
+ onUniform?: (name: string, value: any) => void;
88
64
  }
89
- interface ConversionContext {
90
- target: 'webgl' | 'webgpu';
91
- nodes: Map<string, Node>;
92
- variables: Map<string, string>;
93
- functions: Map<string, string>;
65
+ type _Swizzles<T extends string> = T | `${T}${T}` | `${T}${T}${T}` | `${T}${T}${T}${T}`;
66
+ type Swizzles = _Swizzles<'x' | 'y' | 'z' | 'w'> | _Swizzles<'r' | 'g' | 'b' | 'a'> | _Swizzles<'p' | 'q'> | _Swizzles<'s' | 't'>;
67
+ type NodeTypes = 'uniform' | 'variable' | 'swizzle' | 'operator' | 'node_type' | 'math_fun' | 'declare' | 'assign' | 'fn' | 'if' | 'loop' | 'scope';
68
+ interface NodeProxy extends Record<Swizzles, NodeProxy> {
69
+ add(n: X): NodeProxy;
70
+ sub(n: X): NodeProxy;
71
+ mul(n: X): NodeProxy;
72
+ div(n: X): NodeProxy;
73
+ mod(n: X): NodeProxy;
74
+ equal(n: X): NodeProxy;
75
+ notEqual(n: X): NodeProxy;
76
+ lessThan(n: X): NodeProxy;
77
+ lessThanEqual(n: X): NodeProxy;
78
+ greaterThan(n: X): NodeProxy;
79
+ greaterThanEqual(n: X): NodeProxy;
80
+ and(n: X): NodeProxy;
81
+ or(n: X): NodeProxy;
82
+ not(): NodeProxy;
83
+ assign(n: X): NodeProxy;
84
+ toVar(name?: string): NodeProxy;
85
+ toString(c?: NodeConfig): string;
86
+ type: NodeTypes;
87
+ props: NodeProps;
88
+ isProxy: true;
94
89
  }
90
+ type X = NodeProxy | number | string | null | undefined;
95
91
 
96
- declare const getCachedBool: (x: boolean) => X;
97
- declare const getCachedInt: (x: number) => X;
98
- declare const getCachedFloat: (x: number) => X;
99
- declare const findDuplicateNodes: (nodes: X[]) => Map<string, X[]>;
92
+ declare const code: (target: X, c?: NodeConfig | null) => string;
100
93
 
101
- declare const convertToNode: (x: unknown) => X;
102
- declare const float: (x: unknown) => X;
103
- declare const int: (x: unknown) => X;
104
- declare const bool: (x: unknown) => X;
105
- declare const vec2: (x?: any, y?: any) => X;
106
- declare const vec3: (x?: any, y?: any, z?: any) => X;
107
- declare const vec4: (x?: any, y?: any, z?: any, w?: any) => X;
108
- declare const color: (r?: any, g?: any, b?: any) => X;
94
+ declare const node: (type: NodeTypes, props?: NodeProps | null, ...args: X[]) => NodeProxy;
95
+ declare const v: (...args: X[]) => NodeProxy;
96
+ declare const u: (key: string, defaultValue?: number | number[]) => NodeProxy;
97
+ declare const s: (key: Swizzles, arg: X) => NodeProxy;
98
+ declare const n: (key: string, ...args: X[]) => NodeProxy;
99
+ declare const o: (key: Operators, ...args: X[]) => NodeProxy;
100
+ declare const f: (key: Functions, ...args: X[]) => NodeProxy;
109
101
 
110
- declare const createNode: (type: NodeType, value?: any, options?: Partial<Node>) => Node;
111
- declare const node: (type: NodeType, value?: any, options?: Partial<Node>) => X;
102
+ declare const If: (x: X, callback: () => void) => {
103
+ ElseIf: (y: X, elseCallback: () => void) => void;
104
+ Else: (elseCallback: () => void) => void;
105
+ };
106
+ declare const Loop: (x: X, callback?: (params: {
107
+ i: NodeProxy;
108
+ }) => void) => NodeProxy;
109
+ declare const Fn: (callback: (args: X[]) => NodeProxy) => (...args: X[]) => NodeProxy;
110
+ declare const toVar: (x: X) => (id: string) => NodeProxy;
111
+ declare const assign: (x: X) => (y: X) => X;
112
112
 
113
- interface UpdateContext {
114
- object?: any;
115
- camera?: any;
116
- renderer?: any;
117
- scene?: any;
118
- time?: number;
119
- }
120
- declare const uniform: (initialValue: any) => UniformNode;
121
- declare const iPrevTime: UniformNode;
122
- declare const iDeltaTime: UniformNode;
123
- declare const updateUniforms: (context: UpdateContext) => void;
113
+ declare const isSwizzle: (key: unknown) => key is Swizzles;
114
+ declare const isOperator: (key: unknown) => key is Operators;
115
+ declare const isNodeType: (key: unknown) => key is NodeType;
116
+ declare const isFunction: (key: unknown) => key is Functions;
117
+ declare const getId: () => string;
118
+ declare const joins: (children: X[], c: NodeConfig) => string;
119
+ declare const inferType: (target: X, c: NodeConfig) => string;
120
+ declare const fragment: (x: X, c: NodeConfig) => string;
121
+ declare const vertex: (x: X, c: NodeConfig) => string;
124
122
 
125
- declare const Fn: (jsFunc: Function) => FunctionNode;
126
- declare const If: (condition: X, callback: () => void) => ConditionalNode;
127
- declare const fragCoord: X;
128
- declare const position: X;
129
- declare const iTime: UniformNode;
130
- declare const iResolution: UniformNode;
131
- declare const iMouse: UniformNode;
132
- declare const abs: (x: X) => X;
133
- declare const sin: (x: X) => X;
134
- declare const cos: (x: X) => X;
135
- declare const tan: (x: X) => X;
136
- declare const sqrt: (x: X) => X;
137
- declare const floor: (x: X) => X;
138
- declare const ceil: (x: X) => X;
139
- declare const fract: (x: X) => X;
140
- declare const normalize: (x: X) => X;
141
- declare const length: (x: X) => X;
123
+ declare const iResolution: NodeProxy;
124
+ declare const iMouse: NodeProxy;
125
+ declare const iTime: NodeProxy;
126
+ declare const fragCoord: NodeProxy;
127
+ declare const float: (x: X) => NodeProxy;
128
+ declare const int: (x: X) => NodeProxy;
129
+ declare const uint: (x: X) => NodeProxy;
130
+ declare const bool: (x: X) => NodeProxy;
131
+ declare const vec2: (x?: X, y?: X) => NodeProxy;
132
+ declare const vec3: (x?: X, y?: X, z?: X) => NodeProxy;
133
+ declare const vec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
134
+ declare const mat2: (...args: X[]) => NodeProxy;
135
+ declare const mat3: (...args: X[]) => NodeProxy;
136
+ declare const mat4: (...args: X[]) => NodeProxy;
137
+ declare const ivec2: (x?: X, y?: X) => NodeProxy;
138
+ declare const ivec3: (x?: X, y?: X, z?: X) => NodeProxy;
139
+ declare const ivec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
140
+ declare const uvec2: (x?: X, y?: X) => NodeProxy;
141
+ declare const uvec3: (x?: X, y?: X, z?: X) => NodeProxy;
142
+ declare const uvec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
143
+ declare const bvec2: (x?: X, y?: X) => NodeProxy;
144
+ declare const bvec3: (x?: X, y?: X, z?: X) => NodeProxy;
145
+ declare const bvec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
146
+ declare const abs: (x: X) => NodeProxy;
147
+ declare const acos: (x: X) => NodeProxy;
148
+ declare const all: (x: X) => NodeProxy;
149
+ declare const any: (x: X) => NodeProxy;
150
+ declare const asin: (x: X) => NodeProxy;
151
+ declare const atan: (y: X, x: X) => NodeProxy;
152
+ declare const bitcast: (x: X, y: X) => NodeProxy;
153
+ declare const cbrt: (x: X) => NodeProxy;
154
+ declare const ceil: (x: X) => NodeProxy;
155
+ declare const clamp: (x: X, min: X, max: X) => NodeProxy;
156
+ declare const cos: (x: X) => NodeProxy;
157
+ declare const cross: (x: X, y: X) => NodeProxy;
158
+ declare const dFdx: (p: X) => NodeProxy;
159
+ declare const dFdy: (p: X) => NodeProxy;
160
+ declare const degrees: (radians: X) => NodeProxy;
161
+ declare const difference: (x: X, y: X) => NodeProxy;
162
+ declare const distance: (x: X, y: X) => NodeProxy;
163
+ declare const dot: (x: X, y: X) => NodeProxy;
164
+ declare const equals: (x: X, y: X) => NodeProxy;
165
+ declare const exp: (x: X) => NodeProxy;
166
+ declare const exp2: (x: X) => NodeProxy;
167
+ declare const faceforward: (N: X, I: X, Nref: X) => NodeProxy;
168
+ declare const floor: (x: X) => NodeProxy;
169
+ declare const fract: (x: X) => NodeProxy;
170
+ declare const fwidth: (x: X) => NodeProxy;
171
+ declare const inverseSqrt: (x: X) => NodeProxy;
172
+ declare const length: (x: X) => NodeProxy;
173
+ declare const lengthSq: (x: X) => NodeProxy;
174
+ declare const log: (x: X) => NodeProxy;
175
+ declare const log2: (x: X) => NodeProxy;
176
+ declare const max: (x: X, y: X) => NodeProxy;
177
+ declare const min: (x: X, y: X) => NodeProxy;
178
+ declare const mix: (x: X, y: X, a: X) => NodeProxy;
179
+ declare const negate: (x: X) => NodeProxy;
180
+ declare const normalize: (x: X) => NodeProxy;
181
+ declare const oneMinus: (x: X) => NodeProxy;
182
+ declare const pow: (x: X, y: X) => NodeProxy;
183
+ declare const pow2: (x: X) => NodeProxy;
184
+ declare const pow3: (x: X) => NodeProxy;
185
+ declare const pow4: (x: X) => NodeProxy;
186
+ declare const radians: (degrees: X) => NodeProxy;
187
+ declare const reciprocal: (x: X) => NodeProxy;
188
+ declare const reflect: (I: X, N: X) => NodeProxy;
189
+ declare const refract: (I: X, N: X, eta: X) => NodeProxy;
190
+ declare const round: (x: X) => NodeProxy;
191
+ declare const saturate: (x: X) => NodeProxy;
192
+ declare const sign: (x: X) => NodeProxy;
193
+ declare const sin: (x: X) => NodeProxy;
194
+ declare const smoothstep: (e0: X, e1: X, x: X) => NodeProxy;
195
+ declare const sqrt: (x: X) => NodeProxy;
196
+ declare const step: (edge: X, x: X) => NodeProxy;
197
+ declare const tan: (x: X) => NodeProxy;
198
+ declare const transformDirection: (dir: X, matrix: X) => NodeProxy;
199
+ declare const trunc: (x: X) => NodeProxy;
142
200
 
143
201
  type GPUContext = any;
144
202
  type GPUDevice = any;
@@ -224,26 +282,6 @@ type GL = EventState<{
224
282
  }): GL;
225
283
  }>;
226
284
 
227
- interface GLSLContext extends ConversionContext {
228
- target: 'webgl';
229
- precision: 'lowp' | 'mediump' | 'highp';
230
- version: '100' | '300 es';
231
- }
232
- declare const nodeToGLSL: (nodeProxy: X, context?: Partial<GLSLContext>) => string;
233
- declare const glsl: (fragmentNode: X, options?: {
234
- precision?: "lowp" | "mediump" | "highp";
235
- version?: "100" | "300 es";
236
- uniforms?: Record<string, any>;
237
- }) => string;
238
-
239
- interface WGSLContext extends ConversionContext {
240
- target: 'webgpu';
241
- }
242
- declare const nodeToWGSL: (nodeProxy: X, context?: Partial<WGSLContext>) => string;
243
- declare const wgsl: (fragmentNode: X, options?: {
244
- uniforms?: Record<string, any>;
245
- }) => string;
246
-
247
285
  declare const is: {
248
286
  arr: (arg: any) => arg is any[];
249
287
  bol: (a: unknown) => a is boolean;
@@ -276,7 +314,7 @@ declare const fig: (x?: number) => number;
276
314
  declare const dig: (x?: number) => number;
277
315
  declare const sig: (value?: number, digit?: number) => number;
278
316
 
279
- declare const createDevive: (c: GPUContext) => Promise<{
317
+ declare const createDevice: (c: GPUContext) => Promise<{
280
318
  device: any;
281
319
  format: any;
282
320
  }>;
@@ -322,7 +360,7 @@ declare const createBufferLayout: (shaderLocation: number, dataLength: number, c
322
360
 
323
361
  declare const defaultVertexGLSL = "\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";
324
362
  declare const defaultFragmentGLSL = "\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";
325
- declare const createProgram: (c: WebGLRenderingContext, vs?: string | X, fs?: string | X) => WebGLProgram;
363
+ declare const createProgram: (c: WebGLRenderingContext, vs?: string | X, fs?: string | X) => WebGLProgram | undefined;
326
364
  declare const createVbo: (c: WebGLRenderingContext, data: number[]) => WebGLBuffer;
327
365
  declare const createIbo: (c: WebGLRenderingContext, data: number[]) => WebGLBuffer;
328
366
  declare const getStride: (count: number, value: number[], iboValue?: number[]) => number;
@@ -396,4 +434,4 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
396
434
  }): GL;
397
435
  }, any[] | unknown[]>;
398
436
 
399
- export { Attribute, Attributes, CACHE_BOOLS, CACHE_FLOATS, CACHE_INTS, ConditionalNode, ConversionContext, FUNCTIONS, Fn, FunctionNode, GL, GLClearMode, GLDrawMode, GLDrawType, GPUBindGroup, GPUBuffer, GPUContext, GPUDevice, GPUPipeline, If, MathFunction, MathMethods, Node, NodeCreator, NodeType, OPERATORS, Operator, OperatorMethods, PrecisionMode, ProxyCallback, SWIZZLES, Swillzes, SwizzleProperties, TYPES, Uniform, UniformNode, Uniforms, WebGLState, WebGPUState, X, abs, alignTo256, bool, ceil, color, convertToNode, cos, createAttrib, createBindGroup, createBufferLayout, createDescriptor, createDevive, createGL, createIbo, createNode, createPipeline, createProgram, createTexture, createTextureSampler, createUniformBuffer, createVbo, createVertexBuffer, createGL as default, defaultFragmentGLSL, defaultVertexGLSL, dig, each, ext, fig, findDuplicateNodes, float, floor, flush, fract, fragCoord, getCachedBool, getCachedFloat, getCachedInt, getStride, glsl, iDeltaTime, iMouse, iPrevTime, iResolution, iTime, int, is, isGL, isServer, isWebGPUSupported, length, node, nodeToGLSL, nodeToWGSL, normalize, position, replace, sig, sin, sqrt, tan, uniform, updateUniforms, vec2, vec3, vec4, webgl, webgpu, wgsl };
437
+ export { type Attribute, type Attributes, FUNCTIONS, Fn, type Functions, type GL, type GLClearMode, type GLDrawMode, type GLDrawType, type GPUBindGroup, type GPUBuffer, type GPUContext, type GPUDevice, type GPUPipeline, If, Loop, NODE_TYPES, type NodeConfig, type NodeProps, type NodeProxy, type NodeType, type NodeTypes, OPERATORS, OPERATOR_KEYS, type Operators, type PrecisionMode, SWIZZLES, type Swizzles, TYPE_MAPPING, type Uniform, type Uniforms, type WebGLState, type WebGPUState, type X, 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, createGL as default, 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, uvec2, uvec3, uvec4, v, vec2, vec3, vec4, vertex, webgl, webgpu };
package/dist/index.js CHANGED
@@ -1,22 +1,41 @@
1
- "use strict";var I=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames;var Re=Object.prototype.hasOwnProperty;var _e=(e,t)=>{for(var r in t)I(e,r,{get:t[r],enumerable:!0})},Ue=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ge(t))!Re.call(e,o)&&o!==r&&I(e,o,{get:()=>t[o],enumerable:!(n=Ce(t,o))||n.enumerable});return e};var Xe=e=>Ue(I({},"__esModule",{value:!0}),e);var Mt={};_e(Mt,{CACHE_BOOLS:()=>ie,CACHE_FLOATS:()=>se,CACHE_INTS:()=>ae,FUNCTIONS:()=>oe,Fn:()=>xt,If:()=>yt,OPERATORS:()=>ne,SWIZZLES:()=>re,TYPES:()=>Qe,abs:()=>Lt,alignTo256:()=>xe,bool:()=>it,ceil:()=>_t,color:()=>ut,convertToNode:()=>rt,cos:()=>St,createAttrib:()=>q,createBindGroup:()=>H,createBufferLayout:()=>ee,createDescriptor:()=>K,createDevive:()=>k,createGL:()=>Ne,createIbo:()=>W,createNode:()=>S,createPipeline:()=>Y,createProgram:()=>z,createTexture:()=>V,createTextureSampler:()=>J,createUniformBuffer:()=>Q,createVbo:()=>O,createVertexBuffer:()=>Z,default:()=>Pt,defaultFragmentGLSL:()=>he,defaultVertexGLSL:()=>ge,dig:()=>Be,each:()=>me,ext:()=>Pe,fig:()=>Me,findDuplicateNodes:()=>et,float:()=>F,floor:()=>Rt,flush:()=>Ae,fract:()=>Ut,fragCoord:()=>Tt,getCachedBool:()=>U,getCachedFloat:()=>A,getCachedInt:()=>X,getStride:()=>D,glsl:()=>C,iDeltaTime:()=>$e,iMouse:()=>wt,iPrevTime:()=>Ee,iResolution:()=>$t,iTime:()=>Et,int:()=>ot,is:()=>i,isGL:()=>Ft,isServer:()=>we,isWebGPUSupported:()=>Le,length:()=>At,node:()=>s,nodeToGLSL:()=>le,nodeToWGSL:()=>be,normalize:()=>Xt,position:()=>vt,replace:()=>Fe,sig:()=>Ie,sin:()=>Nt,sqrt:()=>Gt,tan:()=>Ct,uniform:()=>v,updateUniforms:()=>bt,vec2:()=>at,vec3:()=>Te,vec4:()=>st,webgl:()=>j,webgpu:()=>te,wgsl:()=>R});module.exports=Xe(Mt);var w=require("reev"),M=require("refr");var G=require("reev");var i={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)},me=(e,t)=>e.forEach(t),Ae=(e,...t)=>{me(e,r=>r(...t))},Fe=(e="",t="_",r="/")=>e.split(t).join(r),Pe=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",Me=(e=0)=>`${e}`.split(".")[1]?.length??0,Be=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),Ie=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var le=(e,t)=>{let r={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...t};return L(e,r)},L=(e,t)=>e?i.und(e.value)?e.property&&e.parent?`${L(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?Oe(e,t):e.mathFunction&&e.children&&e.children.length>=1?We(e,t):"0.0":ze(e.value,e.type):"0.0",ze=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2(${r})`;if(t==="vec3")return`vec3(${r})`;if(t==="vec4")return`vec4(${r})`;if(t==="color")return`vec3(${r})`}return"0.0"},Oe=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=L(e.children[0],t),n=L(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`mod(${r}, ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},We=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(p=>L(p,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},De=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4"}return"float"},C=(e,t)=>{let r=t?.precision||"mediump",o=(t?.version||"300 es")==="300 es",a=le(e),u="";return o&&(u+=`#version 300 es
2
- `),u+=`precision ${r} float;
3
-
4
- `,t?.uniforms&&(Object.entries(t.uniforms).forEach(([p,y])=>{let E=De(y);u+=`uniform ${E} ${p};
5
- `}),u+=`
6
- `),o&&(u+=`out vec4 fragColor;
7
-
8
- `),u+=`void main() {
9
- `,u+=o?` fragColor = ${a};
10
- `:` gl_FragColor = ${a};
11
- `,u+=`}
12
- `,u};var ge=`
1
+ "use strict";var D=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var Se=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},Ae=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pe(t))!Ge.call(e,n)&&n!==r&&D(e,n,{get:()=>t[n],enumerable:!(o=Le(t,n))||o.enumerable});return e};var Fe=e=>Ae(D({},"__esModule",{value:!0}),e);var Tr={};Se(Tr,{FUNCTIONS:()=>V,Fn:()=>qe,If:()=>De,Loop:()=>We,NODE_TYPES:()=>W,OPERATORS:()=>U,OPERATOR_KEYS:()=>q,SWIZZLES:()=>Ce,TYPE_MAPPING:()=>Y,abs:()=>gt,acos:()=>bt,alignTo256:()=>he,all:()=>Xt,any:()=>vt,asin:()=>yt,assign:()=>K,atan:()=>ht,bitcast:()=>Tt,bool:()=>et,bvec2:()=>lt,bvec3:()=>xt,bvec4:()=>dt,cbrt:()=>Et,ceil:()=>wt,clamp:()=>Rt,code:()=>c,cos:()=>_t,createAttrib:()=>te,createBindGroup:()=>ie,createBufferLayout:()=>pe,createDescriptor:()=>ae,createDevice:()=>ne,createGL:()=>we,createIbo:()=>J,createPipeline:()=>se,createProgram:()=>Z,createTexture:()=>re,createTextureSampler:()=>fe,createUniformBuffer:()=>ce,createVbo:()=>Q,createVertexBuffer:()=>ue,cross:()=>Lt,dFdx:()=>Pt,dFdy:()=>Gt,default:()=>hr,defaultFragmentGLSL:()=>ye,defaultVertexGLSL:()=>ve,degrees:()=>St,difference:()=>At,dig:()=>$e,distance:()=>Ft,dot:()=>Ut,each:()=>xe,equals:()=>Nt,exp:()=>zt,exp2:()=>Bt,ext:()=>ze,f:()=>s,faceforward:()=>$t,fig:()=>Be,float:()=>Ze,floor:()=>It,flush:()=>Ue,fract:()=>Ct,fragCoord:()=>He,fragment:()=>G,fwidth:()=>Mt,getId:()=>P,getStride:()=>ee,iMouse:()=>je,iResolution:()=>ke,iTime:()=>Ke,inferType:()=>_,int:()=>Qe,inverseSqrt:()=>Ot,is:()=>x,isFunction:()=>j,isGL:()=>yr,isNodeType:()=>Me,isOperator:()=>k,isServer:()=>Te,isSwizzle:()=>N,isWebGPUSupported:()=>Ee,ivec2:()=>at,ivec3:()=>ut,ivec4:()=>ct,joins:()=>z,length:()=>Dt,lengthSq:()=>Wt,log:()=>qt,log2:()=>Vt,mat2:()=>nt,mat3:()=>st,mat4:()=>it,max:()=>Yt,min:()=>kt,mix:()=>jt,n:()=>d,negate:()=>Kt,node:()=>l,normalize:()=>Ht,o:()=>be,oneMinus:()=>Zt,pow:()=>Qt,pow2:()=>Jt,pow3:()=>er,pow4:()=>tr,radians:()=>rr,reciprocal:()=>or,reflect:()=>nr,refract:()=>sr,replace:()=>Ne,round:()=>ir,s:()=>H,saturate:()=>ar,sig:()=>Ie,sign:()=>ur,sin:()=>cr,smoothstep:()=>fr,sqrt:()=>pr,step:()=>mr,tan:()=>lr,toVar:()=>$,transformDirection:()=>xr,trunc:()=>dr,u:()=>F,uint:()=>Je,uvec2:()=>ft,uvec3:()=>pt,uvec4:()=>mt,v:()=>Ye,vec2:()=>tt,vec3:()=>rt,vec4:()=>ot,vertex:()=>S,webgl:()=>oe,webgpu:()=>me});module.exports=Fe(Tr);var L=require("reev"),M=require("refr");var I=require("reev");var x={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)},xe=(e,t)=>e.forEach(t),Ue=(e,...t)=>{xe(e,r=>r(...t))},Ne=(e="",t="_",r="/")=>e.split(t).join(r),ze=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",Be=(e=0)=>`${e}`.split(".")[1]?.length??0,$e=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),Ie=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var Ce=["x","y","z","w","r","g","b","a","s","t","p","q"],W=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],U={add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},q=Object.keys(U),V=["abs","acos","asin","atan","atan2","ceil","clamp","cos","cross","degrees","distance","dot","exp","exp2","faceforward","floor","fract","length","all","any","bitcast","cbrt","dFdx","dFdy","difference","equals","fwidth","inverseSqrt","lengthSq","log","log2","max","min","mix","negate","normalize","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","round","saturate","sign","sin","smoothstep","sqrt","step","tan","transformDirection","trunc"],Y={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>"};var N=e=>x.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),k=e=>q.includes(e),Me=e=>W.includes(e),j=e=>V.includes(e),Oe=0,P=()=>`i${Oe++}`,z=(e,t)=>e.filter(r=>!x.und(r)&&!x.nul(r)).map(r=>c(r,t)).join(", "),_=(e,t)=>{if(!e||typeof e!="object")return"float";let{type:r,props:o}=e,{children:n=[]}=o,[i,a,f]=n;if(r==="node_type")return i;if(r==="operator"){let v=_(a,t),m=_(f,t);return v===m||v.includes("vec")?v:m.includes("vec")?m:"float"}return r==="math_fun"?["normalize","cross","reflect"].includes(i)?_(n[1],t):(["dot","distance","length"].includes(i),"float"):"float"},de=e=>!e.uniforms||e.uniforms.size===0?"":Array.from(e.uniforms).map((r,o)=>e.isWebGL?`uniform vec2 ${r};`:`@group(0) @binding(${o}) var<uniform> ${r}: vec2f;`).join(`
2
+ `)+`
3
+ `,ge=(e,t,r=!0)=>r?`
4
+ ${t}
5
+ #version 300 es
6
+ precision mediump float;
7
+ uniform vec2 iResolution;
8
+ uniform vec2 iMouse;
9
+ uniform float iTime;
10
+ out vec4 fragColor;
11
+ void main() {
12
+ ${e}
13
+ }`.trim():`
14
+ @group(0) @binding(0) var<uniform> iResolution: vec2f;
15
+ @group(0) @binding(1) var<uniform> iMouse: vec2f;
16
+ @group(0) @binding(2) var<uniform> iTime: f32;
17
+ ${t}
18
+ @fragment
19
+ fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
20
+ ${e}
21
+ }`.trim(),G=(e,t)=>{let r=c(e,t),o=de(t);return ge(r,o,t.isWebGL)},S=(e,t)=>{let r=c(e,t),o=de(t);return ge(r,o,t.isWebGL)};var c=(e,t)=>{if(t||(t={}),t.uniforms||(t.uniforms=new Set),x.num(e))return e.toFixed(1);if(x.str(e))return e;if(!e)return"";let{type:r,props:o}=e,{id:n="",children:i=[]}=o,[a,f,v]=i;if(r==="uniform")return t.uniforms.add(n),t.onUniform?.(n,o.defaultValue),n;if(r==="variable")return n;if(r==="swizzle")return`${c(f,t)}.${c(a,t)}`;if(r==="node_type"){if(!x.str(a))return n;let m=!t.isWebGL&&a.startsWith("vec")?`${a}f`:a,X=z(i.slice(1),t);return`${m}(${X})`}if(r==="operator"){if(a==="not"||a==="bitNot")return`!${c(f,t)}`;let m=U[a];return`(${c(f,t)} ${m} ${c(v,t)})`}if(r==="math_fun")return`${a}(${z(i.slice(1),t)})`;if(r==="assign")return`${c(a,t)} = ${c(f,t)};`;if(r==="scope")return i.map(m=>c(m,t)).join(`
22
+ `);if(r==="loop")return`for (int i = 0; i < ${a}; i++) {
23
+ ${c(f,t)}
24
+ }`;if(r==="fn"){let m=c(a,t);return f&&(m+=`
25
+ return ${c(f,t)};`),m}if(r==="if"){let m=`if (${c(a,t)}) {
26
+ ${c(f,t)}
27
+ }`;for(let X=2;X<i.length;X+=2){let R=X>=i.length-1;m+=R?` else {
28
+ ${c(i[X],t)}
29
+ }`:` else if (${c(i[X],t)}) {
30
+ ${c(i[X+1],t)}
31
+ }`}return m}if(r==="declare"){let m=_(f,t),X=a?.props?.id;if(t.isWebGL)return`${m} ${X} = ${c(f,t)};`;let R=Y[m];return`var ${X}: ${R} = ${c(f,t)};`}return c(a,t)};var w=null,A=(e,t=()=>{})=>{let r=w;w=e,t(),w=r},B=e=>{w&&(w.props.children||(w.props.children=[]),w.props.children.push(e))},De=(e,t)=>{let r=l("scope");A(r,t);let o=l("if",null,e,r);return B(o),{ElseIf:(n,i)=>{let a=l("scope");A(a,i),o.props.children.push(n,a)},Else:n=>{let i=l("scope");A(i,n),o.props.children.push(i)}}},We=(e,t)=>{let r=l("scope");A(r,()=>t?.({i:l("variable",{id:"i"})}));let o=l("loop",null,e,r);return B(o),o},qe=e=>(...t)=>{let r,o=l("scope");return A(o,()=>r=e(t)),l("fn",null,o,r)},$=e=>t=>{t||(t=P());let r=l("variable",{id:t}),o=l("declare",null,r,e);return B(o),r},K=e=>t=>{let r=l("assign",null,e,t);return B(r),e};var Ve=e=>t=>{if(t==="string")return c(e)},l=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let o=new Proxy(()=>{},{get(n,i){return i==="type"?e:i==="props"?t:i==="toVar"?$(o):i==="assign"?K(o):i==="isProxy"?!0:i==="toString"?c.bind(null,o):i===Symbol.toPrimitive?Ve(o):N(i)?H(i,o):k(i)?(...a)=>be(i,o,...a):j(i)?(...a)=>s(i,o,...a):$(o)("")},set(n,i,a){return N(i)?(H(i,o).assign(a),!0):!1}});return o},Ye=(...e)=>l("variable",{id:P()},...e),F=(e,t)=>l("uniform",{defaultValue:t},e),H=(e,t)=>l("swizzle",null,e,t),d=(e,...t)=>l("node_type",null,e,...t),be=(e,...t)=>l("operator",null,e,...t),s=(e,...t)=>l("math_fun",null,e,...t);var ke=F("iResolution",[1280,800]),je=F("iMouse",[0,0]),Ke=F("iTime",0),He=l("variable",{id:"fragCoord"}),Ze=e=>d("float",e),Qe=e=>d("int",e),Je=e=>d("uint",e),et=e=>d("bool",e),tt=(e,t)=>d("vec2",e,t),rt=(e,t,r)=>d("vec3",e,t,r),ot=(e,t,r,o)=>d("vec4",e,t,r,o),nt=(...e)=>d("mat2",...e),st=(...e)=>d("mat3",...e),it=(...e)=>d("mat4",...e),at=(e,t)=>d("ivec2",e,t),ut=(e,t,r)=>d("ivec3",e,t,r),ct=(e,t,r,o)=>d("ivec4",e,t,r,o),ft=(e,t)=>d("uvec2",e,t),pt=(e,t,r)=>d("uvec3",e,t,r),mt=(e,t,r,o)=>d("uvec4",e,t,r,o),lt=(e,t)=>d("bvec2",e,t),xt=(e,t,r)=>d("bvec3",e,t,r),dt=(e,t,r,o)=>d("bvec4",e,t,r,o),gt=e=>s("abs",e),bt=e=>s("acos",e),Xt=e=>s("all",e),vt=e=>s("any",e),yt=e=>s("asin",e),ht=(e,t)=>s("atan",e,t),Tt=(e,t)=>s("bitcast",e,t),Et=e=>s("cbrt",e),wt=e=>s("ceil",e),Rt=(e,t,r)=>s("clamp",e,t,r),_t=e=>s("cos",e),Lt=(e,t)=>s("cross",e,t),Pt=e=>s("dFdx",e),Gt=e=>s("dFdy",e),St=e=>s("degrees",e),At=(e,t)=>s("difference",e,t),Ft=(e,t)=>s("distance",e,t),Ut=(e,t)=>s("dot",e,t),Nt=(e,t)=>s("equals",e,t),zt=e=>s("exp",e),Bt=e=>s("exp2",e),$t=(e,t,r)=>s("faceforward",e,t,r),It=e=>s("floor",e),Ct=e=>s("fract",e),Mt=e=>s("fwidth",e),Ot=e=>s("inverseSqrt",e),Dt=e=>s("length",e),Wt=e=>s("lengthSq",e),qt=e=>s("log",e),Vt=e=>s("log2",e),Yt=(e,t)=>s("max",e,t),kt=(e,t)=>s("min",e,t),jt=(e,t,r)=>s("mix",e,t,r),Kt=e=>s("negate",e),Ht=e=>s("normalize",e),Zt=e=>s("oneMinus",e),Qt=(e,t)=>s("pow",e,t),Jt=e=>s("pow2",e),er=e=>s("pow3",e),tr=e=>s("pow4",e),rr=e=>s("radians",e),or=e=>s("reciprocal",e),nr=(e,t)=>s("reflect",e,t),sr=(e,t,r)=>s("refract",e,t,r),ir=e=>s("round",e),ar=e=>s("saturate",e),ur=e=>s("sign",e),cr=e=>s("sin",e),fr=(e,t,r)=>s("smoothstep",e,t,r),pr=e=>s("sqrt",e),mr=(e,t)=>s("step",e,t),lr=e=>s("tan",e),xr=(e,t)=>s("transformDirection",e,t),dr=e=>s("trunc",e);var ve=`
13
32
  #version 300 es
14
33
  void main() {
15
34
  float x = float(gl_VertexID % 2) * 4.0 - 1.0;
16
35
  float y = float(gl_VertexID / 2) * 4.0 - 1.0;
17
36
  gl_Position = vec4(x, y, 0.0, 1.0);
18
37
  }
19
- `,he=`
38
+ `,ye=`
20
39
  #version 300 es
21
40
  precision mediump float;
22
41
  uniform vec2 iResolution;
@@ -24,25 +43,19 @@ out vec4 fragColor;
24
43
  void main() {
25
44
  fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
26
45
  }
27
- `,de=(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);throw e.deleteShader(n),new Error(`Could not compile shader: ${o}`)},z=(e,t=ge,r=he)=>{i.obj(r)&&(r=C(r)),i.obj(t)&&(t=C(t));let n=e.createProgram();if(e.attachShader(n,de(e,t,e.VERTEX_SHADER)),e.attachShader(n,de(e,r,e.FRAGMENT_SHADER)),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS))return n;let o=e.getProgramInfoLog(n);throw e.deleteProgram(n),new Error(`Could not link pg: ${o}`)},O=(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},W=(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},D=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},q=(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)},V=(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 j=async e=>{let t=e.el.getContext("webgl2"),r=z(t,e.vs,e.fs),n={context:t,program:r};t.useProgram(r);let o=0,a=(0,G.nested)(h=>t.getUniformLocation(r,h)),u=(0,G.nested)(h=>t.getAttribLocation(r,h)),p=(0,G.nested)(()=>o++);return{webgl:n,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(h="",b,x)=>{let T=u(h,!0),l=O(t,b),f=W(t,x),c=D(e.count,b,x);q(t,c,T,l,f)},_uniform:(h,b)=>{let x=a(h);if(i.num(b))return t.uniform1f(x,b);let T=b.length;if(T<=4)return t[`uniform${T}fv`](x,b);T=Math.sqrt(T)<<0,t[`uniformMatrix${T}fv`](x,!1,b)},_texture:(h,b)=>{let x=new Image;Object.assign(x,{src:b,crossOrigin:"anonymous"}),x.decode().then(()=>{let T=a(h),l=p(h);V(t,x,T,l)})}}};var _=require("reev");var be=(e,t)=>{let r={target:"webgpu",nodes:new Map,variables:new Map,functions:new Map,...t};return N(e,r)},N=(e,t)=>e?e.value!==void 0?qe(e.value,e.type):e.property&&e.parent?`${N(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?Ve(e,t):e.mathFunction&&e.children&&e.children.length>=1?je(e,t):"0.0":"0.0",qe=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2<f32>(${r})`;if(t==="vec3")return`vec3<f32>(${r})`;if(t==="vec4")return`vec4<f32>(${r})`;if(t==="color")return`vec3<f32>(${r})`}return"0.0"},Ve=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=N(e.children[0],t),n=N(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`(${r} % ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},je=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(p=>N(p,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},R=(e,t)=>{let r="";t?.uniforms&&(Object.entries(t.uniforms).forEach(([o,a])=>{let u=ke(a);r+=`@group(0) @binding(0) var<uniform> ${o}: ${u};
28
- `}),r+=`
29
- `),r+=`@fragment
30
- `,r+=`fn main() -> @location(0) vec4<f32> {
31
- `;let n=be(e);return r+=` return ${n};
32
- `,r+=`}
33
- `,r},ke=e=>{if(i.num(e))return"f32";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2<f32>";if(t===3)return"vec3<f32>";if(t===4)return"vec4<f32>"}return"f32"};var Ye=`
46
+ `,Xe=(e,t,r)=>{let o=e.createShader(r);if(!o)throw new Error("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let n=e.getShaderInfoLog(o);e.deleteShader(o),console.warn(`Could not compile shader: ${n}`)},Z=(e,t=ve,r=ye)=>{x.str(r)||(r=G(r,{isWebGL:!0})),x.str(t)||(t=S(r,{isWebGL:!0}));let o=e.createProgram(),n=Xe(e,t,e.VERTEX_SHADER),i=Xe(e,r,e.FRAGMENT_SHADER);if(!n||!i)return;if(e.attachShader(o,n),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let a=e.getProgramInfoLog(o);e.deleteProgram(o),console.warn(`Could not link pg: ${a}`)},Q=(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},J=(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},ee=(e,t,r)=>{r&&(e=Math.max(...r)+1);let o=t.length/e;return Math.floor(o)},te=(e,t,r,o,n)=>{e.bindBuffer(e.ARRAY_BUFFER,o),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),n&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)},re=(e,t,r,o)=>{let n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),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,o),e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,n)};var oe=async e=>{let t=e.el.getContext("webgl2"),r=Z(t,e.vs,e.fs),o={context:t,program:r};t.useProgram(r);let n=0,i=(0,I.nested)(y=>t.getUniformLocation(r,y)),a=(0,I.nested)(y=>t.getAttribLocation(r,y)),f=(0,I.nested)(()=>n++);return{webgl:o,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(y="",h,T)=>{let E=a(y,!0),b=Q(t,h),u=J(t,T),p=ee(e.count,h,T);te(t,p,E,b,u)},_uniform:(y,h)=>{let T=i(y);if(x.num(h))return t.uniform1f(T,h);let E=h.length;if(E<=4)return t[`uniform${E}fv`](T,h);E=Math.sqrt(E)<<0,t[`uniformMatrix${E}fv`](T,!1,h)},_texture:(y,h)=>{let T=new Image;Object.assign(T,{src:h,crossOrigin:"anonymous"}),T.decode().then(()=>{let E=i(y),b=f(y);re(t,T,E,b)})}}};var C=require("reev");var gr=`
34
47
  @vertex
35
48
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
36
49
  let x = f32(vertex_index % 2u) * 4.0 - 1.0;
37
50
  let y = f32(vertex_index / 2u) * 4.0 - 1.0;
38
51
  return vec4f(x, y, 0.0, 1.0);
39
52
  }
40
- `,He=`
53
+ `,br=`
41
54
  @group(0) @binding(0) var<uniform> iResolution: vec2f;
42
55
 
43
56
  @fragment
44
57
  fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
45
58
  return vec4f(position.xy / iResolution, 0.0, 1.0);
46
59
  }
47
- `,k=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}},Y=(e,t,r,n,o=Ye,a=He)=>{i.obj(a)&&(a=R(a)),i.obj(o)&&(o=R(o));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:a.trim()}),entryPoint:"main",targets:[{format:t}]},layout:u,primitive:{topology:"triangle-list"}})},H=(e,t)=>{let r=[],n=[];t.forEach((u,p)=>{if(!u)return;let y="buffer"in u,E=u instanceof GPUTextureView,d=u instanceof GPUSampler;if(y)r.push({binding:p,visibility:3,buffer:{type:"uniform"}});else if(E)r.push({binding:p,visibility:2,texture:{}});else if(d)r.push({binding:p,visibility:2,sampler:{}});else return;n.push({binding:p,resource:u})});let o=e.createBindGroupLayout({entries:r}),a=e.createBindGroup({layout:o,entries:n});return{layout:o,bindGroup:a}},K=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),xe=e=>Math.ceil(e/256)*256,Z=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:n}},Q=(e,t)=>{let r=new Float32Array(t),n=xe(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},J=(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}},Ke=(e,t)=>e/t,Ze=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",ee=(e,t,r=6)=>{let n=Ke(t,r);return{arrayStride:n*4,attributes:[{shaderLocation:e,offset:0,format:Ze(n)}]}};var te=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await k(t),o={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},a=[],u=[],p=[],y=(0,_.nested)((l,f)=>{let{array:c,buffer:m}=Z(r,f);return u.push(m),p.push(ee(p.length,c.length,e.count)),o.needsUpdate=!0,{array:c,buffer:m}}),E=(0,_.nested)((l,f)=>{let{array:c,buffer:m}=Q(r,f);return o.resources[0].push({buffer:m}),o.needsUpdate=!0,{array:c,buffer:m}}),d=(0,_.nested)((l,{width:f,height:c})=>{let{texture:m,sampler:B}=J(r,f,c);return o.resources[1].push(B,m.createView()),o.needsUpdate=!0,{texture:m,width:f,height:c}}),g=()=>{let l=[];a.length=0,o.resources.forEach(f=>{if(!f.length)return;let{layout:c,bindGroup:m}=H(r,f);l.push(c),a.push(m)}),o.pipeline=Y(r,n,p,l,e.vs,e.fs)};return{webgpu:o,render:()=>{if(o.loadingImg)return;o.needsUpdate&&g(),o.needsUpdate=!1;let l=r.createCommandEncoder(),f=l.beginRenderPass(K(t));f.setPipeline(o.pipeline),a.forEach((c,m)=>f.setBindGroup(m,c)),u.forEach((c,m)=>f.setVertexBuffer(m,c)),f.draw(e.count,1,0,0),f.end(),r.queue.submit([l.finish()])},clean:()=>{},_attribute:(l="",f)=>{let{array:c,buffer:m}=y(l,f);r.queue.writeBuffer(m,0,c)},_uniform:(l,f)=>{i.num(f)&&(f=[f]);let{array:c,buffer:m}=E(l,f);c.set(f),r.queue.writeBuffer(m,0,c)},_texture:(l,f)=>{o.loadingImg++;let c=Object.assign(new Image,{src:f,crossOrigin:"anonymous"});c.decode().then(()=>{let{texture:m,width:B,height:Se}=d(l,c);r.queue.copyExternalImageToTexture({source:c},{texture:m},{width:B,height:Se}),o.loadingImg--})}}};var Qe=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],re=["x","y","z","w","r","g","b","a","s","t","p","q"],ne=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],oe=["abs","acos","asin","atan","atan2","ceil","clamp","cos","cross","degrees","distance","dot","exp","exp2","faceforward","floor","fract","length","all","any","bitcast","cbrt","dFdx","dFdy","difference","equals","fwidth","inverseSqrt","lengthSq","log","log2","max","min","mix","negate","normalize","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","round","saturate","sign","sin","smoothstep","sqrt","step","tan","transformDirection","trunc"],ie=[!0,!1],ae=[0,1,2,3,4,5],se=[0,1,.5,2];var ue=new Map,fe=new Map,ce=new Map,Je=()=>{ie.forEach(e=>{ue.set(e,s("bool",e))}),ae.forEach(e=>{fe.set(e,s("int",e))}),se.forEach(e=>{ce.set(e,s("float",e))})},U=e=>(ue.has(e)||Je(),ue.get(e)||s("bool",e)),X=e=>fe.has(e)?fe.get(e):s("int",e),A=e=>ce.has(e)?ce.get(e):s("float",e),et=e=>{let t=new Map,r=new Map;return e.forEach(n=>{let o=tt(n);r.has(o)?(t.has(o)||t.set(o,[r.get(o)]),t.get(o).push(n)):r.set(o,n)}),t},tt=e=>[e.type,`${e.value}`,e.property||""].join("|");var rt=e=>i.bol(e)?U(e):i.num(e)?i.int(e)?X(e):A(e):i.arr(e)?ye(e):i.obj(e)?nt(e):s("float",0),ye=e=>{let t=e.length;return t===2?s("vec2",e):t===3?s("vec3",e):t===4?s("vec4",e):t===9?s("mat3",e):t===16?s("mat4",e):s("float",e[0])},nt=e=>{if("r"in e&&"g"in e&&"b"in e){let t=[e.r,e.g,e.b];return"a"in e&&t.push(e.a),s("color",t)}if("x"in e&&"y"in e){let t=[e.x,e.y];return"z"in e&&t.push(e.z),"w"in e&&t.push(e.w),ye(t)}return s("float",0)},F=e=>i.num(e)?A(e):s("float",Number(e)),ot=e=>i.num(e)&&Number.isInteger(e)?X(e):s("int",Math.floor(Number(e))),it=e=>U(!!e),at=(e,t)=>i.und(e)?s("vec2",[0,0]):i.und(t)?i.arr(e)?s("vec2",e.slice(0,2)):i.obj(e)&&"x"in e&&"y"in e?s("vec2",[e.x,e.y]):s("vec2",[Number(e),Number(e)]):s("vec2",[Number(e),Number(t)]),Te=(e,t,r)=>i.und(e)?s("vec3",[0,0,0]):i.und(t)?i.arr(e)?s("vec3",e.slice(0,3)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e?s("vec3",[e.x,e.y,e.z]):s("vec3",[Number(e),Number(e),Number(e)]):r===void 0?s("vec3",[Number(e),Number(t),0]):s("vec3",[Number(e),Number(t),Number(r)]),st=(e,t,r,n)=>i.und(e)?s("vec4",[0,0,0,1]):i.und(t)?i.arr(e)?s("vec4",e.slice(0,4)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e&&"w"in e?s("vec4",[e.x,e.y,e.z,e.w]):s("vec4",[Number(e),Number(e),Number(e),1]):s("vec4",[Number(e),Number(t),Number(r),Number(n)]),ut=(e,t,r)=>{if(e===void 0)return s("color",[1,1,1]);if(i.str(e)&&e.startsWith("#")){let n=e.slice(1),o=parseInt(n,16);return s("color",[(o>>16&255)/255,(o>>8&255)/255,(o&255)/255])}return i.num(e)&&t===void 0&&r===void 0?s("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):Te(e,t,r)};var ft=0,ct=()=>`node_${++ft}`,S=(e,t,r)=>({id:ct(),type:e,value:t,children:[],...r}),pt=(e="")=>re.includes(e),mt=(e="")=>ne.includes(e),lt=(e="")=>oe.includes(e),P=(e,t)=>{let r=(o,a)=>{if(!(!i.str(a)||a==="then"))return a==="id"?e.id:a==="type"?e.type:a==="value"?e.value:a==="property"?e.property:pt(a)?P(S(dt(a),void 0,{parent:e,property:a}),t):mt(a)?(...u)=>P(S(e.type,void 0,{operator:a,children:[e,...u]}),t):lt(a)?(...u)=>P(S(gt(a,e.type),void 0,{mathFunction:a,children:[e,...u]}),t):t?.({path:[a],args:[]})},n=(o,a,u)=>t?.({path:[],args:u});return new Proxy(()=>{},{get:r,apply:n})},dt=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",gt=(e,t)=>e==="length"?"float":t,s=(e,t,r)=>{let n=S(e,t,r);return P(n)};var ht=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4";if(t===9)return"mat3";if(t===16)return"mat4"}return i.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},v=e=>{let t=ht(e),r=e,n=null,o=null,a=s(t,r),u=g=>{r=g,a.value=g},p=g=>(n=g,d),y=g=>(o=g,d),E=g=>{if(n){let $=n(g);$!==void 0&&u($)}if(o){let $=o(g);$!==void 0&&u($)}},d=Object.create(a);return d.set=u,d.onObjectUpdate=p,d.onRenderUpdate=y,d._updateFromContext=E,d.isUniform=!0,d},ve=v(0),Ee=v(0),$e=v(0),gr=v([1920,1080]),hr=v([0,0]),bt=e=>{if(e.time!==void 0){let t=ve.value||0;ve.set(e.time),Ee.set(t),$e.set(e.time-t)}};var xt=e=>{let t=(...r)=>{let n=r.map(a=>i.obj(a)&&"type"in a&&a.type?a:F(a));return e(n)||F(0)};return t.call=r=>e(r),t},yt=(e,t)=>{t();let r={ElseIf(n,o){return o(),r},Else(n){n()}};return r},Tt=s("vec4",void 0),vt=s("vec4",void 0),Et=v(0),$t=v([1920,1080]),wt=v([0,0]),Lt=e=>e.abs(),Nt=e=>e.sin(),St=e=>e.cos(),Ct=e=>e.tan(),Gt=e=>e.sqrt(),Rt=e=>e.floor(),_t=e=>e.ceil(),Ut=e=>e.fract(),Xt=e=>e.normalize(),At=e=>e.length();var Ft=e=>i.obj(e)?"isGL"in e:!1,we=()=>typeof window>"u",Le=()=>we()?!1:"gpu"in navigator,pe=performance.now(),Ne=e=>{let t=(0,w.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=(0,M.createQueue)(),t.frame=(0,M.createFrame)(),t.attribute=(0,w.durable)((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=(0,w.durable)((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=(0,w.durable)((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:pe}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Le()||(t.isWebGL=!0),t.isWebGL?t(await j(t)):t(await te(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[a,u]=t.size,{top:p,left:y}=t.el.getBoundingClientRect();t.mouse[0]=(n-p-a/2)/(a/2),t.mouse[1]=-(o-y-u/2)/(u/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{pe=performance.now()/1e3,t.uniform("iTime",pe)}),t(e)},Pt=Ne;0&&(module.exports={CACHE_BOOLS,CACHE_FLOATS,CACHE_INTS,FUNCTIONS,Fn,If,OPERATORS,SWIZZLES,TYPES,abs,alignTo256,bool,ceil,color,convertToNode,cos,createAttrib,createBindGroup,createBufferLayout,createDescriptor,createDevive,createGL,createIbo,createNode,createPipeline,createProgram,createTexture,createTextureSampler,createUniformBuffer,createVbo,createVertexBuffer,defaultFragmentGLSL,defaultVertexGLSL,dig,each,ext,fig,findDuplicateNodes,float,floor,flush,fract,fragCoord,getCachedBool,getCachedFloat,getCachedInt,getStride,glsl,iDeltaTime,iMouse,iPrevTime,iResolution,iTime,int,is,isGL,isServer,isWebGPUSupported,length,node,nodeToGLSL,nodeToWGSL,normalize,position,replace,sig,sin,sqrt,tan,uniform,updateUniforms,vec2,vec3,vec4,webgl,webgpu,wgsl});
60
+ `,ne=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),n=await(await t.requestAdapter()).requestDevice();return e.configure({device:n,format:r,alphaMode:"opaque"}),{device:n,format:r}},se=(e,t,r,o,n=gr,i=br)=>{x.str(i)||(i=G(i,{isWebGL:!1})),x.str(n)||(n=S(n,{isWebGL:!1}));let a=e.createPipelineLayout({bindGroupLayouts:o});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:n.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:i.trim()}),entryPoint:"main",targets:[{format:t}]},layout:a,primitive:{topology:"triangle-list"}})},ie=(e,t)=>{let r=[],o=[];t.forEach((a,f)=>{if(!a)return;let v="buffer"in a,m=a instanceof GPUTextureView,X=a instanceof GPUSampler;if(v)r.push({binding:f,visibility:3,buffer:{type:"uniform"}});else if(m)r.push({binding:f,visibility:2,texture:{}});else if(X)r.push({binding:f,visibility:2,sampler:{}});else return;o.push({binding:f,resource:a})});let n=e.createBindGroupLayout({entries:r}),i=e.createBindGroup({layout:n,entries:o});return{layout:n,bindGroup:i}},ae=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),he=e=>Math.ceil(e/256)*256,ue=(e,t)=>{let r=new Float32Array(t),o=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:o}},ce=(e,t)=>{let r=new Float32Array(t),o=he(r.byteLength),n=e.createBuffer({size:o,usage:72});return{array:r,buffer:n}},fe=(e,t=1280,r=800)=>{let o=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),n=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:o,sampler:n}},Xr=(e,t)=>e/t,vr=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",pe=(e,t,r=6)=>{let o=Xr(t,r);return{arrayStride:o*4,attributes:[{shaderLocation:e,offset:0,format:vr(o)}]}};var me=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:o}=await ne(t),n={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},i=[],a=[],f=[],v=(0,C.nested)((b,u)=>{let{array:p,buffer:g}=ue(r,u);return a.push(g),f.push(pe(f.length,p.length,e.count)),n.needsUpdate=!0,{array:p,buffer:g}}),m=(0,C.nested)((b,u)=>{let{array:p,buffer:g}=ce(r,u);return n.resources[0].push({buffer:g}),n.needsUpdate=!0,{array:p,buffer:g}}),X=(0,C.nested)((b,{width:u,height:p})=>{let{texture:g,sampler:O}=fe(r,u,p);return n.resources[1].push(O,g.createView()),n.needsUpdate=!0,{texture:g,width:u,height:p}}),R=()=>{let b=[];i.length=0,n.resources.forEach(u=>{if(!u.length)return;let{layout:p,bindGroup:g}=ie(r,u);b.push(p),i.push(g)}),n.pipeline=se(r,o,f,b,e.vs,e.fs)};return{webgpu:n,render:()=>{if(n.loadingImg)return;n.needsUpdate&&R(),n.needsUpdate=!1;let b=r.createCommandEncoder(),u=b.beginRenderPass(ae(t));u.setPipeline(n.pipeline),i.forEach((p,g)=>u.setBindGroup(g,p)),a.forEach((p,g)=>u.setVertexBuffer(g,p)),u.draw(e.count,1,0,0),u.end(),r.queue.submit([b.finish()])},clean:()=>{},_attribute:(b="",u)=>{let{array:p,buffer:g}=v(b,u);r.queue.writeBuffer(g,0,p)},_uniform:(b,u)=>{x.num(u)&&(u=[u]);let{array:p,buffer:g}=m(b,u);p.set(u),r.queue.writeBuffer(g,0,p)},_texture:(b,u)=>{n.loadingImg++;let p=Object.assign(new Image,{src:u,crossOrigin:"anonymous"});p.decode().then(()=>{let{texture:g,width:O,height:_e}=X(b,p);r.queue.copyExternalImageToTexture({source:p},{texture:g},{width:O,height:_e}),n.loadingImg--})}}};var yr=e=>x.obj(e)?"isGL"in e:!1,Te=()=>typeof window>"u",Ee=()=>Te()?!1:"gpu"in navigator,le=performance.now(),we=e=>{let t=(0,L.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=(0,M.createQueue)(),t.frame=(0,M.createFrame)(),t.attribute=(0,L.durable)((r,o,n)=>t.queue(()=>t._attribute?.(r,o,n))),t.texture=(0,L.durable)((r,o)=>t.queue(()=>t._texture?.(r,o))),t.uniform=(0,L.durable)((r,o,n)=>t.queue(()=>t._uniform?.(r,o,n))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:le}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Ee()||(t.isWebGL=!0),t.isWebGL?t(await oe(t)):t(await me(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,o=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=o,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,n=r.clientY)=>{let[i,a]=t.size,{top:f,left:v}=t.el.getBoundingClientRect();t.mouse[0]=(o-f-i/2)/(i/2),t.mouse[1]=-(n-v-a/2)/(a/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{le=performance.now()/1e3,t.uniform("iTime",le)}),t(e)},hr=we;0&&(module.exports={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,uvec2,uvec3,uvec4,v,vec2,vec3,vec4,vertex,webgl,webgpu});
48
61
  //# sourceMappingURL=index.js.map