glre 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/dist/addons.cjs +2 -0
- package/dist/addons.cjs.map +1 -0
- package/dist/addons.d.ts +1287 -0
- package/dist/addons.js +2 -0
- package/dist/addons.js.map +1 -0
- package/dist/index.cjs +31 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +187 -323
- package/dist/index.js +31 -43
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +1 -48
- package/dist/native.cjs.map +1 -1
- package/dist/native.d.ts +536 -10
- package/dist/native.js +1 -48
- package/dist/native.js.map +1 -1
- package/dist/node.cjs +69 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.ts +626 -0
- package/dist/node.js +69 -0
- package/dist/node.js.map +1 -0
- package/dist/react.cjs +1 -48
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.ts +524 -4
- package/dist/react.js +1 -48
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +1 -48
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.ts +524 -4
- package/dist/solid.js +1 -48
- package/dist/solid.js.map +1 -1
- package/package.json +64 -11
- package/src/addons/animation/easing/backIn.ts +10 -0
- package/src/addons/animation/easing/backInOut.ts +12 -0
- package/src/addons/animation/easing/backOut.ts +10 -0
- package/src/addons/animation/easing/bounceIn.ts +10 -0
- package/src/addons/animation/easing/bounceInOut.ts +13 -0
- package/src/addons/animation/easing/bounceOut.ts +30 -0
- package/src/addons/animation/easing/circularIn.ts +9 -0
- package/src/addons/animation/easing/circularInOut.ts +11 -0
- package/src/addons/animation/easing/circularOut.ts +9 -0
- package/src/addons/animation/easing/cubicIn.ts +9 -0
- package/src/addons/animation/easing/cubicInOut.ts +11 -0
- package/src/addons/animation/easing/cubicOut.ts +10 -0
- package/src/addons/animation/easing/elasticIn.ts +10 -0
- package/src/addons/animation/easing/elasticInOut.ts +21 -0
- package/src/addons/animation/easing/elasticOut.ts +12 -0
- package/src/addons/animation/easing/exponentialIn.ts +9 -0
- package/src/addons/animation/easing/exponentialInOut.ts +13 -0
- package/src/addons/animation/easing/exponentialOut.ts +9 -0
- package/src/addons/animation/easing/index.ts +33 -0
- package/src/addons/animation/easing/linearIn.ts +9 -0
- package/src/addons/animation/easing/linearInOut.ts +9 -0
- package/src/addons/animation/easing/linearOut.ts +9 -0
- package/src/addons/animation/easing/quadraticIn.ts +9 -0
- package/src/addons/animation/easing/quadraticInOut.ts +10 -0
- package/src/addons/animation/easing/quadraticOut.ts +9 -0
- package/src/addons/animation/easing/quarticIn.ts +9 -0
- package/src/addons/animation/easing/quarticInOut.ts +11 -0
- package/src/addons/animation/easing/quarticOut.ts +10 -0
- package/src/addons/animation/easing/quinticIn.ts +9 -0
- package/src/addons/animation/easing/quinticInOut.ts +11 -0
- package/src/addons/animation/easing/quinticOut.ts +9 -0
- package/src/addons/animation/easing/sineIn.ts +10 -0
- package/src/addons/animation/easing/sineInOut.ts +10 -0
- package/src/addons/animation/easing/sineOut.ts +10 -0
- package/src/addons/color/palette/macbeth.ts +42 -0
- package/src/addons/color/space/cmyk2rgb.ts +12 -0
- package/src/addons/color/space/gamma2linear.ts +19 -0
- package/src/addons/color/space/hsl2rgb.ts +20 -0
- package/src/addons/color/space/hsv2rgb.ts +18 -0
- package/src/addons/color/space/hue2rgb.ts +12 -0
- package/src/addons/color/space/index.ts +29 -0
- package/src/addons/color/space/lab2lch.ts +22 -0
- package/src/addons/color/space/lab2rgb.ts +19 -0
- package/src/addons/color/space/lab2xyz.ts +32 -0
- package/src/addons/color/space/lch2lab.ts +21 -0
- package/src/addons/color/space/lch2rgb.ts +22 -0
- package/src/addons/color/space/linear2gamma.ts +19 -0
- package/src/addons/color/space/oklab2rgb.ts +35 -0
- package/src/addons/color/space/rgb2cmyk.ts +13 -0
- package/src/addons/color/space/rgb2hcv.ts +29 -0
- package/src/addons/color/space/rgb2hsl.ts +23 -0
- package/src/addons/color/space/rgb2hsv.ts +36 -0
- package/src/addons/color/space/rgb2hue.ts +29 -0
- package/src/addons/color/space/rgb2lab.ts +19 -0
- package/src/addons/color/space/rgb2lch.ts +22 -0
- package/src/addons/color/space/rgb2oklab.ts +45 -0
- package/src/addons/color/space/rgb2srgb.ts +34 -0
- package/src/addons/color/space/rgb2xyz.ts +20 -0
- package/src/addons/color/space/rgb2yiq.ts +22 -0
- package/src/addons/color/space/rgb2yuv.ts +32 -0
- package/src/addons/color/space/srgb2rgb.ts +34 -0
- package/src/addons/color/space/xyz2lab.ts +27 -0
- package/src/addons/color/space/xyz2rgb.ts +30 -0
- package/src/addons/color/space/yiq2rgb.ts +22 -0
- package/src/addons/color/space/yuv2rgb.ts +32 -0
- package/src/addons/draw/arrows.ts +75 -0
- package/src/addons/draw/axis.ts +57 -0
- package/src/addons/draw/bridge.ts +81 -0
- package/src/addons/draw/char.ts +30 -0
- package/src/addons/draw/circle.ts +29 -0
- package/src/addons/draw/fill.ts +25 -0
- package/src/addons/draw/flip.ts +45 -0
- package/src/addons/draw/hex.ts +29 -0
- package/src/addons/draw/index.ts +13 -0
- package/src/addons/draw/line.ts +16 -0
- package/src/addons/draw/point.ts +30 -0
- package/src/addons/draw/rect.ts +52 -0
- package/src/addons/draw/stroke.ts +31 -0
- package/src/addons/draw/tri.ts +29 -0
- package/src/addons/generative/cnoise.ts +239 -0
- package/src/addons/generative/curl.ts +64 -0
- package/src/addons/generative/fbm.ts +69 -0
- package/src/addons/generative/gerstnerWave.ts +21 -0
- package/src/addons/generative/gnoise.ts +113 -0
- package/src/addons/generative/index.ts +15 -0
- package/src/addons/generative/noised.ts +139 -0
- package/src/addons/generative/pnoise.ts +249 -0
- package/src/addons/generative/psrdnoise.ts +277 -0
- package/src/addons/generative/random.ts +136 -0
- package/src/addons/generative/snoise.ts +199 -0
- package/src/addons/generative/srandom.ts +90 -0
- package/src/addons/generative/voronoi.ts +134 -0
- package/src/addons/generative/voronoise.ts +69 -0
- package/src/addons/generative/wavelet.ts +77 -0
- package/src/addons/generative/worley.ts +99 -0
- package/src/addons/geometry/aabb/aabb.ts +8 -0
- package/src/addons/geometry/aabb/centroid.ts +10 -0
- package/src/addons/geometry/aabb/contain.ts +19 -0
- package/src/addons/geometry/aabb/diagonal.ts +10 -0
- package/src/addons/geometry/aabb/expand.ts +16 -0
- package/src/addons/geometry/aabb/index.ts +7 -0
- package/src/addons/geometry/aabb/intersect.ts +20 -0
- package/src/addons/geometry/aabb/square.ts +17 -0
- package/src/addons/geometry/index.ts +2 -0
- package/src/addons/geometry/triangle/area.ts +10 -0
- package/src/addons/geometry/triangle/barycentric.ts +50 -0
- package/src/addons/geometry/triangle/centroid.ts +10 -0
- package/src/addons/geometry/triangle/closestPoint.ts +85 -0
- package/src/addons/geometry/triangle/contain.ts +19 -0
- package/src/addons/geometry/triangle/distanceSq.ts +38 -0
- package/src/addons/geometry/triangle/index.ts +10 -0
- package/src/addons/geometry/triangle/intersect.ts +49 -0
- package/src/addons/geometry/triangle/normal.ts +12 -0
- package/src/addons/geometry/triangle/signedDistance.ts +31 -0
- package/src/addons/geometry/triangle/triangle.ts +9 -0
- package/src/addons/index.ts +8 -0
- package/src/addons/lighting/ray.ts +8 -0
- package/src/addons/math/aafloor.ts +13 -0
- package/src/addons/math/aafract.ts +38 -0
- package/src/addons/math/aamirror.ts +12 -0
- package/src/addons/math/aastep.ts +14 -0
- package/src/addons/math/absi.ts +9 -0
- package/src/addons/math/adaptiveThreshold.ts +24 -0
- package/src/addons/math/bump.ts +20 -0
- package/src/addons/math/const.ts +19 -0
- package/src/addons/math/cubic.ts +101 -0
- package/src/addons/math/cubicMix.ts +49 -0
- package/src/addons/math/decimate.ts +12 -0
- package/src/addons/math/dist.ts +143 -0
- package/src/addons/math/fcos.ts +11 -0
- package/src/addons/math/frac.ts +9 -0
- package/src/addons/math/gain.ts +14 -0
- package/src/addons/math/gaussian.ts +14 -0
- package/src/addons/math/grad4.ts +19 -0
- package/src/addons/math/hammersley.ts +54 -0
- package/src/addons/math/highPass.ts +12 -0
- package/src/addons/math/index.ts +63 -0
- package/src/addons/math/inside.ts +68 -0
- package/src/addons/math/invCubic.ts +9 -0
- package/src/addons/math/invQuartic.ts +9 -0
- package/src/addons/math/inverse.ts +9 -0
- package/src/addons/math/lengthSq.ts +10 -0
- package/src/addons/math/map.ts +27 -0
- package/src/addons/math/mirror.ts +12 -0
- package/src/addons/math/mmax.ts +27 -0
- package/src/addons/math/mmin.ts +28 -0
- package/src/addons/math/mmix.ts +47 -0
- package/src/addons/math/mod2.ts +44 -0
- package/src/addons/math/mod289.ts +46 -0
- package/src/addons/math/modi.ts +15 -0
- package/src/addons/math/nyquist.ts +15 -0
- package/src/addons/math/pack.ts +15 -0
- package/src/addons/math/parabola.ts +12 -0
- package/src/addons/math/permute.ts +42 -0
- package/src/addons/math/pow2.ts +10 -0
- package/src/addons/math/pow3.ts +9 -0
- package/src/addons/math/pow5.ts +10 -0
- package/src/addons/math/pow7.ts +12 -0
- package/src/addons/math/powFast.ts +18 -0
- package/src/addons/math/quartic.ts +15 -0
- package/src/addons/math/quat/index.ts +14 -0
- package/src/addons/math/quat/quat2mat3.ts +28 -0
- package/src/addons/math/quat/quat2mat4.ts +16 -0
- package/src/addons/math/quat/quatAdd.ts +18 -0
- package/src/addons/math/quat/quatConj.ts +14 -0
- package/src/addons/math/quat/quatDiv.ts +18 -0
- package/src/addons/math/quat/quatIdentity.ts +9 -0
- package/src/addons/math/quat/quatInverse.ts +17 -0
- package/src/addons/math/quat/quatLength.ts +15 -0
- package/src/addons/math/quat/quatLengthSq.ts +14 -0
- package/src/addons/math/quat/quatLerp.ts +40 -0
- package/src/addons/math/quat/quatMul.ts +38 -0
- package/src/addons/math/quat/quatNeg.ts +14 -0
- package/src/addons/math/quat/quatNorm.ts +16 -0
- package/src/addons/math/quat/quatSub.ts +18 -0
- package/src/addons/math/quintic.ts +16 -0
- package/src/addons/math/rotate2d.ts +16 -0
- package/src/addons/math/rotate3d.ts +37 -0
- package/src/addons/math/rotate3dX.ts +20 -0
- package/src/addons/math/rotate3dY.ts +20 -0
- package/src/addons/math/rotate3dZ.ts +20 -0
- package/src/addons/math/rotate4d.ts +41 -0
- package/src/addons/math/rotate4dX.ts +21 -0
- package/src/addons/math/rotate4dY.ts +16 -0
- package/src/addons/math/rotate4dZ.ts +21 -0
- package/src/addons/math/saturateMediump.ts +11 -0
- package/src/addons/math/scale2d.ts +44 -0
- package/src/addons/math/scale3d.ts +17 -0
- package/src/addons/math/scale4d.ts +50 -0
- package/src/addons/math/smootherstep.ts +16 -0
- package/src/addons/math/taylorInvSqrt.ts +9 -0
- package/src/addons/math/toMat3.ts +14 -0
- package/src/addons/math/toMat4.ts +14 -0
- package/src/addons/math/translate4d.ts +31 -0
- package/src/addons/math/unpack.ts +88 -0
- package/src/addons/sdf/boxSDF.ts +24 -0
- package/src/addons/sdf/circleSDF.ts +20 -0
- package/src/addons/sdf/crossSDF.ts +17 -0
- package/src/addons/sdf/hexSDF.ts +18 -0
- package/src/addons/sdf/index.ts +7 -0
- package/src/addons/sdf/lineSDF.ts +33 -0
- package/src/addons/sdf/rectSDF.ts +46 -0
- package/src/addons/sdf/sphereSDF.ts +20 -0
- package/src/addons/sdf/triSDF.ts +14 -0
- package/src/addons/space/aspect.ts +14 -0
- package/src/addons/space/bracketing.ts +44 -0
- package/src/addons/space/brickTile.ts +44 -0
- package/src/addons/space/cart2polar.ts +20 -0
- package/src/addons/space/center.ts +32 -0
- package/src/addons/space/checkerTile.ts +41 -0
- package/src/addons/space/depth2viewZ.ts +43 -0
- package/src/addons/space/displace.ts +55 -0
- package/src/addons/space/equirect2xyz.ts +17 -0
- package/src/addons/space/eulerView.ts +19 -0
- package/src/addons/space/fisheye2xyz.ts +18 -0
- package/src/addons/space/flipY.ts +25 -0
- package/src/addons/space/hexTile.ts +18 -0
- package/src/addons/space/index.ts +38 -0
- package/src/addons/space/kaleidoscope.ts +48 -0
- package/src/addons/space/linearizeDepth.ts +17 -0
- package/src/addons/space/lookAt.ts +49 -0
- package/src/addons/space/lookAtView.ts +40 -0
- package/src/addons/space/mirrorTile.ts +73 -0
- package/src/addons/space/nearest.ts +13 -0
- package/src/addons/space/orthographic.ts +25 -0
- package/src/addons/space/parallaxMapping.ts +149 -0
- package/src/addons/space/perspective.ts +24 -0
- package/src/addons/space/polar2cart.ts +24 -0
- package/src/addons/space/ratio.ts +14 -0
- package/src/addons/space/rotate.ts +37 -0
- package/src/addons/space/rotateX.ts +54 -0
- package/src/addons/space/rotateY.ts +54 -0
- package/src/addons/space/rotateZ.ts +54 -0
- package/src/addons/space/scale.ts +13 -0
- package/src/addons/space/sprite.ts +16 -0
- package/src/addons/space/sqTile.ts +20 -0
- package/src/addons/space/tbn.ts +26 -0
- package/src/addons/space/translate.ts +12 -0
- package/src/addons/space/triTile.ts +32 -0
- package/src/addons/space/uncenter.ts +32 -0
- package/src/addons/space/unratio.ts +12 -0
- package/src/addons/space/viewZ2depth.ts +25 -0
- package/src/addons/space/windmillTile.ts +58 -0
- package/src/addons/space/xyz2equirect.ts +10 -0
- package/src/index.ts +10 -23
- package/src/node/build.ts +127 -0
- package/src/node/create.ts +76 -0
- package/src/node/index.ts +64 -49
- package/src/node/scope.ts +66 -62
- package/src/node/types.ts +221 -187
- package/src/node/utils/const.ts +74 -13
- package/src/node/utils/index.ts +19 -14
- package/src/node/utils/infer.ts +32 -34
- package/src/node/utils/parse.ts +48 -24
- package/src/node/utils/utils.ts +52 -29
- package/src/types.ts +11 -6
- package/src/utils/helpers.ts +56 -0
- package/src/utils/pipeline.ts +24 -8
- package/src/utils/program.ts +62 -38
- package/src/{webgl.ts → utils/webgl.ts} +46 -30
- package/src/{webgpu.ts → utils/webgpu.ts} +22 -17
- package/src/node/core.ts +0 -121
- package/src/node/node.ts +0 -65
package/dist/native.js
CHANGED
|
@@ -1,49 +1,2 @@
|
|
|
1
|
-
import{useState as
|
|
2
|
-
|
|
3
|
-
\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
4
|
-
${t}`)},oe=(e,t,r,o)=>{let n=e.createProgram(),s=Ce(e,t,e.FRAGMENT_SHADER,o.error),i=Ce(e,r,e.VERTEX_SHADER,o.error);if(!s||!i)return;if(e.attachShader(n,s),e.attachShader(n,i),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS))return n;let p=e.getProgramInfoLog(n);e.deleteProgram(n),o.error(`Could not link program: ${p}`)},Pt=(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},$t=(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},Gt=(e,t,r)=>{r&&(e=Math.max(...r)+1);let o=t.length/e;return Math.floor(o)},_e=(e,t,r,o,n)=>{let s=Pt(e,o),i=$t(e,n),p=Gt(r,o,n);e.bindBuffer(e.ARRAY_BUFFER,s),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,p,e.FLOAT,!1,0,0),i&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i)},se=(e,t,r)=>{if(x.num(r))return e.uniform1f(t,r);let o=r.length;if(o<=4)return e[`uniform${o}fv`](t,r);o=Math.sqrt(o)<<0,e[`uniformMatrix${o}fv`](t,!1,r)},Pe=(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)},$e=(e,t,r,o,n,s,i)=>{let p=r*r,a=t.length/p;for(let u=0;u<p;u++)for(let d=0;d<Math.min(a,4);d++)i[4*u+d]=t[u*a+d]||0;e.activeTexture(e.TEXTURE0+s),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,r,r,0,e.RGBA,e.FLOAT,i),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,n.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,r,r,0,e.RGBA,e.FLOAT,i),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)},Ge=(e,t)=>{for(let{ping:r,pong:o}of t)e.deleteTexture(r.texture),e.deleteTexture(o.texture),e.deleteFramebuffer(r.buffer),e.deleteFramebuffer(o.buffer)},Le=(e,t,r,o,n,s)=>{e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(o,n),s===0&&e.bindFramebuffer(e.FRAMEBUFFER,r.buffer);let i=e.COLOR_ATTACHMENT0+s;return e.framebufferTexture2D(e.FRAMEBUFFER,i,e.TEXTURE_2D,r.texture,0),i};var ie=["toBool","toUint","toInt","toFloat","toBvec2","toIvec2","toUvec2","toVec2","toBvec3","toIvec3","toUvec3","toVec3","toBvec4","toIvec4","toUvec4","toVec4","toColor","toMat2","toMat3","toMat4"],ae={bool:"bool",uint:"u32",int:"i32",float:"f32",bvec2:"vec2<bool>",ivec2:"vec2i",uvec2:"vec2u",vec2:"vec2f",bvec3:"vec3<bool>",ivec3:"vec3i",uvec3:"vec3u",vec3:"vec3f",bvec4:"vec4<bool>",ivec4:"vec4i",uvec4:"vec4u",vec4:"vec4f",color:"color",mat2:"mat2x2f",mat3:"mat3x3f",mat4:"mat4x4f",texture:"texture_2d<f32>",sampler2D:"sampler",struct:"struct"},ue=Object.keys(ae),pe={not:"",add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},Ne=Object.keys(pe),fe={1:"float",2:"vec2",3:"vec3",4:"vec4",9:"mat3",16:"mat4"},Se={position:"vec4",vertex_index:"uint",instance_index:"uint",front_facing:"bool",frag_depth:"float",sample_index:"uint",sample_mask:"uint",point_coord:"vec2",global_invocation_id:"uvec3",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"},Re=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],we=["and","or"],Fe={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",uv:"gl_FragCoord.xy"},ce={all:"bool",any:"bool",determinant:"float",distance:"float",dot:"float",length:"float",lengthSq:"float",luminance:"float",cross:"vec3",cubeTexture:"vec4",texture:"vec4",texelFetch:"vec4",textureLod:"vec4"},Ue=[...Object.keys(ce),"abs","acos","acosh","asin","asinh","atan","atanh","ceil","cos","cosh","dFdx","dFdy","degrees","exp","exp2","floor","fract","fwidth","inverseSqrt","log","log2","negate","normalize","oneMinus","radians","reciprocal","round","saturate","sign","sin","sinh","sqrt","tan","tanh","trunc","atan2","clamp","max","min","mix","pow","reflect","refract","smoothstep","step"];var Ae=e=>x.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),Ie=e=>Ne.includes(e),Oe=e=>Ue.includes(e),De=e=>ie.includes(e),q=e=>!e||typeof e!="object"?!1:e.isProxy,le=e=>x.str(e)?ue.includes(e):!1,Me=e=>{let t=(e>>16&255)/255,r=(e>>8&255)/255,o=(e&255)/255;return[t,r,o]},Lt=0,C=()=>`x${Lt++}`,Be=(e,t)=>{if(t==="global_invocation_id")return`uvec3(uint(gl_FragCoord.y) * uint(${Math.floor(Math.sqrt(e.gl?.particles||1024))}) + uint(gl_FragCoord.x), 0u, 0u)`;let r=Fe[t];if(!r)throw new Error(`Error: unknown builtin variable ${t}`);return r},N=(e,t)=>x.str(e)?t?.isWebGL?e:ae[e]||e:"",We=e=>pe[e]||e,ke=e=>{let t=ie.indexOf(e);return t!==-1?ue[t]:"float"},de=(e,t,r=!1,o=!1)=>e.isWebGL?r?n=>e.gl?.attribute?.(t,n):o?n=>e.gl?.texture?.(t,n):n=>e.gl?.uniform?.(t,n):r?n=>e.gl?._attribute?.(t,n):o?n=>e.gl?._texture?.(t,n):n=>e.gl?._uniform?.(t,n),xe=(e,t)=>{if(x.und(e))return;if(!q(e))return t(e);if(e.type!=="conversion")return;let r=e.props.children?.slice(1);x.und(r?.[0])||t(r.map(o=>o??r[0]))},Ve=e=>(e.code||(e.code={headers:new Map,fragInputs:new Map,vertInputs:new Map,vertOutputs:new Map,vertVaryings:new Map,computeInputs:new Map,dependencies:new Map,structFields:new Map},e.isWebGL)||(e.code.fragInputs.set("position","@builtin(position) position: vec4f"),e.code.vertOutputs.set("position","@builtin(position) position: vec4f")),e),ze=e=>x.num(e)||x.str(e)&&/^\d+$/.test(e),Y=(e,t="",r)=>{e.code?.dependencies?.has(t)||e.code.dependencies.set(t,new Set),le(r)||e.code.dependencies.get(t).add(r)};var Nt=e=>Se[e],St=(e,t,r)=>Re.includes(r)||we.includes(r)?"bool":e===t?e:e==="float"||e==="int"?t:t==="float"||t==="int"?e:e==="mat4"&&t==="vec4"||e==="mat3"&&t==="vec3"||e==="mat2"&&t==="vec2"?t:e,Rt=e=>x.bol(e)?"bool":x.str(e)?"texture":x.num(e)?"float":x.arr(e)?fe[e.length]:"float",me=e=>fe[e],qe=(e,t)=>{if(e.length===0)return"void";let[r]=e;return x.str(r)?r:X(r,t)},wt=e=>ce[e],Ft=(e,t)=>{let{type:r,props:o}=e,{id:n,children:s=[],inferFrom:i,layout:p}=o,[a,u,d]=s;if(r==="conversion")return a;if(r==="operator")return St(X(u,t),X(d,t),a);if(r==="builtin")return Nt(n);if(r==="function")return wt(a)||X(u,t);if(r==="define")return le(p?.type)?p?.type:!i||i.length===0?"void":qe(i,t);if(r==="attribute"&&x.arr(a)&&t.gl?.count)return me(a.length/t.gl.count);if(r==="member"){if(Ae(u))return me(u.length);if(q(a)){let h=X(a,t),T=t.code?.structFields?.get(h);if(T&&T[u])return X(T[u],t)}return"float"}return i?qe(i,t):X(a,t)},X=(e,t)=>{if(t||(t={}),!q(e))return Rt(e);if(x.arr(e))return me(e.length);if(t.infers||(t.infers=new WeakMap),t.infers.has(e))return t.infers.get(e);let r=Ft(e,t);return t.infers.set(e,r),r};var w=(e,t)=>e.filter(r=>!x.und(r)&&!x.nul(r)).map(r=>f(r,t)).join(", "),Ye=(e,t,r,o)=>{let n=()=>{let u=X(o,e);if(u==="float")return".x";if(u==="vec2")return".xy";if(u==="vec3")return".xyz";if(u==="vec4")return"";throw new Error(`Unsupported storage scatter type: ${u}`)},s=f(r,e),i=Math.floor(Math.sqrt(e.gl?.particles||1024)),p=`int(${s}) % ${i}`,a=`int(${s}) / ${i}`;return`texelFetch(${f(t,e)}, ivec2(${p}, ${a}), 0)${n()}`},He=(e,t,r)=>{let o=f(t,e),n=f(r,e),s=X(r,e);if(s==="float")return`_${o} = vec4(${n}, 0.0, 0.0, 1.0);`;if(s==="vec2")return`_${o} = vec4(${n}, 0.0, 1.0);`;if(s==="vec3")return`_${o} = vec4(${n}, 1.0);`;if(s==="vec4")return`_${o} = ${n};`;throw new Error(`Unsupported storage scatter type: ${s}`)},je=(e,t,r,o)=>{if(e.isWebGL)return`texture(${w(o?[t,r,o]:[t,r],e)})`;let n=f(t,e),s=[n,n+"Sampler",f(r,e)];return o?(s.push(f(o,e)),`textureSampleLevel(${s})`):`textureSample(${s})`},Ke=(e,t,r,o)=>{let n=`if (${f(t,e)}) {
|
|
5
|
-
${f(r,e)}
|
|
6
|
-
}`;for(let s=2;s<o.length;s+=2){let i=s>=o.length-1;n+=i?` else {
|
|
7
|
-
${f(o[s],e)}
|
|
8
|
-
}`:` else if (${f(o[s],e)}) {
|
|
9
|
-
${f(o[s+1],e)}
|
|
10
|
-
}`}return n},Ze=(e,t,r)=>{let o=`switch (${f(t,e)}) {
|
|
11
|
-
`;for(let n=1;n<r.length;n+=2)n>=r.length-1&&r.length%2===0?o+=`default:
|
|
12
|
-
${f(r[n],e)}
|
|
13
|
-
break;
|
|
14
|
-
`:n+1<r.length&&(o+=`case ${f(r[n],e)}:
|
|
15
|
-
${f(r[n+1],e)}
|
|
16
|
-
break;
|
|
17
|
-
`);return o+="}",o},Qe=(e,t,r)=>{let o=X(t,e),n=r?.props?.id;if(e.isWebGL)return`${o} ${n} = ${f(t,e)};`;let s=N(o);return`var ${n}: ${s} = ${f(t,e)};`},Je=(e,t,r={})=>{e.code?.structFields?.set(t,r);let o=[];for(let s in r){let i=r[s],p=X(i,e);e.isWebGL&&Y(e,t,p),o.push(e.isWebGL?`${p} ${s};`:`${s}: ${N(p,e)},`)}let n=o.join(`
|
|
18
|
-
`);return`struct ${t} {
|
|
19
|
-
${n}
|
|
20
|
-
};`},et=(e,t,r="",o)=>{let n=e.code?.structFields?.get(t)||{};if(e.isWebGL)if(o){let s=[];for(let i in n)s.push(o[i]);return`${t} ${r} = ${t}(${w(s,e)});`}else return`${t} ${r};`;else if(o){let s=[];for(let i in n)s.push(o[i]);return`var ${r}: ${t} = ${t}(${w(s,e)});`}else return`var ${r}: ${t};`},tt=(e,t,r)=>{let{id:o,children:n=[],layout:s}=t,[i,...p]=n,a=[],u=[];if(s?.inputs)for(let l of s.inputs)a.push([l.name,l.type]);else for(let l=0;l<p.length;l++)a.push([`p${l}`,X(p[l],e)]);let d=f(i,e),h=X(r,e),T=[];if(e?.isWebGL){for(let[l,g]of a)Y(e,o,g),u.push(`${g} ${l}`);Y(e,o,h),T.push(`${h} ${o}(${u}) {`)}else{for(let[g,b]of a)u.push(`${g}: ${N(b,e)}`);h==="void"?T.push(`fn ${o}(${u}) {`):T.push(`fn ${o}(${u}) -> ${N(h,e)} {`)}return d&&T.push(d),T.push("}"),T.join(`
|
|
21
|
-
`)},rt=(e,t,r)=>e.isWebGL?`${r} ${t};`:`@location(${e.code?.vertVaryings?.size||0}) ${t}: ${N(r,e)}`,nt=(e,t,r)=>{if(e.isWebGL)return`${r} ${t};`;let{location:o=0}=e.gl?.webgpu?.attribs.map.get(t)||{},n=N(r,e);return`@location(${o}) ${t}: ${n}`},ot=(e,t,r)=>{let o=r==="sampler2D"||r==="texture";if(e.isWebGL)return o?`uniform sampler2D ${t};`:`uniform ${r} ${t};`;if(o){let{group:p=1,binding:a=0}=e.gl?.webgpu?.textures.map.get(t)||{};return`@group(${p}) @binding(${a}) var ${t}Sampler: sampler;
|
|
22
|
-
@group(${p}) @binding(${a+1}) var ${t}: texture_2d<f32>;`}let{group:n=0,binding:s=0}=e.gl?.webgpu?.uniforms.map.get(t)||{},i=N(r,e);return`@group(${n}) @binding(${s}) var<uniform> ${t}: ${i};`},st=(e,t,r)=>{if(e.isWebGL){let i=`uniform sampler2D ${t};`;if(e.label!=="compute")return i;let p=e.units?.(t);return`${i}
|
|
23
|
-
layout(location = ${p}) out vec4 _${t};`}let{group:o=0,binding:n=0}=e.gl?.webgpu?.storages.map.get(t)||{},s=N(r,e);return`@group(${o}) @binding(${n}) var<storage, read_write> ${t}: array<${s}>;`},it=(e,t,r,o)=>e.isWebGL?`const ${r} ${t} = ${o};`:`const ${t}: ${N(r,e)} = ${o};`;var f=(e,t)=>{if(t||(t={}),Ve(t),x.arr(e))return w(e,t);if(x.str(e))return e;if(x.num(e)){let l=`${e}`;return l.includes(".")?l:l+".0"}if(x.bol(e))return e?"true":"false";if(!e)return"";let{type:r,props:o={}}=e,{id:n="i",children:s=[],fields:i,initialValues:p}=o,[a,u,d,h]=s;if(r==="variable")return n;if(r==="member")return`${f(a,t)}.${f(u,t)}`;if(r==="element")return`${f(a,t)}[${f(u,t)}]`;if(r==="gather")return t.isWebGL?Ye(t,a,u,e):`${f(a,t)}[${f(u,t)}]`;if(r==="scatter"){let[l,g]=a.props.children??[];return t.isWebGL?He(t,l,u):`${f(l,t)}[${f(g,t)}] = ${f(u,t)};`}if(r==="ternary")return t.isWebGL?`(${f(d,t)} ? ${f(a,t)} : ${f(u,t)})`:`select(${f(a,t)}, ${f(u,t)}, ${f(d,t)})`;if(r==="conversion")return`${N(a,t)}(${w(s.slice(1),t)})`;if(r==="operator")return a==="not"||a==="bitNot"?`!${f(u,t)}`:`(${f(u,t)} ${We(a)} ${f(d,t)})`;if(r==="function")return a==="negate"?`(-${f(u,t)})`:a==="oneMinus"?`(1.0-${f(u,t)})`:a==="texture"?je(t,u,d,h):a==="atan2"&&t.isWebGL?`atan(${f(u,t)}, ${f(d,t)})`:`${a}(${w(s.slice(1),t)})`;if(r==="scope")return s.map(l=>f(l,t)).join(`
|
|
24
|
-
`);if(r==="assign")return`${f(a,t)} = ${f(u,t)};`;if(r==="return")return`return ${f(a,t)};`;if(r==="loop")return t.isWebGL?`for (int ${n} = 0; ${n} < ${f(a,t)}; ${n} += 1) {
|
|
25
|
-
${f(u,t)}
|
|
26
|
-
}`:`for (var ${n}: i32 = 0; ${n} < ${f(a,t)}; ${n}++) {
|
|
27
|
-
${f(u,t)}
|
|
28
|
-
}`;if(r==="if")return Ke(t,a,u,s);if(r==="switch")return Ze(t,a,s);if(r==="declare")return Qe(t,a,u);if(r==="define")return t.code?.headers.has(n)||t.code?.headers.set(n,tt(t,o,e)),`${n}(${w(s.slice(1),t)})`;if(r==="struct")return t.code?.headers.has(n)||t.code?.headers.set(n,Je(t,n,i)),et(t,n,a.props.id,p);if(r==="varying"){if(t.code?.vertOutputs.has(n))return t.isWebGL?`${n}`:`out.${n}`;let l=rt(t,n,X(e,t));return t.code?.fragInputs.set(n,l),t.code?.vertOutputs.set(n,l),t.code?.vertVaryings.set(n,f(a,t)),t.isWebGL?`${n}`:`out.${n}`}if(r==="builtin"){if(t.isWebGL)return Be(t,n);if(n==="position")return"out.position";let l=`@builtin(${n}) ${n}: ${N(X(e,t),t)}`;return t.label==="compute"?t.code?.computeInputs.set(n,l):t.label==="frag"?t.code?.fragInputs.set(n,l):t.label==="vert"&&t.code?.vertInputs.set(n,l),`in.${n}`}if(r==="attribute"){let l=de(t,n,!0);return xe(a,l),e.listeners.add(l),t.code?.vertInputs.set(n,nt(t,n,X(e,t))),t.isWebGL?`${n}`:`in.${n}`}if(t.code?.headers.has(n))return n;let T="";if(r==="uniform"){let l=X(e,t),g=de(t,n,!1,l==="texture");xe(a,g),e.listeners.add(g),T=ot(t,n,l)}return r==="storage"&&(T=st(t,n,X(e,t))),r==="constant"&&(T=it(t,n,X(e,t),f(a,t))),T?(t.code?.headers.set(n,T),n):f(a,t)};var U=null,O=null,I=e=>{if(!U||(U.props.children||(U.props.children=[]),U.props.children.push(e),e.type!=="return"||!O))return;let{props:t}=O;t.inferFrom||(t.inferFrom=[]),t.inferFrom.push(e)};function at(e,t){t||(t=C());let r=m("variable",{id:t,inferFrom:[e]}),o=m("declare",null,e,r);return I(o),r}var ut=(e,t=!1,r)=>{let o=m(t?"scatter":"assign",null,e,r);return I(o),e},Ut=e=>{let t=m("return",{inferFrom:[e]},e);return I(t),t},Nr=(e,t=C())=>(r={},o=C())=>{let n=m("variable",{id:o,inferFrom:[t]}),s=m("struct",{id:t,fields:e,initialValues:r},n);return I(s),n},A=(e,t,r=O)=>{let[o,n]=[U,O];[U,O]=[e,r];let s=t();s&&Ut(s),[U,O]=[o,n]},Sr=(e,t)=>{let r=m("scope");A(r,t);let o=m("if",null,e,r);I(o);let n=()=>({ElseIf:(s,i)=>{let p=m("scope");return A(p,i),o.props.children.push(s,p),n()},Else:s=>{let i=m("scope");A(i,s),o.props.children.push(i)}});return n()},Rr=(e,t)=>{let r=m("scope"),o=C();A(r,()=>t({i:m("variable",{id:o,inferFrom:[v("int",0)]})}));let n=m("loop",{id:o},e,r);return I(n),n},wr=e=>{let t=m("switch",null,e);I(t);let r=()=>({Case:(...o)=>n=>{let s=m("scope");A(s,n);for(let i of o)t.props.children.push(i,s);return r()},Default:o=>{let n=m("scope");A(n,o),t.props.children.push(n)}});return r()};function Fr(e,t=C()){let r,o=(...n)=>{let s=r?.name||t,i=m("scope"),p=[],a=[];if(r?.inputs)for(let d of r.inputs)a.push({id:d.name,inferFrom:[v(d.type)]});else for(let d=0;d<n.length;d++)a.push({id:`p${d}`,inferFrom:[n[d]]});for(let d of a)p.push(m("variable",d));let u=m("define",{id:s,layout:r},i,...n);return A(i,()=>e(p),u),u};return o.setLayout=n=>(r=n,o),o}var At=(e,t)=>{if(t==="string")return f(e,null)},m=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let o=new Set,n=(p,a)=>{if(a==="type")return e;if(a==="props")return t;if(a!=="__nodeType"){if(a==="toVar")return at.bind(null,i);if(a==="isProxy")return!0;if(a==="toString")return f.bind(null,i);if(a===Symbol.toPrimitive)return At.bind(null,i);if(a==="listeners")return o;if(a==="attribute")return(u=C())=>It(i,u);if(a==="constant")return(u=C())=>Ot(i,u);if(a==="uniform")return(u=C())=>W(i,u);if(a==="variable")return(u=C())=>Dt(u);if(a==="builtin")return(u=C())=>_(u);if(a==="vertexStage")return(u=C())=>Mt(i,u);if(a==="element")return u=>e==="storage"?Bt(i,u):pt(i,u);if(a==="member")return u=>Te(i,u);if(a==="assign")return ut.bind(null,i,i.type==="gather");if(Ie(a))return(...u)=>Wt(a,i,...u);if(Oe(a))return(...u)=>c(a,i,...u);if(De(a))return()=>v(ke(a),i);if(x.str(a))return ze(a)?pt(i,a):Te(i,a)}},s=(p,a,u)=>(a==="value"&&o.forEach(d=>d(u)),x.str(a)&&Te(i,a).assign(u),!0),i=new Proxy({},{get:n,set:s});return i},It=(e,t=C())=>m("attribute",{id:t},e),Ot=(e,t=C())=>m("constant",{id:t},e),W=(e,t=C())=>m("uniform",{id:t},e),Dr=(e,t=C())=>m("storage",{id:t},e),Dt=(e=C())=>m("variable",{id:e}),_=(e=C())=>m("builtin",{id:e}),Mt=(e,t=C())=>m("varying",{id:t,inferFrom:[e]},e),Te=(e,t)=>m("member",null,e,t),pt=(e,t)=>m("element",null,e,t),Bt=(e,t)=>m("gather",null,e,t),Mr=(e,t)=>m("scatter",null,e,t),Br=(e,t,r)=>m("ternary",null,e,t,r),Wt=(e,...t)=>m("operator",null,e,...t),c=(e,...t)=>m("function",null,e,...t),v=(e,...t)=>m("conversion",null,e,...t);var kt=`
|
|
29
|
-
#version 300 es
|
|
30
|
-
precision mediump float;
|
|
31
|
-
out vec4 fragColor;
|
|
32
|
-
`.trim(),Vt=(e,t)=>{let r=[],o=new Set,n=new Set,s=i=>{if(n.has(i)||o.has(i))return;n.add(i);let p=t.get(i)||new Set;for(let a of p)e.has(a)&&s(a);n.delete(i),o.add(i),e.has(i)&&r.push([i,e.get(i)])};for(let[i]of e)s(i);return r},ge=(e,t)=>{let r=f(e,t),o="";return t.isWebGL&&t.code?.dependencies?o=Vt(t.code.headers,t.code.dependencies).map(([,s])=>s).join(`
|
|
33
|
-
`):o=Array.from(t.code?.headers?.values()||[]).join(`
|
|
34
|
-
`),[o,r]},H=(e,t)=>`struct ${e} {
|
|
35
|
-
${Array.from(t.values()).join(`,
|
|
36
|
-
`)}
|
|
37
|
-
}`,j=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="frag";let[r,o]=ge(e,t),n=[];if(t.isWebGL){n.push(kt);for(let i of t.code?.fragInputs?.values()||[])n.push(`in ${i}`);n.push(r),n.push(`void main() {
|
|
38
|
-
fragColor = ${o};`)}else t.code?.fragInputs?.size&&n.push(H("Out",t.code.fragInputs)),n.push(r),n.push(`@fragment
|
|
39
|
-
fn main(out: Out) -> @location(0) vec4f {`),n.push(` return ${o};`);return n.push("}"),n.filter(Boolean).join(`
|
|
40
|
-
`).trim()},K=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="vert";let[r,o]=ge(e,t),n=[];if(t.isWebGL){n.push("#version 300 es");for(let i of t.code?.vertInputs?.values()||[])n.push(`in ${i}`);for(let i of t.code?.vertOutputs?.values()||[])n.push(`out ${i}`);n.push(r),n.push("void main() {"),n.push(` gl_Position = ${o};`);for(let[i,p]of t.code?.vertVaryings?.entries()||[])n.push(` ${i} = ${p};`)}else{t.code?.vertInputs?.size&&n.push(H("In",t.code.vertInputs)),t.code?.vertOutputs?.size&&n.push(H("Out",t.code.vertOutputs)),n.push(r),n.push("@vertex"),n.push(`fn main(${t.code?.vertInputs?.size?"in: In":""}) -> Out {`),n.push(" var out: Out;"),n.push(` out.position = ${o};`);for(let[i,p]of t.code?.vertVaryings?.entries()||[])n.push(` out.${i} = ${p};`);n.push(" return out;")}return n.push("}"),n.filter(Boolean).join(`
|
|
41
|
-
`).trim()},Z=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="compute";let[r,o]=ge(e,t),n=[];return t.isWebGL?(n.push("#version 300 es"),n.push("precision mediump float;"),n.push(r),n.push("void main() {"),n.push(` ${o};`),n.push("}")):(t.code?.computeInputs?.size&&n.push(H("In",t.code.computeInputs)),n.push(r),n.push("@compute @workgroup_size(32)"),n.push(`fn main(${t.code?.computeInputs?.size?"in: In":""}) {`),n.push(` ${o};`),n.push("}")),n.filter(Boolean).join(`
|
|
42
|
-
`).trim()};var be=_("position"),ve=_("vertex_index"),jr=_("instance_index"),Kr=_("front_facing"),Zr=_("frag_depth"),Qr=_("sample_index"),Jr=_("sample_mask"),en=_("point_coord"),tn=_("global_invocation_id"),rn=_("position"),nn=_("positionWorld"),on=_("positionView"),sn=_("normalLocal"),an=_("normalWorld"),un=_("normalView"),pn=_("screenCoordinate"),fn=_("screenUV"),Q=e=>v("float",e),k=e=>v("int",e),cn=e=>v("uint",e),ln=e=>v("bool",e),ct=(e,t)=>v("vec2",e,t),ft=(e,t,r)=>v("vec3",e,t,r),he=(e,t,r,o)=>v("vec4",e,t,r,o),dn=(...e)=>v("mat2",...e),xn=(...e)=>v("mat3",...e),mn=(...e)=>v("mat4",...e),Tn=(e,t)=>v("ivec2",e,t),gn=(e,t,r)=>v("ivec3",e,t,r),bn=(e,t,r,o)=>v("ivec4",e,t,r,o),vn=(e,t)=>v("uvec2",e,t),hn=(e,t,r)=>v("uvec3",e,t,r),yn=(e,t,r,o)=>v("uvec4",e,t,r,o),En=(e,t)=>v("bvec2",e,t),Xn=(e,t,r)=>v("bvec3",e,t,r),Cn=(e,t,r,o)=>v("bvec4",e,t,r,o),_n=e=>v("texture",e),Pn=()=>v("sampler2D"),$n=(e,t,r)=>x.num(e)&&x.und(t)&&x.und(r)?ft(...Me(e)):ft(e,t,r),ye=W(ct(),"iResolution"),Gn=W(ct(),"iMouse"),Ln=W(Q(),"iTime"),Nn=be.xy.div(ye),Sn=e=>c("all",e),Rn=e=>c("any",e),wn=e=>c("length",e),Fn=e=>c("lengthSq",e),Un=(e,t)=>c("distance",e,t),An=(e,t)=>c("dot",e,t),In=(e,t)=>c("cross",e,t),On=(e,t,r)=>c("cubeTexture",e,t,r),Dn=(e,t,r)=>c("texture",e,t,r),Mn=(e,t,r)=>c("texelFetch",e,t,r),Bn=(e,t,r)=>c("textureLod",e,t,r),Wn=e=>c("abs",e),kn=e=>c("acos",e),Vn=e=>c("acosh",e),zn=e=>c("asin",e),qn=e=>c("asinh",e),Yn=e=>c("atan",e),Hn=e=>c("atanh",e),jn=e=>c("ceil",e),Kn=e=>c("cos",e),Zn=e=>c("cosh",e),Qn=e=>c("dFdx",e),Jn=e=>c("dFdy",e),eo=e=>c("degrees",e),to=e=>c("exp",e),ro=e=>c("exp2",e),no=e=>c("floor",e),lt=e=>c("fract",e),oo=e=>c("fwidth",e),so=e=>c("inverseSqrt",e),io=e=>c("log",e),ao=e=>c("log2",e),uo=e=>c("negate",e),po=e=>c("normalize",e),fo=e=>c("oneMinus",e),co=e=>c("radians",e),lo=e=>c("reciprocal",e),xo=e=>c("round",e),mo=e=>c("saturate",e),To=e=>c("sign",e),go=e=>c("sin",e),bo=e=>c("sinh",e),vo=e=>c("sqrt",e),ho=e=>c("tan",e),yo=e=>c("tanh",e),Eo=e=>c("trunc",e),Xo=(e,t)=>c("atan2",e,t),Co=(e,t,r)=>c("clamp",e,t,r),_o=(e,t)=>c("max",e,t),Po=(e,t)=>c("min",e,t),$o=(e,t,r)=>c("mix",e,t,r),Go=(e,t)=>c("pow",e,t),Lo=(e,t)=>c("reflect",e,t),No=(e,t,r)=>c("refract",e,t,r),So=(e,t,r)=>c("smoothstep",e,t,r),Ro=(e,t)=>c("step",e,t),wo=(e,t)=>e.sub(e.div(t).toFloat().floor().mul(t));var zt=`
|
|
43
|
-
#version 300 es
|
|
44
|
-
void main() {
|
|
45
|
-
float x = float(gl_VertexID % 2) * 4.0 - 1.0;
|
|
46
|
-
float y = float(gl_VertexID / 2) * 4.0 - 1.0;
|
|
47
|
-
gl_Position = vec4(x, y, 0.0, 1.0);
|
|
48
|
-
}`.trim(),qt=(e,t)=>{if(!e.cs)return null;t.getExtension("EXT_color_buffer_float");let r=0,o=0,n=D(()=>r++),s={isWebGL:!0,gl:e,units:n},i=oe(t,Z(e.cs,s),zt,e),p=Math.ceil(Math.sqrt(e.particles)),a=D(g=>t.getUniformLocation(i,g)),u=D(g=>{let b=new Float32Array(p*p*4),P={texture:t.createTexture(),buffer:t.createFramebuffer()},S={texture:t.createTexture(),buffer:t.createFramebuffer()};return{ping:P,pong:S,array:b,loc:a(g),unit:n(g)}});return{render:()=>{t.useProgram(i);let g=u.map.values().map(({ping:b,pong:P,loc:S,unit:F},M)=>{let[V,re]=o%2?[b,P]:[P,b];return Le(t,V,re,S,F,M)});t.drawBuffers(g),t.drawArrays(t.TRIANGLES,0,3),t.bindFramebuffer(t.FRAMEBUFFER,null),o++},clean:()=>{t.deleteProgram(i),Ge(t,u.map.values())},_uniform:(g,b)=>{t.useProgram(i),se(t,a(g),b)},_storage:(g,b)=>{let{ping:P,pong:S,unit:F,array:M}=u(g);$e(t,b,p,P,S,F,M)},storages:u}},dt=async e=>{let t={isWebGL:!0,gl:e},r=e.el.getContext("webgl2"),o=qt(e,r),n=oe(r,j(e.fs,t),K(e.vs,t),e);r.useProgram(n);let s=0,i=D(()=>s++),p=D(b=>r.getAttribLocation(n,b)),a=D(b=>r.getUniformLocation(n,b)),u=(b="",P,S)=>{let F=p(b,!0);_e(r,F,e.count,P,S)},d=(b,P)=>{r.useProgram(n),se(r,a(b),P),o?._uniform(b,P)},h=(b,P)=>{r.useProgram(n),z(e,P,S=>{Pe(r,S,a(b),i(b))})},T=()=>{o?.clean(),r.deleteProgram(n),r.getExtension("WEBGL_lose_context")?.loseContext()},l=()=>{o?.render(),r.useProgram(n),r.viewport(0,0,...e.size),r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)};return{webgl:{context:r,program:n,storages:o?.storages},render:l,clean:T,_attribute:u,_uniform:d,_texture:h,_storage:o?._storage}};import{nested as ee}from"reev";var xt=async(e,t=console.log)=>{let r=navigator.gpu,o=r.getPreferredCanvasFormat(),s=await(await r.requestAdapter()).requestDevice();return s.onuncapturederror=i=>t(i.error.message),e.configure({device:s,format:o,alphaMode:"opaque"}),{device:s,format:o}},mt=()=>{let e=0,t=0,r=0,o=0;return{uniform:()=>{let n=Math.floor(e/12),s=e%12;return e++,{group:n,binding:s}},texture:()=>{let s=Math.floor(e/12)+1+Math.floor(t/6),i=t%6*2;return t++,{group:s,binding:i}},storage:()=>{let s=Math.floor(e/12)+Math.floor(t/6)+2+Math.floor(r/12),i=r%12;return r++,{group:s,binding:i}},attrib:()=>{let n=o;return o++,{location:n}}}},Yt=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",Tt=e=>{let t=[],r=[];for(let{buffer:o,location:n,stride:s}of e)t[n]=o,r[n]={arrayStride:s*4,attributes:[{shaderLocation:n,offset:0,format:Yt(s)}]};return{vertexBuffers:t,bufferLayouts:r}},gt=(e,t,r,o=[])=>{let n=new Map,s={bindGroups:[],bindGroupLayouts:[]},i=(p,a,u)=>{n.has(p)||n.set(p,{layouts:[],bindings:[]});let{layouts:d,bindings:h}=n.get(p);d.push(a),h.push(u)};for(let{binding:p,buffer:a,group:u}of t)i(u,{binding:p,visibility:7,buffer:{type:"uniform"}},{binding:p,resource:{buffer:a}});for(let{binding:p,buffer:a,group:u}of o)i(u,{binding:p,visibility:6,buffer:{type:"storage"}},{binding:p,resource:{buffer:a}});for(let{binding:p,group:a,sampler:u,view:d}of r)i(a,{binding:p,visibility:2,sampler:{}},{binding:p,resource:u}),i(a,{binding:p+1,visibility:2,texture:{}},{binding:p+1,resource:d});for(let[p,{layouts:a,bindings:u}]of n)s.bindGroupLayouts[p]=e.createBindGroupLayout({entries:a}),s.bindGroups[p]=e.createBindGroup({layout:s.bindGroupLayouts[p],entries:u});return s},bt=(e,t,r,o,n,s)=>e.createRenderPipeline({vertex:{module:e.createShaderModule({label:"vert",code:n}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({label:"frag",code:s}),entryPoint:"main",targets:[{format:t}]},layout:e.createPipelineLayout({bindGroupLayouts:o}),primitive:{topology:"triangle-list"},depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}}),vt=(e,t,r)=>e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:r}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})}),Ht=e=>e==="uniform"?72:e==="attrib"?40:140,J=(e,t,r)=>{Xe(t)||(t=new Float32Array(t));let o=Ht(r),n=r==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:n,usage:o});return{array:t,buffer:s}},ht=(e,t)=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:t.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}}),yt=(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}},Et=(e,t,r)=>e.createTexture({size:[t,r],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT});var jt=32,Kt=(e,t,r)=>{let o=u=>{},n=ee((u,d)=>{let{array:h,buffer:T}=J(t,d,"storage"),{binding:l,group:g}=r.storage();return{array:h,buffer:T,binding:l,group:g}});return{storages:n,_storage:(u,d)=>{let{array:h,buffer:T}=n(u,d);t.queue.writeBuffer(T,0,h)},update:(u,d,h)=>{let T=vt(t,d,h);o=l=>{l.setPipeline(T),u.forEach((b,P)=>l.setBindGroup(P,b));let g=Math.ceil(e.particles/jt);l.dispatchWorkgroups(g,1,1),l.end()}},render:u=>{o(u)},clean:()=>{for(let{buffer:u}of n.map.values())u.destroy()}}},Xt=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:o}=await xt(t,e.error),n=mt(),s=Kt(e,r,n),i,p,a,u=y=>{},d=!0,h,T=ee((y,E)=>{d=!0;let $=E.length/e.count,{location:G}=n.attrib(),{array:R,buffer:L}=J(r,E,"attrib");return{array:R,buffer:L,location:G,stride:$}}),l=ee((y,E)=>{d=!0;let{binding:$,group:G}=n.uniform(),{array:R,buffer:L}=J(r,E,"uniform");return{array:R,buffer:L,binding:$,group:G}}),g=ee((y,E=0,$=0)=>{d=!0;let{binding:G,group:R}=n.texture(),{texture:L,sampler:B}=yt(r,E,$);return{texture:L,sampler:B,binding:G,group:R,view:L.createView()}}),b=(y="",E)=>{let{array:$,buffer:G}=T(y,E);r.queue.writeBuffer(G,0,$)},P=(y,E)=>{x.num(E)&&(E=[E]);let{array:$,buffer:G}=l(y,E);$.set(E),r.queue.writeBuffer(G,0,$)},S=(y,E)=>{z(e,E,$=>{let{width:G,height:R}=$,{texture:L}=g(y,G,R);r.queue.copyExternalImageToTexture({source:$},{texture:L},{width:G,height:R})})},F=()=>{let{vertexBuffers:y,bufferLayouts:E}=Tt(T.map.values()),{bindGroups:$,bindGroupLayouts:G}=gt(r,l.map.values(),g.map.values(),s.storages.map.values()),R=bt(r,o,E,G,a,i);u=L=>{L.setPipeline(R),$.forEach((B,ne)=>L.setBindGroup(ne,B)),y.forEach((B,ne)=>L.setVertexBuffer(ne,B)),L.draw(e.count,1,0,0),L.end()},e.cs&&s.update($,G,p)},M=()=>{if(!i||!a){let E={isWebGL:!1,gl:e};i=j(e.fs,E),a=K(e.vs,E),p=Z(e.cs,E)}if(e.loading)return;d&&F(),d=!1;let y=r.createCommandEncoder();e.cs&&s.render(y.beginComputePass()),u(y.beginRenderPass(ht(t,h))),r.queue.submit([y.finish()])},V=()=>{let y=e.el;h?.destroy(),h=Et(r,y.width,y.height)},re=()=>{r.destroy(),h?.destroy();for(let{texture:y}of g.map.values())y.destroy();for(let{buffer:y}of l.map.values())y.destroy();for(let{buffer:y}of T.map.values())y.destroy();s.clean()};return V(),{webgpu:{device:r,uniforms:l,textures:g,attribs:T,storages:s.storages},render:M,resize:V,clean:re,_attribute:b,_uniform:P,_texture:S,_storage:s._storage}};var Ct=e=>x.obj(e)?"isGL"in e:!1,er=()=>typeof window>"u",tr=()=>er()?!1:"gpu"in navigator,Ee=performance.now(),rr=()=>he(lt(be.xy.div(ye)),0,1),nr=()=>he(Q(k(ve).mod(k(2))).mul(4).sub(1),Q(k(ve).div(k(2))).mul(4).sub(1),0,1),_t=e=>{let t=Zt({isNative:!1,isWebGL:!0,isError:!1,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,particles:1024,webgl:{},webgpu:{},loading:0,error(){t.isError=!0,t.isLoop=!1,t.clean(),console.warn("GLRE Error:",...arguments)}});return t.queue=Jt(),t.frame=Qt(),t.attribute=te((r,o,n)=>t.queue(()=>t._attribute?.(r,o,n)),t),t.storage=te((r,o)=>t.queue(()=>t._storage?.(r,o)),t),t.uniform=te((r,o)=>t.queue(()=>t._uniform?.(r,o)),t),t.texture=te((r,o)=>t.queue(()=>t._texture?.(r,o)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:Ee}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex||nr(),t.fs=t.fs||t.frag||t.fragment||rr(),t.cs=t.cs||t.comp||t.compute,tr()||(t.isWebGL=!0),t.isWebGL?t(await dt(t)):t(await Xt(t)),!t.isError&&(t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.loading?!0:(t.render(),t.isLoop))),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove)))}),t("clean",()=>{t.frame.stop(),!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,i]=t.size,{top:p,left:a}=t.el.getBoundingClientRect();t.mouse[0]=(o-p-s/2)/(s/2),t.mouse[1]=-(n-a-i/2)/(i/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{Ee=performance.now()/1e3,t.uniform("iTime",Ee)}),t(e)};var fs=(e={})=>or(()=>{let t=Ct(e)?e:_t(e);return t.ref=r=>{t.el={},t({render(){r.flush(),r.endFrameEXP()}}),t.mount(),(()=>{t.width=r.drawingBufferWidth,t.height=r.drawingBufferHeight,t.resize()})()},t({isNative:!0})})[0];export{Fr as Fn,Sr as If,Rr as Loop,Ut as Return,wr as Switch,Wn as abs,kn as acos,Vn as acosh,Sn as all,Rn as any,zn as asin,qn as asinh,ut as assign,Yn as atan,Xo as atan2,Hn as atanh,It as attribute,ln as bool,_ as builtin,En as bvec2,Xn as bvec3,Cn as bvec4,jn as ceil,Co as clamp,$n as color,Z as compute,Ot as constant,v as conversion,Kn as cos,Zn as cosh,_t as createGL,In as cross,On as cubeTexture,Qn as dFdx,Jn as dFdy,eo as degrees,Un as distance,An as dot,pt as element,to as exp,ro as exp2,Q as float,no as floor,lt as fract,Zr as fragDepth,j as fragment,Kr as frontFacing,c as function_,oo as fwidth,Bt as gather,Gn as iMouse,ye as iResolution,Ln as iTime,tn as id,jr as instanceIndex,k as int,so as inverseSqrt,Ct as isGL,er as isServer,tr as isWebGPUSupported,Tn as ivec2,gn as ivec3,bn as ivec4,wn as length,Fn as lengthSq,io as log,ao as log2,dn as mat2,xn as mat3,mn as mat4,_o as max,Te as member,Po as min,$o as mix,wo as mod,uo as negate,m as node,sn as normalLocal,un as normalView,an as normalWorld,po as normalize,fo as oneMinus,Wt as operator,en as pointCoord,be as position,rn as positionLocal,on as positionView,nn as positionWorld,Go as pow,co as radians,lo as reciprocal,Lo as reflect,No as refract,xo as round,Qr as sampleIndex,Jr as sampleMask,Pn as sampler2D,mo as saturate,Mr as scatter,pn as screenCoordinate,fn as screenUV,Br as select,To as sign,go as sin,bo as sinh,So as smoothstep,vo as sqrt,Ro as step,Dr as storage,Nr as struct,ho as tan,yo as tanh,Mn as texelFetch,Dn as texture,_n as texture2D,Bn as textureLod,at as toVar,Eo as trunc,cn as uint,W as uniform,fs as useGL,Nn as uv,vn as uvec2,hn as uvec3,yn as uvec4,Dt as variable,ct as vec2,ft as vec3,he as vec4,K as vertex,ve as vertexIndex,Mt as vertexStage,dt as webgl,Xt as webgpu};
|
|
1
|
+
import{useState as i}from"react";import{createGL as n,isGL as a}from"./index.js";export*from"./index.js";var m=(t={})=>i(()=>{let e=a(t)?t:n(t);return e.ref=r=>{e.el={},e({render(){r.flush(),r.endFrameEXP()}}),e.mount(),(()=>{e.width=r.drawingBufferWidth,e.height=r.drawingBufferHeight,e.resize()})()},e({isNative:!0})})[0];export{m as useGL};
|
|
49
2
|
//# sourceMappingURL=native.js.map
|
package/dist/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/native.ts","../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/utils/program.ts","../src/node/utils/const.ts","../src/node/utils/utils.ts","../src/node/utils/infer.ts","../src/node/utils/parse.ts","../src/node/utils/index.ts","../src/node/scope.ts","../src/node/node.ts","../src/node/core.ts","../src/node/index.ts","../src/webgpu.ts","../src/utils/pipeline.ts"],"sourcesContent":["import { useState } from 'react' // @ts-ignore\n// import { Dimensions } from 'react-native'\nimport { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const useGL = (props: Partial<GL> = {}) => {\n return useState(() => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (ctx: any) => {\n gl.el = {} as any\n gl({\n render() {\n ctx.flush()\n ctx.endFrameEXP()\n },\n })\n gl.mount()\n const resize = () => {\n gl.width = ctx.drawingBufferWidth\n gl.height = ctx.drawingBufferHeight\n gl.resize()\n }\n resize()\n // Dimensions.addEventListener('change', resize)\n }\n return gl({ isNative: true })\n })[0]\n}\n","import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nimport { float, fract, int, iResolution, position, vec4, vertexIndex } from './node'\nexport * from './node'\nexport * from './types'\nexport * from './webgl'\nexport * from './webgpu'\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\n\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\nlet iTime = performance.now()\n\nconst defaultFragment = () => vec4(fract(position.xy.div(iResolution)), 0, 1)\nconst defaultVertex = () =>\n vec4(\n float(int(vertexIndex).mod(int(2)))\n .mul(4)\n .sub(1),\n float(int(vertexIndex).div(int(2)))\n .mul(4)\n .sub(1),\n 0,\n 1\n )\n\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event({\n isNative: false,\n isWebGL: true,\n isError: false,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n particles: 1024,\n webgl: {},\n webgpu: {},\n loading: 0,\n error() {\n gl.isError = true\n gl.isLoop = false\n gl.clean()\n console.warn('GLRE Error:', ...arguments)\n },\n }) as EventState<GL>\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)), gl)\n gl.storage = durable((k, v) => gl.queue(() => gl._storage?.(k, v)), gl)\n gl.uniform = durable((k, v) => gl.queue(() => gl._uniform?.(k, v)), gl)\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)), gl)\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex || defaultVertex()\n gl.fs = gl.fs || gl.frag || gl.fragment || defaultFragment()\n gl.cs = gl.cs || gl.comp || gl.compute\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n gl((await webgl(gl)) as GL)\n } else gl((await webgpu(gl)) as GL)\n if (gl.isError) return // stop if error\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.queue.flush()\n if (gl.loading) return true // wait for textures @TODO FIX\n gl.render()\n return gl.isLoop\n })\n if (gl.isNative) return\n window.addEventListener('resize', gl.resize)\n gl.el.addEventListener('mousemove', gl.mousemove)\n })\n\n gl('clean', () => {\n gl.frame.stop()\n if (gl.isNative) return\n window.removeEventListener('resize', gl.resize)\n gl.el.removeEventListener('mousemove', gl.mousemove)\n })\n\n gl('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl('loop', () => {\n iTime = performance.now() / 1000\n gl.uniform('iTime', iTime)\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested as cached } from 'reev'\nimport { loadingImage } from './utils/helpers'\nimport {\n cleanStorage,\n createAttachment,\n createAttrib,\n createProgram,\n createStorage,\n createTexture,\n createUniform,\n} from './utils/program'\nimport { compute, fragment, vertex } from './node'\nimport type { GL, WebGLState } from './types'\n\nconst vert = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}`.trim()\n\nconst computeProgram = (gl: GL, c: WebGL2RenderingContext) => {\n if (!gl.cs) return null // ignore if no compute shader\n c.getExtension('EXT_color_buffer_float')\n\n let activeUnit = 0 // for texture units\n let currentNum = 0 // for storage buffers\n\n const units = cached(() => activeUnit++)\n const config = { isWebGL: true, gl, units }\n\n const pg = createProgram(c, compute(gl.cs, config), vert, gl)!\n const size = Math.ceil(Math.sqrt(gl.particles))\n\n const uniforms = cached((key) => c.getUniformLocation(pg, key)!)\n const storages = cached((key) => {\n const array = new Float32Array(size * size * 4) // RGBA texture data\n const ping = { texture: c.createTexture(), buffer: c.createFramebuffer() }\n const pong = { texture: c.createTexture(), buffer: c.createFramebuffer() }\n return { ping, pong, array, loc: uniforms(key), unit: units(key) }\n })\n\n const _uniform = (key: string, value: number | number[]) => {\n c.useProgram(pg)\n createUniform(c, uniforms(key), value)\n }\n\n const _storage = (key: string, value: number[]) => {\n const { ping, pong, unit, array } = storages(key)\n createStorage(c, value, size, ping, pong, unit, array)\n }\n\n const clean = () => {\n c.deleteProgram(pg)\n cleanStorage(c, storages.map.values())\n }\n\n const render = () => {\n c.useProgram(pg)\n const attachments = storages.map.values().map(({ ping, pong, loc, unit }, index) => {\n const [i, o] = currentNum % 2 ? [ping, pong] : [pong, ping]\n return createAttachment(c, i, o, loc, unit, index)\n })\n c.drawBuffers(attachments)\n c.drawArrays(c.TRIANGLES, 0, 3)\n c.bindFramebuffer(c.FRAMEBUFFER, null)\n currentNum++\n }\n\n return { render, clean, _uniform, _storage, storages }\n}\n\nexport const webgl = async (gl: GL) => {\n const config = { isWebGL: true, gl }\n const c = gl.el!.getContext('webgl2')!\n const cp = computeProgram(gl, c)\n const pg = createProgram(c, fragment(gl.fs, config), vertex(gl.vs, config), gl)!\n c.useProgram(pg)\n\n let activeUnit = 0 // for texture units\n\n const units = cached(() => activeUnit++)\n const attribs = cached((key) => c.getAttribLocation(pg, key))\n const uniforms = cached((key) => c.getUniformLocation(pg, key))\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribs(key, true)\n createAttrib(c, loc, gl.count, value, iboValue)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n c.useProgram(pg)\n createUniform(c, uniforms(key)!, value)\n cp?._uniform(key, value)\n }\n\n const _texture = (key: string, src: string) => {\n c.useProgram(pg)\n loadingImage(gl, src, (source) => {\n createTexture(c, source, uniforms(key), units(key))\n })\n }\n\n const clean = () => {\n cp?.clean()\n c.deleteProgram(pg)\n c.getExtension('WEBGL_lose_context')?.loseContext()\n }\n\n const render = () => {\n cp?.render()\n c.useProgram(pg)\n c.viewport(0, 0, ...gl.size)\n c.drawArrays(c.TRIANGLES, 0, gl.count)\n c.bindFramebuffer(c.FRAMEBUFFER, null)\n }\n\n const webgl: WebGLState = { context: c, program: pg, storages: cp?.storages }\n\n return { webgl, render, clean, _attribute, _uniform, _texture, _storage: cp?._storage }\n}\n","import type { GL } from './../types'\n\nexport const is = {\n arr: Array.isArray,\n bol: (a: unknown): a is boolean => typeof a === 'boolean',\n str: (a: unknown): a is string => typeof a === 'string',\n num: (a: unknown): a is number => typeof a === 'number',\n int: (a: unknown): a is number => Number.isInteger(a),\n fun: (a: unknown): a is Function => typeof a === 'function',\n und: (a: unknown): a is undefined => typeof a === 'undefined',\n nul: (a: unknown): a is null => a === null,\n set: (a: unknown): a is Set<unknown> => a instanceof Set,\n map: (a: unknown): a is Map<unknown, unknown> => a instanceof Map,\n obj: (a: unknown): a is object => !!a && a.constructor.name === 'Object',\n nan: (a: unknown): a is number => typeof a === 'number' && Number.isNaN(a),\n}\n\n/**\n * each\n */\ntype EachFn<Value, Key, This> = (this: This, value: Value, key: Key) => void\ntype Eachable<Value = any, Key = any, This = any> = {\n forEach(cb: EachFn<Value, Key, This>, ctx?: This): void\n}\n\nexport const each = <Value, Key, This>(obj: Eachable<Value, Key, This>, fn: EachFn<Value, Key, This>) => obj.forEach(fn)\n\nexport const flush = <Value extends Function, Key, This>(obj: Eachable<Value, Key, This>, ...args: any[]) => {\n each(obj, (f) => f(...args))\n}\n\n/**\n * other\n */\nexport const replace = (x = '', from = '_', to = '/') => x.split(from).join(to)\nexport const ext = (src = '.pdf') => src.split('.').pop()?.toLowerCase() ?? ''\nexport const fig = (x = 0) => `${x}`.split('.')[1]?.length ?? 0\nexport const dig = (x = 0) => `${x}`.split('.')[0]?.length - (x < 0 ? 1 : 0)\nexport const sig = (value = 0, digit = -2) => {\n digit *= -1\n digit = Math.pow(10, digit)\n value *= digit\n value = Math.round(value)\n value /= digit\n return value\n}\n\nexport const isFloat32 = (value: unknown): value is Float32Array => {\n return value instanceof Float32Array\n}\n\nexport const loadingImage = (gl: GL, src: string, fun: (source: HTMLImageElement) => void) => {\n gl.loading++\n const source = new Image()\n Object.assign(source, { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n fun(source)\n gl.loading--\n })\n}\n","import { is } from './helpers'\nimport type { GL } from '../types'\n\nconst createShader = (c: WebGLRenderingContext, source: string, type: number, onError = console.warn) => {\n const shader = c.createShader(type)\n if (!shader) return onError('Failed to create shader')\n c.shaderSource(shader, source.trim())\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n c.deleteShader(shader)\n onError(`Could not compile shader: ${error}\\n\\n↓↓↓generated↓↓↓\\n${source}`)\n}\n\nexport const createProgram = (c: WebGLRenderingContext, frag: string, vert: string, gl: GL) => {\n const pg = c.createProgram()\n const fs = createShader(c, frag, c.FRAGMENT_SHADER, gl.error)\n const vs = createShader(c, vert, c.VERTEX_SHADER, gl.error)\n if (!fs || !vs) return\n c.attachShader(pg, fs!)\n c.attachShader(pg, vs!)\n c.linkProgram(pg)\n if (c.getProgramParameter(pg, c.LINK_STATUS)) return pg\n const error = c.getProgramInfoLog(pg)\n c.deleteProgram(pg)\n gl.error(`Could not link program: ${error}`)\n}\n\nconst createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\nconst createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\nconst getStride = (count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n return Math.floor(stride)\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n loc: number,\n count: number,\n value: number[],\n iboValue: number[]\n) => {\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(count, value, iboValue)\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, str, c.FLOAT, false, 0, 0)\n if (ibo) c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createUniform = (c: WebGLRenderingContext, loc: WebGLUniformLocation, value: number | number[]) => {\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n}\n\nexport const createTexture = (c: WebGLRenderingContext, img: HTMLImageElement, loc: any, unit: number) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, img)\n c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n c.uniform1i(loc, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n}\n\n/**\n * for gpgpu\n */\ninterface TextureBuffer {\n texture: WebGLTexture\n buffer: WebGLFramebuffer\n}\n\nexport const createStorage = (\n c: WebGL2RenderingContext,\n value: number[],\n size: number,\n ping: TextureBuffer,\n pong: TextureBuffer,\n unit: number,\n array: Float32Array\n) => {\n const particles = size * size\n const vectorSize = value.length / particles\n for (let i = 0; i < particles; i++) {\n for (let j = 0; j < Math.min(vectorSize, 4); j++) {\n array[4 * i + j] = value[i * vectorSize + j] || 0\n }\n }\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, ping.texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA32F, size, size, 0, c.RGBA, c.FLOAT, array)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, pong.texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA32F, size, size, 0, c.RGBA, c.FLOAT, array)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.NEAREST)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n}\n\nexport const cleanStorage = (\n c: WebGL2RenderingContext,\n map: Iterable<{ ping: TextureBuffer; pong: TextureBuffer }>\n) => {\n for (const { ping, pong } of map) {\n c.deleteTexture(ping.texture)\n c.deleteTexture(pong.texture)\n c.deleteFramebuffer(ping.buffer)\n c.deleteFramebuffer(pong.buffer)\n }\n}\n\nexport const createAttachment = (\n c: WebGL2RenderingContext,\n i: TextureBuffer,\n o: TextureBuffer,\n loc: WebGLUniformLocation,\n unit: number,\n index: number\n) => {\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, i.texture)\n c.uniform1i(loc, unit)\n if (index === 0) c.bindFramebuffer(c.FRAMEBUFFER, o.buffer)\n const attachment = c.COLOR_ATTACHMENT0 + index\n c.framebufferTexture2D(c.FRAMEBUFFER, attachment, c.TEXTURE_2D, o.texture, 0)\n return attachment\n}\n","export const SWIZZLES = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\n// Unified order with TYPE_MAPPING array\nexport const CONVERSIONS = [\n 'toBool',\n 'toUint',\n 'toInt',\n 'toFloat',\n 'toBvec2',\n 'toIvec2',\n 'toUvec2',\n 'toVec2',\n 'toBvec3',\n 'toIvec3',\n 'toUvec3',\n 'toVec3',\n 'toBvec4',\n 'toIvec4',\n 'toUvec4',\n 'toVec4',\n 'toColor',\n 'toMat2',\n 'toMat3',\n 'toMat4',\n] as const\n\n// Unified order with CONVERSIONS array\nexport const TYPE_MAPPING = {\n bool: 'bool',\n uint: 'u32',\n int: 'i32',\n float: 'f32',\n bvec2: 'vec2<bool>',\n ivec2: 'vec2i',\n uvec2: 'vec2u',\n vec2: 'vec2f',\n bvec3: 'vec3<bool>',\n ivec3: 'vec3i',\n uvec3: 'vec3u',\n vec3: 'vec3f',\n bvec4: 'vec4<bool>',\n ivec4: 'vec4i',\n uvec4: 'vec4u',\n vec4: 'vec4f',\n color: 'color',\n mat2: 'mat2x2f',\n mat3: 'mat3x3f',\n mat4: 'mat4x4f',\n texture: 'texture_2d<f32>',\n sampler2D: 'sampler',\n struct: 'struct',\n} as const\n\nexport const CONSTANTS = Object.keys(TYPE_MAPPING) as (keyof typeof TYPE_MAPPING)[]\n\nexport const OPERATORS = {\n not: '', // IGNORED\n add: '+',\n sub: '-',\n mul: '*',\n div: '/',\n mod: '%',\n equal: '==',\n notEqual: '!=',\n lessThan: '<',\n lessThanEqual: '<=',\n greaterThan: '>',\n greaterThanEqual: '>=',\n and: '&&',\n or: '||',\n bitAnd: '&',\n bitOr: '|',\n bitXor: '^',\n shiftLeft: '<<',\n shiftRight: '>>',\n} as const\n\nexport const OPERATOR_KEYS = Object.keys(OPERATORS) as (keyof typeof OPERATORS)[]\n\nexport const COMPONENT_COUNT_TO_TYPE = {\n 1: 'float',\n 2: 'vec2',\n 3: 'vec3',\n 4: 'vec4',\n 9: 'mat3',\n 16: 'mat4',\n} as const\n\nexport const BUILTIN_TYPES = {\n // WGSL builtin variables\n position: 'vec4',\n vertex_index: 'uint',\n instance_index: 'uint',\n front_facing: 'bool',\n frag_depth: 'float',\n sample_index: 'uint',\n sample_mask: 'uint',\n point_coord: 'vec2',\n global_invocation_id: 'uvec3',\n\n // TSL compatible variables\n positionLocal: 'vec3',\n positionWorld: 'vec3',\n positionView: 'vec3',\n normalLocal: 'vec3',\n normalWorld: 'vec3',\n normalView: 'vec3',\n screenCoordinate: 'vec2',\n screenUV: 'vec2',\n\n // Legacy GLSL variables (for backward compatibility)\n gl_FragCoord: 'vec4',\n gl_VertexID: 'uint',\n gl_InstanceID: 'uint',\n gl_FrontFacing: 'bool',\n gl_FragDepth: 'float',\n gl_SampleID: 'uint',\n gl_SampleMask: 'uint',\n gl_PointCoord: 'vec2',\n\n // Common variables\n normal: 'vec3',\n uv: 'vec2',\n color: 'vec4',\n} as const\n\nexport const COMPARISON_OPERATORS = [\n 'equal',\n 'notEqual',\n 'lessThan',\n 'lessThanEqual',\n 'greaterThan',\n 'greaterThanEqual',\n] as const\n\nexport const LOGICAL_OPERATORS = ['and', 'or'] as const\n\nexport const WGSL_TO_GLSL_BUILTIN = {\n position: 'gl_FragCoord',\n vertex_index: 'gl_VertexID',\n instance_index: 'gl_InstanceID',\n front_facing: 'gl_FrontFacing',\n frag_depth: 'gl_FragDepth',\n sample_index: 'gl_SampleID',\n sample_mask: 'gl_SampleMask',\n point_coord: 'gl_PointCoord',\n uv: 'gl_FragCoord.xy',\n} as const\n\n/**\n * 2.1. unified with:\n * 1.1. index.ts functions and\n * 3.1. types.ts BaseNodeProxy\n */\n// Function return type mapping for method chaining\nexport const FUNCTION_RETURN_TYPES = {\n // 0. Always return bool\n all: 'bool',\n any: 'bool',\n // 2. Always return float\n determinant: 'float',\n distance: 'float',\n dot: 'float',\n length: 'float',\n lengthSq: 'float',\n luminance: 'float',\n // 3. Always return vec3\n cross: 'vec3',\n // 4. Always return vec4\n cubeTexture: 'vec4',\n texture: 'vec4',\n texelFetch: 'vec4',\n textureLod: 'vec4',\n} as const\n\n/**\n * 2.2. unified with:\n * 1.2. index.ts functions and\n * 3.2. types.ts BaseNodeProxy\n */\n// All shader functions (type inference now handled by inferFrom)\nexport const FUNCTIONS = [\n ...(Object.keys(FUNCTION_RETURN_TYPES) as (keyof typeof FUNCTION_RETURN_TYPES)[]),\n // 0. Component-wise functions\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'ceil',\n 'cos',\n 'cosh',\n 'dFdx',\n 'dFdy',\n 'degrees',\n 'exp',\n 'exp2',\n 'floor',\n 'fract',\n 'fwidth',\n 'inverseSqrt',\n 'log',\n 'log2',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'radians',\n 'reciprocal',\n 'round',\n 'saturate',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc',\n // 1. Functions where first argument determines return type\n 'atan2',\n 'clamp',\n 'max',\n 'min',\n 'mix',\n 'pow',\n 'reflect',\n 'refract',\n // 2. Functions where not first argument determines return type\n 'smoothstep',\n 'step',\n // @NOTE: mod is operator\n] as const\n","import {\n CONSTANTS,\n CONVERSIONS,\n FUNCTIONS,\n OPERATOR_KEYS,\n OPERATORS,\n TYPE_MAPPING,\n WGSL_TO_GLSL_BUILTIN,\n} from './const'\nimport { is } from '../../utils/helpers'\nimport type { Constants, Conversions, Functions, NodeContext, NodeProxy, Operators, Swizzles, X } from '../types'\n\nexport const isSwizzle = (key: unknown): key is Swizzles => {\n return is.str(key) && /^[xyzwrgbastpq]{1,4}$/.test(key)\n}\n\nexport const isOperator = (key: unknown): key is Operators => {\n return OPERATOR_KEYS.includes(key as Operators)\n}\n\nexport const isFunction = (key: unknown): key is Functions => {\n return FUNCTIONS.includes(key as Functions)\n}\n\nexport const isConversion = (key: unknown): key is Conversions => {\n return CONVERSIONS.includes(key as Conversions)\n}\n\nexport const isNodeProxy = <T extends Constants>(x: unknown): x is NodeProxy<T> => {\n if (!x) return false\n if (typeof x !== 'object') return false // @ts-ignore\n return x.isProxy\n}\n\nexport const isConstants = (type?: unknown): type is Constants => {\n if (!is.str(type)) return false\n return CONSTANTS.includes(type as any)\n}\n\nexport const hex2rgb = (hex: number) => {\n const r = ((hex >> 16) & 0xff) / 255\n const g = ((hex >> 8) & 0xff) / 255\n const b = (hex & 0xff) / 255\n return [r, g, b]\n}\n\nlet count = 0\n\nexport const getId = () => `x${count++}`\n\nexport const getBluiltin = (c: NodeContext, id: string) => {\n if (id === 'global_invocation_id') {\n const size = Math.floor(Math.sqrt(c.gl?.particles || 1024))\n return `uvec3(uint(gl_FragCoord.y) * uint(${size}) + uint(gl_FragCoord.x), 0u, 0u)`\n }\n const ret = WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n if (!ret) throw new Error(`Error: unknown builtin variable ${id}`)\n return ret\n}\n\nexport const getConversions = <T extends Constants>(x: X<T>, c?: NodeContext) => {\n if (!is.str(x)) return ''\n if (c?.isWebGL) return x\n return TYPE_MAPPING[x as keyof typeof TYPE_MAPPING] || x // for struct type\n}\n\nexport const getOperator = (op: X) => {\n return OPERATORS[op as keyof typeof OPERATORS] || op\n}\n\nexport const getConstant = (conversionKey: string): Constants => {\n const index = CONVERSIONS.indexOf(conversionKey as Conversions)\n return index !== -1 ? CONSTANTS[index] : 'float'\n}\n\nexport const getEventFun = (c: NodeContext, id: string, isAttribute = false, isTexture = false) => {\n if (c.isWebGL) {\n if (isAttribute) return (value: any) => c.gl?.attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (isAttribute) return (value: any) => c.gl?._attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nexport const safeEventCall = <T extends Constants>(x: X<T>, fun: (value: unknown) => void) => {\n if (is.und(x)) return\n if (!isNodeProxy(x)) return fun(x) // for uniform(0) or uniform([0, 1])\n if (x.type !== 'conversion') return\n const args = x.props.children?.slice(1)\n if (is.und(args?.[0])) return // ignore if uniform(vec2())\n fun(args.map((x) => x ?? args[0])) // for uniform(vec2(1)) or uniform(vec2(1, 1))\n}\n\nexport const initNodeContext = (c: NodeContext) => {\n if (c.code) return c\n c.code = {\n headers: new Map(),\n fragInputs: new Map(),\n vertInputs: new Map(),\n vertOutputs: new Map(),\n vertVaryings: new Map(),\n computeInputs: new Map(),\n dependencies: new Map(),\n structFields: new Map(),\n }\n if (c.isWebGL) return c\n c.code.fragInputs.set('position', '@builtin(position) position: vec4f')\n c.code.vertOutputs.set('position', '@builtin(position) position: vec4f')\n return c\n}\n\nexport const isArrayAccess = (key: unknown): boolean => {\n return is.num(key) || (is.str(key) && /^\\d+$/.test(key))\n}\n\nexport const addDependency = (c: NodeContext, id = '', type: string) => {\n if (!c.code?.dependencies?.has(id)) c.code!.dependencies.set(id, new Set())\n if (!isConstants(type)) c.code!.dependencies.get(id)!.add(type)\n}\n","import { isConstants, isNodeProxy, isSwizzle } from './utils'\nimport {\n BUILTIN_TYPES,\n COMPARISON_OPERATORS,\n COMPONENT_COUNT_TO_TYPE,\n FUNCTION_RETURN_TYPES,\n LOGICAL_OPERATORS,\n} from './const'\nimport { is } from '../../utils/helpers'\nimport type { Constants as C, NodeContext, NodeProxy, X } from '../types'\n\nconst inferBuiltin = <T extends C>(id: string | undefined) => {\n return BUILTIN_TYPES[id as keyof typeof BUILTIN_TYPES] as T\n}\n\n// Unified logic with types.ts InferOperator type\nconst inferOperator = <T extends C>(L: T, R: T, op: string): T => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return 'bool' as T\n if (L === R) return L\n // broadcast\n if (L === 'float' || L === 'int') return R\n if (R === 'float' || R === 'int') return L\n // mat * vec → vec\n if (L === 'mat4' && R === 'vec4') return R\n if (L === 'mat3' && R === 'vec3') return R\n if (L === 'mat2' && R === 'vec2') return R\n // vec * mat → vec\n if (L === 'vec4' && R === 'mat4') return L\n if (L === 'vec3' && R === 'mat3') return L\n if (L === 'vec2' && R === 'mat2') return L\n return L\n}\n\nexport const inferPrimitiveType = <T extends C>(x: X) => {\n if (is.bol(x)) return 'bool' as T\n if (is.str(x)) return 'texture' as T\n if (is.num(x)) return 'float' as T // @TODO FIX: Number.isInteger(x) ? 'int' : 'float'\n if (is.arr(x)) return COMPONENT_COUNT_TO_TYPE[x.length as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n return 'float' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n}\n\nconst inferFromArray = <T extends C>(arr: X<T>[], c: NodeContext) => {\n if (arr.length === 0) return 'void' as T\n const [x] = arr\n if (is.str(x)) return x as T // for struct\n const ret = infer(x, c)\n // for (const x of arr.slice(1))\n // if (ret !== infer(x, c)) throw new Error(`glre node system error: defined scope return mismatch`)\n return ret\n}\n\nexport const inferFunction = <T extends C>(x: X) => {\n return FUNCTION_RETURN_TYPES[x as keyof typeof FUNCTION_RETURN_TYPES] as T\n}\n\nexport const inferImpl = <T extends C>(target: NodeProxy<T>, c: NodeContext): T => {\n const { type, props } = target\n const { id, children = [], inferFrom, layout } = props\n const [x, y, z] = children\n if (type === 'conversion') return x\n if (type === 'operator') return inferOperator(infer(y, c), infer(z, c), x)\n if (type === 'builtin') return inferBuiltin(id)\n if (type === 'function') return inferFunction(x) || infer(y, c)\n if (type === 'define') {\n if (isConstants(layout?.type)) return layout?.type as T\n if (!inferFrom || inferFrom.length === 0) return 'void' as T\n return inferFromArray(inferFrom, c)\n }\n if (type === 'attribute' && is.arr(x) && c.gl?.count) return inferFromCount(x.length / c.gl.count)\n if (type === 'member') {\n if (isSwizzle(y)) return inferFromCount(y.length)\n if (isNodeProxy(x)) {\n const structType = infer(x, c)\n const fields = c.code?.structFields?.get(structType)\n if (fields && fields[y]) return infer(fields[y], c) as T\n }\n return 'float' as T\n }\n if (inferFrom) return inferFromArray(inferFrom, c)\n return infer(x, c) // for uniform and storage gather and scatter\n}\n\nexport const infer = <T extends C>(target: X<T>, c?: NodeContext | null): T => {\n if (!c) c = {}\n if (!isNodeProxy(target)) return inferPrimitiveType(target)\n if (is.arr(target)) return inferFromCount(target.length)\n if (!c.infers) c.infers = new WeakMap<NodeProxy<T>, C>()\n if (c.infers.has(target)) return c.infers.get(target) as T\n const ret = inferImpl(target, c)\n c.infers.set(target, ret)\n return ret as T\n}\n","import { code } from '.'\nimport { infer } from './infer'\nimport { getConversions, addDependency } from './utils'\nimport { is } from '../../utils/helpers'\nimport type { Constants, NodeContext, NodeProps, NodeProxy, StructFields, X } from '../types'\n\nexport const parseArray = (children: X[], c: NodeContext) => {\n return children\n .filter((x) => !is.und(x) && !is.nul(x))\n .map((x) => code(x, c))\n .join(', ')\n}\n\n// only for webgl\nexport const parseGather = (c: NodeContext, x: X, y: X, target: X) => {\n const parseSwizzle = () => {\n const valueType = infer(target, c)\n if (valueType === 'float') return '.x'\n if (valueType === 'vec2') return '.xy'\n if (valueType === 'vec3') return '.xyz'\n if (valueType === 'vec4') return ''\n throw new Error(`Unsupported storage scatter type: ${valueType}`)\n }\n const indexVar = code(y, c)\n const texSize = Math.floor(Math.sqrt(c.gl?.particles || 1024))\n const coordX = `int(${indexVar}) % ${texSize}`\n const coordY = `int(${indexVar}) / ${texSize}`\n return `texelFetch(${code(x, c)}, ivec2(${coordX}, ${coordY}), 0)${parseSwizzle()}`\n}\n\n// only for webgl\nexport const parseScatter = (c: NodeContext, storageNode: X, valueNode: X) => {\n const storageId = code(storageNode, c)\n const valueCode = code(valueNode, c)\n const valueType = infer(valueNode, c)\n if (valueType === 'float') return `_${storageId} = vec4(${valueCode}, 0.0, 0.0, 1.0);`\n if (valueType === 'vec2') return `_${storageId} = vec4(${valueCode}, 0.0, 1.0);`\n if (valueType === 'vec3') return `_${storageId} = vec4(${valueCode}, 1.0);`\n if (valueType === 'vec4') return `_${storageId} = ${valueCode};`\n throw new Error(`Unsupported storage scatter type: ${valueType}`)\n}\n\nexport const parseTexture = (c: NodeContext, y: X, z: X, w: X) => {\n if (c.isWebGL) {\n const args = w ? [y, z, w] : [y, z]\n return `texture(${parseArray(args, c)})`\n }\n const _y = code(y, c)\n const args = [_y, _y + 'Sampler', code(z, c)]\n if (!w) return `textureSample(${args})`\n args.push(code(w, c))\n return `textureSampleLevel(${args})`\n}\n\n/**\n * scopes\n */\nexport const parseIf = (c: NodeContext, x: X, y: X, children: X[]) => {\n let ret = `if (${code(x, c)}) {\\n${code(y, c)}\\n}`\n for (let i = 2; i < children.length; i += 2) {\n const isElse = i >= children.length - 1\n ret += !isElse\n ? ` else if (${code(children[i], c)}) {\\n${code(children[i + 1], c)}\\n}`\n : ` else {\\n${code(children[i], c)}\\n}`\n }\n return ret\n}\n\nexport const parseSwitch = (c: NodeContext, x: X, children: X[]) => {\n let ret = `switch (${code(x, c)}) {\\n`\n for (let i = 1; i < children.length; i += 2) {\n const isDefault = i >= children.length - 1\n if (isDefault && children.length % 2 === 0) {\n ret += `default:\\n${code(children[i], c)}\\nbreak;\\n`\n } else if (i + 1 < children.length)\n ret += `case ${code(children[i], c)}:\\n${code(children[i + 1], c)}\\nbreak;\\n`\n }\n ret += '}'\n return ret\n}\n\nexport const parseDeclare = (c: NodeContext, x: X, y: X) => {\n const type = infer(x, c)\n const varName = (y as any)?.props?.id\n if (c.isWebGL) return `${type} ${varName} = ${code(x, c)};`\n const wgslType = getConversions(type)\n return `var ${varName}: ${wgslType} = ${code(x, c)};`\n}\n\nexport const parseStructHead = (c: NodeContext, id: string, fields: StructFields = {}) => {\n c.code?.structFields?.set(id, fields)\n const lines: string[] = []\n for (const key in fields) {\n const fieldType = fields[key]\n const type = infer(fieldType, c)\n if (c.isWebGL) addDependency(c, id, type)\n lines.push(c.isWebGL ? `${type} ${key};` : `${key}: ${getConversions(type, c)},`)\n }\n const ret = lines.join('\\n ')\n return `struct ${id} {\\n ${ret}\\n};`\n}\n\nexport const parseStruct = (c: NodeContext, id: string, instanceId = '', initialValues?: StructFields) => {\n const fields = c.code?.structFields?.get(id) || {}\n if (c.isWebGL) {\n if (initialValues) {\n const ordered = []\n for (const key in fields) ordered.push(initialValues[key])\n return `${id} ${instanceId} = ${id}(${parseArray(ordered, c)});`\n } else return `${id} ${instanceId};`\n } else {\n if (initialValues) {\n const ordered = []\n for (const key in fields) ordered.push(initialValues[key])\n return `var ${instanceId}: ${id} = ${id}(${parseArray(ordered, c)});`\n } else return `var ${instanceId}: ${id};`\n }\n}\n\n/**\n * define\n */\nexport const parseDefine = (c: NodeContext, props: NodeProps, target: NodeProxy) => {\n const { id, children = [], layout } = props\n const [x, ...args] = children\n const argParams: [name: string, type: string][] = []\n const params: string[] = []\n if (layout?.inputs)\n for (const input of layout.inputs) {\n argParams.push([input.name, input.type])\n }\n else\n for (let i = 0; i < args.length; i++) {\n argParams.push([`p${i}`, infer(args[i], c)])\n }\n const scopeCode = code(x, c) // build struct headers before inferring returnType\n const returnType = infer(target, c)\n const ret = []\n if (c?.isWebGL) {\n for (const [paramId, type] of argParams) {\n addDependency(c, id!, type)\n params.push(`${type} ${paramId}`)\n }\n addDependency(c, id!, returnType)\n ret.push(`${returnType} ${id}(${params}) {`)\n } else {\n for (const [paramId, type] of argParams) params.push(`${paramId}: ${getConversions(type, c)}`)\n const isVoid = returnType === 'void'\n if (isVoid) {\n ret.push(`fn ${id}(${params}) {`)\n } else ret.push(`fn ${id}(${params}) -> ${getConversions(returnType, c)} {`)\n }\n if (scopeCode) ret.push(scopeCode)\n ret.push('}')\n return ret.join('\\n')\n}\n\n/**\n * headers\n */\nexport const parseVaryingHead = (c: NodeContext, id: string, type: string) => {\n return c.isWebGL\n ? `${type} ${id};`\n : `@location(${c.code?.vertVaryings?.size || 0}) ${id}: ${getConversions(type, c)}`\n}\n\nexport const parseAttribHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) return `${type} ${id};`\n const { location = 0 } = c.gl?.webgpu?.attribs.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseUniformHead = (c: NodeContext, id: string, type: Constants) => {\n const isTexture = type === 'sampler2D' || type === 'texture'\n if (c.isWebGL)\n return isTexture //\n ? `uniform sampler2D ${id};`\n : `uniform ${type} ${id};`\n if (isTexture) {\n const { group = 1, binding = 0 } = c.gl?.webgpu?.textures.map.get(id) || {}\n return (\n `@group(${group}) @binding(${binding}) var ${id}Sampler: sampler;\\n` +\n `@group(${group}) @binding(${binding + 1}) var ${id}: texture_2d<f32>;`\n )\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.uniforms.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\n}\n\nexport const parseStorageHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) {\n const ret = `uniform sampler2D ${id};`\n if (c.label !== 'compute') return ret\n const location = c.units?.(id)\n return `${ret}\\nlayout(location = ${location}) out vec4 _${id};` // out texture buffer\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.storages.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<storage, read_write> ${id}: array<${wgslType}>;`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, type: Constants, value: string) => {\n return c.isWebGL ? `const ${type} ${id} = ${value};` : `const ${id}: ${getConversions(type, c)} = ${value};`\n}\n","import { infer } from './infer'\nimport {\n parseArray,\n parseAttribHead,\n parseConstantHead,\n parseDeclare,\n parseDefine,\n parseGather,\n parseIf,\n parseScatter,\n parseStorageHead,\n parseStruct,\n parseStructHead,\n parseSwitch,\n parseTexture,\n parseUniformHead,\n parseVaryingHead,\n} from './parse'\nimport { getBluiltin, getOperator, getConversions, safeEventCall, getEventFun, initNodeContext } from './utils'\nimport { is } from '../../utils/helpers'\nimport type { Constants, NodeContext, X } from '../types'\n\nexport * from './utils'\n\nexport const code = <T extends Constants>(target: X<T>, c?: NodeContext | null): string => {\n if (!c) c = {}\n initNodeContext(c)\n if (is.arr(target)) return parseArray(target, c)\n if (is.str(target)) return target\n if (is.num(target)) {\n const ret = `${target}`\n if (ret.includes('.')) return ret\n // Check if this number should be an integer based on the inferred type\n // For now, keep the original behavior to maintain compatibility\n return ret + '.0'\n }\n if (is.bol(target)) return target ? 'true' : 'false'\n if (!target) return ''\n const { type, props = {} } = target\n const { id = 'i', children = [], fields, initialValues } = props\n const [x, y, z, w] = children\n /**\n * variables\n */\n if (type === 'variable') return id\n if (type === 'member') return `${code(x, c)}.${code(y, c)}`\n if (type === 'element') return `${code(x, c)}[${code(y, c)}]`\n if (type === 'gather')\n return c.isWebGL //\n ? parseGather(c, x, y, target)\n : `${code(x, c)}[${code(y, c)}]`\n if (type === 'scatter') {\n const [storageNode, indexNode] = x.props.children ?? [] // x is gather node\n return c.isWebGL\n ? parseScatter(c, storageNode, y) // indexNode is not using\n : `${code(storageNode, c)}[${code(indexNode, c)}] = ${code(y, c)};`\n }\n if (type === 'ternary')\n return c.isWebGL\n ? `(${code(z, c)} ? ${code(x, c)} : ${code(y, c)})`\n : `select(${code(x, c)}, ${code(y, c)}, ${code(z, c)})`\n if (type === 'conversion') return `${getConversions(x, c)}(${parseArray(children.slice(1), c)})`\n if (type === 'operator') {\n if (x === 'not' || x === 'bitNot') return `!${code(y, c)}`\n return `(${code(y, c)} ${getOperator(x)} ${code(z, c)})`\n }\n if (type === 'function') {\n if (x === 'negate') return `(-${code(y, c)})`\n if (x === 'oneMinus') return `(1.0-${code(y, c)})`\n if (x === 'texture') return parseTexture(c, y, z, w)\n if (x === 'atan2' && c.isWebGL) return `atan(${code(y, c)}, ${code(z, c)})`\n return `${x}(${parseArray(children.slice(1), c)})`\n }\n /**\n * scopes\n */\n if (type === 'scope') return children.map((child: any) => code(child, c)).join('\\n')\n if (type === 'assign') return `${code(x, c)} = ${code(y, c)};`\n if (type === 'return') return `return ${code(x, c)};`\n if (type === 'loop')\n return c.isWebGL\n ? `for (int ${id} = 0; ${id} < ${code(x, c)}; ${id} += 1) {\\n${code(y, c)}\\n}`\n : `for (var ${id}: i32 = 0; ${id} < ${code(x, c)}; ${id}++) {\\n${code(y, c)}\\n}`\n if (type === 'if') return parseIf(c, x, y, children)\n if (type === 'switch') return parseSwitch(c, x, children)\n if (type === 'declare') return parseDeclare(c, x, y)\n if (type === 'define') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseDefine(c, props, target))\n return `${id}(${parseArray(children.slice(1), c)})`\n }\n if (type === 'struct') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseStructHead(c, id, fields))\n return parseStruct(c, id, x.props.id, initialValues)\n }\n /**\n * headers\n */\n if (type === 'varying') {\n if (c.code?.vertOutputs.has(id)) return c.isWebGL ? `${id}` : `out.${id}`\n const field = parseVaryingHead(c, id, infer(target, c))\n c.code?.fragInputs.set(id, field)\n c.code?.vertOutputs.set(id, field)\n c.code?.vertVaryings.set(id, code(x, c))\n return c.isWebGL ? `${id}` : `out.${id}`\n }\n if (type === 'builtin') {\n if (c.isWebGL) return getBluiltin(c, id)\n if (id === 'position') return 'out.position'\n const field = `@builtin(${id}) ${id}: ${getConversions(infer(target, c), c)}`\n if (c.label === 'compute') c.code?.computeInputs.set(id, field)\n else if (c.label === 'frag') c.code?.fragInputs.set(id, field)\n else if (c.label === 'vert') c.code?.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute') {\n const fun = getEventFun(c, id, true)\n safeEventCall(x, fun)\n target.listeners.add(fun)\n c.code?.vertInputs.set(id, parseAttribHead(c, id, infer(target, c)))\n return c.isWebGL ? `${id}` : `in.${id}`\n }\n if (c.code?.headers.has(id)) return id // must last\n let head = ''\n if (type === 'uniform') {\n const varType = infer(target, c)\n const fun = getEventFun(c, id, false, varType === 'texture')\n safeEventCall(x, fun)\n target.listeners.add(fun)\n head = parseUniformHead(c, id, varType)\n }\n if (type === 'storage') head = parseStorageHead(c, id, infer(target, c))\n if (type === 'constant') head = parseConstantHead(c, id, infer(target, c), code(x, c))\n if (head) {\n c.code?.headers.set(id, head)\n return id\n }\n return code(x, c)\n}\n","import { getId } from './utils'\nimport { conversion, node } from './node'\nimport type {\n FnLayout,\n FnType,\n NodeProps,\n NodeProxy,\n X,\n Constants,\n Int,\n StructFactory,\n StructNode,\n StructFields,\n} from './types'\n\nlet scope: NodeProxy | null = null\nlet define: NodeProxy | null = null\n\nconst addToScope = (x: NodeProxy) => {\n if (!scope) return\n if (!scope.props.children) scope.props.children = []\n scope.props.children.push(x)\n if (x.type !== 'return' || !define) return\n const { props } = define\n if (!props.inferFrom) props.inferFrom = []\n props.inferFrom.push(x)\n}\n\nexport function toVar<T extends StructFields>(x: StructNode<T>, id?: string): StructNode<T>\nexport function toVar<T extends Constants>(x: NodeProxy<T>, id?: string): NodeProxy<T> {\n if (!id) id = getId()\n const y = node<T>('variable', { id, inferFrom: [x] })\n const z = node<T>('declare', null, x as NodeProxy, y)\n addToScope(z)\n return y\n}\n\nexport const assign = <T extends Constants>(x: NodeProxy<T>, isScatter = false, y: X<T>): X<T> => {\n const z = node(isScatter ? 'scatter' : 'assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = <T extends Constants>(x: X<T>): NodeProxy<T> => {\n const y = node<T>('return', { inferFrom: [x] }, x)\n addToScope(y)\n return y\n}\n\nexport const struct = <T extends StructFields>(fields: T, id = getId()): StructFactory<T> => {\n return (initialValues: StructFields = {}, instanceId = getId()) => {\n const x = node('variable', { id: instanceId, inferFrom: [id] })\n const y = node('struct', { id, fields, initialValues }, x)\n addToScope(y)\n return x as StructNode<T>\n }\n}\n\nconst scoped = (x: NodeProxy, fun: () => NodeProxy | void, y = define) => {\n const [_scope, _define] = [scope, define]\n ;[scope, define] = [x, y]\n const z = fun()\n if (z) Return(z)\n ;[scope, define] = [_scope, _define]\n}\n\nexport const If = (x: NodeProxy, fun: () => void) => {\n const y = node('scope')\n scoped(y, fun)\n const ifNode = node('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = node('scope')\n scoped(_y, _fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = node('scope')\n scoped(_x, _fun)\n ifNode.props.children!.push(_x)\n },\n })\n return ret()\n}\n\nexport const Loop = (x: NodeProxy, fun: (params: { i: Int }) => void) => {\n const y = node('scope')\n const id = getId()\n scoped(y, () => fun({ i: node<'int'>('variable', { id, inferFrom: [conversion('int', 0)] }) }))\n const ret = node('loop', { id }, x, y)\n addToScope(ret)\n return ret\n}\n\nexport const Switch = (x: NodeProxy) => {\n const switchNode = node('switch', null, x)\n addToScope(switchNode)\n const ret = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const y = node('scope')\n scoped(y, fun)\n for (const _x of values) switchNode.props.children!.push(_x, y)\n return ret()\n }\n },\n Default: (fun: () => void) => {\n const scope = node('scope')\n scoped(scope, fun)\n switchNode.props.children!.push(scope)\n },\n })\n return ret()\n}\n\nexport function Fn<T extends NodeProxy | StructNode | void, Args extends any[]>(\n fun: (args: Args) => T,\n defaultId = getId()\n) {\n let layout: FnLayout\n const ret = (...args: any[]) => {\n const id = layout?.name || defaultId\n const x = node('scope')\n const paramVars: NodeProxy[] = []\n const paramDefs: NodeProps[] = []\n if (layout?.inputs) {\n for (const input of layout.inputs) {\n paramDefs.push({ id: input.name, inferFrom: [conversion(input.type)] })\n }\n } else {\n for (let i = 0; i < args.length; i++) {\n paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n }\n }\n for (const props of paramDefs) paramVars.push(node('variable', props))\n const y = node('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars as Args) as any, y)\n return y\n }\n ret.setLayout = (_layout: FnLayout) => {\n layout = _layout\n return ret\n }\n return ret as unknown as Args extends readonly unknown[] ? FnType<T, Args> : never\n}\n","import { code, getConstant, isConversion, isFunction, isOperator, getId, isArrayAccess } from './utils'\nimport { assign, toVar } from './scope'\nimport { is } from '../utils/helpers'\nimport type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, X, Constants as C } from './types'\n\nconst toPrimitive = (x: X, hint: string) => {\n if (hint === 'string') return code(x, null)\n}\n\nexport const node = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\n const listeners = new Set<(value: any) => void>()\n const get = (_: unknown, y: string | Symbol) => {\n if (y === 'type') return type\n if (y === 'props') return props\n if (y === '__nodeType') return undefined // Will be inferred by TypeScript\n if (y === 'toVar') return toVar.bind(null, x as any)\n if (y === 'isProxy') return true\n if (y === 'toString') return code.bind(null, x)\n if (y === Symbol.toPrimitive) return toPrimitive.bind(null, x)\n if (y === 'listeners') return listeners\n if (y === 'attribute') return (id = getId()) => attribute(x, id)\n if (y === 'constant') return (id = getId()) => constant(x, id)\n if (y === 'uniform') return (id = getId()) => uniform(x, id)\n if (y === 'variable') return (id = getId()) => variable(id)\n if (y === 'builtin') return (id = getId()) => builtin(id)\n if (y === 'vertexStage') return (id = getId()) => vertexStage(x, id)\n if (y === 'element') return (z: X) => (type === 'storage' ? gather(x, z) : element(x, z))\n if (y === 'member') return (z: X) => member(x, z)\n if (y === 'assign') return assign.bind(null, x, x.type === 'gather')\n if (isOperator(y)) return (...z: X[]) => operator(y, x, ...z)\n if (isFunction(y)) return (...z: X[]) => function_(y, x, ...z)\n if (isConversion(y)) return () => conversion(getConstant(y), x)\n if (is.str(y)) return isArrayAccess(y) ? element(x, y) : member(x, y)\n }\n const set = (_: unknown, y: string, z: X) => {\n if (y === 'value') listeners.forEach((fun) => fun(z))\n if (is.str(y)) member(x, y).assign(z)\n return true\n }\n const x = new Proxy({}, { get, set }) as unknown as NodeProxy<T>\n return x\n}\n\n// headers with proper type inference\nexport const attribute = <T extends C>(x: X<T>, id = getId()) => node<T>('attribute', { id }, x)\nexport const constant = <T extends C>(x: X<T>, id = getId()) => node<T>('constant', { id }, x)\nexport const uniform = <T extends C>(x: X<T>, id = getId()) => node<T>('uniform', { id }, x)\nexport const storage = <T extends C>(x: X<T>, id = getId()) => node<T>('storage', { id }, x)\nexport const variable = <T extends C>(id = getId()) => node<T>('variable', { id })\nexport const builtin = <T extends C>(id = getId()) => node<T>('builtin', { id })\nexport const vertexStage = <T extends C>(x: X<T>, id = getId()) => {\n return node<T>('varying', { id, inferFrom: [x] }, x)\n}\n\n// Node shorthands with proper typing\nexport const member = <T extends C>(x: X, index: X) => node<T>('member', null, x, index)\nexport const element = <T extends C>(x: X, index: X) => node<T>('element', null, x, index)\nexport const gather = <T extends C>(x: X, index: X) => node<T>('gather', null, x, index)\nexport const scatter = <T extends C>(x: X, index: X) => node<T>('scatter', null, x, index)\nexport const select = <T extends C>(x: X<T>, y: X<T>, z: X) => node<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE\nexport const operator = <T extends C>(key: Operators, ...x: X[]) => node<T>('operator', null, key, ...x)\nexport const function_ = <T extends C>(key: Functions, ...x: X[]) => node<T>('function', null, key, ...x)\nexport const conversion = <T extends C>(key: T, ...x: X[]) => node<T>('conversion', null, key, ...x)\n","import { code } from './utils'\nimport { is } from '../utils/helpers'\nimport type { NodeContext, X } from './types'\n\nconst GLSL_FRAGMENT_HEAD = `\n#version 300 es\nprecision mediump float;\nout vec4 fragColor;\n`.trim()\n\nconst topological = (headers: Map<string, string>, dependencies: Map<string, Set<string>>) => {\n const sorted: [string, string][] = []\n const visited = new Set<string>()\n const visiting = new Set<string>()\n const visit = (id: string) => {\n if (visiting.has(id)) return\n if (visited.has(id)) return\n visiting.add(id)\n const deps = dependencies.get(id) || new Set()\n for (const dep of deps) if (headers.has(dep)) visit(dep)\n visiting.delete(id)\n visited.add(id)\n if (headers.has(id)) sorted.push([id, headers.get(id)!])\n }\n for (const [id] of headers) visit(id)\n return sorted\n}\n\nconst generateHead = (x: X, c: NodeContext) => {\n const body = code(x, c)\n let head = ''\n if (c.isWebGL && c.code?.dependencies) {\n const sorted = topological(c.code.headers, c.code.dependencies)\n head = sorted.map(([, value]) => value).join('\\n')\n } else head = Array.from(c.code?.headers?.values() || []).join('\\n')\n return [head, body]\n}\n\nconst generateStruct = (id: string, map: Map<string, string>) => {\n return `struct ${id} {\\n ${Array.from(map.values()).join(',\\n ')}\\n}`\n}\n\nexport const fragment = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.label = 'frag' // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push(GLSL_FRAGMENT_HEAD)\n for (const code of c.code?.fragInputs?.values() || []) ret.push(`in ${code}`)\n ret.push(head)\n ret.push(`void main() {\\n fragColor = ${body};`)\n } else {\n if (c.code?.fragInputs?.size) ret.push(generateStruct('Out', c.code.fragInputs))\n ret.push(head)\n ret.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n ret.push(` return ${body};`)\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const vertex = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.label = 'vert' // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) ret.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) ret.push(`out ${code}`)\n ret.push(head)\n ret.push('void main() {')\n ret.push(` gl_Position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` ${id} = ${code};`)\n } else {\n if (c.code?.vertInputs?.size) ret.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) ret.push(generateStruct('Out', c.code.vertOutputs))\n ret.push(head)\n ret.push('@vertex')\n ret.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n ret.push(' var out: Out;')\n ret.push(` out.position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` out.${id} = ${code};`)\n ret.push(' return out;')\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const compute = (x: X, c: NodeContext) => {\n if (is.str(x)) return x.trim()\n c.code?.headers?.clear()\n c.label = 'compute'\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push('#version 300 es')\n ret.push('precision mediump float;')\n ret.push(head)\n ret.push('void main() {')\n ret.push(` ${body};`)\n ret.push('}')\n } else {\n if (c.code?.computeInputs?.size) ret.push(generateStruct('In', c.code.computeInputs))\n ret.push(head)\n ret.push('@compute @workgroup_size(32)')\n ret.push(`fn main(${c.code?.computeInputs?.size ? 'in: In' : ''}) {`)\n ret.push(` ${body};`)\n ret.push('}')\n }\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n","import { hex2rgb } from './utils'\nimport { builtin as b, conversion as c, function_ as f, uniform as u } from './node'\nimport { is } from '../utils/helpers'\nimport type { Constants as C, X, NodeProxy } from './types'\nexport * from './core'\nexport * from './node'\nexport * from './scope'\nexport * from './types'\n\n// Builtin Variables\nexport const position = b<'vec4'>('position')\nexport const vertexIndex = b<'uint'>('vertex_index')\nexport const instanceIndex = b<'uint'>('instance_index')\nexport const frontFacing = b<'bool'>('front_facing')\nexport const fragDepth = b<'float'>('frag_depth')\nexport const sampleIndex = b<'uint'>('sample_index')\nexport const sampleMask = b<'uint'>('sample_mask')\nexport const pointCoord = b<'vec2'>('point_coord')\nexport const id = b<'vec3'>('global_invocation_id')\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = b<'vec3'>('position')\nexport const positionWorld = b<'vec3'>('positionWorld')\nexport const positionView = b<'vec3'>('positionView')\nexport const normalLocal = b<'vec3'>('normalLocal')\nexport const normalWorld = b<'vec3'>('normalWorld')\nexport const normalView = b<'vec3'>('normalView')\nexport const screenCoordinate = b<'vec2'>('screenCoordinate')\nexport const screenUV = b<'vec2'>('screenUV')\n\n// Type constructors with proper type inference\nexport const float = (x?: X) => c('float', x)\nexport const int = (x?: X) => c('int', x)\nexport const uint = (x?: X) => c('uint', x)\nexport const bool = (x?: X) => c('bool', x)\nexport const vec2 = (x?: X, y?: X) => c('vec2', x, y)\nexport const vec3 = (x?: X, y?: X, z?: X) => c('vec3', x, y, z)\nexport const vec4 = (x?: X, y?: X, z?: X, w?: X) => c('vec4', x, y, z, w)\nexport const mat2 = (...args: X[]) => c('mat2', ...args)\nexport const mat3 = (...args: X[]) => c('mat3', ...args)\nexport const mat4 = (...args: X[]) => c('mat4', ...args)\nexport const ivec2 = (x?: X, y?: X) => c('ivec2', x, y)\nexport const ivec3 = (x?: X, y?: X, z?: X) => c('ivec3', x, y, z)\nexport const ivec4 = (x?: X, y?: X, z?: X, w?: X) => c('ivec4', x, y, z, w)\nexport const uvec2 = (x?: X, y?: X) => c('uvec2', x, y)\nexport const uvec3 = (x?: X, y?: X, z?: X) => c('uvec3', x, y, z)\nexport const uvec4 = (x?: X, y?: X, z?: X, w?: X) => c('uvec4', x, y, z, w)\nexport const bvec2 = (x?: X, y?: X) => c('bvec2', x, y)\nexport const bvec3 = (x?: X, y?: X, z?: X) => c('bvec3', x, y, z)\nexport const bvec4 = (x?: X, y?: X, z?: X, w?: X) => c('bvec4', x, y, z, w)\nexport const texture2D = (x?: X) => c('texture', x)\nexport const sampler2D = () => c('sampler2D')\nexport const color = (r?: X, g?: X, b?: X) => {\n if (is.num(r) && is.und(g) && is.und(b)) return vec3(...hex2rgb(r))\n return vec3(r, g, b)\n}\n\n// Default uniforms with proper typing\nexport const iResolution = u(vec2(), 'iResolution')\nexport const iMouse = u(vec2(), 'iMouse')\nexport const iTime = u(float(), 'iTime')\nexport const uv = position.xy.div(iResolution)\n\n/**\n * 1.1. unified with:\n * 2.1. const.ts BUILTIN_VARIABLES and\n * 3.1. types.ts BaseNodeProxy\n */\n// 0. Always return bool\nexport const all = <T extends C>(x: X<T>) => f<'bool'>('all', x)\nexport const any = <T extends C>(x: X<T>) => f<'bool'>('any', x)\n\n// 2. Always return float\nexport const length = (x: X) => f<'float'>('length', x)\nexport const lengthSq = (x: X) => f<'float'>('lengthSq', x)\nexport const distance = (x: X, y: X) => f<'float'>('distance', x, y)\nexport const dot = (x: X, y: X) => f<'float'>('dot', x, y)\n\n// 3. Always return vec3\nexport const cross = (x: X<'vec3'>, y: X<'vec3'>) => f<'vec3'>('cross', x, y)\n\n// 4. Always return vec4\nexport const cubeTexture = (x: X, y: X, z?: X) => f<'vec4'>('cubeTexture', x, y, z)\nexport const texture = (x: X, y: X, z?: X) => f<'vec4'>('texture', x, y, z)\nexport const texelFetch = (x: X, y: X, z?: X) => f<'vec4'>('texelFetch', x, y, z)\nexport const textureLod = (x: X, y: X, z?: X) => f<'vec4'>('textureLod', x, y, z)\n\n/**\n * 1.2. unified with:\n * 2.2. const.ts FUNCTIONS and\n * 3.2. types.ts BaseNodeProxy\n */\n// 0. Component-wise functions\nexport const abs = <T extends C>(x: X<T>) => f<T>('abs', x)\nexport const acos = <T extends C>(x: X<T>) => f<T>('acos', x)\nexport const acosh = <T extends C>(x: X<T>) => f<T>('acosh', x)\nexport const asin = <T extends C>(x: X<T>) => f<T>('asin', x)\nexport const asinh = <T extends C>(x: X<T>) => f<T>('asinh', x)\nexport const atan = <T extends C>(x: X<T>) => f<T>('atan', x)\nexport const atanh = <T extends C>(x: X<T>) => f<T>('atanh', x)\nexport const ceil = <T extends C>(x: X<T>) => f<T>('ceil', x)\nexport const cos = <T extends C>(x: X<T>) => f<T>('cos', x)\nexport const cosh = <T extends C>(x: X<T>) => f<T>('cosh', x)\nexport const dFdx = <T extends C>(x: X<T>) => f<T>('dFdx', x)\nexport const dFdy = <T extends C>(x: X<T>) => f<T>('dFdy', x)\nexport const degrees = <T extends C>(x: X<T>) => f<T>('degrees', x)\nexport const exp = <T extends C>(x: X<T>) => f<T>('exp', x)\nexport const exp2 = <T extends C>(x: X<T>) => f<T>('exp2', x)\nexport const floor = <T extends C>(x: X<T>) => f<T>('floor', x)\nexport const fract = <T extends C>(x: X<T>) => f<T>('fract', x)\nexport const fwidth = <T extends C>(x: X<T>) => f<T>('fwidth', x)\nexport const inverseSqrt = <T extends C>(x: X<T>) => f<T>('inverseSqrt', x)\nexport const log = <T extends C>(x: X<T>) => f<T>('log', x)\nexport const log2 = <T extends C>(x: X<T>) => f<T>('log2', x)\nexport const negate = <T extends C>(x: X<T>) => f<T>('negate', x)\nexport const normalize = <T extends C>(x: X<T>) => f<T>('normalize', x)\nexport const oneMinus = <T extends C>(x: X<T>) => f<T>('oneMinus', x)\nexport const radians = <T extends C>(x: X<T>) => f<T>('radians', x)\nexport const reciprocal = <T extends C>(x: X<T>) => f<T>('reciprocal', x)\nexport const round = <T extends C>(x: X<T>) => f<T>('round', x)\nexport const saturate = <T extends C>(x: X<T>) => f<T>('saturate', x)\nexport const sign = <T extends C>(x: X<T>) => f<T>('sign', x)\nexport const sin = <T extends C>(x: X<T>) => f<T>('sin', x)\nexport const sinh = <T extends C>(x: X<T>) => f<T>('sinh', x)\nexport const sqrt = <T extends C>(x: X<T>) => f<T>('sqrt', x)\nexport const tan = <T extends C>(x: X<T>) => f<T>('tan', x)\nexport const tanh = <T extends C>(x: X<T>) => f<T>('tanh', x)\nexport const trunc = <T extends C>(x: X<T>) => f<T>('trunc', x)\n\n// 1. Functions where first argument determines return type\nexport const atan2 = <T extends C>(x: X<T>, y: X) => f<T>('atan2', x, y)\nexport const clamp = <T extends C>(x: X<T>, y: X, z: X) => f<T>('clamp', x, y, z)\nexport const max = <T extends C>(x: X<T>, y: X) => f<T>('max', x, y)\nexport const min = <T extends C>(x: X<T>, y: X) => f<T>('min', x, y)\nexport const mix = <T extends C>(x: X<T>, y: X, a: X) => f<T>('mix', x, y, a)\nexport const pow = <T extends C>(x: X<T>, y: X) => f<T>('pow', x, y)\nexport const reflect = <T extends C>(I: X<T>, N: X) => f<T>('reflect', I, N)\nexport const refract = <T extends C>(I: X<T>, N: X, eta: X) => f<T>('refract', I, N, eta)\n\n// 2. Functions where not first argument determines return type\nexport const smoothstep = <T extends C>(e0: X, e1: X, x: X<T>) => f<T>('smoothstep', e0, e1, x)\nexport const step = <T extends C>(edge: X, x: X<T>) => f<T>('step', edge, x)\nexport const mod = <T extends C>(x: NodeProxy<T>, y: X<T>) => x.sub(x.div(y).toFloat().floor().mul(y))\n","import { nested as cached } from 'reev'\nimport { is, loadingImage } from './utils/helpers'\nimport {\n createArrayBuffer,\n createBindGroup,\n createBindings,\n createComputePipeline,\n createDepthTexture,\n createDescriptor,\n createDevice,\n createPipeline,\n createTextureSampler,\n createVertexBuffers,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\nimport { compute, fragment, vertex } from './node'\n\nconst WORKING_GROUP_SIZE = 32\n\nconst computeProgram = (gl: GL, device: GPUDevice, bindings: any) => {\n let flush = (_pass: GPUComputePassEncoder) => {}\n\n const storages = cached((_key, value: number[] | Float32Array) => {\n const { array, buffer } = createArrayBuffer(device, value, 'storage')\n const { binding, group } = bindings.storage()\n return { array, buffer, binding, group }\n })\n\n const _storage = (key: string, value: number[] | Float32Array) => {\n const { array, buffer } = storages(key, value)\n device.queue.writeBuffer(buffer, 0, array as any)\n }\n\n const update = (bindGroups: GPUBindGroup[], bindGroupLayouts: GPUBindGroupLayout[], comp: string) => {\n const pipeline = createComputePipeline(device, bindGroupLayouts, comp!)\n flush = (pass) => {\n pass.setPipeline(pipeline)\n bindGroups.forEach((v, i) => pass.setBindGroup(i, v))\n const workgroupCount = Math.ceil(gl.particles / WORKING_GROUP_SIZE)\n pass.dispatchWorkgroups(workgroupCount, 1, 1)\n pass.end()\n }\n }\n\n const render = (pass: GPUComputePassEncoder) => {\n flush(pass)\n }\n\n const clean = () => {\n for (const { buffer } of storages.map.values()) buffer.destroy()\n }\n\n return { storages, _storage, update, render, clean }\n}\n\nexport const webgpu = async (gl: GL) => {\n const context = gl.el!.getContext('webgpu') as GPUCanvasContext\n const { device, format } = await createDevice(context, gl.error)\n const bindings = createBindings()\n const cp = computeProgram(gl, device, bindings)\n let frag: string\n let comp: string\n let vert: string\n let flush = (_pass: GPURenderPassEncoder) => {}\n let needsUpdate = true\n let depthTexture: GPUTexture\n\n const attribs = cached((_key, value: number[]) => {\n needsUpdate = true\n const stride = value.length / gl.count\n const { location } = bindings.attrib()\n const { array, buffer } = createArrayBuffer(device, value, 'attrib')\n return { array, buffer, location, stride }\n })\n\n const uniforms = cached((_key, value: number[]) => {\n needsUpdate = true\n const { binding, group } = bindings.uniform()\n const { array, buffer } = createArrayBuffer(device, value, 'uniform')\n return { array, buffer, binding, group }\n })\n\n const textures = cached((_key, width = 0, height = 0) => {\n needsUpdate = true\n const { binding, group } = bindings.texture()\n const { texture, sampler } = createTextureSampler(device, width, height)\n return { texture, sampler, binding, group, view: texture.createView() }\n })\n\n const _attribute = (key = '', value: number[]) => {\n const { array, buffer } = attribs(key, value)\n device.queue.writeBuffer(buffer, 0, array as any)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n if (is.num(value)) value = [value]\n const { array, buffer } = uniforms(key, value)\n array.set(value) // needs to set leatest value\n device.queue.writeBuffer(buffer, 0, array as any)\n }\n\n const _texture = (key: string, src: string) => {\n loadingImage(gl, src, (source) => {\n const { width, height } = source\n const { texture } = textures(key, width, height)\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n })\n }\n\n const update = () => {\n const { vertexBuffers, bufferLayouts } = createVertexBuffers(attribs.map.values())\n const { bindGroups, bindGroupLayouts } = createBindGroup(\n device,\n uniforms.map.values(),\n textures.map.values(),\n cp.storages.map.values()\n )\n const pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, vert, frag)\n flush = (pass) => {\n pass.setPipeline(pipeline)\n bindGroups.forEach((v, i) => pass.setBindGroup(i, v))\n vertexBuffers.forEach((v, i) => pass.setVertexBuffer(i, v))\n pass.draw(gl.count, 1, 0, 0)\n pass.end()\n }\n if (gl.cs) cp.update(bindGroups, bindGroupLayouts, comp)\n }\n\n const render = () => {\n if (!frag || !vert) {\n const config = { isWebGL: false, gl }\n frag = fragment(gl.fs, config) // needs to be before vertex\n vert = vertex(gl.vs, config)\n comp = compute(gl.cs, config)\n }\n if (gl.loading) return // MEMO: loading after build node\n if (needsUpdate) update()\n needsUpdate = false\n const encoder = device.createCommandEncoder()\n if (gl.cs) cp.render(encoder.beginComputePass())\n flush(encoder.beginRenderPass(createDescriptor(context, depthTexture)))\n device.queue.submit([encoder.finish()])\n }\n\n const resize = () => {\n const canvas = gl.el as HTMLCanvasElement\n depthTexture?.destroy()\n depthTexture = createDepthTexture(device, canvas.width, canvas.height)\n }\n\n const clean = () => {\n device.destroy()\n depthTexture?.destroy()\n for (const { texture } of textures.map.values()) texture.destroy()\n for (const { buffer } of uniforms.map.values()) buffer.destroy()\n for (const { buffer } of attribs.map.values()) buffer.destroy()\n cp.clean()\n }\n\n resize()\n\n const webgpu = { device, uniforms, textures, attribs, storages: cp.storages } as WebGPUState\n\n return { webgpu, render, resize, clean, _attribute, _uniform, _texture, _storage: cp._storage }\n}\n","import { isFloat32 } from './helpers'\nimport type { AttribData, TextureData, UniformData, StorageData } from '../types'\n\n/**\n * initialize\n */\nexport const createDevice = async (c: GPUCanvasContext, log = console.log) => {\n const gpu = navigator.gpu\n const format = gpu.getPreferredCanvasFormat()\n const adapter = await gpu.requestAdapter()\n const device = await adapter!.requestDevice()\n device.onuncapturederror = (e) => log(e.error.message)\n c.configure({ device, format, alphaMode: 'opaque' })\n return { device, format }\n}\n\nexport const createBindings = () => {\n let uniform = 0\n let texture = 0\n let storage = 0\n let attrib = 0\n return {\n uniform: () => {\n const group = Math.floor(uniform / 12)\n const binding = uniform % 12\n uniform++\n return { group, binding }\n },\n texture: () => {\n const baseGroup = Math.floor(uniform / 12) + 1\n const group = baseGroup + Math.floor(texture / 6)\n const binding = (texture % 6) * 2\n texture++\n return { group, binding }\n },\n storage: () => {\n const baseGroup = Math.floor(uniform / 12) + Math.floor(texture / 6) + 2\n const group = baseGroup + Math.floor(storage / 12)\n const binding = storage % 12\n storage++\n return { group, binding }\n },\n attrib: () => {\n const location = attrib\n attrib++\n return { location }\n },\n }\n}\n\n/**\n * pipeline update\n */\nconst getVertexFormat = (stride: number): GPUVertexFormat => {\n if (stride === 2) return 'float32x2'\n if (stride === 3) return 'float32x3'\n if (stride === 4) return 'float32x4'\n return 'float32'\n}\n\nexport const createVertexBuffers = (attribs: Iterable<AttribData>) => {\n const vertexBuffers: GPUBuffer[] = []\n const bufferLayouts: GPUVertexBufferLayout[] = []\n for (const { buffer, location, stride } of attribs) {\n vertexBuffers[location] = buffer\n bufferLayouts[location] = {\n arrayStride: stride * 4,\n attributes: [\n {\n shaderLocation: location,\n offset: 0,\n format: getVertexFormat(stride),\n },\n ],\n }\n }\n return { vertexBuffers, bufferLayouts }\n}\n\nexport const createBindGroup = (\n device: GPUDevice,\n uniforms: Iterable<UniformData>,\n textures: Iterable<TextureData>,\n storages: Iterable<StorageData> = []\n) => {\n const groups = new Map<number, { layouts: GPUBindGroupLayoutEntry[]; bindings: GPUBindGroupEntry[] }>()\n const ret = { bindGroups: [] as GPUBindGroup[], bindGroupLayouts: [] as GPUBindGroupLayout[] }\n const add = (i: number, layout: GPUBindGroupLayoutEntry, binding: GPUBindGroupEntry) => {\n if (!groups.has(i)) groups.set(i, { layouts: [], bindings: [] })\n const { layouts, bindings } = groups.get(i)!\n layouts.push(layout)\n bindings.push(binding)\n }\n for (const { binding, buffer, group: i } of uniforms) {\n add(i, { binding, visibility: 7, buffer: { type: 'uniform' } }, { binding, resource: { buffer } })\n }\n for (const { binding, buffer, group: i } of storages) {\n add(i, { binding, visibility: 6, buffer: { type: 'storage' } }, { binding, resource: { buffer } })\n }\n for (const { binding: b, group: i, sampler, view } of textures) {\n add(i, { binding: b, visibility: 2, sampler: {} }, { binding: b, resource: sampler })\n add(i, { binding: b + 1, visibility: 2, texture: {} }, { binding: b + 1, resource: view })\n }\n for (const [i, { layouts, bindings }] of groups) {\n ret.bindGroupLayouts[i] = device.createBindGroupLayout({ entries: layouts })\n ret.bindGroups[i] = device.createBindGroup({ layout: ret.bindGroupLayouts[i], entries: bindings })\n }\n return ret\n}\n\nexport const createPipeline = (\n device: GPUDevice,\n format: GPUTextureFormat,\n bufferLayouts: GPUVertexBufferLayout[],\n bindGroupLayouts: GPUBindGroupLayout[],\n vs: string,\n fs: string\n) => {\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ label: 'vert', code: vs }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ label: 'frag', code: fs }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout: device.createPipelineLayout({ bindGroupLayouts }),\n primitive: { topology: 'triangle-list' },\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n })\n}\n\nexport const createComputePipeline = (device: GPUDevice, bindGroupLayouts: GPUBindGroupLayout[], cs: string) => {\n return device.createComputePipeline({\n compute: {\n module: device.createShaderModule({ label: 'compute', code: cs }),\n entryPoint: 'main',\n },\n layout: device.createPipelineLayout({ bindGroupLayouts }),\n })\n}\n\n/**\n * buffers\n */\nconst bufferUsage = (type: 'uniform' | 'storage' | 'attrib') => {\n if (type === 'uniform') return 72 // GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n if (type === 'attrib') return 40 // GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n return 140 // GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n}\n\nexport const createArrayBuffer = (\n device: GPUDevice,\n array: number[] | Float32Array,\n type: 'uniform' | 'storage' | 'attrib'\n) => {\n if (!isFloat32(array)) array = new Float32Array(array)\n const usage = bufferUsage(type)\n const size = type === 'uniform' ? Math.ceil(array.byteLength / 256) * 256 : array.byteLength\n const buffer = device.createBuffer({ size, usage })\n return { array, buffer }\n}\n\nexport const createDescriptor = (c: GPUCanvasContext, depthTexture: GPUTexture) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear' as GPULoadOp,\n storeOp: 'store' as GPUStoreOp,\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n depthClearValue: 1.0,\n depthLoadOp: 'clear' as GPULoadOp,\n depthStoreOp: 'store' as GPUStoreOp,\n },\n } as GPURenderPassDescriptor\n}\n\n/**\n * textures\n */\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 }) // 22 is GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return { texture, sampler }\n}\n\nexport const createDepthTexture = (device: GPUDevice, width: number, height: number) => {\n return device.createTexture({\n size: [width, height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n })\n}\n"],"mappings":"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","names":["useState","durable","event","createFrame","createQueue","cached","is","a","isFloat32","value","loadingImage","gl","src","fun","source","createShader","c","source","type","onError","shader","error","createProgram","frag","vert","gl","pg","fs","vs","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","str","createUniform","is","l","createTexture","img","unit","texture","createStorage","size","ping","pong","array","particles","vectorSize","i","j","cleanStorage","map","createAttachment","o","index","attachment","CONVERSIONS","TYPE_MAPPING","CONSTANTS","OPERATORS","OPERATOR_KEYS","COMPONENT_COUNT_TO_TYPE","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","WGSL_TO_GLSL_BUILTIN","FUNCTION_RETURN_TYPES","FUNCTIONS","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isConversion","CONVERSIONS","isNodeProxy","x","isConstants","type","CONSTANTS","hex2rgb","hex","r","g","b","count","getId","getBluiltin","c","id","ret","WGSL_TO_GLSL_BUILTIN","getConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getConstant","conversionKey","index","getEventFun","isAttribute","isTexture","value","safeEventCall","fun","args","initNodeContext","isArrayAccess","addDependency","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","COMPARISON_OPERATORS","LOGICAL_OPERATORS","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferFromCount","count","inferFromArray","arr","c","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","isSwizzle","isNodeProxy","structType","fields","ret","parseArray","children","c","x","is","code","parseGather","y","target","parseSwizzle","valueType","infer","indexVar","texSize","coordX","coordY","parseScatter","storageNode","valueNode","storageId","valueCode","parseTexture","z","w","_y","args","parseIf","ret","i","isElse","parseSwitch","parseDeclare","type","varName","wgslType","getConversions","parseStructHead","id","fields","lines","key","fieldType","addDependency","parseStruct","instanceId","initialValues","ordered","parseDefine","props","layout","argParams","params","input","scopeCode","returnType","paramId","parseVaryingHead","parseAttribHead","location","parseUniformHead","isTexture","group","binding","parseStorageHead","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","type","props","id","children","fields","initialValues","x","y","z","w","parseGather","storageNode","indexNode","parseScatter","getConversions","getOperator","parseTexture","child","parseIf","parseSwitch","parseDeclare","parseDefine","parseStructHead","parseStruct","field","parseVaryingHead","infer","getBluiltin","fun","getEventFun","safeEventCall","parseAttribHead","head","varType","parseUniformHead","parseStorageHead","parseConstantHead","scope","define","addToScope","x","props","toVar","id","getId","y","node","z","assign","isScatter","Return","struct","fields","initialValues","instanceId","scoped","fun","_scope","_define","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","defaultId","layout","args","paramVars","paramDefs","input","i","_layout","toPrimitive","x","hint","code","node","type","props","args","listeners","get","_","y","toVar","id","getId","attribute","constant","uniform","variable","builtin","vertexStage","z","gather","element","member","assign","isOperator","operator","isFunction","function_","isConversion","conversion","getConstant","is","isArrayAccess","set","fun","storage","index","scatter","select","key","GLSL_FRAGMENT_HEAD","topological","headers","dependencies","sorted","visited","visiting","visit","id","deps","dep","generateHead","x","c","body","code","head","value","generateStruct","map","fragment","is","ret","vertex","compute","position","builtin","vertexIndex","instanceIndex","frontFacing","fragDepth","sampleIndex","sampleMask","pointCoord","id","positionLocal","positionWorld","positionView","normalLocal","normalWorld","normalView","screenCoordinate","screenUV","float","x","conversion","int","uint","bool","vec2","y","vec3","z","vec4","w","mat2","args","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4","texture2D","sampler2D","color","r","g","b","is","hex2rgb","iResolution","uniform","iMouse","iTime","uv","all","function_","any","length","lengthSq","distance","dot","cross","cubeTexture","texture","texelFetch","textureLod","abs","acos","acosh","asin","asinh","atan","atanh","ceil","cos","cosh","dFdx","dFdy","degrees","exp","exp2","floor","fract","fwidth","inverseSqrt","log","log2","negate","normalize","oneMinus","radians","reciprocal","round","saturate","sign","sin","sinh","sqrt","tan","tanh","trunc","atan2","clamp","max","min","mix","a","pow","reflect","I","N","refract","eta","smoothstep","e0","e1","step","edge","mod","vert","computeProgram","gl","c","activeUnit","currentNum","units","cached","config","pg","createProgram","compute","size","uniforms","key","storages","array","ping","pong","attachments","loc","unit","index","i","o","createAttachment","cleanStorage","value","createUniform","createStorage","webgl","cp","fragment","vertex","attribs","_attribute","iboValue","createAttrib","_uniform","_texture","src","loadingImage","source","createTexture","clean","render","cached","createDevice","c","log","gpu","format","device","e","createBindings","uniform","texture","storage","attrib","group","binding","location","getVertexFormat","stride","createVertexBuffers","attribs","vertexBuffers","bufferLayouts","buffer","createBindGroup","uniforms","textures","storages","groups","ret","add","i","layout","layouts","bindings","b","sampler","view","createPipeline","bindGroupLayouts","vs","fs","createComputePipeline","cs","bufferUsage","type","createArrayBuffer","array","isFloat32","usage","size","createDescriptor","depthTexture","createTextureSampler","width","height","createDepthTexture","WORKING_GROUP_SIZE","computeProgram","gl","device","bindings","flush","_pass","storages","cached","_key","value","array","buffer","createArrayBuffer","binding","group","key","bindGroups","bindGroupLayouts","comp","pipeline","createComputePipeline","pass","v","i","workgroupCount","webgpu","context","format","createDevice","createBindings","cp","frag","vert","needsUpdate","depthTexture","attribs","stride","location","uniforms","textures","width","height","texture","sampler","createTextureSampler","_attribute","_uniform","is","_texture","src","loadingImage","source","update","vertexBuffers","bufferLayouts","createVertexBuffers","createBindGroup","createPipeline","render","config","fragment","vertex","compute","encoder","createDescriptor","resize","canvas","createDepthTexture","clean","isGL","a","is","isServer","isWebGPUSupported","iTime","defaultFragment","vec4","fract","position","iResolution","defaultVertex","float","int","vertexIndex","createGL","props","gl","event","createQueue","createFrame","durable","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","useGL","props","useState","gl","isGL","createGL","ctx"]}
|
|
1
|
+
{"version":3,"sources":["../src/native.ts"],"sourcesContent":["import { useState } from 'react' // @ts-ignore\n// import { Dimensions } from 'react-native'\nimport { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const useGL = (props: Partial<GL> = {}) => {\n return useState(() => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (ctx: any) => {\n gl.el = {} as any\n gl({\n render() {\n ctx.flush()\n ctx.endFrameEXP()\n },\n })\n gl.mount()\n const resize = () => {\n gl.width = ctx.drawingBufferWidth\n gl.height = ctx.drawingBufferHeight\n gl.resize()\n }\n resize()\n // Dimensions.addEventListener('change', resize)\n }\n return gl({ isNative: true })\n })[0]\n}\n"],"mappings":"AAAA,OAAS,YAAAA,MAAgB,QAEzB,OAAS,YAAAC,EAAU,QAAAC,MAAY,aAE/B,WAAc,aAEP,IAAMC,EAAQ,CAACC,EAAqB,CAAC,IAC7BJ,EAAS,IAAM,CACd,IAAMK,EAAKH,EAAKE,CAAK,EAAIA,EAAQH,EAASG,CAAK,EAC/C,OAAAC,EAAG,IAAOC,GAAa,CACfD,EAAG,GAAK,CAAC,EACTA,EAAG,CACK,QAAS,CACDC,EAAI,MAAM,EACVA,EAAI,YAAY,CACxB,CACR,CAAC,EACDD,EAAG,MAAM,GACM,IAAM,CACbA,EAAG,MAAQC,EAAI,mBACfD,EAAG,OAASC,EAAI,oBAChBD,EAAG,OAAO,CAClB,GACO,CAEf,EACOA,EAAG,CAAE,SAAU,EAAK,CAAC,CACpC,CAAC,EAAE,CAAC","names":["useState","createGL","isGL","useGL","props","gl","ctx"]}
|