glre 0.48.0 → 0.49.1

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
@@ -148,7 +148,7 @@ import { useGL } from 'glre/react'
148
148
  import { vec4, uv } from 'glre/node'
149
149
 
150
150
  const Canvas = () => {
151
- const gl = useGL({ frag: vec4(uv, 0, 1) })
151
+ const gl = useGL({ fragment: vec4(uv, 0, 1) })
152
152
  return <canvas ref={gl.ref} />
153
153
  }
154
154
 
@@ -176,7 +176,7 @@ import { useGL } from 'glre/native'
176
176
  import { vec4, uv } from 'glre/node'
177
177
 
178
178
  const Canvas = () => {
179
- const gl = useGL({ frag: vec4(uv, 0, 1) })
179
+ const gl = useGL({ fragment: vec4(uv, 0, 1) })
180
180
  return (
181
181
  <GLView
182
182
  style={{ flex: 1 }}
@@ -207,7 +207,7 @@ import { onGL } from 'glre/solid'
207
207
  import { vec4, uv } from 'glre/node'
208
208
 
209
209
  const Canvas = () => {
210
- const gl = onGL({ frag: vec4(uv, 0, 1) })
210
+ const gl = onGL({ fragment: vec4(uv, 0, 1) })
211
211
  return <canvas ref={gl.ref} />
212
212
  }
213
213
 
@@ -253,8 +253,8 @@ function Canvas() {
253
253
  const gl = useGL({
254
254
  isWebGL: true,
255
255
  triangleCount: 1,
256
- vert: vec4(tri, 0, 1),
257
- frag: vec4(vertexStage(col), 1),
256
+ vertex: vec4(tri, 0, 1),
257
+ fragment: vec4(vertexStage(col), 1),
258
258
  })
259
259
  return <canvas ref={gl.ref} />
260
260
  }
@@ -402,7 +402,7 @@ function Canvas() {
402
402
  function Canvas() {
403
403
  const gl = useGL({
404
404
  isWebGL: true,
405
- frag: vec4(
405
+ fragment: vec4(
406
406
  uv.sub(iMouse).fract(),
407
407
  iTime.sin().mul(0.5).add(0.5),
408
408
  1
@@ -516,7 +516,7 @@ function Canvas() {
516
516
  const gl = useGL({
517
517
  isWebGL: true,
518
518
  triangleCount: 1,
519
- vert: vec4(tri, 0, 1),
519
+ vertex: vec4(tri, 0, 1),
520
520
  })
521
521
  return <canvas ref={gl.ref} />
522
522
  }
@@ -539,7 +539,7 @@ function Canvas() {
539
539
  const gl = useGL({
540
540
  isWebGL: true,
541
541
  triangleCount: 1,
542
- vert: `
542
+ vertex: `
543
543
  #version 300 es
544
544
  in vec4 tri;
545
545
  void main() {
@@ -630,11 +630,11 @@ function Canvas() {
630
630
  {
631
631
  isWebGL: true,
632
632
  triangleCount: 1,
633
- vert: vec4(vec2(-0.5, 0).add(tri), 0, 1),
633
+ vertex: vec4(vec2(-0.5, 0).add(tri), 0, 1),
634
634
  },
635
635
  {
636
636
  triangleCount: 1,
637
- vert: vec4(vec2(0.5, 0).add(tri), 0, 1),
637
+ vertex: vec4(vec2(0.5, 0).add(tri), 0, 1),
638
638
  }
639
639
  )
640
640
  return <canvas ref={gl.ref} />
@@ -659,7 +659,7 @@ function Canvas() {
659
659
  {
660
660
  isWebGL: true,
661
661
  triangleCount: 1,
662
- vert: `
662
+ vertex: `
663
663
  #version 300 es
664
664
  in vec2 tri;
665
665
  void main() {
@@ -668,7 +668,7 @@ function Canvas() {
668
668
  },
669
669
  {
670
670
  triangleCount: 1,
671
- vert: `
671
+ vertex: `
672
672
  #version 300 es
673
673
  in vec2 tri;
674
674
  void main() {
@@ -704,7 +704,7 @@ function Canvas() {
704
704
  {
705
705
  isWebGL: false,
706
706
  triangleCount: 1,
707
- vert: `
707
+ vertex: `
708
708
  struct In {
709
709
  @location(0) tri: vec2f
710
710
  }
@@ -720,7 +720,7 @@ function Canvas() {
720
720
  },
721
721
  {
722
722
  triangleCount: 1,
723
- vert: `
723
+ vertex: `
724
724
  struct In {
725
725
  @location(0) tri: vec2f
726
726
  }
@@ -780,7 +780,7 @@ function Canvas() {
780
780
  const iTexture = uniform('https://...')
781
781
  const gl = useGL({
782
782
  isWebGL: true,
783
- frag: texture(iTexture, uv),
783
+ fragment: texture(iTexture, uv),
784
784
  })
785
785
  return <canvas ref={gl.ref} />
786
786
  }
@@ -897,7 +897,7 @@ function Canvas() {
897
897
  isWebGL: true,
898
898
  instanceCount: 1000,
899
899
  triangleCount: 1,
900
- vert: vec4(
900
+ vertex: vec4(
901
901
  tri.mul(0.05).sub(1).add(pos.mul(2)),
902
902
  0,
903
903
  1
@@ -925,7 +925,7 @@ function Canvas() {
925
925
  isWebGL: true,
926
926
  instanceCount: 1000,
927
927
  triangleCount: 1,
928
- vert: `
928
+ vertex: `
929
929
  #version 300 es
930
930
  in vec2 tri;
931
931
  in vec2 pos;
@@ -967,7 +967,7 @@ function Canvas() {
967
967
  isWebGL: false,
968
968
  instanceCount: 1000,
969
969
  triangleCount: 1,
970
- vert: `
970
+ vertex: `
971
971
  struct In {
972
972
  @location(0) tri: vec2f,
973
973
  @location(1) pos: vec2f
package/dist/addons.d.ts CHANGED
@@ -29,8 +29,54 @@ declare const TYPE_MAPPING: {
29
29
  readonly struct: "struct";
30
30
  };
31
31
  declare const CONSTANTS: (keyof typeof TYPE_MAPPING)[];
32
+ declare const SWIZZLE_BASE_MAP: {
33
+ readonly float: "float";
34
+ readonly vec2: "float";
35
+ readonly vec3: "float";
36
+ readonly vec4: "float";
37
+ readonly int: "int";
38
+ readonly ivec2: "int";
39
+ readonly ivec3: "int";
40
+ readonly ivec4: "int";
41
+ readonly uint: "uint";
42
+ readonly uvec2: "uint";
43
+ readonly uvec3: "uint";
44
+ readonly uvec4: "uint";
45
+ readonly bool: "bool";
46
+ readonly bvec2: "bool";
47
+ readonly bvec3: "bool";
48
+ readonly bvec4: "bool";
49
+ };
50
+ declare const SWIZZLE_RESULT_MAP: {
51
+ float: {
52
+ readonly 1: "float";
53
+ readonly 2: "vec2";
54
+ readonly 3: "vec3";
55
+ readonly 4: "vec4";
56
+ readonly 9: "mat3";
57
+ readonly 16: "mat4";
58
+ };
59
+ int: {
60
+ readonly 1: "int";
61
+ readonly 2: "ivec2";
62
+ readonly 3: "ivec3";
63
+ readonly 4: "ivec4";
64
+ };
65
+ uint: {
66
+ readonly 1: "uint";
67
+ readonly 2: "uvec2";
68
+ readonly 3: "uvec3";
69
+ readonly 4: "uvec4";
70
+ };
71
+ bool: {
72
+ readonly 1: "bool";
73
+ readonly 2: "bvec2";
74
+ readonly 3: "bvec3";
75
+ readonly 4: "bvec4";
76
+ };
77
+ };
32
78
  declare const OPERATORS: {
33
- readonly not: "";
79
+ readonly not: "!";
34
80
  readonly add: "+";
35
81
  readonly sub: "-";
36
82
  readonly mul: "*";
@@ -190,7 +236,7 @@ type Operators = (typeof OPERATOR_KEYS)[number];
190
236
  */
191
237
  interface FnLayout {
192
238
  name: string;
193
- type: C | 'auto';
239
+ type?: C | 'auto';
194
240
  inputs?: Array<{
195
241
  name: string;
196
242
  type: C | 'auto';
@@ -237,6 +283,15 @@ interface NodeContext {
237
283
  structStructFields: Map<string, StructFields>;
238
284
  };
239
285
  }
286
+ /**
287
+ * swizzle
288
+ */
289
+ type _SwizzleLength<A extends string> = A extends `${infer _}${infer A}` ? A extends '' ? 1 : A extends `${infer _}${infer B}` ? B extends '' ? 2 : B extends `${infer _}${infer C}` ? C extends '' ? 3 : 4 : never : never : never;
290
+ type _SwizzleBaseMap = typeof SWIZZLE_BASE_MAP;
291
+ type _SwizzleResultMap = typeof SWIZZLE_RESULT_MAP;
292
+ type _SwizzleBase<T extends C> = T extends keyof _SwizzleBaseMap ? _SwizzleBaseMap[T] : never;
293
+ type _SwizzleResult<T extends C, L extends 1 | 2 | 3 | 4> = _SwizzleResultMap[_SwizzleBase<T>][L];
294
+ type InferSwizzleType<T extends C, S extends string> = _SwizzleLength<S> extends infer L extends 1 | 2 | 3 | 4 ? _SwizzleResult<_SwizzleBase<T>, L> : never;
240
295
  /**
241
296
  * infer
242
297
  */
@@ -247,57 +302,6 @@ type ExtractPairs<T> = T extends readonly [infer L, infer R, string] ? [L, R] |
247
302
  type OperatorTypeRules = ExtractPairs<_OperatorTypeRulesMap[number]>;
248
303
  type IsInRules<L extends C, R extends C> = [L, R] extends OperatorTypeRules ? 1 : 0;
249
304
  type ValidateOperator<L extends C, R extends C> = L extends R ? 1 : IsInRules<L, R>;
250
- /**
251
- * swizzle
252
- */
253
- type _SwizzleLength<A extends string> = A extends `${infer _}${infer A}` ? A extends '' ? 1 : A extends `${infer _}${infer B}` ? B extends '' ? 2 : B extends `${infer _}${infer C}` ? C extends '' ? 3 : 4 : never : never : never;
254
- type _SwizzleBaseMap = {
255
- float: 'float';
256
- vec2: 'float';
257
- vec3: 'float';
258
- vec4: 'float';
259
- int: 'int';
260
- ivec2: 'int';
261
- ivec3: 'int';
262
- ivec4: 'int';
263
- uint: 'uint';
264
- uvec2: 'uint';
265
- uvec3: 'uint';
266
- uvec4: 'uint';
267
- bool: 'bool';
268
- bvec2: 'bool';
269
- bvec3: 'bool';
270
- bvec4: 'bool';
271
- };
272
- type _SwizzleResultMap = {
273
- float: {
274
- 1: 'float';
275
- 2: 'vec2';
276
- 3: 'vec3';
277
- 4: 'vec4';
278
- };
279
- int: {
280
- 1: 'int';
281
- 2: 'ivec2';
282
- 3: 'ivec3';
283
- 4: 'ivec4';
284
- };
285
- uint: {
286
- 1: 'uint';
287
- 2: 'uvec2';
288
- 3: 'uvec3';
289
- 4: 'uvec4';
290
- };
291
- bool: {
292
- 1: 'bool';
293
- 2: 'bvec2';
294
- 3: 'bvec3';
295
- 4: 'bvec4';
296
- };
297
- };
298
- type _SwizzleBase<T extends C> = T extends keyof _SwizzleBaseMap ? _SwizzleBaseMap[T] : never;
299
- type _SwizzleResult<T extends C, L extends 1 | 2 | 3 | 4> = _SwizzleResultMap[_SwizzleBase<T>][L];
300
- type InferSwizzleType<T extends C, S extends string> = _SwizzleLength<S> extends infer L extends 1 | 2 | 3 | 4 ? _SwizzleResult<_SwizzleBase<T>, L> : never;
301
305
  /**
302
306
  * Swizzles
303
307
  */
package/dist/index.cjs CHANGED
@@ -34,5 +34,5 @@ fn main(out: Out) -> @location(0) vec4f {
34
34
  `;var A=require("reev");var N=(e,t,n,r=console.warn)=>{let o=e.createShader(n);if(!o)return r("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let s=e.getShaderInfoLog(o);e.deleteShader(o),r(`Could not compile shader: ${s}
35
35
 
36
36
  \u2193\u2193\u2193generated\u2193\u2193\u2193
37
- ${t}`)},P=(e,t,n,r)=>{let o=e.createProgram(),s=N(e,t,e.FRAGMENT_SHADER,r.error),i=N(e,n,e.VERTEX_SHADER,r.error);if(!s||!i)return;if(e.attachShader(o,s),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let u=e.getProgramInfoLog(o);e.deleteProgram(o),r.error(`Could not link program: ${u}`)},O=(e,t)=>{let n=new Float32Array(t),r=e.createBuffer();return{array:n,buffer:r}},w=(e,t,n,r)=>{t.set(r),e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null)},z=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0)},H=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0),e.vertexAttribDivisor(t,1)},U=(e,t,n)=>{if(b.nul(t))return;if(b.num(n))return e.uniform1f(t,n);let r=n.length;if(r<=4)return e[`uniform${r}fv`](t,n);r=Math.sqrt(r)<<0,e[`uniformMatrix${r}fv`](t,!1,n)},C=(e,t,n,r,o=!1)=>{let s=e.createTexture();if(e.bindTexture(e.TEXTURE_2D,s),t?(e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),o||e.generateMipmap(e.TEXTURE_2D)):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([0,0,0,0])),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(n,r),e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),o)return()=>{e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t)}},$=(e,t,n,r,o,s,i,u)=>{let m=n*r,d=t.length/m;for(let p=0;p<m;p++)for(let a=0;a<Math.min(d,4);a++)u[4*p+a]=t[p*d+a]||0;e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),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,s.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),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)},k=(e,t)=>{for(let{ping:n,pong:r}of t)e.deleteTexture(n.texture),e.deleteTexture(r.texture),e.deleteFramebuffer(n.buffer),e.deleteFramebuffer(r.buffer)},q=(e,t,n,r,o,s)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(r,o),s===0&&e.bindFramebuffer(e.FRAMEBUFFER,n.buffer);let i=e.COLOR_ATTACHMENT0+s;return e.framebufferTexture2D(e.FRAMEBUFFER,i,e.TEXTURE_2D,n.texture,0),i},K=(e=1024)=>{if(b.num(e)){let o=Math.sqrt(e),s=Math.ceil(o);return Number.isInteger(o)||console.warn(`GLRE Storage Warning: particleCount (${e}) is not a square. Using ${s}x${s} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`),{x:s,y:s}}let[t,n,r]=e;if(r!==void 0){let o=n*r;return console.warn(`GLRE Storage Warning: 3D particleCount [${t}, ${n}, ${r}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${n} * depth=${r} = ${o}.`),{x:t,y:o}}return{x:t,y:n}},Y=e=>{let t=e.getExtension("WEBGL_lose_context");t&&t.loseContext()},j=e=>{e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.enable(e.CULL_FACE),e.cullFace(e.BACK)},Q=e=>{let t=e.getExtension("WEBGL_polygon_mode");t&&t.polygonModeWEBGL(e.FRONT_AND_BACK,t.LINE_WEBGL)};var J=e=>{let{cs:t,particleCount:n,gl:r}=e;if(!t)return;r.getExtension("EXT_color_buffer_float");let o=0,s=0,i=(0,A.nested)(()=>o++);t=b.str(t)?t:t.compute({isWebGL:!0,gl:e,units:i});let u=P(r,t,_,e),m=K(n),d=(0,A.nested)(a=>r.getUniformLocation(u,a)),p=(0,A.nested)(a=>{let f=new Float32Array(m.x*m.y*4),c={texture:r.createTexture(),buffer:r.createFramebuffer()},l={texture:r.createTexture(),buffer:r.createFramebuffer()};return{ping:c,pong:l,array:f,loc:d(a),unit:i(a)}});e("_uniform",(a,f)=>{r.useProgram(e.program=u),U(r,d(a),f)}),e("_storage",(a,f)=>{r.useProgram(e.program=u);let{ping:c,pong:l,unit:x,array:E}=p(a);$(r,f,m.x,m.y,c,l,x,E)}),e("clean",()=>{r.deleteProgram(u),k(r,p.map.values())}),e("render",()=>{r.useProgram(e.program=u);let a=p.map.values().map(({ping:f,pong:c,loc:l,unit:x},E)=>{let[L,h]=s%2?[f,c]:[c,f];return q(r,L,h,l,x,E)});r.drawBuffers(a),r.drawArrays(r.TRIANGLES,0,3),r.bindFramebuffer(r.FRAMEBUFFER,null),s++})};var B=require("reev");var Z=e=>{let{fs:t,vs:n,gl:r}=e,o={isWebGL:!0,gl:e};t=e.fs?b.str(e.fs)?e.fs:e.fs.fragment(o):W,n=e.vs?b.str(e.vs)?e.vs:e.vs.vertex(o):_;let s=P(r,t,n,e),i=0,u=(0,B.nested)(()=>i++),m=(0,B.nested)(p=>r.getUniformLocation(s,p)),d=(0,B.nested)((p,a,f=!1)=>({stride:v(a.length,f?e.instanceCount:e.count,e.error,p),location:r.getAttribLocation(s,p),...O(r,a)}));e("_attribute",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a);w(r,f.array,f.buffer,a),z(r,f.location,f.stride,f.buffer)}),e("_instance",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a,!0);w(r,f.array,f.buffer,a),H(r,f.location,f.stride,f.buffer)}),e("_uniform",(p,a)=>{r.useProgram(e.program=s),U(r,m(p),a)}),e("_texture",(p,a)=>{r.useProgram(e.program=s);let f=m(p),c=u(p);C(r,null,f,c,!1),R(a,(l,x)=>{r.useProgram(e.program=s);let E=C(r,l,f,c,x);E&&e({render:E})})}),e("clean",()=>{r.deleteProgram(s)}),e("render",()=>{r.useProgram(e.program=s),e.instanceCount>1?r.drawArraysInstanced(r.TRIANGLES,0,e.count,e.instanceCount):r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)})};var ee=e=>{let t=!e.gl;if(t){let n=e.gl=e.el.getContext("webgl2");e("render",()=>n.viewport(0,0,...e.size))}J(e),Z(e),t&&(e("clean",()=>Y(e.gl)),e.isDepth&&j(e.gl),e.wireframe&&Q(e.gl))};var se=require("reev");var G=require("reev");var te=()=>{let e=0,t=0,n=0,r=0,o=(0,G.nested)(()=>{let m=Math.floor(e/12),d=e%12;return e++,{group:m,binding:d}}),s=(0,G.nested)(()=>{let d=Math.floor(e/12)+1+Math.floor(t/6),p=t%6*2;return t++,{group:d,binding:p}}),i=(0,G.nested)(()=>{let d=Math.floor(e/12)+Math.floor(t/6)+2+Math.floor(n/12),p=n%12;return n++,{group:d,binding:p}}),u=(0,G.nested)(()=>{let m=r;return r++,{location:m}});return{uniform:o,texture:s,storage:i,attrib:u}},re=async(e,t=console.log,n)=>{let r=navigator.gpu,o=r.getPreferredCanvasFormat(),s=await r.requestAdapter();if(n?.aborted)throw new DOMException("Aborted","AbortError");let i=await s.requestDevice();if(n?.aborted&&(i.destroy(),n?.aborted))throw new DOMException("Aborted","AbortError");return i.onuncapturederror=u=>t(u.error.message),e.configure({device:i,format:o,alphaMode:"premultiplied"}),{device:i,format:o}},ve=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",_e=e=>{let t=[],n=[];for(let{buffer:r,location:o,stride:s,isInstance:i}of e){t[o]=r;let u=Math.min(Math.max(Math.floor(s),1),4),m=Math.max(4,Math.ceil(u*4/4)*4);n[o]={arrayStride:m,stepMode:i?"instance":"vertex",attributes:[{shaderLocation:o,offset:0,format:ve(u)}]}}return{vertexBuffers:t,bufferLayouts:n}},Pe=(e,t,n,r=[])=>{let o=new Map,s={bindGroups:[],bindGroupLayouts:[]},i=(u,m,d)=>{o.has(u)||o.set(u,{layouts:[],bindings:[]});let{layouts:p,bindings:a}=o.get(u);p.push(m),a.push(d)};for(let{binding:u,buffer:m,group:d}of t)i(d,{binding:u,visibility:7,buffer:{type:"uniform"}},{binding:u,resource:{buffer:m}});for(let{binding:u,buffer:m,group:d}of r)i(d,{binding:u,visibility:6,buffer:{type:"storage"}},{binding:u,resource:{buffer:m}});for(let{binding:u,group:m,sampler:d,view:p}of n)i(m,{binding:u,visibility:2,sampler:{}},{binding:u,resource:d}),i(m,{binding:u+1,visibility:2,texture:{}},{binding:u+1,resource:p});for(let[u,{layouts:m,bindings:d}]of o)s.bindGroupLayouts[u]=e.createBindGroupLayout({entries:m}),s.bindGroups[u]=e.createBindGroup({layout:s.bindGroupLayouts[u],entries:d});return s},Ue=(e,t,n,r,o,s,i)=>{let u={primitive:{topology:"triangle-list"},layout:e.createPipelineLayout({bindGroupLayouts:r}),vertex:{module:e.createShaderModule({label:"vert",code:o.trim()}),entryPoint:"main",buffers:n},fragment:{module:e.createShaderModule({label:"frag",code:s.trim()}),entryPoint:"main",targets:[{format:t}]}};return i&&(u.depthStencil={depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}),e.createRenderPipeline(u)},Ae=(e,t,n)=>{if(n)return e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:n.trim()}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})})},ne=(e,t,n,r,o,s,i,u,m,d)=>{let{vertexBuffers:p,bufferLayouts:a}=_e(n),{bindGroups:f,bindGroupLayouts:c}=Pe(e,r,o,s),l=Ae(e,c,u),x=Ue(e,t,a,c,m,i,d);return{bindGroups:f,vertexBuffers:p,computePipeline:l,graphicPipeline:x}},Be=e=>e==="uniform"?72:e==="attrib"?40:140,y=(e,t,n)=>{M(t)||(t=new Float32Array(t));let r=Be(n),o=n==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:o,usage:r});return{array:t,buffer:s}},g=(e,t,n,r)=>{n.set(t),e.queue.writeBuffer(r,0,n)},oe=(e,t)=>{let n={colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};return t&&(n.depthStencilAttachment={view:t.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}),n},I=(e,t=1280,n=800)=>{let r=e.createTexture({size:[t,n],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:r,sampler:o,view:r.createView()}},ie=(e,t,n)=>e.createTexture({size:[t,n],format:"depth24plus",usage:16}),ae=(e,t=32)=>{b.num(e)&&(e=[e]);let[n,r=1,o=1]=e;return{x:Math.min(n*r*o/t,65535),y:1,z:1}};var ue=e=>{let{particleCount:t}=e,n,r,o=(0,se.nested)((i,u)=>({...e.binding.storage(i),...y(e.device,u,"storage")}));return e("_storage",(i,u)=>{let{array:m,buffer:d}=o(i,u);g(e.device,u,m,d)}),e("render",()=>{if(!n||!r)return;let i=e.commandEncoder.beginComputePass();i.setPipeline(n),r.forEach((p,a)=>i.setBindGroup(a,p));let{x:u,y:m,z:d}=ae(t);i.dispatchWorkgroups(u,m,d),i.end()}),e("clean",()=>{for(let{buffer:i}of o.map.values())i.destroy()}),{storages:o,set:(i,u)=>{n=i,r=u}}};var D=require("reev");var fe=(e,t=()=>{})=>{let{count:n,instanceCount:r}=e,o,s,i,u=(0,D.nested)((a,f,c=!1,l=v(f.length,c?r:n,e.error,a))=>(t(),{...e.binding.attrib(a),...y(e.device,f,"attrib"),isInstance:c,stride:l})),m=(0,D.nested)((a,f)=>(t(),{...e.binding.uniform(a),...y(e.device,f,"uniform")})),d=(0,D.nested)((a,f=1,c=1)=>(t(),{...e.binding.texture(a),...I(e.device,f,c)}));return e("_attribute",(a,f)=>{let c=u(a,f);g(e.device,f,c.array,c.buffer)}),e("_instance",(a,f)=>{let c=u(a,f,!0);g(e.device,f,c.array,c.buffer)}),e("_uniform",(a,f)=>{b.num(f)&&(f=[f]);let c=m(a,f);g(e.device,f,c.array,c.buffer)}),e("_texture",(a,f)=>{let c=d(a);R(f,(l,x)=>{let[E,L]=x?[l.videoWidth,l.videoHeight]:[l.width,l.height];c.texture.destroy(),Object.assign(c,I(e.device,E,L)),t();let h=()=>void e.device.queue.copyExternalImageToTexture({source:l},{texture:c.texture},{width:E,height:L});x?e({render:h}):h()})}),e("render",()=>{!o||!s||!i||(e.passEncoder.setPipeline(o),s.forEach((a,f)=>e.passEncoder.setBindGroup(f,a)),i.forEach((a,f)=>e.passEncoder.setVertexBuffer(f,a)),e.passEncoder.draw(n,r,0,0))}),e("clean",()=>{for(let{buffer:a}of u.map.values())a.destroy();for(let{texture:a}of d.map.values())a.destroy();for(let{buffer:a}of m.map.values())a.destroy()}),{uniforms:m,textures:d,attributes:u,set:(a,f,c)=>{o=a,s=f,i=c}}};var me=async(e,t=!1)=>{let{vs:n,fs:r,cs:o}=e,s=!0,i=!e.gpu;if(i){let p=e.el.getContext("webgpu"),a=te(),{device:f,format:c}=await re(p,e.error);e({device:f,format:c,binding:a,gpu:p}),e("resize",()=>{e.depthTexture?.destroy(),e.isDepth&&(e.depthTexture=ie(e.device,...e.size))})}e("render",()=>{s&&d()}),i&&e("render",()=>{e.commandEncoder=e.device.createCommandEncoder()});let u=ue(e);i&&e("render",()=>{e.passEncoder=e.commandEncoder.beginRenderPass(oe(e.gpu,e.depthTexture))});let m=fe(e,()=>s=!0),d=()=>{s=!1;let p={isWebGL:!1,gl:e};r=r?b.str(r)?r:r.fragment(p):V,n=n?b.str(n)?n:n.vertex(p):X,o=o?b.str(o)?o:o.compute(p):"";let a=ne(e.device,e.format,m.attributes.map.values(),m.uniforms.map.values(),m.textures.map.values(),u.storages.map.values(),r,o,n,e.isDepth);u.set(a.computePipeline,a.bindGroups),m.set(a.graphicPipeline,a.bindGroups,a.vertexBuffers)};t&&e("render",()=>{e.passEncoder.end(),e.device.queue.submit([e.commandEncoder.finish()])}),e("clean",()=>{e.depthTexture?.destroy(),e.device.destroy()})};var de=()=>typeof window>"u",ce=()=>de()?!1:"gpu"in navigator,pe=e=>e.el||e.elem||e.element,be=(...e)=>{let t=(0,T.event)({isNative:!1,isWebGL:!0,isError:!1,isLoop:!0,isDebug:!1,isDepth:!1,wireframe:!1,size:[0,0],mouse:[0,0],precision:"highp",error(){t.isError=!0,t.isLoop=!1,t.clean(),console.warn("GLRE Error:",...arguments)}}),n=performance.now();return t.queue=(0,S.createQueue)(),t.frame=(0,S.createFrame)(),t.attribute=(0,T.durable)((r,o,s)=>t.queue(()=>t._attribute?.(r,o,s)),t),t.instance=(0,T.durable)((r,o,s)=>t.queue(()=>t._instance?.(r,o,s)),t),t.storage=(0,T.durable)((r,o)=>t.queue(()=>t._storage?.(r,o)),t),t.texture=(0,T.durable)((r,o)=>t.queue(()=>t._texture?.(r,o)),t),t.uniform=(0,T.durable)((r,o)=>t.queue(()=>t._uniform?.(r,o)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:n}),t("mount",async r=>{t.el=pe(t)||r||e.map(pe).find(Boolean);let o=!t.el;o&&!t.isNative&&(t.el=document.createElement("canvas"));for(let s=0;s<e.length;s++){let i=e[s];t.fs=i.fs||i.frag||i.fragment||void 0,t.cs=i.cs||i.comp||i.compute||void 0,t.vs=i.vs||i.vert||i.vertex||void 0,t.triangleCount=i.triangleCount||2,t.instanceCount=i.instanceCount||1,t.particleCount=i.particleCount||1024,t.count=i.count||t.triangleCount*3||6,t(i),b.bol(i.isWebGL)&&(t.isWebGL=i.isWebGL||!ce()),t.isWebGL?ee(t):await me(t,s===e.length-1),i.mount&&i.mount()}!t.el||t.isError||(t.resize(),t.frame(()=>(t.render(),t.isLoop)),!t.isNative&&(o&&document.body.appendChild(t.el),window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove)))}),t("clean",()=>{t.frame.stop(),!(!t.el||t.isNative)&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("ref",r=>{r?(t.el=r,t.mount()):t.clean()}),t("resize",()=>{let r=t.el.parentElement?.getBoundingClientRect();t.size[0]=t.el.width=t.width||r?.width||window.innerWidth,t.size[1]=t.el.height=t.height||r?.height||window.innerHeight,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,s=r.clientY)=>{let i=t.el.getBoundingClientRect();t.mouse[0]=(o-i.left)/i.width,t.mouse[1]=-(s-i.top)/i.height+1,t.uniform("iMouse",t.mouse)}),t("render",()=>{n=performance.now()/1e3,t.uniform("iTime",n),t.queue.flush()}),t},De=be;0&&(module.exports={createGL,isServer,isWebGPUSupported});
37
+ ${t}`)},P=(e,t,n,r)=>{let o=e.createProgram(),s=N(e,t,e.FRAGMENT_SHADER,r.error),i=N(e,n,e.VERTEX_SHADER,r.error);if(!s||!i)return;if(e.attachShader(o,s),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let u=e.getProgramInfoLog(o);e.deleteProgram(o),r.error(`Could not link program: ${u}`)},O=(e,t)=>{let n=new Float32Array(t),r=e.createBuffer();return{array:n,buffer:r}},w=(e,t,n,r)=>{t.set(r),e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null)},z=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0)},H=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0),e.vertexAttribDivisor(t,1)},U=(e,t,n)=>{if(b.nul(t))return;if(b.num(n))return e.uniform1f(t,n);let r=n.length;if(r<=4)return e[`uniform${r}fv`](t,n);r=Math.sqrt(r)<<0,e[`uniformMatrix${r}fv`](t,!1,n)},C=(e,t,n,r,o=!1)=>{let s=e.createTexture();if(e.bindTexture(e.TEXTURE_2D,s),t?(e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),o||e.generateMipmap(e.TEXTURE_2D)):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([0,0,0,0])),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(n,r),e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),o)return()=>{e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t)}},$=(e,t,n,r,o,s,i,u)=>{let m=n*r,d=t.length/m;for(let p=0;p<m;p++)for(let a=0;a<Math.min(d,4);a++)u[4*p+a]=t[p*d+a]||0;e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),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,s.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),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)},k=(e,t)=>{for(let{ping:n,pong:r}of t)e.deleteTexture(n.texture),e.deleteTexture(r.texture),e.deleteFramebuffer(n.buffer),e.deleteFramebuffer(r.buffer)},q=(e,t,n,r,o,s)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(r,o),s===0&&e.bindFramebuffer(e.FRAMEBUFFER,n.buffer);let i=e.COLOR_ATTACHMENT0+s;return e.framebufferTexture2D(e.FRAMEBUFFER,i,e.TEXTURE_2D,n.texture,0),i},K=(e=1024)=>{if(b.num(e)){let o=Math.sqrt(e),s=Math.ceil(o);return Number.isInteger(o)||console.warn(`GLRE Storage Warning: particleCount (${e}) is not a square. Using ${s}x${s} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`),{x:s,y:s}}let[t,n,r]=e;if(r!==void 0){let o=n*r;return console.warn(`GLRE Storage Warning: 3D particleCount [${t}, ${n}, ${r}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${n} * depth=${r} = ${o}.`),{x:t,y:o}}return{x:t,y:n}},Y=e=>{let t=e.getExtension("WEBGL_lose_context");t&&t.loseContext()},j=e=>{e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.enable(e.CULL_FACE),e.cullFace(e.BACK)},Q=e=>{let t=e.getExtension("WEBGL_polygon_mode");t&&t.polygonModeWEBGL(e.FRONT_AND_BACK,t.LINE_WEBGL)};var J=e=>{let{cs:t,particleCount:n,gl:r}=e;if(!t)return;r.getExtension("EXT_color_buffer_float");let o=0,s=0,i=(0,A.nested)(()=>o++);t=b.str(t)?t:t.compute({isWebGL:!0,gl:e,units:i});let u=P(r,t,_,e),m=K(n),d=(0,A.nested)(a=>r.getUniformLocation(u,a)),p=(0,A.nested)(a=>{let f=new Float32Array(m.x*m.y*4),c={texture:r.createTexture(),buffer:r.createFramebuffer()},l={texture:r.createTexture(),buffer:r.createFramebuffer()};return{ping:c,pong:l,array:f,loc:d(a),unit:i(a)}});e("_uniform",(a,f)=>{r.useProgram(e.program=u),U(r,d(a),f)}),e("_storage",(a,f)=>{r.useProgram(e.program=u);let{ping:c,pong:l,unit:x,array:E}=p(a);$(r,f,m.x,m.y,c,l,x,E)}),e("clean",()=>{r.deleteProgram(u),k(r,p.map.values())}),e("render",()=>{r.useProgram(e.program=u);let a=p.map.values().map(({ping:f,pong:c,loc:l,unit:x},E)=>{let[L,h]=s%2?[f,c]:[c,f];return q(r,L,h,l,x,E)});r.drawBuffers(a),r.drawArrays(r.TRIANGLES,0,3),r.bindFramebuffer(r.FRAMEBUFFER,null),s++})};var B=require("reev");var Z=e=>{let{fs:t,vs:n,gl:r}=e,o={isWebGL:!0,gl:e};t=e.fs?b.str(e.fs)?e.fs:e.fs.fragment(o):W,n=e.vs?b.str(e.vs)?e.vs:e.vs.vertex(o):_;let s=P(r,t,n,e),i=0,u=(0,B.nested)(()=>i++),m=(0,B.nested)(p=>r.getUniformLocation(s,p)),d=(0,B.nested)((p,a,f=!1)=>({stride:v(a.length,f?e.instanceCount:e.count,e.error,p),location:r.getAttribLocation(s,p),...O(r,a)}));e("_attribute",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a);w(r,f.array,f.buffer,a),z(r,f.location,f.stride,f.buffer)}),e("_instance",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a,!0);w(r,f.array,f.buffer,a),H(r,f.location,f.stride,f.buffer)}),e("_uniform",(p,a)=>{r.useProgram(e.program=s),U(r,m(p),a)}),e("_texture",(p,a)=>{r.useProgram(e.program=s);let f=m(p),c=u(p);C(r,null,f,c,!1),R(a,(l,x)=>{r.useProgram(e.program=s);let E=C(r,l,f,c,x);E&&e({render:E})})}),e("clean",()=>{r.deleteProgram(s)}),e("render",()=>{r.useProgram(e.program=s),e.instanceCount>1?r.drawArraysInstanced(r.TRIANGLES,0,e.count,e.instanceCount):r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)})};var ee=e=>{let t=!e.gl;if(t){let n=e.gl=e.el.getContext("webgl2");e("render",()=>n.viewport(0,0,...e.size))}J(e),Z(e),t&&(e("clean",()=>Y(e.gl)),e.isDepth&&j(e.gl),e.wireframe&&Q(e.gl))};var se=require("reev");var G=require("reev");var te=()=>{let e=0,t=0,n=0,r=0,o=(0,G.nested)(()=>{let m=Math.floor(e/12),d=e%12;return e++,{group:m,binding:d}}),s=(0,G.nested)(()=>{let d=Math.floor(e/12)+1+Math.floor(t/6),p=t%6*2;return t++,{group:d,binding:p}}),i=(0,G.nested)(()=>{let d=Math.floor(e/12)+Math.floor(t/6)+2+Math.floor(n/12),p=n%12;return n++,{group:d,binding:p}}),u=(0,G.nested)(()=>{let m=r;return r++,{location:m}});return{uniform:o,texture:s,storage:i,attrib:u}},re=async(e,t=console.log,n)=>{let r=navigator.gpu,o=r.getPreferredCanvasFormat(),s=await r.requestAdapter();if(n?.aborted)throw new DOMException("Aborted","AbortError");let i=await s.requestDevice();if(n?.aborted&&(i.destroy(),n?.aborted))throw new DOMException("Aborted","AbortError");return i.onuncapturederror=u=>t(u.error.message),e.configure({device:i,format:o,alphaMode:"premultiplied"}),{device:i,format:o}},ve=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",_e=e=>{let t=[],n=[];for(let{buffer:r,location:o,stride:s,isInstance:i}of e){t[o]=r;let u=Math.min(Math.max(Math.floor(s),1),4),m=Math.max(4,Math.ceil(u*4/4)*4);n[o]={arrayStride:m,stepMode:i?"instance":"vertex",attributes:[{shaderLocation:o,offset:0,format:ve(u)}]}}return{vertexBuffers:t,bufferLayouts:n}},Pe=(e,t,n,r=[])=>{let o=new Map,s={bindGroups:[],bindGroupLayouts:[]},i=(u,m,d)=>{o.has(u)||o.set(u,{layouts:[],bindings:[]});let{layouts:p,bindings:a}=o.get(u);p.push(m),a.push(d)};for(let{binding:u,buffer:m,group:d}of t)i(d,{binding:u,visibility:7,buffer:{type:"uniform"}},{binding:u,resource:{buffer:m}});for(let{binding:u,buffer:m,group:d}of r)i(d,{binding:u,visibility:6,buffer:{type:"storage"}},{binding:u,resource:{buffer:m}});for(let{binding:u,group:m,sampler:d,view:p}of n)i(m,{binding:u,visibility:2,sampler:{}},{binding:u,resource:d}),i(m,{binding:u+1,visibility:2,texture:{}},{binding:u+1,resource:p});for(let[u,{layouts:m,bindings:d}]of o)s.bindGroupLayouts[u]=e.createBindGroupLayout({entries:m}),s.bindGroups[u]=e.createBindGroup({layout:s.bindGroupLayouts[u],entries:d});return s},Ue=(e,t,n,r,o,s,i)=>{let u={primitive:{topology:"triangle-list"},layout:e.createPipelineLayout({bindGroupLayouts:r}),vertex:{module:e.createShaderModule({label:"vert",code:o.trim()}),entryPoint:"main",buffers:n},fragment:{module:e.createShaderModule({label:"frag",code:s.trim()}),entryPoint:"main",targets:[{format:t}]}};return i&&(u.depthStencil={depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}),e.createRenderPipeline(u)},Ae=(e,t,n)=>{if(n)return e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:n.trim()}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})})},ne=(e,t,n,r,o,s,i,u,m,d)=>{let{vertexBuffers:p,bufferLayouts:a}=_e(n),{bindGroups:f,bindGroupLayouts:c}=Pe(e,r,o,s),l=Ae(e,c,u),x=Ue(e,t,a,c,m,i,d);return{bindGroups:f,vertexBuffers:p,computePipeline:l,graphicPipeline:x}},Be=e=>e==="uniform"?72:e==="attrib"?40:140,y=(e,t,n)=>{M(t)||(t=new Float32Array(t));let r=Be(n),o=n==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:o,usage:r});return{array:t,buffer:s}},g=(e,t,n,r)=>{n.set(t),e.queue.writeBuffer(r,0,n)},oe=(e,t)=>{let n={colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};return t&&(n.depthStencilAttachment={view:t.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}),n},I=(e,t=1280,n=800)=>{let r=e.createTexture({size:[t,n],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:r,sampler:o,view:r.createView()}},ie=(e,t,n)=>e.createTexture({size:[t,n],format:"depth24plus",usage:16}),ae=(e,t=32)=>{b.num(e)&&(e=[e]);let[n,r=1,o=1]=e;return{x:Math.min(n*r*o/t,65535),y:1,z:1}};var ue=e=>{let{particleCount:t}=e,n,r,o=(0,se.nested)((i,u)=>({...e.binding.storage(i),...y(e.device,u,"storage")}));return e("_storage",(i,u)=>{let{array:m,buffer:d}=o(i,u);g(e.device,u,m,d)}),e("render",()=>{if(!n||!r)return;let i=e.commandEncoder.beginComputePass();i.setPipeline(n),r.forEach((p,a)=>i.setBindGroup(a,p));let{x:u,y:m,z:d}=ae(t);i.dispatchWorkgroups(u,m,d),i.end()}),e("clean",()=>{for(let{buffer:i}of o.map.values())i.destroy()}),{storages:o,set:(i,u)=>{n=i,r=u}}};var D=require("reev");var fe=(e,t=()=>{})=>{let{count:n,instanceCount:r}=e,o,s,i,u=(0,D.nested)((a,f,c=!1,l=v(f.length,c?r:n,e.error,a))=>(t(),{...e.binding.attrib(a),...y(e.device,f,"attrib"),isInstance:c,stride:l})),m=(0,D.nested)((a,f)=>(t(),{...e.binding.uniform(a),...y(e.device,f,"uniform")})),d=(0,D.nested)((a,f=1,c=1)=>(t(),{...e.binding.texture(a),...I(e.device,f,c)}));return e("_attribute",(a,f)=>{let c=u(a,f);g(e.device,f,c.array,c.buffer)}),e("_instance",(a,f)=>{let c=u(a,f,!0);g(e.device,f,c.array,c.buffer)}),e("_uniform",(a,f)=>{b.num(f)&&(f=[f]);let c=m(a,f);g(e.device,f,c.array,c.buffer)}),e("_texture",(a,f)=>{let c=d(a);R(f,(l,x)=>{let[E,L]=x?[l.videoWidth,l.videoHeight]:[l.width,l.height];c.texture.destroy(),Object.assign(c,I(e.device,E,L)),t();let h=()=>void e.device.queue.copyExternalImageToTexture({source:l},{texture:c.texture},{width:E,height:L});x?e({render:h}):h()})}),e("render",()=>{!o||!s||!i||(e.passEncoder.setPipeline(o),s.forEach((a,f)=>e.passEncoder.setBindGroup(f,a)),i.forEach((a,f)=>e.passEncoder.setVertexBuffer(f,a)),e.passEncoder.draw(n,r,0,0))}),e("clean",()=>{for(let{buffer:a}of u.map.values())a.destroy();for(let{texture:a}of d.map.values())a.destroy();for(let{buffer:a}of m.map.values())a.destroy()}),{uniforms:m,textures:d,attributes:u,set:(a,f,c)=>{o=a,s=f,i=c}}};var me=async(e,t=!1)=>{let{vs:n,fs:r,cs:o}=e,s=!0,i=!e.gpu;if(i){let p=e.el.getContext("webgpu"),a=te(),{device:f,format:c}=await re(p,e.error);e({device:f,format:c,binding:a,gpu:p}),e("resize",()=>{e.depthTexture?.destroy(),e.isDepth&&(e.depthTexture=ie(e.device,...e.size))})}e("render",()=>{s&&d()}),i&&e("render",()=>{e.commandEncoder=e.device.createCommandEncoder()});let u=ue(e);i&&e("render",()=>{e.passEncoder=e.commandEncoder.beginRenderPass(oe(e.gpu,e.depthTexture))});let m=fe(e,()=>s=!0),d=()=>{s=!1;let p={isWebGL:!1,gl:e};r=r?b.str(r)?r:r.fragment(p):V,n=n?b.str(n)?n:n.vertex(p):X,o=o?b.str(o)?o:o.compute(p):"";let a=ne(e.device,e.format,m.attributes.map.values(),m.uniforms.map.values(),m.textures.map.values(),u.storages.map.values(),r,o,n,e.isDepth);u.set(a.computePipeline,a.bindGroups),m.set(a.graphicPipeline,a.bindGroups,a.vertexBuffers)};t&&e("render",()=>{e.passEncoder.end(),e.device.queue.submit([e.commandEncoder.finish()])}),e("clean",()=>{e.depthTexture?.destroy(),e.device.destroy()})};var de=()=>typeof window>"u",ce=()=>de()?!1:"gpu"in navigator,pe=e=>e.el||e.elem||e.element,be=(...e)=>{let t=(0,T.event)({isNative:!1,isWebGL:!0,isError:!1,isLoop:!0,isDebug:!1,isDepth:!1,wireframe:!1,size:[0,0],mouse:[0,0],precision:"highp",error(){t.isError=!0,t.isLoop=!1,t.clean(),console.warn("GLRE Error:",...arguments)}}),n=performance.now();return t.queue=(0,S.createQueue)(),t.frame=(0,S.createFrame)(),t.attribute=(0,T.durable)((r,o,s)=>t.queue(()=>t._attribute?.(r,o,s)),t),t.instance=(0,T.durable)((r,o,s)=>t.queue(()=>t._instance?.(r,o,s)),t),t.storage=(0,T.durable)((r,o)=>t.queue(()=>t._storage?.(r,o)),t),t.texture=(0,T.durable)((r,o)=>t.queue(()=>t._texture?.(r,o)),t),t.uniform=(0,T.durable)((r,o)=>t.queue(()=>t._uniform?.(r,o)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:n}),t("mount",async r=>{t.el=pe(t)||r||e.map(pe).find(Boolean);let o=!t.el;o&&!t.isNative&&(t.el=document.createElement("canvas"),Object.assign(t.el.style,{top:0,left:0,position:"fixed"}));for(let s=0;s<e.length;s++){let i=e[s];t.fs=i.fs||i.frag||i.fragment||void 0,t.cs=i.cs||i.comp||i.compute||void 0,t.vs=i.vs||i.vert||i.vertex||void 0,t.triangleCount=i.triangleCount||2,t.instanceCount=i.instanceCount||1,t.particleCount=i.particleCount||1024,t.count=i.count||t.triangleCount*3||6,t(i),b.bol(i.isWebGL)&&(t.isWebGL=i.isWebGL||!ce()),t.isWebGL?ee(t):await me(t,s===e.length-1),i.mount&&i.mount()}!t.el||t.isError||(t.resize(),t.frame(()=>(t.render(),t.isLoop)),!t.isNative&&(o&&document.body.appendChild(t.el),window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove)))}),t("clean",()=>{t.frame.stop(),!(!t.el||t.isNative)&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("ref",r=>{r?(t.el=r,t.mount()):t.clean()}),t("resize",()=>{let r=t.el.parentElement?.getBoundingClientRect();t.size[0]=t.el.width=t.width||r?.width||window.innerWidth,t.size[1]=t.el.height=t.height||r?.height||window.innerHeight,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,s=r.clientY)=>{let i=t.el.getBoundingClientRect();t.mouse[0]=(o-i.left)/i.width,t.mouse[1]=-(s-i.top)/i.height+1,t.uniform("iMouse",t.mouse)}),t("render",()=>{n=performance.now()/1e3,t.uniform("iTime",n),t.queue.flush()}),t},De=be;0&&(module.exports={createGL,isServer,isWebGPUSupported});
38
38
  //# sourceMappingURL=index.cjs.map