glre 0.28.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.
package/dist/index.d.cts CHANGED
@@ -2,6 +2,7 @@ import * as refr from 'refr';
2
2
  import { Queue, Frame } from 'refr';
3
3
  export { Frame, Fun, Queue } from 'refr';
4
4
  import { EventState } from 'reev';
5
+ import { NodeProps as NodeProps$1 } from './../../../../node_modules/glre/src/node/types';
5
6
 
6
7
  declare const SWIZZLES: readonly ["x", "y", "z", "w", "r", "g", "b", "a", "s", "t", "p", "q"];
7
8
  declare const CONSTANTS: readonly ["bool", "uint", "int", "float", "bvec2", "bvec3", "bvec4", "ivec2", "ivec3", "ivec4", "uvec2", "uvec3", "uvec4", "vec2", "vec3", "vec4", "color", "mat2", "mat3", "mat4"];
@@ -66,14 +67,46 @@ declare const COMPONENT_COUNT_TO_TYPE: {
66
67
  readonly 16: "mat4";
67
68
  };
68
69
  declare const BUILTIN_TYPES: {
70
+ readonly position: "vec4";
71
+ readonly vertex_index: "uint";
72
+ readonly instance_index: "uint";
73
+ readonly front_facing: "bool";
74
+ readonly frag_depth: "float";
75
+ readonly sample_index: "uint";
76
+ readonly sample_mask: "uint";
77
+ readonly point_coord: "vec2";
78
+ readonly positionLocal: "vec3";
79
+ readonly positionWorld: "vec3";
80
+ readonly positionView: "vec3";
81
+ readonly normalLocal: "vec3";
82
+ readonly normalWorld: "vec3";
83
+ readonly normalView: "vec3";
84
+ readonly screenCoordinate: "vec2";
85
+ readonly screenUV: "vec2";
69
86
  readonly gl_FragCoord: "vec4";
70
- readonly position: "vec3";
87
+ readonly gl_VertexID: "uint";
88
+ readonly gl_InstanceID: "uint";
89
+ readonly gl_FrontFacing: "bool";
90
+ readonly gl_FragDepth: "float";
91
+ readonly gl_SampleID: "uint";
92
+ readonly gl_SampleMask: "uint";
93
+ readonly gl_PointCoord: "vec2";
71
94
  readonly normal: "vec3";
72
95
  readonly uv: "vec2";
73
96
  readonly color: "vec4";
74
97
  };
75
98
  declare const COMPARISON_OPERATORS: readonly ["equal", "notEqual", "lessThan", "lessThanEqual", "greaterThan", "greaterThanEqual"];
76
99
  declare const LOGICAL_OPERATORS: readonly ["and", "or"];
100
+ declare const WGSL_TO_GLSL_BUILTIN: {
101
+ readonly position: "gl_FragCoord";
102
+ readonly vertex_index: "gl_VertexID";
103
+ readonly instance_index: "gl_InstanceID";
104
+ readonly front_facing: "gl_FrontFacing";
105
+ readonly frag_depth: "gl_FragDepth";
106
+ readonly sample_index: "gl_SampleID";
107
+ readonly sample_mask: "gl_SampleMask";
108
+ readonly point_coord: "gl_PointCoord";
109
+ };
77
110
 
78
111
  type Constants = (typeof CONSTANTS)[number] | 'void';
79
112
  type Conversions = (typeof CONVERSIONS)[number];
@@ -84,22 +117,18 @@ interface NodeProps {
84
117
  args?: X[];
85
118
  type?: string;
86
119
  children?: X[];
87
- returnType?: Constants;
88
120
  value?: number | number[] | boolean;
89
- paramInfo?: Array<{
90
- name: string;
91
- type: string;
92
- }>;
93
121
  }
94
122
  interface NodeConfig {
95
123
  isWebGL?: boolean;
96
- uniforms?: Set<string>;
97
- functions?: Set<string>;
98
- onUniform?: (name: string, value: any) => void;
124
+ binding?: number;
125
+ infers?: WeakMap<NodeProxy, Constants>;
126
+ headers?: Map<string, string>;
127
+ onMount?: (name: string, value: any) => void;
99
128
  }
100
129
  type _Swizzles<T extends string> = T | `${T}${T}` | `${T}${T}${T}` | `${T}${T}${T}${T}`;
101
130
  type Swizzles = _Swizzles<'x' | 'y' | 'z' | 'w'> | _Swizzles<'r' | 'g' | 'b' | 'a'> | _Swizzles<'p' | 'q'> | _Swizzles<'s' | 't'>;
102
- type NodeTypes = 'uniform' | 'variable' | 'swizzle' | 'operator' | 'conversions' | 'math_fun' | 'declare' | 'assign' | 'fn_def' | 'fn_run' | 'if' | 'loop' | 'scope' | 'switch' | 'case' | 'default' | 'ternary' | 'attribute' | 'varying' | 'builtin' | 'constant' | 'vertex_stage';
131
+ type NodeTypes = 'uniform' | 'variable' | 'swizzle' | 'operator' | 'conversion' | 'function' | 'declare' | 'assign' | 'define' | 'if' | 'loop' | 'scope' | 'switch' | 'ternary' | 'attribute' | 'varying' | 'builtin' | 'constant';
103
132
  interface NodeProxy extends Record<Swizzles | Conversions, NodeProxy> {
104
133
  add(n: X): NodeProxy;
105
134
  sub(n: X): NodeProxy;
@@ -167,38 +196,33 @@ interface NodeProxy extends Record<Swizzles | Conversions, NodeProxy> {
167
196
  props: NodeProps;
168
197
  isProxy: true;
169
198
  }
170
- type X = NodeProxy | number | string | boolean | null | undefined;
199
+ type X = NodeProxy | number | string | boolean | undefined;
171
200
 
172
201
  declare const code: (target: X, c?: NodeConfig | null) => string;
173
202
 
174
- declare const infer: (target: X, c?: NodeConfig) => Constants;
175
- declare const inferParameterTypes: (args: X[], c?: NodeConfig) => Constants[];
203
+ declare const inferImpl: (target: NodeProxy, c: NodeConfig) => Constants;
204
+ declare const infer: (target: X, c: NodeConfig | null) => Constants;
176
205
 
177
206
  declare const node: (type: NodeTypes, props?: NodeProps | null, ...args: X[]) => NodeProxy;
178
- declare const v: (...args: X[]) => NodeProxy;
179
- declare const s: (key: Swizzles, arg: X) => NodeProxy;
180
- declare const n: (key: string, ...args: X[]) => NodeProxy;
181
- declare const o: (key: Operators, ...args: X[]) => NodeProxy;
182
- declare const f: (key: Functions, ...args: X[]) => NodeProxy;
183
- declare const u: (id: string, value?: number | number[] | boolean) => NodeProxy;
184
- declare const select: (x: X, y: X, z: X) => NodeProxy;
207
+ declare const swizzle: (key: Swizzles, arg: X) => NodeProxy;
208
+ declare const operator: (key: Operators, ...args: X[]) => NodeProxy;
209
+ declare const function_: (key: Functions, ...args: X[]) => NodeProxy;
210
+ declare const conversion: (key: string, ...args: X[]) => NodeProxy;
185
211
 
186
- declare const If: (condition: X, callback: () => void) => {
187
- ElseIf: (newCondition: X, elseIfCallback: () => void) => /*elided*/ any;
188
- Else: (elseCallback: () => void) => void;
212
+ declare const toVar: (x: X, id?: string) => NodeProxy;
213
+ declare const assign: (x: X, y: X) => X;
214
+ declare const If: (condition: X, fun: () => void) => {
215
+ ElseIf: (x: X, _fun: () => void) => /*elided*/ any;
216
+ Else: (_fun: () => void) => void;
189
217
  };
190
- declare const Loop: (x: X, callback?: (params: {
191
- i: NodeProxy;
218
+ declare const Loop: (x: X, fun: (params: {
219
+ i?: NodeProxy;
192
220
  }) => void) => NodeProxy;
193
221
  declare const Switch: (value: X) => {
194
- Case: (...values: X[]) => (callback: () => void) => /*elided*/ any;
195
- Default: (callback: () => void) => void;
222
+ Case: (...values: X[]) => (fun: () => void) => /*elided*/ any;
223
+ Default: (fun: () => void) => void;
196
224
  };
197
- declare const Fn: (callback: (args: NodeProxy[]) => NodeProxy) => (...args: NodeProxy[]) => NodeProxy;
198
- declare const toVar: (x: X) => (id?: string) => NodeProxy;
199
- declare const toConst: (x: X) => (id?: string) => NodeProxy;
200
- declare const assign: (x: X) => (y: X) => X;
201
- declare const varying: (value: X, name?: string) => NodeProxy;
225
+ declare const Fn: (fun: (paramVars: NodeProxy[]) => NodeProxy) => (...args: X[]) => NodeProxy;
202
226
 
203
227
  declare const isSwizzle: (key: unknown) => key is Swizzles;
204
228
  declare const isOperator: (key: unknown) => key is Operators;
@@ -210,17 +234,27 @@ declare const getId: () => string;
210
234
  declare const joins: (children: X[], c: NodeConfig) => string;
211
235
  declare const formatConversions: (x: X, c?: NodeConfig) => string;
212
236
  declare const getOperator: (op: X) => "/" | "+" | "-" | "*" | "%" | "==" | "!=" | "<" | "<=" | ">" | ">=" | "&&" | "||" | "&" | "|" | "^" | "<<" | ">>";
213
- declare const fragment: (x: X, c: NodeConfig) => string;
237
+ declare const generateDefine: (props: NodeProps$1, c: NodeConfig) => string;
238
+ declare const fragment: (x: X, c?: NodeConfig) => string;
214
239
  declare const vertex: (x: X, c: NodeConfig) => string;
215
240
 
241
+ declare const select: (x: X, y: X, z: X) => NodeProxy;
242
+ declare const uniform: (value: number | number[], id?: string) => NodeProxy;
243
+ declare const varying: (value: number | number[], id?: string) => NodeProxy;
244
+ declare const attribute: (value: number | number[], id?: string) => NodeProxy;
245
+ declare const variable: (id: string) => NodeProxy;
246
+ declare const builtin: (id: string) => NodeProxy;
216
247
  declare const iResolution: NodeProxy;
217
248
  declare const iMouse: NodeProxy;
218
249
  declare const iTime: NodeProxy;
219
250
  declare const position: NodeProxy;
220
- declare const uv: (index?: number) => NodeProxy;
221
- declare const vertexColor: (index?: number) => NodeProxy;
222
- declare const attribute: (id: string, type?: string) => NodeProxy;
223
- declare const vertexStage: (value: X) => NodeProxy;
251
+ declare const vertexIndex: NodeProxy;
252
+ declare const instanceIndex: NodeProxy;
253
+ declare const frontFacing: NodeProxy;
254
+ declare const fragDepth: NodeProxy;
255
+ declare const sampleIndex: NodeProxy;
256
+ declare const sampleMask: NodeProxy;
257
+ declare const pointCoord: NodeProxy;
224
258
  declare const positionLocal: NodeProxy;
225
259
  declare const positionWorld: NodeProxy;
226
260
  declare const positionView: NodeProxy;
@@ -229,6 +263,8 @@ declare const normalWorld: NodeProxy;
229
263
  declare const normalView: NodeProxy;
230
264
  declare const screenCoordinate: NodeProxy;
231
265
  declare const screenUV: NodeProxy;
266
+ declare const fragCoord: NodeProxy;
267
+ declare const vertexId: NodeProxy;
232
268
  declare const float: (x: X) => NodeProxy;
233
269
  declare const int: (x: X) => NodeProxy;
234
270
  declare const uint: (x: X) => NodeProxy;
@@ -348,12 +384,12 @@ type GL = EventState<{
348
384
  mouse: [number, number];
349
385
  count: number;
350
386
  el: HTMLCanvasElement;
351
- vs: string | X;
352
- fs: string | X;
353
- vert: string | X;
354
- frag: string | X;
355
- vertex: string | X;
356
- fragment: string | X;
387
+ vs: string | NodeProxy;
388
+ fs: string | NodeProxy;
389
+ vert: string | NodeProxy;
390
+ frag: string | NodeProxy;
391
+ vertex: string | NodeProxy;
392
+ fragment: string | NodeProxy;
357
393
  /**
358
394
  * core state
359
395
  */
@@ -428,7 +464,7 @@ declare const createDevice: (c: GPUContext) => Promise<{
428
464
  device: any;
429
465
  format: any;
430
466
  }>;
431
- declare const createPipeline: (device: GPUDevice, format: string, bufferLayouts: any[], bindGroupLayouts: any[], vs?: string | X, fs?: string | X) => GPUPipeline;
467
+ declare const createPipeline: (device: GPUDevice, format: string, bufferLayouts: any[], bindGroupLayouts: any[], vs?: string | NodeProxy, fs?: string | NodeProxy) => GPUPipeline;
432
468
  declare const createBindGroup: (device: GPUDevice, resources: any[]) => {
433
469
  layout: any;
434
470
  bindGroup: any;
@@ -470,7 +506,7 @@ declare const createBufferLayout: (shaderLocation: number, dataLength: number, c
470
506
 
471
507
  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";
472
508
  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";
473
- declare const createProgram: (c: WebGLRenderingContext, vs?: string | X, fs?: string | X, onError?: () => void) => void | WebGLProgram;
509
+ declare const createProgram: (c: WebGLRenderingContext, vs?: string | NodeProxy, fs?: string | NodeProxy, onError?: () => void) => void | WebGLProgram;
474
510
  declare const createVbo: (c: WebGLRenderingContext, data: number[]) => WebGLBuffer;
475
511
  declare const createIbo: (c: WebGLRenderingContext, data: number[]) => WebGLBuffer;
476
512
  declare const getStride: (count: number, value: number[], iboValue?: number[]) => number;
@@ -509,12 +545,12 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
509
545
  mouse: [number, number];
510
546
  count: number;
511
547
  el: HTMLCanvasElement;
512
- vs: string | X;
513
- fs: string | X;
514
- vert: string | X;
515
- frag: string | X;
516
- vertex: string | X;
517
- fragment: string | X;
548
+ vs: string | NodeProxy;
549
+ fs: string | NodeProxy;
550
+ vert: string | NodeProxy;
551
+ frag: string | NodeProxy;
552
+ vertex: string | NodeProxy;
553
+ fragment: string | NodeProxy;
518
554
  webgpu: WebGPUState;
519
555
  webgl: WebGLState;
520
556
  queue: refr.Queue;
@@ -544,4 +580,4 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
544
580
  }): GL;
545
581
  }, any[] | unknown[]>;
546
582
 
547
- export { ADDITIONAL_FUNCTIONS, type Attribute, type Attributes, BOOL_RETURN_FUNCTIONS, BUILTIN_TYPES, COMPARISON_OPERATORS, COMPONENT_COUNT_TO_TYPE, CONSTANTS, CONVERSIONS, type Constants, type Conversions, FIRST_ARG_TYPE_FUNCTIONS, FUNCTIONS, Fn, type Functions, type GL, type GLClearMode, type GLDrawMode, type GLDrawType, type GPUBindGroup, type GPUBuffer, type GPUContext, type GPUDevice, type GPUPipeline, HIGHEST_TYPE_FUNCTIONS, If, LOGICAL_OPERATORS, Loop, type NodeConfig, type NodeProps, type NodeProxy, type NodeTypes, OPERATORS, OPERATOR_KEYS, type Operators, PRESERVE_TYPE_FUNCTIONS, type PrecisionMode, SCALAR_RETURN_FUNCTIONS, SWIZZLES, Switch, type Swizzles, TYPE_MAPPING, type Uniform, type Uniforms, VEC3_RETURN_FUNCTIONS, VEC4_RETURN_FUNCTIONS, type WebGLState, type WebGPUState, type X, abs, acos, alignTo256, all, any, asin, assign, atan, atan2, attribute, bitcast, bool, bvec2, bvec3, bvec4, cbrt, ceil, clamp, code, color, cos, createAttrib, createBindGroup, createBufferLayout, createDescriptor, createDevice, createGL, createIbo, createPipeline, createProgram, createTexture, createTextureSampler, createUniformBuffer, createVbo, createVertexBuffer, cross, cubeTexture, dFdx, dFdy, createGL as default, defaultFragmentGLSL, defaultVertexGLSL, degrees, difference, dig, distance, dot, each, equals, exp, exp2, ext, f, faceforward, fig, float, floor, flush, formatConversions, fract, fragment, fwidth, getId, getOperator, getStride, hex2rgb, iMouse, iResolution, iTime, infer, inferParameterTypes, 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, n, negate, node, normalLocal, normalView, normalWorld, normalize, o, oneMinus, position, positionLocal, positionView, positionWorld, pow, pow2, pow3, pow4, radians, reciprocal, reflect, refract, replace, round, s, saturate, screenCoordinate, screenUV, select, sig, sign, sin, smoothstep, sqrt, step, tan, texture, textureSize, toConst, toVar, transformDirection, trunc, u, uint, uv, uvec2, uvec3, uvec4, v, varying, vec2, vec3, vec4, vertex, vertexColor, vertexStage, webgl, webgpu };
583
+ export { ADDITIONAL_FUNCTIONS, type Attribute, type Attributes, BOOL_RETURN_FUNCTIONS, BUILTIN_TYPES, COMPARISON_OPERATORS, COMPONENT_COUNT_TO_TYPE, CONSTANTS, CONVERSIONS, type Constants, type Conversions, FIRST_ARG_TYPE_FUNCTIONS, FUNCTIONS, Fn, type Functions, type GL, type GLClearMode, type GLDrawMode, type GLDrawType, type GPUBindGroup, type GPUBuffer, type GPUContext, type GPUDevice, type GPUPipeline, HIGHEST_TYPE_FUNCTIONS, If, LOGICAL_OPERATORS, Loop, type NodeConfig, type NodeProps, type NodeProxy, type NodeTypes, OPERATORS, OPERATOR_KEYS, type Operators, PRESERVE_TYPE_FUNCTIONS, type PrecisionMode, SCALAR_RETURN_FUNCTIONS, SWIZZLES, Switch, type Swizzles, TYPE_MAPPING, type Uniform, type Uniforms, VEC3_RETURN_FUNCTIONS, VEC4_RETURN_FUNCTIONS, WGSL_TO_GLSL_BUILTIN, type WebGLState, type WebGPUState, type X, 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, createGL as default, 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, uvec2, uvec3, uvec4, variable, varying, vec2, vec3, vec4, vertex, vertexId, vertexIndex, webgl, webgpu };
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
- import{durable as H,event as et}from"reev";import{createFrame as tt,createQueue as rt}from"refr";import{nested as j}from"reev";var l={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)},$e=(e,t)=>e.forEach(t),it=(e,...t)=>{$e(e,r=>r(...t))},at=(e="",t="_",r="/")=>e.split(t).join(r),ut=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",ct=(e=0)=>`${e}`.split(".")[1]?.length??0,ft=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),pt=(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"],L=["bool","uint","int","float","bvec2","bvec3","bvec4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","vec2","vec3","vec4","color","mat2","mat3","mat4"],Q=["toFloat","toInt","toUint","toBool","toVec2","toVec3","toVec4","toIvec2","toIvec3","toIvec4","toUvec2","toUvec3","toUvec4","toBvec2","toBvec3","toBvec4","toMat2","toMat3","toMat4","toColor"],F={add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},J=Object.keys(F),$=["dot","distance","length","lengthSq","determinant","luminance"],B=["all","any"],z=["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"],V=["cross"],M=["reflect","refract"],W=["min","max","mix","clamp","step","smoothstep"],D=["texture","textureLod","textureSize","cubeTexture"],Be=["atan2","degrees","faceforward","bitcast","cbrt","difference","equals","pow","pow2","pow3","pow4","radians","transformDirection"],ee=[...$,...B,...z,...V,...M,...W,...D,...Be],te={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>"},q={1:"float",2:"vec2",3:"vec3",4:"vec4",9:"mat3",16:"mat4"},re={gl_FragCoord:"vec4",position:"vec3",normal:"vec3",uv:"vec2",color:"vec4"},oe=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],ne=["and","or"];var Y=e=>l.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),se=e=>J.includes(e),ie=e=>ee.includes(e),ae=e=>Q.includes(e),ue=e=>!e||!l.fun(e)?!1:e.isProxy,ze=0,ce=e=>{let t=(e>>16&255)/255,r=(e>>8&255)/255,o=(e&255)/255;return[t,r,o]},R=()=>`i${ze++}`,k=(e,t)=>e.filter(r=>!l.und(r)&&!l.nul(r)).map(r=>c(r,t)).join(", "),O=(e,t)=>l.str(e)?t?.isWebGL?e:te[e]:"",fe=e=>F[e]||e,pe=e=>{let t=Array.from(e.uniforms).map((o,n)=>e.isWebGL?`uniform ${o};`:`@group(0) @binding(${n}) var<uniform> ${o};`).join(`
2
- `),r=Array.from(e.functions).join(`
3
- `);return`${t}
4
- ${r}`},le=(e,t,r=!0)=>r?`
1
+ import{durable as Z,event as nt}from"reev";import{createFrame as st,createQueue as it}from"refr";import{nested as K}from"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)},Be=(e,t)=>e.forEach(t),pt=(e,...t)=>{Be(e,r=>r(...t))},ft=(e="",t="_",r="/")=>e.split(t).join(r),lt=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",mt=(e=0)=>`${e}`.split(".")[1]?.length??0,dt=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),xt=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var bt=["x","y","z","w","r","g","b","a","s","t","p","q"],L=["bool","uint","int","float","bvec2","bvec3","bvec4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","vec2","vec3","vec4","color","mat2","mat3","mat4"],J=["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:">>"},ee=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"],Me=["atan2","degrees","faceforward","bitcast","cbrt","difference","equals","pow","pow2","pow3","pow4","radians","transformDirection"],te=[...B,...M,...V,...D,...z,...W,...q,...Me],re={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"},oe={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"},ne=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],se=["and","or"],ie={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),ae=e=>ee.includes(e),ue=e=>te.includes(e),ce=e=>J.includes(e),S=e=>!e||typeof e!="object"?!1:e.isProxy,Ve=0,pe=e=>{let t=(e>>16&255)/255,r=(e>>8&255)/255,n=(e&255)/255;return[t,r,n]},I=()=>`i${Ve++}`,U=(e,t)=>e.filter(r=>!g.und(r)&&!g.nul(r)).map(r=>p(r,t)).join(", "),C=(e,t)=>g.str(e)?t?.isWebGL?e:re[e]:"",fe=e=>$[e]||e,le=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=C(a,t),d=m.map(([h,T])=>`${h}: ${C(T,t)}`);return`fn ${r}(${d}) -> ${f} {
6
+ ${y.join(`
7
+ `)}
8
+ }`},de=(e,t,r=!0)=>r?`
5
9
  #version 300 es
6
10
  precision mediump float;
7
11
  out vec4 fragColor;
@@ -13,34 +17,34 @@ ${t}
13
17
  @fragment
14
18
  fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
15
19
  return ${e};
16
- }`.trim(),U=(e,t)=>{let r=c(e,t),o=pe(t);return le(r,o,t.isWebGL)},G=(e,t)=>{let r=c(e,t),o=pe(t);return le(r,o,t.isWebGL)};var me=e=>l.bol(e)?"bool":l.num(e)?Number.isInteger(e)?"int":"float":l.arr(e)&&q[e.length]||"float",xe=(e,t,r)=>{if(oe.includes(r)||ne.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 o=L.indexOf(e),n=L.indexOf(t);return o>=n?e:t},Ve=e=>e.reduce((t,r)=>{let o=_(r),n=L.indexOf(t);return L.indexOf(o)>n?o:t},"float"),Me=e=>q[e]||"vec4",We=e=>e?re[e]:"vec3",De=(e,t)=>{let r=t.length>0?_(t[0]):"float";return M.includes(e)?r:$.includes(e)?"float":B.includes(e)?"bool":z.includes(e)?r:V.includes(e)?"vec3":D.includes(e)?"vec4":W.includes(e)?Ve(t):r},_=(e,t)=>{if(!e)throw"";if(!ue(e))return me(e);let{type:r,props:o}=e,{id:n,children:s=[],value:a,returnType:f}=o,[X,p,m]=s;return r==="uniform"||r==="variable"||r==="constant"||r==="attribute"||r==="varying"?me(a):r==="conversions"?X:r==="operator"?xe(_(p,t),_(m,t),X):r==="math_fun"?De(X,s.slice(1)):r==="swizzle"?Me(X.length):r==="ternary"?xe(_(p,t),_(m,t),"add"):r==="fn_run"||r==="fn_def"?f:r==="builtin"?We(n):"float"},Et=(e,t)=>e.map(r=>_(r,t));var c=(e,t)=>{if(t||(t={}),t.uniforms||(t.uniforms=new Set),t.functions||(t.functions=new Set),l.num(e))return e.toFixed(1);if(l.str(e))return e;if(l.bol(e))return e.toString();if(!e)return"";let{type:r,props:o}=e,{id:n="",children:s=[]}=o,[a,f,X]=s;if(r==="uniform"){let p=_(e,t);return t.uniforms.add(`${p} ${n}`),t.onUniform?.(n,o.value),n}if(r==="variable"||r==="varying"||r==="constant"||r==="attribute")return n;if(r==="vertex_stage")return c(a,t);if(r==="swizzle")return`${c(f,t)}.${c(a,t)}`;if(r==="operator")return a==="not"||a==="bitNot"?`!${c(f,t)}`:`(${c(f,t)} ${fe(a)} ${c(X,t)})`;if(r==="math_fun")return`${a}(${k(s.slice(1),t)})`;if(r==="conversions")return`${O(a,t)}(${k(s.slice(1),t)})`;if(r==="scope")return s.map(p=>c(p,t)).join(`
17
- `);if(r==="assign")return`${c(a,t)} = ${c(f,t)};`;if(r==="fn_run")return t.functions.add(c(a,t)),`${n}(${s.slice(1).map(p=>c(p,t)).join(", ")})`;if(r==="fn_def"){let{paramInfo:p=[],returnType:m}=o,y=c(a,t),C=f?`return ${c(f,t)};`:"";if(t?.isWebGL){let T=p.map(({name:E,type:h})=>`${h} ${E}`).join(", ");return`${m} ${n}(${T}) {
18
- ${y}
19
- ${C}
20
- }`}else{let T=O(m,t),E=p.map(({name:h,type:P})=>{let g=O(P,t);return`${h}: ${g}`}).join(", ");return`fn ${n}(${E}) -> ${T} {
21
- ${y}
22
- ${C}
23
- }`}}if(r==="loop")return`for (int i = 0; i < ${a}; i++) {
24
- ${c(f,t)}
25
- }`;if(r==="if"){let p=`if (${c(a,t)}) {
26
- ${c(f,t)}
27
- }`;for(let m=2;m<s.length;m+=2){let y=m>=s.length-1;p+=y?` else {
28
- ${c(s[m],t)}
29
- }`:` else if (${c(s[m],t)}) {
30
- ${c(s[m+1],t)}
31
- }`}return p}if(r==="switch"){let p=`switch (${c(a,t)}) {
32
- `;for(let m of s.slice(1))p+=c(m,t)+`
33
- `;return p+="}",p}if(r==="case"){let p=s.slice(0,-1),m=s[s.length-1],y="";for(let C of p)y+=`case ${c(C,t)}:
34
- `;return y+=`${c(m,t)}
20
+ }`.trim(),G=(e,t={})=>{let r=p(e,t),n=le(t),o=de(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=le(t);return de(r,n,t.isWebGL)};var ge=e=>g.bol(e)?"bool":g.num(e)?"float":g.arr(e)&&k[e.length]||"float",xe=(e,t,r)=>{if(ne.includes(r)||se.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=L.indexOf(e),o=L.indexOf(t);return n>=o?e:t},De=(e,t)=>e.reduce((r,n)=>{let o=_(n,t),s=L.indexOf(r);return L.indexOf(o)>s?o:r},"float"),ze=e=>k[e],We=e=>oe[e],qe=(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)?De(t,r):n},ke=(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"?ge(u):r==="conversion"?a:r==="operator"?xe(_(m,t),_(y,t),a):r==="function"?qe(a,s.slice(1),t):r==="swizzle"?ze(a.length):r==="ternary"?xe(_(m,t),_(y,t),"add"):r==="define"?m?_(m,t):"void":r==="builtin"?We(o):"float"},_=(e,t)=>{if(t||(t={}),!S(e))return ge(e);if(t.infers||(t.infers=new WeakMap),t.infers.has(e))return t.infers.get(e);let r=ke(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}: ${C(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)} ${fe(u)} ${p(m,t)})`;if(r==="function")return u==="negate"?`(-${U(s.slice(1),t)})`:`${u}(${U(s.slice(1),t)})`;if(r==="conversion")return`${C(u,t)}(${U(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)}
35
39
  break;
36
- `,y}if(r==="default"&&`${c(a,t)}`,r==="ternary")return`(${c(a,t)} ? ${c(f,t)} : ${c(X,t)})`;if(r==="declare"){let p=_(f,t),m=a?.props?.id;if(t.isWebGL)return`${p} ${m} = ${c(f,t)};`;let y=O(p);return`var ${m}: ${y} = ${c(f,t)};`}if(r==="builtin"){if(t?.isWebGL){if(n==="position")return"gl_FragCoord";if(n==="uv")return"gl_FragCoord.xy"}return n}return c(a,t)};var S=null,N=(e,t=()=>{})=>{let r=S;S=e,t(),S=r},w=e=>{S&&(S.props.children||(S.props.children=[]),S.props.children.push(e))},Lt=(e,t)=>{let r=u("scope");N(r,t);let o=u("if",null,e,r);w(o);let n=()=>({ElseIf:(s,a)=>{let f=u("scope");return N(f,a),o.props.children.push(s,f),n()},Else:s=>{let a=u("scope");N(a,s),o.props.children.push(a)}});return n()},Ot=(e,t)=>{let r=u("scope");N(r,()=>t?.({i:u("variable",{id:"i"})}));let o=u("loop",null,e,r);return w(o),o},Ut=e=>{let t=u("switch",null,e);w(t);let r=()=>({Case:(...o)=>n=>{let s=u("scope");N(s,n);let a=u("case",null,...o,s);return t.props.children.push(a),r()},Default:o=>{let n=u("scope");N(n,o);let s=u("default",null,n);t.props.children.push(s)}});return r()},Gt=e=>{let t=R();return(...r)=>{let o=u("scope"),n,s=[];for(let p=0;p<r.length;p++){let m=`p${p}`,y=u("variable",{id:m});s.push(y)}N(o,()=>n=e(s));let a=n?_(n):"void",f=r.map((p,m)=>({name:`p${m}`,type:_(p)})),X=u("fn_def",{id:t,returnType:a,paramInfo:f,args:r},o,n);return u("fn_run",{id:t,returnType:a},X,...s)}},de=e=>t=>{t||(t=R());let r=u("variable",{id:t}),o=u("declare",null,r,e);return w(o),r},be=e=>t=>{t||(t=R());let r=u("constant",{id:t}),o=u("declare",null,r,e);return w(o),r},ge=e=>t=>{let r=u("assign",null,e,t);return w(r),e},It=(e,t)=>{t||(t=R());let r=u("varying",{id:t}),o=u("declare",null,r,e);return w(o),r};var qe=e=>t=>{if(t==="string")return c(e)},u=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let o=new Proxy(()=>{},{get(n,s){if(s==="type")return e;if(s==="props")return t;if(s==="toVar")return de(o);if(s==="toConst")return be(o);if(s==="assign")return ge(o);if(s==="isProxy")return!0;if(s==="toString")return c.bind(null,o);if(s===Symbol.toPrimitive)return qe(o);if(Y(s))return ve(s,o);if(se(s))return(...a)=>Ye(s,o,...a);if(ie(s))return(...a)=>i(s,o,...a);if(ae(s))return b(s,o)},set(n,s,a){return Y(s)?(ve(s,o).assign(a),!0):!1}});return o},zt=(...e)=>u("variable",{id:R()},...e),ve=(e,t)=>u("swizzle",null,e,t),b=(e,...t)=>u("conversions",null,e,...t),Ye=(e,...t)=>u("operator",null,e,...t),i=(e,...t)=>u("math_fun",null,e,...t),I=(e,t)=>u("uniform",{id:e,value:t}),Vt=(e,t,r)=>u("ternary",null,e,t,r);var Yt=I("iResolution",[1280,800]),kt=I("iMouse",[0,0]),jt=I("iTime",0),Kt=u("variable",{id:"gl_FragCoord"}),Ht=(e=0)=>u("attribute",{id:`uv${e||""}`}),Zt=(e=0)=>u("attribute",{id:`color${e||""}`}),Qt=(e,t)=>u("attribute",{id:e,type:t}),Jt=e=>u("vertex_stage",null,e),er=u("builtin",{id:"positionLocal"}),tr=u("builtin",{id:"positionWorld"}),rr=u("builtin",{id:"positionView"}),or=u("builtin",{id:"normalLocal"}),nr=u("builtin",{id:"normalWorld"}),sr=u("builtin",{id:"normalView"}),ir=u("builtin",{id:"screenCoordinate"}),ar=u("builtin",{id:"screenUV"}),ur=e=>b("float",e),cr=e=>b("int",e),fr=e=>b("uint",e),pr=e=>b("bool",e),lr=(e,t)=>b("vec2",e,t),Xe=(e,t,r)=>b("vec3",e,t,r),mr=(e,t,r,o)=>b("vec4",e,t,r,o),xr=(...e)=>b("mat2",...e),dr=(...e)=>b("mat3",...e),br=(...e)=>b("mat4",...e),gr=(e,t)=>b("ivec2",e,t),vr=(e,t,r)=>b("ivec3",e,t,r),Xr=(e,t,r,o)=>b("ivec4",e,t,r,o),yr=(e,t)=>b("uvec2",e,t),Tr=(e,t,r)=>b("uvec3",e,t,r),Er=(e,t,r,o)=>b("uvec4",e,t,r,o),hr=(e,t)=>b("bvec2",e,t),_r=(e,t,r)=>b("bvec3",e,t,r),Pr=(e,t,r,o)=>b("bvec4",e,t,r,o),Rr=(e,t,r)=>l.num(e)&&l.und(t)&&l.und(r)?Xe(...ce(e)):Xe(e,t,r),Sr=(e,t,r)=>i("texture",e,t,r),Nr=(e,t,r)=>i("cubeTexture",e,t,r),wr=(e,t)=>i("textureSize",e,t),Cr=e=>i("abs",e),Lr=e=>i("acos",e),Or=e=>i("all",e),Ur=e=>i("any",e),Gr=e=>i("asin",e),Ir=(e,t)=>t!==void 0?i("atan",e,t):i("atan",e),Ar=(e,t)=>i("atan",e,t),Fr=(e,t)=>i("bitcast",e,t),$r=e=>i("cbrt",e),Br=e=>i("ceil",e),zr=(e,t,r)=>i("clamp",e,t,r),Vr=e=>i("cos",e),Mr=(e,t)=>i("cross",e,t),Wr=e=>i("dFdx",e),Dr=e=>i("dFdy",e),qr=e=>i("degrees",e),Yr=(e,t)=>i("difference",e,t),kr=(e,t)=>i("distance",e,t),jr=(e,t)=>i("dot",e,t),Kr=(e,t)=>i("equals",e,t),Hr=e=>i("exp",e),Zr=e=>i("exp2",e),Qr=(e,t,r)=>i("faceforward",e,t,r),Jr=e=>i("floor",e),eo=e=>i("fract",e),to=e=>i("fwidth",e),ro=e=>i("inverseSqrt",e),oo=e=>i("length",e),no=e=>i("lengthSq",e),so=e=>i("log",e),io=e=>i("log2",e),ao=(e,t)=>i("max",e,t),uo=(e,t)=>i("min",e,t),co=(e,t,r)=>i("mix",e,t,r),fo=e=>i("negate",e),po=e=>i("normalize",e),lo=e=>i("oneMinus",e),mo=(e,t)=>i("pow",e,t),xo=e=>i("pow2",e),bo=e=>i("pow3",e),go=e=>i("pow4",e),vo=e=>i("radians",e),Xo=e=>i("reciprocal",e),yo=(e,t)=>i("reflect",e,t),To=(e,t,r)=>i("refract",e,t,r),Eo=e=>i("round",e),ho=e=>i("saturate",e),_o=e=>i("sign",e),Po=e=>i("sin",e),Ro=(e,t,r)=>i("smoothstep",e,t,r),So=e=>i("sqrt",e),No=(e,t)=>i("step",e,t),wo=e=>i("tan",e),Co=(e,t)=>i("transformDirection",e,t),Lo=e=>i("trunc",e);var ke=`
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=C(f);return`var ${d}: ${h} = ${p(a,t)};`}if(r==="builtin"){if(t?.isWebGL){let f=ie[o];if(f)return f;if(o==="uv")return"gl_FragCoord.xy"}return o}return p(u,t)};var R=null,w=(e,t=()=>{})=>{let r=R;R=e,t(),R=r},O=e=>{R&&(R.props.children||(R.props.children=[]),R.props.children.push(e))},be=(e,t)=>{t||(t=I());let r=c("variable",{id:t}),n=c("declare",null,r,e);return O(n),r},ve=(e,t)=>{let r=c("assign",null,e,t);return O(r),e},Gt=(e,t)=>{let r=c("scope");w(r,t);let n=c("if",null,e,r);O(n);let o=()=>({ElseIf:(s,u)=>{let a=c("scope");return w(a,u),n.props.children.push(s,a),o()},Else:s=>{let u=c("scope");w(u,s),n.props.children.push(u)}});return o()},Ft=(e,t)=>{let r=c("scope");w(r,()=>t({i:c("variable",{id:"i"})}));let n=c("loop",null,e,r);return O(n),n},At=e=>{let t=c("switch",null,e);O(t);let r=()=>({Case:(...n)=>o=>{let s=c("scope");w(s,o);for(let u of n)t.props.children.push(u,s);return r()},Default:n=>{let o=c("scope");w(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 w(n,()=>o=e(s)),c("define",{id:t},n,o,...r)}};var Ye=(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 be.bind(null,s);if(a==="assign")return ve.bind(null,s);if(a==="isProxy")return!0;if(a==="toString")return p.bind(null,s);if(a===Symbol.toPrimitive)return Ye.bind(null,s);if(Y(a))return ye(a,s);if(ae(a))return(...m)=>je(a,s,...m);if(ue(a))return(...m)=>i(a,s,...m);if(ce(a))return b(a,s)},o=(u,a,m)=>Y(a)?(ye(a,s).assign(m),!0):!1,s=new Proxy({},{get:n,set:o});return s};var ye=(e,t)=>c("swizzle",null,e,t),je=(e,...t)=>c("operator",null,e,...t),i=(e,...t)=>c("function",null,e,...t),b=(e,...t)=>c("conversion",null,e,...t);var Yt=(e,t,r)=>c("ternary",null,e,t,r),j=(e,t)=>c("uniform",{id:t,value:e}),jt=(e,t)=>c("varying",{id:t,value:e}),Kt=(e,t)=>c("varying",{id:t,value:e}),Ht=e=>c("variable",{id:e}),Zt=e=>c("builtin",{id:e}),Qt=j([1280,800],"iResolution"),Jt=j([0,0],"iMouse"),er=j(0,"iTime"),Ke=c("builtin",{id:"position"}),He=c("builtin",{id:"vertex_index"}),tr=c("builtin",{id:"instance_index"}),rr=c("builtin",{id:"front_facing"}),or=c("builtin",{id:"frag_depth"}),nr=c("builtin",{id:"sample_index"}),sr=c("builtin",{id:"sample_mask"}),ir=c("builtin",{id:"point_coord"}),ar=c("builtin",{id:"position"}),ur=c("builtin",{id:"positionWorld"}),cr=c("builtin",{id:"positionView"}),pr=c("builtin",{id:"normalLocal"}),fr=c("builtin",{id:"normalWorld"}),lr=c("builtin",{id:"normalView"}),mr=c("builtin",{id:"screenCoordinate"}),dr=c("builtin",{id:"screenUV"}),xr=Ke,gr=He,br=e=>b("float",e),vr=e=>b("int",e),yr=e=>b("uint",e),Xr=e=>b("bool",e),Tr=(e,t)=>b("vec2",e,t),Xe=(e,t,r)=>b("vec3",e,t,r),_r=(e,t,r,n)=>b("vec4",e,t,r,n),hr=(...e)=>b("mat2",...e),Er=(...e)=>b("mat3",...e),Pr=(...e)=>b("mat4",...e),Nr=(e,t)=>b("ivec2",e,t),Sr=(e,t,r)=>b("ivec3",e,t,r),Rr=(e,t,r,n)=>b("ivec4",e,t,r,n),wr=(e,t)=>b("uvec2",e,t),Cr=(e,t,r)=>b("uvec3",e,t,r),Lr=(e,t,r,n)=>b("uvec4",e,t,r,n),Or=(e,t)=>b("bvec2",e,t),Ir=(e,t,r)=>b("bvec3",e,t,r),Ur=(e,t,r,n)=>b("bvec4",e,t,r,n),Gr=(e,t,r)=>g.num(e)&&g.und(t)&&g.und(r)?Xe(...pe(e)):Xe(e,t,r),Fr=(e,t,r)=>i("texture",e,t,r),Ar=(e,t,r)=>i("cubeTexture",e,t,r),$r=(e,t)=>i("textureSize",e,t),Br=e=>i("abs",e),Mr=e=>i("acos",e),Vr=e=>i("all",e),Dr=e=>i("any",e),zr=e=>i("asin",e),Wr=(e,t)=>t!==void 0?i("atan",e,t):i("atan",e),qr=(e,t)=>i("atan",e,t),kr=(e,t)=>i("bitcast",e,t),Yr=e=>i("cbrt",e),jr=e=>i("ceil",e),Kr=(e,t,r)=>i("clamp",e,t,r),Hr=e=>i("cos",e),Zr=(e,t)=>i("cross",e,t),Qr=e=>i("dFdx",e),Jr=e=>i("dFdy",e),eo=e=>i("degrees",e),to=(e,t)=>i("difference",e,t),ro=(e,t)=>i("distance",e,t),oo=(e,t)=>i("dot",e,t),no=(e,t)=>i("equals",e,t),so=e=>i("exp",e),io=e=>i("exp2",e),ao=(e,t,r)=>i("faceforward",e,t,r),uo=e=>i("floor",e),co=e=>i("fract",e),po=e=>i("fwidth",e),fo=e=>i("inverseSqrt",e),lo=e=>i("length",e),mo=e=>i("lengthSq",e),xo=e=>i("log",e),go=e=>i("log2",e),bo=(e,t)=>i("max",e,t),vo=(e,t)=>i("min",e,t),yo=(e,t,r)=>i("mix",e,t,r),Xo=e=>i("negate",e),To=e=>i("normalize",e),_o=e=>i("oneMinus",e),ho=(e,t)=>i("pow",e,t),Eo=e=>i("pow2",e),Po=e=>i("pow3",e),No=e=>i("pow4",e),So=e=>i("radians",e),Ro=e=>i("reciprocal",e),wo=(e,t)=>i("reflect",e,t),Co=(e,t,r)=>i("refract",e,t,r),Lo=e=>i("round",e),Oo=e=>i("saturate",e),Io=e=>i("sign",e),Uo=e=>i("sin",e),Go=(e,t,r)=>i("smoothstep",e,t,r),Fo=e=>i("sqrt",e),Ao=(e,t)=>i("step",e,t),$o=e=>i("tan",e),Bo=(e,t)=>i("transformDirection",e,t),Mo=e=>i("trunc",e);var Ze=`
37
41
  #version 300 es
38
42
  void main() {
39
43
  float x = float(gl_VertexID % 2) * 4.0 - 1.0;
40
44
  float y = float(gl_VertexID / 2) * 4.0 - 1.0;
41
45
  gl_Position = vec4(x, y, 0.0, 1.0);
42
46
  }
43
- `,je=`
47
+ `,Qe=`
44
48
  #version 300 es
45
49
  precision mediump float;
46
50
  uniform vec2 iResolution;
@@ -48,19 +52,19 @@ out vec4 fragColor;
48
52
  void main() {
49
53
  fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
50
54
  }
51
- `,ye=(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}`)},Te=(e,t=ke,r=je,o=()=>{})=>{l.str(r)||(r=U(r,{isWebGL:!0})),l.str(t)||(t=G(r,{isWebGL:!0}));let n=e.createProgram(),s=ye(e,t,e.VERTEX_SHADER),a=ye(e,r,e.FRAGMENT_SHADER);if(!s||!a)return o();if(e.attachShader(n,s),e.attachShader(n,a),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS))return n;let f=e.getProgramInfoLog(n);e.deleteProgram(n),o(),console.warn(`Could not link pg: ${f}`)},Ee=(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},he=(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},_e=(e,t,r)=>{r&&(e=Math.max(...r)+1);let o=t.length/e;return Math.floor(o)},Pe=(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 Se=async e=>{let t=e.el.getContext("webgl2"),r=Te(t,e.vs,e.fs,()=>void(e.isLoop=!1)),o={context:t,program:r};t.useProgram(r);let n=0,s=j(T=>t.getUniformLocation(r,T)),a=j(T=>t.getAttribLocation(r,T)),f=j(()=>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:(T="",E,h)=>{let P=a(T,!0),g=Ee(t,E),x=he(t,h),d=_e(e.count,E,h);Pe(t,d,P,g,x)},_uniform:(T,E)=>{let h=s(T);if(l.num(E))return t.uniform1f(h,E);let P=E.length;if(P<=4)return t[`uniform${P}fv`](h,E);P=Math.sqrt(P)<<0,t[`uniformMatrix${P}fv`](h,!1,E)},_texture:(T,E)=>{let h=new Image;Object.assign(h,{src:E,crossOrigin:"anonymous"}),h.decode().then(()=>{let P=s(T),g=f(T);Re(t,h,P,g)})}}};import{nested as K}from"reev";var Ke=`
55
+ `,Te=(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}`)},_e=(e,t=Ze,r=Qe,n=()=>{})=>{S(r)&&(r=G(r,{isWebGL:!0})),S(t)&&(t=F(r,{isWebGL:!0}));let o=e.createProgram(),s=Te(e,t,e.VERTEX_SHADER),u=Te(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}`)},he=(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},Ee=(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},Pe=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},Ne=(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)},Se=(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 Re=async e=>{let t=e.el.getContext("webgl2"),r=_e(t,e.vs,e.fs,()=>void(e.isLoop=!1));t.useProgram(r);let n=0,o=K(T=>t.getUniformLocation(r,T)),s=K(T=>t.getAttribLocation(r,T)),u=K(()=>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=he(t,E),l=Ee(t,P),x=Pe(e.count,E,P);Ne(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);Se(t,P,N,X)})}}};import{nested as H}from"reev";var Je=`
52
56
  @vertex
53
57
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
54
58
  let x = f32(vertex_index % 2u) * 4.0 - 1.0;
55
59
  let y = f32(vertex_index / 2u) * 4.0 - 1.0;
56
60
  return vec4f(x, y, 0.0, 1.0);
57
61
  }
58
- `,He=`
62
+ `,et=`
59
63
  @group(0) @binding(0) var<uniform> iResolution: vec2f;
60
64
 
61
65
  @fragment
62
66
  fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
63
67
  return vec4f(position.xy / iResolution, 0.0, 1.0);
64
68
  }
65
- `,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}},we=(e,t,r,o,n=Ke,s=He)=>{l.str(s)||(s=U(s,{isWebGL:!1})),l.str(n)||(n=G(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:s.trim()}),entryPoint:"main",targets:[{format:t}]},layout:a,primitive:{topology:"triangle-list"}})},Ce=(e,t)=>{let r=[],o=[];t.forEach((a,f)=>{if(!a)return;let X="buffer"in a,p=a instanceof GPUTextureView,m=a instanceof GPUSampler;if(X)r.push({binding:f,visibility:3,buffer:{type:"uniform"}});else if(p)r.push({binding:f,visibility:2,texture:{}});else if(m)r.push({binding:f,visibility:2,sampler:{}});else return;o.push({binding:f,resource:a})});let n=e.createBindGroupLayout({entries:r}),s=e.createBindGroup({layout:n,entries:o});return{layout:n,bindGroup:s}},Le=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),Ze=e=>Math.ceil(e/256)*256,Oe=(e,t)=>{let r=new Float32Array(t),o=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:o}},Ue=(e,t)=>{let r=new Float32Array(t),o=Ze(r.byteLength),n=e.createBuffer({size:o,usage:72});return{array:r,buffer:n}},Ge=(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}},Qe=(e,t)=>e/t,Je=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",Ie=(e,t,r=6)=>{let o=Qe(t,r);return{arrayStride:o*4,attributes:[{shaderLocation:e,offset:0,format:Je(o)}]}};var Ae=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},s=[],a=[],f=[],X=K((g,x)=>{let{array:d,buffer:v}=Oe(r,x);return a.push(v),f.push(Ie(f.length,d.length,e.count)),n.needsUpdate=!0,{array:d,buffer:v}}),p=K((g,x)=>{let{array:d,buffer:v}=Ue(r,x);return n.resources[0].push({buffer:v}),n.needsUpdate=!0,{array:d,buffer:v}}),m=K((g,{width:x,height:d})=>{let{texture:v,sampler:A}=Ge(r,x,d);return n.resources[1].push(A,v.createView()),n.needsUpdate=!0,{texture:v,width:x,height:d}}),y=()=>{let g=[];s.length=0,n.resources.forEach(x=>{if(!x.length)return;let{layout:d,bindGroup:v}=Ce(r,x);g.push(d),s.push(v)}),n.pipeline=we(r,o,f,g,e.vs,e.fs)};return{webgpu:n,render:()=>{if(n.loadingImg)return;n.needsUpdate&&y(),n.needsUpdate=!1;let g=r.createCommandEncoder(),x=g.beginRenderPass(Le(t));x.setPipeline(n.pipeline),s.forEach((d,v)=>x.setBindGroup(v,d)),a.forEach((d,v)=>x.setVertexBuffer(v,d)),x.draw(e.count,1,0,0),x.end(),r.queue.submit([g.finish()])},clean:()=>{},_attribute:(g="",x)=>{let{array:d,buffer:v}=X(g,x);r.queue.writeBuffer(v,0,d)},_uniform:(g,x)=>{l.num(x)&&(x=[x]);let{array:d,buffer:v}=p(g,x);d.set(x),r.queue.writeBuffer(v,0,d)},_texture:(g,x)=>{n.loadingImg++;let d=Object.assign(new Image,{src:x,crossOrigin:"anonymous"});d.decode().then(()=>{let{texture:v,width:A,height:Fe}=m(g,d);r.queue.copyExternalImageToTexture({source:d},{texture:v},{width:A,height:Fe}),n.loadingImg--})}}};var un=e=>l.obj(e)?"isGL"in e:!1,ot=()=>typeof window>"u",nt=()=>ot()?!1:"gpu"in navigator,Z=performance.now(),st=e=>{let t=et({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=rt(),t.frame=tt(),t.attribute=H((r,o,n)=>t.queue(()=>t._attribute?.(r,o,n))),t.texture=H((r,o)=>t.queue(()=>t._texture?.(r,o))),t.uniform=H((r,o,n)=>t.queue(()=>t._uniform?.(r,o,n))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:Z}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,nt()||(t.isWebGL=!0),t.isWebGL?t(await Se(t)):t(await Ae(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[s,a]=t.size,{top:f,left:X}=t.el.getBoundingClientRect();t.mouse[0]=(o-f-s/2)/(s/2),t.mouse[1]=-(n-X-a/2)/(a/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{Z=performance.now()/1e3,t.uniform("iTime",Z)}),t(e)},cn=st;export{Be as ADDITIONAL_FUNCTIONS,B as BOOL_RETURN_FUNCTIONS,re as BUILTIN_TYPES,oe as COMPARISON_OPERATORS,q as COMPONENT_COUNT_TO_TYPE,L as CONSTANTS,Q as CONVERSIONS,M as FIRST_ARG_TYPE_FUNCTIONS,ee as FUNCTIONS,Gt as Fn,W as HIGHEST_TYPE_FUNCTIONS,Lt as If,ne as LOGICAL_OPERATORS,Ot as Loop,F as OPERATORS,J as OPERATOR_KEYS,z as PRESERVE_TYPE_FUNCTIONS,$ as SCALAR_RETURN_FUNCTIONS,mt as SWIZZLES,Ut as Switch,te as TYPE_MAPPING,V as VEC3_RETURN_FUNCTIONS,D as VEC4_RETURN_FUNCTIONS,Cr as abs,Lr as acos,Ze as alignTo256,Or as all,Ur as any,Gr as asin,ge as assign,Ir as atan,Ar as atan2,Qt as attribute,Fr as bitcast,pr as bool,hr as bvec2,_r as bvec3,Pr as bvec4,$r as cbrt,Br as ceil,zr as clamp,c as code,Rr as color,Vr as cos,Pe as createAttrib,Ce as createBindGroup,Ie as createBufferLayout,Le as createDescriptor,Ne as createDevice,st as createGL,he as createIbo,we as createPipeline,Te as createProgram,Re as createTexture,Ge as createTextureSampler,Ue as createUniformBuffer,Ee as createVbo,Oe as createVertexBuffer,Mr as cross,Nr as cubeTexture,Wr as dFdx,Dr as dFdy,cn as default,je as defaultFragmentGLSL,ke as defaultVertexGLSL,qr as degrees,Yr as difference,ft as dig,kr as distance,jr as dot,$e as each,Kr as equals,Hr as exp,Zr as exp2,ut as ext,i as f,Qr as faceforward,ct as fig,ur as float,Jr as floor,it as flush,O as formatConversions,eo as fract,U as fragment,to as fwidth,R as getId,fe as getOperator,_e as getStride,ce as hex2rgb,kt as iMouse,Yt as iResolution,jt as iTime,_ as infer,Et as inferParameterTypes,cr as int,ro as inverseSqrt,l as is,ae as isConversion,ie as isFunction,un as isGL,ue as isNodeProxy,se as isOperator,ot as isServer,Y as isSwizzle,nt as isWebGPUSupported,gr as ivec2,vr as ivec3,Xr as ivec4,k as joins,oo as length,no as lengthSq,so as log,io as log2,xr as mat2,dr as mat3,br as mat4,ao as max,uo as min,co as mix,b as n,fo as negate,u as node,or as normalLocal,sr as normalView,nr as normalWorld,po as normalize,Ye as o,lo as oneMinus,Kt as position,er as positionLocal,rr as positionView,tr as positionWorld,mo as pow,xo as pow2,bo as pow3,go as pow4,vo as radians,Xo as reciprocal,yo as reflect,To as refract,at as replace,Eo as round,ve as s,ho as saturate,ir as screenCoordinate,ar as screenUV,Vt as select,pt as sig,_o as sign,Po as sin,Ro as smoothstep,So as sqrt,No as step,wo as tan,Sr as texture,wr as textureSize,be as toConst,de as toVar,Co as transformDirection,Lo as trunc,I as u,fr as uint,Ht as uv,yr as uvec2,Tr as uvec3,Er as uvec4,zt as v,It as varying,lr as vec2,Xe as vec3,mr as vec4,G as vertex,Zt as vertexColor,Jt as vertexStage,Se as webgl,Ae as webgpu};
69
+ `,we=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}},Ce=(e,t,r,n,o=Je,s=et)=>{S(o)&&(o=F(o,{isWebGL:!1})),S(s)&&(s=G(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"}})},Le=(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}},Oe=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),tt=e=>Math.ceil(e/256)*256,Ie=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:n}},Ue=(e,t)=>{let r=new Float32Array(t),n=tt(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},Ge=(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}},rt=(e,t)=>e/t,ot=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",Fe=(e,t,r=6)=>{let n=rt(t,r);return{arrayStride:n*4,attributes:[{shaderLocation:e,offset:0,format:ot(n)}]}};var Ae=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await we(t),o={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},s=[],u=[],a=[],m=H((X,l)=>{let{array:x,buffer:v}=Ie(r,l);return u.push(v),a.push(Fe(a.length,x.length,e.count)),o.needsUpdate=!0,{array:x,buffer:v}}),y=H((X,l)=>{let{array:x,buffer:v}=Ue(r,l);return o.resources[0].push({buffer:v}),o.needsUpdate=!0,{array:x,buffer:v}}),f=H((X,{width:l,height:x})=>{let{texture:v,sampler:A}=Ge(r,l,x);return o.resources[1].push(A,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}=Le(r,l);X.push(x),s.push(v)}),o.pipeline=Ce(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(Oe(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:A,height:$e}=f(X,x);r.queue.copyExternalImageToTexture({source:x},{texture:v},{width:A,height:$e}),o.loadingImg--})}}};var mn=e=>g.obj(e)?"isGL"in e:!1,at=()=>typeof window>"u",ut=()=>at()?!1:"gpu"in navigator,Q=performance.now(),ct=e=>{let t=nt({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=it(),t.frame=st(),t.attribute=Z((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=Z((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=Z((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:Q}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,ut()||(t.isWebGL=!0),t.isWebGL?t(await Re(t)):t(await Ae(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",()=>{Q=performance.now()/1e3,t.uniform("iTime",Q)}),t(e)},dn=ct;export{Me as ADDITIONAL_FUNCTIONS,M as BOOL_RETURN_FUNCTIONS,oe as BUILTIN_TYPES,ne as COMPARISON_OPERATORS,k as COMPONENT_COUNT_TO_TYPE,L as CONSTANTS,J as CONVERSIONS,z as FIRST_ARG_TYPE_FUNCTIONS,te as FUNCTIONS,$t as Fn,W as HIGHEST_TYPE_FUNCTIONS,Gt as If,se as LOGICAL_OPERATORS,Ft as Loop,$ as OPERATORS,ee as OPERATOR_KEYS,V as PRESERVE_TYPE_FUNCTIONS,B as SCALAR_RETURN_FUNCTIONS,bt as SWIZZLES,At as Switch,re as TYPE_MAPPING,D as VEC3_RETURN_FUNCTIONS,q as VEC4_RETURN_FUNCTIONS,ie as WGSL_TO_GLSL_BUILTIN,Br as abs,Mr as acos,tt as alignTo256,Vr as all,Dr as any,zr as asin,ve as assign,Wr as atan,qr as atan2,Kt as attribute,kr as bitcast,Xr as bool,Zt as builtin,Or as bvec2,Ir as bvec3,Ur as bvec4,Yr as cbrt,jr as ceil,Kr as clamp,p as code,Gr as color,b as conversion,Hr as cos,Ne as createAttrib,Le as createBindGroup,Fe as createBufferLayout,Oe as createDescriptor,we as createDevice,ct as createGL,Ee as createIbo,Ce as createPipeline,_e as createProgram,Se as createTexture,Ge as createTextureSampler,Ue as createUniformBuffer,he as createVbo,Ie as createVertexBuffer,Zr as cross,Ar as cubeTexture,Qr as dFdx,Jr as dFdy,dn as default,Qe as defaultFragmentGLSL,Ze as defaultVertexGLSL,eo as degrees,to as difference,dt as dig,ro as distance,oo as dot,Be as each,no as equals,so as exp,io as exp2,lt as ext,ao as faceforward,mt as fig,br as float,uo as floor,pt as flush,C as formatConversions,co as fract,xr as fragCoord,or as fragDepth,G as fragment,rr as frontFacing,i as function_,po as fwidth,me as generateDefine,I as getId,fe as getOperator,Pe as getStride,pe as hex2rgb,Jt as iMouse,Qt as iResolution,er as iTime,_ as infer,ke as inferImpl,tr as instanceIndex,vr as int,fo as inverseSqrt,g as is,ce as isConversion,ue as isFunction,mn as isGL,S as isNodeProxy,ae as isOperator,at as isServer,Y as isSwizzle,ut as isWebGPUSupported,Nr as ivec2,Sr as ivec3,Rr as ivec4,U as joins,lo as length,mo as lengthSq,xo as log,go as log2,hr as mat2,Er as mat3,Pr as mat4,bo as max,vo as min,yo as mix,Xo as negate,c as node,pr as normalLocal,lr as normalView,fr as normalWorld,To as normalize,_o as oneMinus,je as operator,ir as pointCoord,Ke as position,ar as positionLocal,cr as positionView,ur as positionWorld,ho as pow,Eo as pow2,Po as pow3,No as pow4,So as radians,Ro as reciprocal,wo as reflect,Co as refract,ft as replace,Lo as round,nr as sampleIndex,sr as sampleMask,Oo as saturate,mr as screenCoordinate,dr as screenUV,Yt as select,xt as sig,Io as sign,Uo as sin,Go as smoothstep,Fo as sqrt,Ao as step,ye as swizzle,$o as tan,Fr as texture,$r as textureSize,be as toVar,Bo as transformDirection,Mo as trunc,yr as uint,j as uniform,wr as uvec2,Cr as uvec3,Lr as uvec4,Ht as variable,jt as varying,Tr as vec2,Xe as vec3,_r as vec4,F as vertex,gr as vertexId,He as vertexIndex,Re as webgl,Ae as webgpu};
66
70
  //# sourceMappingURL=index.js.map