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/node.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
var O=["toBool","toUInt","toInt","toFloat","toBVec2","toIVec2","toUVec2","toVec2","toBVec3","toIVec3","toUVec3","toVec3","toBVec4","toIVec4","toUVec4","toVec4","toColor","toMat2","toMat3","toMat4"],w={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"},G=Object.keys(w),P={not:"",add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>",addAssign:"+=",subAssign:"-=",mulAssign:"*=",divAssign:"/=",modAssign:"%=",bitAndAssign:"&=",bitOrAssign:"|=",bitXorAssign:"^=",shiftLeftAssign:"<<=",shiftRightAssign:">>="},j=Object.keys(P),D={1:"float",2:"vec2",3:"vec3",4:"vec4",9:"mat3",16:"mat4"},H={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"},K=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],Z=["and","or"],J=[["float","vec2","vec2"],["float","vec3","vec3"],["float","vec4","vec4"],["int","ivec2","ivec2"],["int","ivec3","ivec3"],["int","ivec4","ivec4"],["uint","uvec2","uvec2"],["uint","uvec3","uvec3"],["uint","uvec4","uvec4"],["mat2","vec2","vec2"],["mat3","vec3","vec3"],["mat4","vec4","vec4"],["vec2","mat2","vec2"],["vec3","mat3","vec3"],["vec4","mat4","vec4"]],Q={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"},W={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"},ee=[...Object.keys(W),"abs","acos","acosh","asin","asinh","atan","atanh","ceil","cos","cosh","dFdx","dFdy","degrees","exp","exp2","floor","fract","fwidth","inverse","inverseSqrt","log","log2","negate","normalize","oneMinus","radians","reciprocal","round","sign","sin","sinh","sqrt","tan","tanh","trunc","saturate","atan2","clamp","max","min","mix","pow","reflect","refract","smoothstep","step"],I=(e,t)=>e===t,De=(e,t)=>J.some(([n,r,s])=>n===e&&r===t||n===t&&r===e),te=(e,t,n)=>K.includes(n)||Z.includes(n)?I(e,t):I(e,t)?!0:De(e,t),ne=(e,t,n)=>{if(K.includes(n)||Z.includes(n))return"bool";if(I(e,t))return e;let r=J.find(([s,o,a])=>s===e&&o===t||s===t&&o===e);return r?r[2]:e};var l={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)};var We=e=>[1,2,3,4,9,16].includes(e),Me=(e,t=3)=>e%t===0?Math.floor(e/t):-1,M=(e,t=1,n=console.warn)=>{let r=Me(e,t);return We(r)||n(`glre attribute error: Invalid attribute length ${e}. Must divide by vertex count (${t}) with valid stride (1,2,3,4,9,16)`),r};var lt=`
|
|
2
|
+
struct In { @builtin(vertex_index) vertex_index: u32 }
|
|
3
|
+
struct Out { @builtin(position) position: vec4f }
|
|
4
|
+
@vertex
|
|
5
|
+
fn main(in: In) -> Out {
|
|
6
|
+
var out: Out;
|
|
7
|
+
var x = f32(in.vertex_index % 2) * 4.0 - 1.0;
|
|
8
|
+
var y = f32(in.vertex_index / 2) * 4.0 - 1.0;
|
|
9
|
+
out.position = vec4f(x, y, 0.0, 1.0);
|
|
10
|
+
return out;
|
|
11
|
+
}
|
|
12
|
+
`.trim();var F=(e=1024)=>{if(l.num(e)){let s=Math.sqrt(e),o=Math.ceil(s);return Number.isInteger(s)||console.warn(`GLRE Storage Warning: particleCount (${e}) is not a square. Using ${o}x${o} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`),{x:o,y:o}}let[t,n,r]=e;if(r!==void 0){let s=n*r;return console.warn(`GLRE Storage Warning: 3D particleCount [${t}, ${n}, ${r}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${n} * depth=${r} = ${s}.`),{x:t,y:s}}return{x:t,y:n}};var re=e=>l.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),oe=e=>j.includes(e),se=e=>ee.includes(e),ie=e=>O.includes(e),A=e=>!e||typeof e!="object"?!1:e.isProxy,V=e=>l.str(e)?G.includes(e):!1,ae=e=>{let t=(e>>16&255)/255,n=(e>>8&255)/255,r=(e&255)/255;return[t,n,r]},Ve=0,v=()=>`x${Ve++}`,ue=(e,t)=>{if(t==="global_invocation_id")return`uvec3(uint(gl_FragCoord.y) * uint(${F(e.gl?.particleCount).x}) + uint(gl_FragCoord.x), 0u, 0u)`;let n=Q[t];if(!n)throw new Error(`Error: unknown builtin variable ${t}`);return n},C=(e,t)=>l.str(e)?t?.isWebGL?e:w[e]||e:"",B=e=>P[e]||e,pe=e=>{let t=O.indexOf(e);return t!==-1?G[t]:"float"},ce=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,structStructFields:new Map},e.isWebGL)||(e.code.fragInputs.set("position","@builtin(position) position: vec4f"),e.code.vertOutputs.set("position","@builtin(position) position: vec4f")),e),fe=e=>l.num(e)||l.str(e)&&/^\d+$/.test(e),L=(e,t="",n)=>{e.code?.dependencies?.has(t)||e.code.dependencies.set(t,new Set),V(n)||e.code.dependencies.get(t).add(n)},Be=(e,t,n)=>e.isWebGL?n==="attribute"?r=>e.gl?.attribute?.(t,r):n==="instance"?r=>e.gl?.instance?.(t,r):n==="texture"?r=>e.gl?.texture?.(t,r):r=>e.gl?.uniform?.(t,r):n==="attribute"?r=>e.gl?._attribute?.(t,r):n==="instance"?r=>e.gl?._instance?.(t,r):n==="texture"?r=>e.gl?._texture?.(t,r):r=>e.gl?._uniform?.(t,r),ze=(e,t)=>{if(l.und(e))return;if(!A(e))return t(e);if(e.type!=="conversion")return;let n=e.props.children?.slice(1);l.und(n?.[0])||t(n.map(r=>r??n[0]))},z=(e,t,n,r,s)=>{let o=Be(e,t,n);return ze(s,o),r.listeners.add(o),o};var ke=e=>H[e],qe=(e,t,n)=>(te(e,t,n)||console.warn(`GLRE Type Warning: Invalid operator '${n}' between types '${e}' and '${t}'`),ne(e,t,n)),je=e=>l.bol(e)?"bool":l.str(e)?"texture":l.num(e)?"float":l.arr(e)?D[e.length]:"void",N=e=>{let t=D[e];if(!t)throw`glre node system error: Cannot infer type from array length ${e}. Check your data size. Supported: 1(float), 2(vec2), 3(vec3), 4(vec4), 9(mat3), 16(mat4)`;return t},le=(e,t)=>{if(e.length===0)return"void";let[n]=e;return l.str(n)?n:m(n,t)},He=e=>W[e],Ke=(e,t)=>{let{type:n,props:r}=e,{id:s,children:o=[],inferFrom:a,layout:f}=r,[i,u,g]=o;if(n==="conversion")return i;if(n==="operator")return qe(m(u,t),m(g,t),i);if(n==="builtin")return ke(s);if(n==="function")return He(i)||m(u,t);if(n==="define")return V(f?.type)?f?.type:!a||a.length===0?"void":le(a,t);if(n==="attribute"&&l.arr(i)){let h=M(i.length,t.gl?.count,t.gl?.error);return N(h)}if(n==="instance"&&l.arr(i)){let h=M(i.length,t.gl?.instanceCount,t.gl?.error);return N(h)}if(n==="member"){if(re(u))return N(u.length);if(A(i)){let h=m(i,t),$=t.code?.structStructFields?.get(h);if($&&$[u])return m($[u],t)}return"float"}return a?le(a,t):i?m(i,t):"void"},m=(e,t)=>{if(t||(t={}),!A(e))return je(e);if(l.arr(e))return N(e.length);if(t.infers||(t.infers=new WeakMap),t.infers.has(e))return t.infers.get(e);let n=Ke(e,t);return t.infers.set(e,n),n};var y=(e,t)=>e.filter(n=>!l.und(n)&&!l.nul(n)).map(n=>p(n,t)).join(", "),xe=(e,t,n,r)=>{let s=()=>{let u=m(r,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}`)},o=p(n,e),a=F(e.gl?.particleCount),f=`int(${o}) % ${a.x}`,i=`int(${o}) / ${a.x}`;return`texelFetch(${p(t,e)}, ivec2(${f}, ${i}), 0)${s()}`},de=(e,t,n)=>{let r=p(t,e),s=p(n,e),o=m(n,e);if(o==="float")return`_${r} = vec4(${s}, 0.0, 0.0, 1.0);`;if(o==="vec2")return`_${r} = vec4(${s}, 0.0, 1.0);`;if(o==="vec3")return`_${r} = vec4(${s}, 1.0);`;if(o==="vec4")return`_${r} = ${s};`;throw new Error(`Unsupported storage scatter type: ${o}`)},Te=(e,t,n,r)=>{if(e.isWebGL)return`texture(${y(r?[t,n,r]:[t,n],e)})`;let s=p(t,e),o=[s,s+"Sampler",p(n,e)];return r?(o.push(p(r,e)),`textureSampleLevel(${o})`):`textureSample(${o})`},me=(e,t,n,r)=>{let s=`if (${p(t,e)}) {
|
|
13
|
+
${p(n,e)}
|
|
14
|
+
}`;for(let o=2;o<r.length;o+=2){let a=o>=r.length-1;s+=a?` else {
|
|
15
|
+
${p(r[o],e)}
|
|
16
|
+
}`:` else if (${p(r[o],e)}) {
|
|
17
|
+
${p(r[o+1],e)}
|
|
18
|
+
}`}return s},ve=(e,t,n)=>{let r=`switch (${p(t,e)}) {
|
|
19
|
+
`;for(let s=1;s<n.length;s+=2)s>=n.length-1&&n.length%2===0?r+=`default:
|
|
20
|
+
${p(n[s],e)}
|
|
21
|
+
break;
|
|
22
|
+
`:s+1<n.length&&(r+=`case ${p(n[s],e)}:
|
|
23
|
+
${p(n[s+1],e)}
|
|
24
|
+
break;
|
|
25
|
+
`);return r+="}",r},ge=(e,t,n)=>{let r=m(t,e),s=n?.props?.id;if(e.isWebGL)return`${r} ${s} = ${p(t,e)};`;let o=C(r);return`var ${s}: ${o} = ${p(t,e)};`},be=(e,t,n={})=>{e.code?.structStructFields?.set(t,n);let r=[];for(let o in n){let a=n[o],f=m(a,e);e.isWebGL&&L(e,t,f),r.push(e.isWebGL?`${f} ${o};`:`${o}: ${C(f,e)},`)}let s=r.join(`
|
|
26
|
+
`);return`struct ${t} {
|
|
27
|
+
${s}
|
|
28
|
+
};`},$e=(e,t,n="",r)=>{let s=e.code?.structStructFields?.get(t)||{};if(e.isWebGL)if(r){let o=[];for(let a in s)o.push(r[a]);return`${t} ${n} = ${t}(${y(o,e)});`}else return`${t} ${n};`;else if(r){let o=[];for(let a in s)o.push(r[a]);return`var ${n}: ${t} = ${t}(${y(o,e)});`}else return`var ${n}: ${t};`},Ce=(e,t,n)=>{let{id:r,children:s=[],layout:o}=t,[a,...f]=s,i=[],u=[];for(let d=0;d<f.length;d++){let _=o?.inputs?.[d];_?i.push([_.name,_.type==="auto"?m(f[d],e):_.type]):i.push([`p${d}`,m(f[d],e)])}let g=p(a,e),h=m(n,e),$=[];if(e?.isWebGL){for(let[d,_]of i)L(e,r,_),u.push(`${_} ${d}`);L(e,r,h),$.push(`${h} ${r}(${u}) {`)}else{for(let[_,Pe]of i)u.push(`${_}: ${C(Pe,e)}`);h==="void"?$.push(`fn ${r}(${u}) {`):$.push(`fn ${r}(${u}) -> ${C(h,e)} {`)}return g&&$.push(g),$.push("}"),$.join(`
|
|
29
|
+
`)},he=(e,t,n)=>e.isWebGL?`${n} ${t};`:`@location(${e.code?.vertVaryings?.size||0}) ${t}: ${C(n,e)}`,_e=(e,t,n)=>{if(e.isWebGL)return`${n} ${t};`;let{location:r=0}=e.gl?.webgpu?.attribs.map.get(t)||{},s=C(n,e);return`@location(${r}) ${t}: ${s}`},Ee=(e,t,n)=>{let r=n==="sampler2D"||n==="texture";if(e.isWebGL)return r?`uniform sampler2D ${t};`:`uniform ${n} ${t};`;if(r){let{group:f=1,binding:i=0}=e.gl?.webgpu?.textures.map.get(t)||{};return`@group(${f}) @binding(${i}) var ${t}Sampler: sampler;
|
|
30
|
+
@group(${f}) @binding(${i+1}) var ${t}: texture_2d<f32>;`}let{group:s=0,binding:o=0}=e.gl?.webgpu?.uniforms.map.get(t)||{},a=C(n,e);return`@group(${s}) @binding(${o}) var<uniform> ${t}: ${a};`},ye=(e,t,n)=>{if(e.isWebGL){let a=`uniform sampler2D ${t};`;if(e.label!=="compute")return a;let f=e.units?.(t);return`${a}
|
|
31
|
+
layout(location = ${f}) out vec4 _${t};`}let{group:r=0,binding:s=0}=e.gl?.webgpu?.storages.map.get(t)||{},o=C(n,e);return`@group(${r}) @binding(${s}) var<storage, read_write> ${t}: array<${o}>;`},Xe=(e,t,n,r)=>{let s=m(t,e),o=p(n,e),a=p(t,e);return e.isWebGL?s==="int"?`for (int ${r} = 0; ${r} < ${a}; ${r} += 1) {
|
|
32
|
+
${o}
|
|
33
|
+
}`:s==="float"?`for (float ${r} = 0.0; ${r} < ${a}; ${r} += 1.0) {
|
|
34
|
+
${o}
|
|
35
|
+
}`:s==="vec2"?`for (vec2 ${r} = vec2(0.0); ${r}.x < ${a}.x && ${r}.y < ${a}.y; ${r} += vec2(1.0)) {
|
|
36
|
+
${o}
|
|
37
|
+
}`:s==="vec3"?`for (vec3 ${r} = vec3(0.0); ${r}.x < ${a}.x && ${r}.y < ${a}.y && ${r}.z < ${a}.z; ${r} += vec3(1.0)) {
|
|
38
|
+
${o}
|
|
39
|
+
}`:`for (int ${r} = 0; ${r} < ${a}; ${r} += 1) {
|
|
40
|
+
${o}
|
|
41
|
+
}`:s==="int"?`for (var ${r}: i32 = 0; ${r} < ${a}; ${r}++) {
|
|
42
|
+
${o}
|
|
43
|
+
}`:s==="float"?`for (var ${r}: f32 = 0.0; ${r} < ${a}; ${r} += 1.0) {
|
|
44
|
+
${o}
|
|
45
|
+
}`:s==="vec2"?`for (var ${r}: vec2f = vec2f(0.0); ${r}.x < ${a}.x && ${r}.y < ${a}.y; ${r} += vec2f(1.0)) {
|
|
46
|
+
${o}
|
|
47
|
+
}`:s==="vec3"?`for (var ${r}: vec3f = vec3f(0.0); ${r}.x < ${a}.x && ${r}.y < ${a}.y && ${r}.z < ${a}.z; ${r} += vec3f(1.0)) {
|
|
48
|
+
${o}
|
|
49
|
+
}`:`for (var ${r}: i32 = 0; ${r} < ${a}; ${r}++) {
|
|
50
|
+
${o}
|
|
51
|
+
}`},Se=(e,t,n,r)=>e.isWebGL?`const ${n} ${t} = ${r};`:`const ${t}: ${C(n,e)} = ${r};`;var p=(e,t)=>{if(t||(t={}),ce(t),l.arr(e))return y(e,t);if(l.str(e))return e;if(l.num(e)){let d=`${e}`;return d.includes(".")?d:d+".0"}if(l.bol(e))return e?"true":"false";if(!e)return"";let{type:n,props:r={}}=e,{id:s="i",children:o=[],fields:a,initialValues:f}=r,[i,u,g,h]=o;if(n==="variable")return s;if(n==="member")return`${p(i,t)}.${p(u,t)}`;if(n==="element")return`${p(i,t)}[${p(u,t)}]`;if(n==="gather")return t.isWebGL?xe(t,i,u,e):`${p(i,t)}[${p(u,t)}]`;if(n==="scatter"){let[d,_]=i.props.children??[];return t.isWebGL?de(t,d,u):`${p(d,t)}[${p(_,t)}] = ${p(u,t)};`}if(n==="ternary")return t.isWebGL?`(${p(g,t)} ? ${p(i,t)} : ${p(u,t)})`:`select(${p(i,t)}, ${p(u,t)}, ${p(g,t)})`;if(n==="conversion")return`${C(i,t)}(${y(o.slice(1),t)})`;if(n==="operator")return i==="not"||i==="bitNot"?`!${p(u,t)}`:i==="mod"?p(Re(u,g),t):i.endsWith("Assign")?`${p(u,t)} ${B(i)} ${p(g,t)};`:`(${p(u,t)} ${B(i)} ${p(g,t)})`;if(n==="function"){if(i==="negate")return`(-${p(u,t)})`;if(i==="reciprocal")return`(1.0 / ${p(u,t)})`;if(i==="oneMinus")return`(1.0-${p(u,t)})`;if(i==="saturate")return`clamp(${p(u,t)}, 0.0, 1.0)`;if(i==="texture")return Te(t,u,g,h);if(i==="atan2"&&t.isWebGL)return`atan(${p(u,t)}, ${p(g,t)})`;if(!t.isWebGL){if(i==="dFdx")return`dpdx(${p(u,t)})`;if(i==="dFdy")return`dpdy(${p(u,t)})`}return`${i}(${y(o.slice(1),t)})`}if(n==="scope")return o.map(d=>p(d,t)).join(`
|
|
52
|
+
`);if(n==="assign")return`${p(i,t)} = ${p(u,t)};`;if(n==="return")return`return ${p(i,t)};`;if(n==="break")return"break;";if(n==="continue")return"continue;";if(n==="loop")return Xe(t,i,u,s);if(n==="if")return me(t,i,u,o);if(n==="switch")return ve(t,i,o);if(n==="declare")return ge(t,i,u);if(n==="define")return t.code?.headers.has(s)||t.code?.headers.set(s,Ce(t,r,e)),`${s}(${y(o.slice(1),t)})`;if(n==="struct")return t.code?.headers.has(s)||t.code?.headers.set(s,be(t,s,a)),$e(t,s,i.props.id,f);if(n==="varying"){if(t.code?.vertOutputs.has(s))return t.isWebGL?`${s}`:`out.${s}`;let d=he(t,s,m(e,t));return t.code?.fragInputs.set(s,d),t.code?.vertOutputs.set(s,d),t.code?.vertVaryings.set(s,p(i,t)),t.isWebGL?`${s}`:`out.${s}`}if(n==="builtin"){if(t.isWebGL)return ue(t,s);if(s==="position")return"out.position";let d=`@builtin(${s}) ${s}: ${C(m(e,t),t)}`;return t.label==="compute"?t.code?.computeInputs.set(s,d):t.label==="frag"?t.code?.fragInputs.set(s,d):t.label==="vert"&&t.code?.vertInputs.set(s,d),`in.${s}`}if(n==="attribute"||n==="instance")return z(t,s,n,e,i),t.code?.vertInputs.set(s,_e(t,s,m(e,t))),t.isWebGL?`${s}`:`in.${s}`;if(t.code?.headers.has(s))return s;let $="";if(n==="uniform"){let d=m(e,t);z(t,s,d,e,i),$=Ee(t,s,d)}return n==="storage"&&($=ye(t,s,m(e,t))),n==="constant"&&($=Se(t,s,m(e,t),p(i,t))),$?(t.code?.headers.set(s,$),s):p(i,t)};var Ze=`
|
|
53
|
+
#version 300 es
|
|
54
|
+
precision mediump float;
|
|
55
|
+
out vec4 fragColor;
|
|
56
|
+
`.trim(),Je=(e,t)=>{let n=[],r=new Set,s=new Set,o=a=>{if(s.has(a)||r.has(a))return;s.add(a);let f=t.get(a)||new Set;for(let i of f)e.has(i)&&o(i);s.delete(a),r.add(a),e.has(a)&&n.push([a,e.get(a)])};for(let[a]of e)o(a);return n},k=(e,t)=>{let n=p(e,t),r="";t.isWebGL&&t.code?.dependencies?r=Je(t.code.headers,t.code.dependencies).map(([,f])=>f).join(`
|
|
57
|
+
`):r=Array.from(t.code?.headers?.values()||[]).join(`
|
|
58
|
+
`);let[s,o]=n.split("return ");return o?o=o.replace(";",""):[s,o]=["",n],[r,s.trim(),o]},U=(e,t)=>`struct ${e} {
|
|
59
|
+
${Array.from(t.values()).join(`,
|
|
60
|
+
`)}
|
|
61
|
+
}`,Ye=(e,t={})=>{t.code?.headers?.clear(),t.label="frag";let[n,r,s]=k(e,t),o=[];if(t.isWebGL){o.push(Ze);for(let f of t.code?.fragInputs?.values()||[])o.push(`in ${f}`);o.push(n),o.push("void main() {"),o.push(` ${r}`),o.push(` fragColor = ${s};`)}else t.code?.fragInputs?.size&&o.push(U("Out",t.code.fragInputs)),o.push(n),o.push(`@fragment
|
|
62
|
+
fn main(out: Out) -> @location(0) vec4f {`),o.push(` ${r}`),o.push(` return ${s};`);o.push("}");let a=o.filter(Boolean).join(`
|
|
63
|
+
`).trim();return t.gl?.isDebug&&console.log(`\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
64
|
+
${a}`),a},Fe=(e,t={})=>{t.code?.headers?.clear(),t.label="vert";let[n,r,s]=k(e,t),o=[];if(t.isWebGL){o.push("#version 300 es");for(let f of t.code?.vertInputs?.values()||[])o.push(`in ${f}`);for(let f of t.code?.vertOutputs?.values()||[])o.push(`out ${f}`);o.push(n),o.push("void main() {"),o.push(` ${r}`),o.push(` gl_Position = ${s};`);for(let[f,i]of t.code?.vertVaryings?.entries()||[])o.push(` ${f} = ${i};`)}else{t.code?.vertInputs?.size&&o.push(U("In",t.code.vertInputs)),t.code?.vertOutputs?.size&&o.push(U("Out",t.code.vertOutputs)),o.push(n),o.push("@vertex"),o.push(`fn main(${t.code?.vertInputs?.size?"in: In":""}) -> Out {`),o.push(" var out: Out;"),o.push(` ${r}`),o.push(` out.position = ${s};`);for(let[f,i]of t.code?.vertVaryings?.entries()||[])o.push(` out.${f} = ${i};`);o.push(" return out;")}o.push("}");let a=o.filter(Boolean).join(`
|
|
65
|
+
`).trim();return t.gl?.isDebug&&console.log(`\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
66
|
+
${a}`),a},Ae=(e,t={})=>{t.code?.headers?.clear(),t.label="compute";let[n,r,s]=k(e,t),o=[];t.isWebGL?(o.push("#version 300 es"),o.push("precision mediump float;"),o.push(n),o.push("void main() {"),o.push(` ${r}`),o.push(` ${s};`),o.push("}")):(t.code?.computeInputs?.size&&o.push(U("In",t.code.computeInputs)),o.push(n),o.push("@compute @workgroup_size(32)"),o.push(`fn main(${t.code?.computeInputs?.size?"in: In":""}) {`),o.push(` ${r}`),o.push(` ${s};`),o.push("}"));let a=o.filter(Boolean).join(`
|
|
67
|
+
`).trim();return t.gl?.isDebug&&console.log(`\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
68
|
+
${a}`),a};var X=null,S=null,E=e=>{if(!X)return;if(X.props.children||(X.props.children=[]),X.props.children.push(e),e.type!=="return"||!S)return e;let{props:t}=S;return t.inferFrom||(t.inferFrom=[]),t.inferFrom.push(e),e};function Le(e,t){t||(t=v());let n=x("variable",{id:t,inferFrom:[e]}),r=x("declare",null,e,n);return E(r),n}var Ne=(e,t=!1,n)=>{let r=x(t?"scatter":"assign",null,e,n);return E(r),e},Qe=e=>E(x("return",{inferFrom:[e]},e)),Wt=()=>E(x("break")),Mt=()=>E(x("continue")),Vt=(e,t=v())=>(n={},r=v())=>{let s=x("variable",{id:r,inferFrom:[t]}),o=x("struct",{id:t,fields:e,initialValues:n},s);return E(o),s},Ue=(e,t,n=S)=>{let[r,s]=[X,S];[X,S]=[e,n];let o=t();o&&Qe(o),[X,S]=[r,s]},R=e=>{let t=x("scope");return Ue(t,e),t},Bt=(e,t)=>{let n=R(t),r=x("if",null,e,n);E(r);let s=()=>({ElseIf:(o,a)=>{let f=R(a);return r.props.children.push(o,f),s()},Else:o=>{let a=R(o);r.props.children.push(a)}});return s()},zt=(e,t)=>{let n=v(),r=R(()=>t({i:x("variable",{id:n,inferFrom:[T("int",0)]})})),s=x("loop",{id:n},e,r);return E(s)},kt=e=>{let t=x("switch",null,e);E(t);let n=()=>({Case:(...r)=>s=>{let o=R(s);for(let a of r)t.props.children.push(a,o);return n()},Default:r=>{let s=R(r);t.props.children.push(s)}});return n()};function qt(e,t){let n=(...r)=>{let s=t?.name||v(),o=[],a=[];for(let u=0;u<r.length;u++){let g=t?.inputs?.[u];g?a.push({id:g.name,inferFrom:g.type==="auto"?[r[u]]:[T(g.type,r[u])]}):a.push({id:`p${u}`,inferFrom:[r[u]]})}for(let u of a)o.push(x("variable",u));let f=x("scope"),i=x("define",{id:s,layout:t},f,...r);return Ue(f,()=>e(o),i),i};return n.getLayout=()=>t,n.setLayout=r=>(t=r,n),n}var et=(e,t)=>{if(t==="string")return p(e,null)},x=(e,t,...n)=>{t||(t={}),n.length&&(t.children=n);let r=new Set,s=(f,i)=>{if(i==="type")return e;if(i==="props")return t;if(i!=="__nodeType"){if(i==="toVar")return Le.bind(null,a);if(i==="isProxy")return!0;if(i==="toString")return p.bind(null,a);if(i==="fragment")return Ye.bind(null,a);if(i==="compute")return Ae.bind(null,a);if(i==="vertex")return Fe.bind(null,a);if(i===Symbol.toPrimitive)return et.bind(null,a);if(i==="listeners")return r;if(i==="attribute")return(u=v())=>tt(a,u);if(i==="instance")return(u=v())=>nt(a,u);if(i==="constant")return(u=v())=>rt(a,u);if(i==="uniform")return(u=v())=>Y(a,u);if(i==="variable")return(u=v())=>ot(u);if(i==="builtin")return(u=v())=>b(u);if(i==="vertexStage")return(u=v())=>st(a,u);if(i==="element")return u=>e==="storage"?it(a,u):Ie(a,u);if(i==="member")return u=>q(a,u);if(i==="assign")return Ne.bind(null,a,a.type==="gather");if(i==="select")return at.bind(null,a);if(oe(i))return i.endsWith("Assign")?(...u)=>E(Oe(i,a,...u)):(...u)=>Oe(i,a,...u);if(se(i))return(...u)=>c(i,a,...u);if(ie(i))return()=>T(pe(i),a);if(l.str(i))return fe(i)?Ie(a,i):q(a,i)}},o=(f,i,u)=>(i==="value"&&r.forEach(g=>g(u)),l.str(i)&&q(a,i).assign(u),!0),a=new Proxy({},{get:s,set:o});return a},tt=(e,t=v())=>x("attribute",{id:t},e),nt=(e,t=v())=>x("instance",{id:t},e),rt=(e,t=v())=>x("constant",{id:t},e),Y=(e,t=v())=>x("uniform",{id:t},e),Qt=(e,t=v())=>x("storage",{id:t},e),ot=(e=v())=>x("variable",{id:e}),b=(e=v())=>x("builtin",{id:e}),st=(e,t=v())=>x("varying",{id:t,inferFrom:[e]},e),q=(e,t)=>x("member",null,e,t),Ie=(e,t)=>x("element",null,e,t),it=(e,t)=>x("gather",null,e,t),en=(e,t)=>x("scatter",null,e,t),at=(e,t,n)=>x("ternary",null,e,t,n),Oe=(e,...t)=>x("operator",null,e,...t),c=(e,...t)=>x("function",null,e,...t),T=(e,...t)=>x("conversion",null,e,...t);var ut=b("position"),sn=b("vertex_index"),an=b("instance_index"),un=b("front_facing"),pn=b("frag_depth"),cn=b("sample_index"),fn=b("sample_mask"),ln=b("point_coord"),xn=b("global_invocation_id"),dn=b("position"),Tn=b("positionWorld"),mn=b("positionView"),vn=b("normalLocal"),gn=b("normalWorld"),bn=b("normalView"),$n=b("screenCoordinate"),Cn=b("screenUV"),pt=e=>T("float",e),hn=e=>T("int",e),_n=e=>T("uint",e),En=e=>T("bool",e),Ge=(e,t)=>T("vec2",e,t),we=(e,t,n)=>T("vec3",e,t,n),yn=(e,t,n,r)=>T("vec4",e,t,n,r),Xn=(...e)=>T("mat2",...e),Sn=(...e)=>T("mat3",...e),Rn=(...e)=>T("mat4",...e),Yn=(e,t)=>T("ivec2",e,t),Fn=(e,t,n)=>T("ivec3",e,t,n),An=(e,t,n,r)=>T("ivec4",e,t,n,r),Ln=(e,t)=>T("uvec2",e,t),Nn=(e,t,n)=>T("uvec3",e,t,n),Un=(e,t,n,r)=>T("uvec4",e,t,n,r),In=(e,t)=>T("bvec2",e,t),On=(e,t,n)=>T("bvec3",e,t,n),wn=(e,t,n,r)=>T("bvec4",e,t,n,r),Gn=e=>T("texture",e),Pn=()=>T("sampler2D"),Dn=(e,t,n)=>l.num(e)&&l.und(t)&&l.und(n)?we(...ae(e)):we(e,t,n),ct=Y(Ge(),"iResolution"),Wn=Y(Ge(),"iMouse"),Mn=Y(pt(),"iTime"),Vn=ut.xy.div(ct),Bn=e=>c("all",e),zn=e=>c("any",e),kn=e=>c("determinant",e),qn=(e,t)=>c("distance",e,t),jn=(e,t)=>c("dot",e,t),Hn=e=>c("length",e),Kn=e=>c("lengthSq",e),Zn=e=>c("luminance",e),Jn=(e,t)=>c("cross",e,t),Qn=(e,t,n)=>c("cubeTexture",e,t,n),er=(e,t,n)=>c("texture",e,t,n),tr=(e,t,n)=>c("texelFetch",e,t,n),nr=(e,t,n)=>c("textureLod",e,t,n),rr=e=>c("abs",e),or=e=>c("acos",e),sr=e=>c("acosh",e),ir=e=>c("asin",e),ar=e=>c("asinh",e),ur=e=>c("atan",e),pr=e=>c("atanh",e),cr=e=>c("ceil",e),fr=e=>c("cos",e),lr=e=>c("cosh",e),xr=e=>c("dFdx",e),dr=e=>c("dFdy",e),Tr=e=>c("degrees",e),mr=e=>c("exp",e),vr=e=>c("exp2",e),gr=e=>c("floor",e),br=e=>c("fract",e),$r=e=>c("fwidth",e),Cr=e=>c("inverseSqrt",e),hr=e=>c("log",e),_r=e=>c("log2",e),Er=e=>c("negate",e),yr=e=>c("normalize",e),Xr=e=>c("oneMinus",e),Sr=e=>c("radians",e),Rr=e=>c("reciprocal",e),Yr=e=>c("round",e),Fr=e=>c("sign",e),Ar=e=>c("sin",e),Lr=e=>c("sinh",e),Nr=e=>c("sqrt",e),Ur=e=>c("tan",e),Ir=e=>c("tanh",e),Or=e=>c("trunc",e),wr=(e,t)=>c("atan2",e,t),Gr=(e,t,n)=>c("clamp",e,t,n),Pr=(e,t)=>c("max",e,t),Dr=(e,t)=>c("min",e,t),Wr=(e,t,n)=>c("mix",e,t,n),Mr=(e,t)=>c("pow",e,t),Vr=(e,t)=>c("reflect",e,t),Br=(e,t,n)=>c("refract",e,t,n),zr=(e,t,n)=>c("smoothstep",e,t,n),kr=(e,t)=>c("step",e,t),Re=(e,t)=>e.sub(e.div(t).floor().mul(t));export{Wt as Break,Mt as Continue,qt as Fn,Bt as If,zt as Loop,Qe as Return,R as Scope,kt as Switch,rr as abs,or as acos,sr as acosh,E as addToScope,Bn as all,zn as any,ir as asin,ar as asinh,Ne as assign,ur as atan,wr as atan2,pr as atanh,tt as attribute,En as bool,b as builtin,In as bvec2,On as bvec3,wn as bvec4,cr as ceil,Gr as clamp,Dn as color,Ae as compute,rt as constant,T as conversion,fr as cos,lr as cosh,x as create,Jn as cross,Qn as cubeTexture,xr as dFdx,dr as dFdy,Tr as degrees,kn as determinant,qn as distance,jn as dot,Ie as element,mr as exp,vr as exp2,pt as float,gr as floor,br as fract,pn as fragDepth,Ye as fragment,un as frontFacing,c as function_,$r as fwidth,it as gather,Wn as iMouse,ct as iResolution,Mn as iTime,xn as id,nt as instance,an as instanceIndex,hn as int,Cr as inverseSqrt,Yn as ivec2,Fn as ivec3,An as ivec4,Hn as length,Kn as lengthSq,hr as log,_r as log2,Zn as luminance,Xn as mat2,Sn as mat3,Rn as mat4,Pr as max,q as member,Dr as min,Wr as mix,Re as mod,Er as negate,vn as normalLocal,bn as normalView,gn as normalWorld,yr as normalize,Xr as oneMinus,Oe as operator,ln as pointCoord,ut as position,dn as positionLocal,mn as positionView,Tn as positionWorld,Mr as pow,Sr as radians,Rr as reciprocal,Vr as reflect,Br as refract,Yr as round,cn as sampleIndex,fn as sampleMask,Pn as sampler2D,en as scatter,Ue as scoped,$n as screenCoordinate,Cn as screenUV,at as select,Fr as sign,Ar as sin,Lr as sinh,zr as smoothstep,Nr as sqrt,kr as step,Qt as storage,Vt as struct,Ur as tan,Ir as tanh,tr as texelFetch,er as texture,Gn as texture2D,nr as textureLod,Le as toVar,Or as trunc,_n as uint,Y as uniform,Vn as uv,Ln as uvec2,Nn as uvec3,Un as uvec4,ot as variable,Ge as vec2,we as vec3,yn as vec4,Fe as vertex,sn as vertexIndex,st as vertexStage};
|
|
69
|
+
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/node/utils/const.ts","../src/utils/helpers.ts","../src/utils/program.ts","../src/node/utils/utils.ts","../src/node/utils/infer.ts","../src/node/utils/parse.ts","../src/node/utils/index.ts","../src/node/build.ts","../src/node/scope.ts","../src/node/create.ts","../src/node/index.ts"],"sourcesContent":["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 addAssign: '+=',\n subAssign: '-=',\n mulAssign: '*=',\n divAssign: '/=',\n modAssign: '%=',\n bitAndAssign: '&=',\n bitOrAssign: '|=',\n bitXorAssign: '^=',\n shiftLeftAssign: '<<=',\n shiftRightAssign: '>>=',\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\n// Operator type rules [L, R, Result] format (no duplicates, same-type handled by logic)\nexport const OPERATOR_TYPE_RULES = [\n // Scalar broadcast operations (result follows vector type)\n ['float', 'vec2', 'vec2'],\n ['float', 'vec3', 'vec3'],\n ['float', 'vec4', 'vec4'],\n ['int', 'ivec2', 'ivec2'],\n ['int', 'ivec3', 'ivec3'],\n ['int', 'ivec4', 'ivec4'],\n ['uint', 'uvec2', 'uvec2'],\n ['uint', 'uvec3', 'uvec3'],\n ['uint', 'uvec4', 'uvec4'],\n // Matrix-vector operations (mat * vec → vec)\n ['mat2', 'vec2', 'vec2'],\n ['mat3', 'vec3', 'vec3'],\n ['mat4', 'vec4', 'vec4'],\n // Vector-matrix operations (vec * mat → vec)\n ['vec2', 'mat2', 'vec2'],\n ['vec3', 'mat3', 'vec3'],\n ['vec4', 'mat4', 'vec4'],\n] 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 _N\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 _N\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 'inverse',\n 'inverseSqrt',\n 'log',\n 'log2',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'radians',\n 'reciprocal',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc',\n 'saturate',\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\n// Check if two types are the same (for same-type operations)\nconst isSameType = (L: string, R: string): boolean => L === R\n\n// Check if combination exists in rules (handles bidirectional matching)\nconst isValidCombination = (L: string, R: string): boolean => {\n return OPERATOR_TYPE_RULES.some(\n ([left, right, _]) => (left === L && right === R) || (left === R && right === L)\n )\n}\n\n// Type constraint validation for operators ([L, R, Result] format)\nexport const validateOperatorTypes = (L: string, R: string, op: string): boolean => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return isSameType(L, R)\n if (isSameType(L, R)) return true\n return isValidCombination(L, R)\n}\n\n// Get result type for operator (used by inferOperator)\nexport const getOperatorResultType = (L: string, R: string, op: string): string => {\n if (COMPARISON_OPERATORS.includes(op as any) || LOGICAL_OPERATORS.includes(op as any)) return 'bool'\n // Same type operations return the same type\n if (isSameType(L, R)) return L\n const rule = OPERATOR_TYPE_RULES.find(\n ([left, right, _]) => (left === L && right === R) || (left === R && right === L)\n )\n return rule ? rule[2] : L\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\nconst isValidStride = (stride: number) => [1, 2, 3, 4, 9, 16].includes(stride)\n\nconst calcStride = (arrayLength: number, count = 3) => {\n if (arrayLength % count === 0) return Math.floor(arrayLength / count)\n return -1\n}\n\nexport const getStride = (arrayLength: number, count = 1, error = console.warn) => {\n const ret = calcStride(arrayLength, count)\n if (!isValidStride(ret))\n error(\n `glre attribute error: Invalid attribute length ${arrayLength}. Must divide by vertex count (${count}) with valid stride (1,2,3,4,9,16)`\n )\n return ret\n}\n\nexport const GLSL_FS = /* cpp */ `\n#version 300 es\nprecision mediump float;\nout vec4 fragColor;\nuniform vec2 iResolution;\nvoid main() {\n fragColor = vec4(fract((gl_FragCoord.xy / iResolution)), 0.0, 1.0);\n}\n`\n\nexport const GLSL_VS = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}`\n\nexport const WGSL_VS = /* rust */ `\nstruct In { @builtin(vertex_index) vertex_index: u32 }\nstruct Out { @builtin(position) position: vec4f }\n@vertex\nfn main(in: In) -> Out {\n var out: Out;\n var x = f32(in.vertex_index % 2) * 4.0 - 1.0;\n var y = f32(in.vertex_index / 2) * 4.0 - 1.0;\n out.position = vec4f(x, y, 0.0, 1.0);\n return out;\n}\n`.trim()\n\nexport const WGSL_FS = /* rust */ `\nstruct Out { @builtin(position) position: vec4f }\n@group(0) @binding(0) var<uniform> iResolution: vec2f;\n@fragment\nfn main(out: Out) -> @location(0) vec4f {\n return vec4f(fract((out.position.xy / iResolution)), 0.0, 1.0);\n}\n`\n","import { is } from './helpers'\nimport type { GL } from '../types'\n\nconst createShader = (c: WebGL2RenderingContext, 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: WebGL2RenderingContext, 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\nexport const createArrayBuffer = (c: WebGL2RenderingContext, data: number[]) => {\n const array = new Float32Array(data)\n const buffer = c.createBuffer()\n return { array, buffer }\n}\n\nexport const setArrayBuffer = (\n c: WebGL2RenderingContext,\n array: Float32Array,\n buffer: WebGLBuffer,\n value: number[]\n) => {\n array.set(value)\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, array, c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n}\n\nexport const updateAttrib = (c: WebGL2RenderingContext, loc: number, stride: number, buffer: WebGLBuffer) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n}\n\nexport const updateInstance = (c: WebGL2RenderingContext, loc: number, stride: number, buffer: WebGLBuffer) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, stride, c.FLOAT, false, 0, 0)\n c.vertexAttribDivisor(loc, 1) // divisor is 1\n}\n\nexport const updateUniform = (c: WebGL2RenderingContext, 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 = (\n c: WebGL2RenderingContext,\n img: HTMLImageElement,\n loc: WebGLUniformLocation,\n unit: number\n) => {\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 width: number,\n height: number,\n ping: TextureBuffer,\n pong: TextureBuffer,\n unit: number,\n array: Float32Array\n) => {\n const particleCount = width * height\n const vectorSize = value.length / particleCount\n for (let i = 0; i < particleCount; 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, width, height, 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, width, height, 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\n/**\n * utils\n */\nexport const storageSize = (particleCount: number | number[] = 1024) => {\n if (is.num(particleCount)) {\n const sqrt = Math.sqrt(particleCount)\n const size = Math.ceil(sqrt)\n if (!Number.isInteger(sqrt)) {\n console.warn(\n `GLRE Storage Warning: particleCount (${particleCount}) is not a square. Using ${size}x${size} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`\n )\n }\n return { x: size, y: size }\n }\n const [x, y, z] = particleCount\n if (z !== undefined) {\n const yz = y * z\n console.warn(\n `GLRE Storage Warning: 3D particleCount [${x}, ${y}, ${z}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${y} * depth=${z} = ${yz}.`\n )\n return { x, y: yz }\n }\n return { x, y }\n}\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 {\n Constants as C,\n Conversions,\n Functions,\n NodeContext,\n NodeTypes,\n Operators,\n Swizzles,\n X,\n Y,\n} from '../types'\nimport { storageSize } from '../../utils/program'\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 isX = (x: unknown): x is X => {\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 C => {\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 = storageSize(c.gl?.particleCount)\n return `uvec3(uint(gl_FragCoord.y) * uint(${size.x}) + 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 C>(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: Y) => {\n return OPERATORS[op as keyof typeof OPERATORS] || op\n}\n\nexport const getConstant = (conversionKey: string): C => {\n const index = CONVERSIONS.indexOf(conversionKey as Conversions)\n return index !== -1 ? CONSTANTS[index] : 'float'\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 structStructFields: 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\n/**\n * uniform ant attribute event listeners\n */\nconst getEventFun = (c: NodeContext, id: string, type: string) => {\n if (c.isWebGL) {\n if (type === 'attribute') return (value: any) => c.gl?.attribute?.(id, value)\n if (type === 'instance') return (value: any) => c.gl?.instance?.(id, value)\n if (type === 'texture') return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (type === 'attribute') return (value: any) => c.gl?._attribute?.(id, value)\n if (type === 'instance') return (value: any) => c.gl?._instance?.(id, value)\n if (type === 'texture') return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nconst safeEventCall = <T extends C>(x: X<T>, fun: (value: unknown) => void) => {\n if (is.und(x)) return\n if (!isX(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 setupEvent = (c: NodeContext, id: string, type: string, target: X, child: X) => {\n const fun = getEventFun(c, id, type)\n safeEventCall(child, fun)\n target.listeners.add(fun)\n return fun\n}\n","import { isConstants, isX, isSwizzle } from './utils'\nimport {\n BUILTIN_TYPES,\n COMPONENT_COUNT_TO_TYPE,\n FUNCTION_RETURN_TYPES,\n getOperatorResultType,\n validateOperatorTypes,\n} from './const'\nimport { is, getStride } from '../../utils/helpers'\nimport type { Constants as C, NodeContext, X, Y } 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\nconst inferOperator = <T extends C>(L: T, R: T, op: string): T => {\n if (!validateOperatorTypes(L, R, op))\n console.warn(`GLRE Type Warning: Invalid operator '${op}' between types '${L}' and '${R}'`)\n return getOperatorResultType(L, R, op) as T\n}\n\nexport const inferPrimitiveType = <T extends C>(x: Y<T>) => {\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 'void' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n const ret = COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n if (!ret)\n throw `glre node system error: Cannot infer type from array length ${count}. Check your data size. Supported: 1(float), 2(vec2), 3(vec3), 4(vec4), 9(mat3), 16(mat4)`\n return ret\n}\n\nconst inferFromArray = <T extends C>(arr: Y<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 `glre node system error: defined scope return mismatch`\n return ret\n}\n\nexport const inferFunction = <T extends C>(x: Y) => {\n return FUNCTION_RETURN_TYPES[x as keyof typeof FUNCTION_RETURN_TYPES] as T\n}\n\nexport const inferImpl = <T extends C>(target: X<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)) {\n const stride = getStride(x.length, c.gl?.count, c.gl?.error)\n return inferFromCount(stride)\n }\n if (type === 'instance' && is.arr(x)) {\n const stride = getStride(x.length, c.gl?.instanceCount, c.gl?.error)\n return inferFromCount(stride)\n }\n if (type === 'member') {\n if (isSwizzle(y)) return inferFromCount(y.length)\n if (isX(x)) {\n const structType = infer(x, c)\n const fields = c.code?.structStructFields?.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 x ? infer(x, c) : ('void' as T) // for uniform and storage gather and scatter\n}\n\nexport const infer = <T extends C>(target: Y<T>, c?: NodeContext | null): T => {\n if (!c) c = {}\n if (!isX(target)) return inferPrimitiveType(target)\n if (is.arr(target)) return inferFromCount(target.length)\n if (!c.infers) c.infers = new WeakMap<X<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, StructFields, Y } from '../types'\nimport { storageSize } from '../../utils/program'\n\nexport const parseArray = (children: Y[], 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: Y, y: Y, target: Y) => {\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 size = storageSize(c.gl?.particleCount)\n const coordX = `int(${indexVar}) % ${size.x}`\n const coordY = `int(${indexVar}) / ${size.x}`\n return `texelFetch(${code(x, c)}, ivec2(${coordX}, ${coordY}), 0)${parseSwizzle()}`\n}\n\n// only for webgl\nexport const parseScatter = (c: NodeContext, storageNode: Y, valueNode: Y) => {\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: Y, z: Y, w: Y) => {\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: Y, y: Y, children: Y[]) => {\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: Y, children: Y[]) => {\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: Y, y: Y) => {\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?.structStructFields?.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?.structStructFields?.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: Y) => {\n const { id, children = [], layout } = props\n const [x, ...args] = children\n const argParams: [name: string, type: Constants][] = []\n const params: string[] = []\n for (let i = 0; i < args.length; i++) {\n const input = layout?.inputs?.[i]\n if (!input) argParams.push([`p${i}`, infer(args[i], c)])\n else argParams.push([input.name, input.type === 'auto' ? infer(args[i], c) : input.type])\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: Constants) => {\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 parseLoop = (c: NodeContext, x: Y, y: Y, id: string) => {\n const conditionType = infer(x, c)\n const bodyCode = code(y, c)\n const conditionCode = code(x, c)\n if (c.isWebGL) {\n if (conditionType === 'int')\n return `for (int ${id} = 0; ${id} < ${conditionCode}; ${id} += 1) {\\n${bodyCode}\\n}`\n if (conditionType === 'float')\n return `for (float ${id} = 0.0; ${id} < ${conditionCode}; ${id} += 1.0) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec2')\n return `for (vec2 ${id} = vec2(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y; ${id} += vec2(1.0)) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec3')\n return `for (vec3 ${id} = vec3(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y && ${id}.z < ${conditionCode}.z; ${id} += vec3(1.0)) {\\n${bodyCode}\\n}`\n return `for (int ${id} = 0; ${id} < ${conditionCode}; ${id} += 1) {\\n${bodyCode}\\n}`\n }\n if (conditionType === 'int')\n return `for (var ${id}: i32 = 0; ${id} < ${conditionCode}; ${id}++) {\\n${bodyCode}\\n}`\n if (conditionType === 'float')\n return `for (var ${id}: f32 = 0.0; ${id} < ${conditionCode}; ${id} += 1.0) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec2')\n return `for (var ${id}: vec2f = vec2f(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y; ${id} += vec2f(1.0)) {\\n${bodyCode}\\n}`\n if (conditionType === 'vec3')\n return `for (var ${id}: vec3f = vec3f(0.0); ${id}.x < ${conditionCode}.x && ${id}.y < ${conditionCode}.y && ${id}.z < ${conditionCode}.z; ${id} += vec3f(1.0)) {\\n${bodyCode}\\n}`\n return `for (var ${id}: i32 = 0; ${id} < ${conditionCode}; ${id}++) {\\n${bodyCode}\\n}`\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 parseLoop,\n parseScatter,\n parseStorageHead,\n parseStruct,\n parseStructHead,\n parseSwitch,\n parseTexture,\n parseUniformHead,\n parseVaryingHead,\n} from './parse'\nimport { getBluiltin, getConversions, getOperator, initNodeContext, setupEvent } from './utils'\nimport { is } from '../../utils/helpers'\nimport { mod } from '..'\nimport type { Constants as C, NodeContext, Y } from '../types'\n\nexport * from './utils'\n\nexport const code = <T extends C>(target: Y<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 if (x === 'mod') return code(mod(y, z), c)\n if (x.endsWith('Assign')) return `${code(y, c)} ${getOperator(x)} ${code(z, 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 === 'reciprocal') return `(1.0 / ${code(y, c)})`\n if (x === 'oneMinus') return `(1.0-${code(y, c)})`\n if (x === 'saturate') return `clamp(${code(y, c)}, 0.0, 1.0)`\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 if (!c.isWebGL) {\n if (x === 'dFdx') return `dpdx(${code(y, c)})`\n if (x === 'dFdy') return `dpdy(${code(y, c)})`\n }\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 === 'break') return 'break;'\n if (type === 'continue') return 'continue;'\n if (type === 'loop') return parseLoop(c, x, y, id)\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' || type === 'instance') {\n setupEvent(c, id, type, target, x)\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 setupEvent(c, id, varType, target, x)\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 { code } from './utils'\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 build = (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 let [lines, ret] = body.split('return ')\n if (ret) ret = ret.replace(';', '')\n else [lines, ret] = ['', body]\n return [head, lines.trim(), ret]\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 c.code?.headers?.clear()\n c.label = 'frag' // for varying inputs or outputs\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push(GLSL_FRAGMENT_HEAD)\n for (const code of c.code?.fragInputs?.values() || []) result.push(`in ${code}`)\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` fragColor = ${ret};`)\n } else {\n if (c.code?.fragInputs?.size) result.push(generateStruct('Out', c.code.fragInputs))\n result.push(head)\n result.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n result.push(` ${lines}`)\n result.push(` return ${ret};`)\n }\n result.push('}')\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const vertex = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'vert' // for varying inputs or outputs\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) result.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) result.push(`out ${code}`)\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` gl_Position = ${ret};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) result.push(` ${id} = ${code};`)\n } else {\n if (c.code?.vertInputs?.size) result.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) result.push(generateStruct('Out', c.code.vertOutputs))\n result.push(head)\n result.push('@vertex')\n result.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n result.push(' var out: Out;')\n result.push(` ${lines}`)\n result.push(` out.position = ${ret};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) result.push(` out.${id} = ${code};`)\n result.push(' return out;')\n }\n result.push('}')\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const compute = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'compute'\n const [head, lines, ret] = build(x, c)\n const result = []\n if (c.isWebGL) {\n result.push('#version 300 es')\n result.push('precision mediump float;')\n result.push(head)\n result.push('void main() {')\n result.push(` ${lines}`)\n result.push(` ${ret};`)\n result.push('}')\n } else {\n if (c.code?.computeInputs?.size) result.push(generateStruct('In', c.code.computeInputs))\n result.push(head)\n result.push('@compute @workgroup_size(32)')\n result.push(`fn main(${c.code?.computeInputs?.size ? 'in: In' : ''}) {`)\n result.push(` ${lines}`)\n result.push(` ${ret};`)\n result.push('}')\n }\n const main = result.filter(Boolean).join('\\n').trim()\n if (c.gl?.isDebug) console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n","import { getId } from './utils'\nimport { conversion, create } from './create'\nimport type {\n FnLayout,\n FnType,\n Constants as C,\n Int,\n NodeProps,\n Struct,\n StructFactory,\n StructFields,\n X,\n Y,\n} from './types'\n\nlet scope: X | null = null\nlet define: X | null = null\n\nexport const addToScope = <T extends C>(x: X<T>) => {\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 x\n const { props } = define\n if (!props.inferFrom) props.inferFrom = []\n props.inferFrom.push(x)\n return x\n}\n\nexport function toVar<T extends StructFields>(x: Struct<T>, id?: string): Struct<T>\nexport function toVar<T extends C>(x: X<T>, id?: string): X<T> {\n if (!id) id = getId()\n const y = create<T>('variable', { id, inferFrom: [x] })\n const z = create<T>('declare', null, x as X, y)\n addToScope(z)\n return y\n}\n\nexport const assign = <T extends C>(x: X<T>, isScatter = false, y: Y<T>): X<T> => {\n const z = create(isScatter ? 'scatter' : 'assign', null, x, y)\n addToScope(z)\n return x\n}\n\nexport const Return = <T extends C>(x?: Y<T>): Y<T> => {\n return addToScope(create<T>('return', { inferFrom: [x] }, x))\n}\n\nexport const Break = (): Y => {\n return addToScope(create('break'))\n}\n\nexport const Continue = (): Y => {\n return addToScope(create('continue'))\n}\n\nexport const struct = <T extends StructFields>(fields: T, id = getId()): StructFactory<T> => {\n return (initialValues: StructFields = {}, instanceId = getId()) => {\n const x = create('variable', { id: instanceId, inferFrom: [id] })\n const y = create('struct', { id, fields, initialValues }, x)\n addToScope(y)\n return x as Struct<T>\n }\n}\n\nexport const scoped = (x: X, fun: () => X | 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 Scope = <T extends X>(fun: () => T | void) => {\n const scope = create('scope')\n scoped(scope, fun)\n return scope as T\n}\n\nexport const If = (x: Y, fun: () => void) => {\n const y = Scope(fun)\n const ifNode = create('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = Scope(_fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = Scope(_fun)\n ifNode.props.children!.push(_x)\n },\n })\n return ret()\n}\n\nexport const Loop = (x: Y, fun: (params: { i: Int }) => void) => {\n const id = getId()\n const y = Scope(() => fun({ i: create<'int'>('variable', { id, inferFrom: [conversion('int', 0)] }) }))\n const ret = create('loop', { id }, x, y)\n return addToScope(ret)\n}\n\nexport const Switch = (x: Y) => {\n const switchNode = create('switch', null, x)\n addToScope(switchNode)\n const ret = () => ({\n Case: (...values: X[]) => {\n return (fun: () => void) => {\n const y = Scope(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 = Scope(fun)\n switchNode.props.children!.push(scope)\n },\n })\n return ret()\n}\n\nexport function Fn<T extends X | Struct | void, Args extends any[]>(fun: (args: Args) => T, layout?: FnLayout) {\n const ret = (...args: any[]) => {\n const id = layout?.name || getId()\n const paramVars: X[] = []\n const paramDefs: NodeProps[] = []\n for (let i = 0; i < args.length; i++) {\n const input = layout?.inputs?.[i]\n if (!input) paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n else\n paramDefs.push({\n id: input.name,\n inferFrom:\n input.type === 'auto' ? [args[i]] : [conversion(input.type, args[i])],\n })\n }\n for (const props of paramDefs) paramVars.push(create('variable', props))\n const x = create('scope')\n const y = create('define', { id, layout }, x, ...args)\n scoped(x, () => fun(paramVars as Args) as any, y)\n return y\n }\n ret.getLayout = () => layout\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 { compute, fragment, vertex } from './build'\nimport { addToScope, assign, toVar } from './scope'\nimport { code, getConstant, isConversion, isFunction, isOperator, getId, isArrayAccess } from './utils'\nimport { is } from '../utils/helpers'\nimport type { Constants as C, Functions, NodeProps, NodeTypes, Operators, X, Y } from './types'\n\nconst toPrimitive = (x: Y, hint: string) => {\n if (hint === 'string') return code(x as any, null)\n}\n\nexport const create = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: Y[]) => {\n if (!props) props = {}\n if (args.length) props.children = args\n const listeners = new Set<(value: any) => void>()\n const get = (_: unknown, key: string | Symbol) => {\n if (key === 'type') return type\n if (key === 'props') return props\n if (key === '__nodeType') return undefined // Will be inferred by TypeScript\n if (key === 'toVar') return toVar.bind(null, x)\n if (key === 'isProxy') return true\n if (key === 'toString') return code.bind(null, x)\n if (key === 'fragment') return fragment.bind(null, x)\n if (key === 'compute') return compute.bind(null, x)\n if (key === 'vertex') return vertex.bind(null, x)\n if (key === Symbol.toPrimitive) return toPrimitive.bind(null, x)\n if (key === 'listeners') return listeners\n if (key === 'attribute') return (id = getId()) => attribute(x, id)\n if (key === 'instance') return (id = getId()) => instance(x, id)\n if (key === 'constant') return (id = getId()) => constant(x, id)\n if (key === 'uniform') return (id = getId()) => uniform(x, id)\n if (key === 'variable') return (id = getId()) => variable(id)\n if (key === 'builtin') return (id = getId()) => builtin(id)\n if (key === 'vertexStage') return (id = getId()) => vertexStage(x, id)\n if (key === 'element') return (arg: Y) => (type === 'storage' ? gather(x, arg) : element(x, arg))\n if (key === 'member') return (arg: Y) => member(x, arg)\n if (key === 'assign') return assign.bind(null, x, x.type === 'gather')\n if (key === 'select') return select.bind(null, x)\n if (isOperator(key)) {\n return key.endsWith('Assign')\n ? (...args: Y[]) => addToScope(operator(key, x, ...args))\n : (...args: Y[]) => operator(key, x, ...args)\n }\n if (isFunction(key)) return (...args: Y[]) => function_(key, x, ...args)\n if (isConversion(key)) return () => conversion(getConstant(key), x)\n if (is.str(key)) return isArrayAccess(key) ? element(x, key) : member(x, key)\n }\n const set = (_: unknown, key: string, arg: Y) => {\n if (key === 'value') listeners.forEach((fun) => fun(arg))\n if (is.str(key)) member(x, key).assign(arg)\n return true\n }\n const x = new Proxy({}, { get, set }) as unknown as X<T>\n return x\n}\n\n// headers with proper type inference\nexport const attribute = <T extends C>(x: Y<T>, id = getId()) => create<T>('attribute', { id }, x)\nexport const instance = <T extends C>(x: Y<T>, id = getId()) => create<T>('instance', { id }, x)\nexport const constant = <T extends C>(x: Y<T>, id = getId()) => create<T>('constant', { id }, x)\nexport const uniform = <T extends C>(x: Y<T>, id = getId()) => create<T>('uniform', { id }, x)\nexport const storage = <T extends C>(x: Y<T>, id = getId()) => create<T>('storage', { id }, x)\nexport const variable = <T extends C>(id = getId()) => create<T>('variable', { id })\nexport const builtin = <T extends C>(id = getId()) => create<T>('builtin', { id })\nexport const vertexStage = <T extends C>(x: X<T>, id = getId()) => {\n return create<T>('varying', { id, inferFrom: [x] }, x)\n}\n\n// Node shorthands with proper typing\nexport const member = <T extends C>(x: X, index: Y) => create<T>('member', null, x, index)\nexport const element = <T extends C>(x: X, index: Y) => create<T>('element', null, x, index)\nexport const gather = <T extends C>(x: X, index: Y) => create<T>('gather', null, x, index)\nexport const scatter = <T extends C>(x: X, index: Y) => create<T>('scatter', null, x, index)\nexport const select = <T extends C>(x: Y, y: Y, z: Y) => create<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE\nexport const operator = <T extends C>(key: Operators, ...x: Y[]) => create<T>('operator', null, key, ...x)\nexport const function_ = <T extends C>(key: Functions, ...x: Y[]) => create<T>('function', null, key, ...x)\nexport const conversion = <T extends C>(key: T, ...x: Y[]) => create<T>('conversion', null, key, ...x)\n","import { hex2rgb } from './utils'\nimport { builtin as b, conversion as c, function_ as f, uniform as u } from './create'\nimport { is } from '../utils/helpers'\nimport type { Constants as C, Float, X, Y } from './types'\nexport * from './build'\nexport * from './create'\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<'uvec3'>('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?: Y) => c('float', x)\nexport const int = (x?: Y) => c('int', x)\nexport const uint = (x?: Y) => c('uint', x)\nexport const bool = (x?: Y) => c('bool', x)\nexport const vec2 = (x?: Y, y?: Y) => c('vec2', x, y)\nexport const vec3 = (x?: Y, y?: Y, z?: Y) => c('vec3', x, y, z)\nexport const vec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('vec4', x, y, z, w)\nexport const mat2 = (...args: Y[]) => c('mat2', ...args)\nexport const mat3 = (...args: Y[]) => c('mat3', ...args)\nexport const mat4 = (...args: Y[]) => c('mat4', ...args)\nexport const ivec2 = (x?: Y, y?: Y) => c('ivec2', x, y)\nexport const ivec3 = (x?: Y, y?: Y, z?: Y) => c('ivec3', x, y, z)\nexport const ivec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('ivec4', x, y, z, w)\nexport const uvec2 = (x?: Y, y?: Y) => c('uvec2', x, y)\nexport const uvec3 = (x?: Y, y?: Y, z?: Y) => c('uvec3', x, y, z)\nexport const uvec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('uvec4', x, y, z, w)\nexport const bvec2 = (x?: Y, y?: Y) => c('bvec2', x, y)\nexport const bvec3 = (x?: Y, y?: Y, z?: Y) => c('bvec3', x, y, z)\nexport const bvec4 = (x?: Y, y?: Y, z?: Y, w?: Y) => c('bvec4', x, y, z, w)\nexport const texture2D = (x?: Y) => c('texture', x)\nexport const sampler2D = () => c('sampler2D')\nexport const color = (r?: Y, g?: Y, b?: Y) => {\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 _N\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 with WGSL-compliant type constraints and unified parameter types\nexport const determinant = <T extends 'mat2' | 'mat3' | 'mat4'>(x: X<T>) => f<'float'>('determinant', x)\nexport const distance = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(x: X<T>, y: number | X<U>) =>\n f<'float'>('distance', x, y)\nexport const dot = <T extends 'vec2' | 'vec3' | 'vec4' | 'ivec2' | 'ivec3' | 'ivec4', U extends C>(\n x: X<T>,\n y: number | X<U>\n) => f<T extends `ivec${string}` ? 'int' : 'float'>('dot', x, y)\nexport const length = <T extends 'vec2' | 'vec3' | 'vec4'>(x: X<T>) => f<'float'>('length', x)\nexport const lengthSq = (x: X) => f<'float'>('lengthSq', x)\nexport const luminance = (x: X) => f<'float'>('luminance', x)\n\n// 3. Always return vec3 with vec3 constraint and unified parameter types\nexport const cross = <U extends C = 'vec3'>(x: X<'vec3'>, y: number | X<U>) => 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 _N\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 'vec2' | 'vec3' | 'vec4'>(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 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 with unified parameter types\nexport const atan2 = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('atan2', x, y)\nexport const clamp = <T extends C, U extends C>(x: X<T>, min: number | X<U>, max: number | X<U>) =>\n f<T>('clamp', x, min, max)\nexport const max = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('max', x, y)\nexport const min = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('min', x, y)\nexport const mix = <T extends C, U extends C>(x: X<T>, y: number | X<U>, a: number | Float | X<U>) =>\n f<T>('mix', x, y, a)\nexport const pow = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => f<T>('pow', x, y)\nexport const reflect = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(I: X<T>, N: number | X<U>) =>\n f<T>('reflect', I, N)\nexport const refract = <T extends 'vec2' | 'vec3' | 'vec4', U extends C>(\n I: X<T>,\n N: number | X<U>,\n eta: number | Float\n) => f<T>('refract', I, N, eta)\n\n// 2. Functions where not first argument determines return type with unified parameter types\nexport const smoothstep = <T extends C, U extends C>(e0: number | X<U>, e1: number | X<U>, x: X<T>) =>\n f<T>('smoothstep', e0, e1, x)\nexport const step = <T extends C, U extends C>(edge: number | X<U>, x: X<T>) => f<T>('step', edge, x)\nexport const mod = <T extends C, U extends C>(x: X<T>, y: number | X<U>) => {\n return (x as any).sub((x as any).div(y).floor().mul(y)) as X<T>\n}\n"],"mappings":"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","names":["CONVERSIONS","TYPE_MAPPING","CONSTANTS","OPERATORS","OPERATOR_KEYS","COMPONENT_COUNT_TO_TYPE","BUILTIN_TYPES","COMPARISON_OPERATORS","LOGICAL_OPERATORS","OPERATOR_TYPE_RULES","WGSL_TO_GLSL_BUILTIN","FUNCTION_RETURN_TYPES","FUNCTIONS","isSameType","L","R","isValidCombination","left","right","_","validateOperatorTypes","op","getOperatorResultType","rule","is","a","isValidStride","stride","calcStride","arrayLength","count","getStride","error","ret","WGSL_VS","storageSize","particleCount","is","sqrt","size","x","y","z","yz","isSwizzle","key","is","isOperator","OPERATOR_KEYS","isFunction","FUNCTIONS","isConversion","CONVERSIONS","isX","x","isConstants","type","CONSTANTS","hex2rgb","hex","r","g","b","count","getId","getBluiltin","c","id","storageSize","ret","WGSL_TO_GLSL_BUILTIN","getConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getConstant","conversionKey","index","initNodeContext","isArrayAccess","addDependency","getEventFun","value","safeEventCall","fun","args","setupEvent","target","child","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","validateOperatorTypes","getOperatorResultType","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferFromCount","count","ret","inferFromArray","arr","c","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","stride","getStride","isSwizzle","isX","structType","fields","parseArray","children","c","x","is","code","parseGather","y","target","parseSwizzle","valueType","infer","indexVar","size","storageSize","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","parseLoop","conditionType","bodyCode","conditionCode","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","type","props","id","children","fields","initialValues","x","y","z","w","parseGather","storageNode","indexNode","parseScatter","getConversions","mod","getOperator","parseTexture","child","parseLoop","parseIf","parseSwitch","parseDeclare","parseDefine","parseStructHead","parseStruct","field","parseVaryingHead","infer","getBluiltin","setupEvent","parseAttribHead","head","varType","parseUniformHead","parseStorageHead","parseConstantHead","GLSL_FRAGMENT_HEAD","topological","headers","dependencies","sorted","visited","visiting","visit","id","deps","dep","build","x","c","body","code","head","value","lines","ret","generateStruct","map","fragment","result","main","vertex","compute","scope","define","addToScope","x","props","toVar","id","getId","y","create","z","assign","isScatter","Return","Break","Continue","struct","fields","initialValues","instanceId","scoped","fun","_scope","_define","Scope","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","layout","args","paramVars","paramDefs","i","input","_layout","toPrimitive","x","hint","code","create","type","props","args","listeners","get","_","key","toVar","fragment","compute","vertex","id","getId","attribute","instance","constant","uniform","variable","builtin","vertexStage","arg","gather","element","member","assign","select","isOperator","addToScope","operator","isFunction","function_","isConversion","conversion","getConstant","is","isArrayAccess","set","fun","storage","index","scatter","y","z","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","determinant","distance","dot","length","lengthSq","luminance","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","sign","sin","sinh","sqrt","tan","tanh","trunc","atan2","clamp","min","max","mix","a","pow","reflect","I","N","refract","eta","smoothstep","e0","e1","step","edge","mod"]}
|
package/dist/react.cjs
CHANGED
|
@@ -1,49 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
|
|
3
|
-
\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
4
|
-
${t}`)},ce=(e,t,r,o)=>{let n=e.createProgram(),s=Ae(e,t,e.FRAGMENT_SHADER,o.error),i=Ae(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}`)},Vt=(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},zt=(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},qt=(e,t,r)=>{r&&(e=Math.max(...r)+1);let o=t.length/e;return Math.floor(o)},Ie=(e,t,r,o,n)=>{let s=Vt(e,o),i=zt(e,n),p=qt(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)},le=(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)},Oe=(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)},Me=(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)},De=(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)},Be=(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 de=["toBool","toUint","toInt","toFloat","toBvec2","toIvec2","toUvec2","toVec2","toBvec3","toIvec3","toUvec3","toVec3","toBvec4","toIvec4","toUvec4","toVec4","toColor","toMat2","toMat3","toMat4"],xe={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"},me=Object.keys(xe),Te={not:"",add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},We=Object.keys(Te),ge={1:"float",2:"vec2",3:"vec3",4:"vec4",9:"mat3",16:"mat4"},ke={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"},Ve=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],ze=["and","or"],qe={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"},be={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"},Ye=[...Object.keys(be),"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 He=e=>x.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),je=e=>We.includes(e),Ke=e=>Ye.includes(e),Ze=e=>de.includes(e),Q=e=>!e||typeof e!="object"?!1:e.isProxy,ve=e=>x.str(e)?me.includes(e):!1,Qe=e=>{let t=(e>>16&255)/255,r=(e>>8&255)/255,o=(e&255)/255;return[t,r,o]},Yt=0,C=()=>`x${Yt++}`,Je=(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=qe[t];if(!r)throw new Error(`Error: unknown builtin variable ${t}`);return r},N=(e,t)=>x.str(e)?t?.isWebGL?e:xe[e]||e:"",et=e=>Te[e]||e,tt=e=>{let t=de.indexOf(e);return t!==-1?me[t]:"float"},he=(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),ye=(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]))},rt=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),nt=e=>x.num(e)||x.str(e)&&/^\d+$/.test(e),J=(e,t="",r)=>{e.code?.dependencies?.has(t)||e.code.dependencies.set(t,new Set),ve(r)||e.code.dependencies.get(t).add(r)};var Ht=e=>ke[e],jt=(e,t,r)=>Ve.includes(r)||ze.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,Kt=e=>x.bol(e)?"bool":x.str(e)?"texture":x.num(e)?"float":x.arr(e)?ge[e.length]:"float",Ee=e=>ge[e],ot=(e,t)=>{if(e.length===0)return"void";let[r]=e;return x.str(r)?r:X(r,t)},Zt=e=>be[e],Qt=(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 jt(X(u,t),X(d,t),a);if(r==="builtin")return Ht(n);if(r==="function")return Zt(a)||X(u,t);if(r==="define")return ve(p?.type)?p?.type:!i||i.length===0?"void":ot(i,t);if(r==="attribute"&&x.arr(a)&&t.gl?.count)return Ee(a.length/t.gl.count);if(r==="member"){if(He(u))return Ee(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?ot(i,t):X(a,t)},X=(e,t)=>{if(t||(t={}),!Q(e))return Kt(e);if(x.arr(e))return Ee(e.length);if(t.infers||(t.infers=new WeakMap),t.infers.has(e))return t.infers.get(e);let r=Qt(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(", "),st=(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()}`},it=(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}`)},at=(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})`},ut=(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},pt=(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},ft=(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)};`},ct=(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&&J(e,t,p),o.push(e.isWebGL?`${p} ${s};`:`${s}: ${N(p,e)},`)}let n=o.join(`
|
|
18
|
-
`);return`struct ${t} {
|
|
19
|
-
${n}
|
|
20
|
-
};`},lt=(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};`},dt=(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)J(e,o,g),u.push(`${g} ${l}`);J(e,o,h),T.push(`${h} ${o}(${u}) {`)}else{for(let[g,v]of a)u.push(`${g}: ${N(v,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
|
-
`)},xt=(e,t,r)=>e.isWebGL?`${r} ${t};`:`@location(${e.code?.vertVaryings?.size||0}) ${t}: ${N(r,e)}`,mt=(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}`},Tt=(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};`},gt=(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}>;`},bt=(e,t,r,o)=>e.isWebGL?`const ${r} ${t} = ${o};`:`const ${t}: ${N(r,e)} = ${o};`;var f=(e,t)=>{if(t||(t={}),rt(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?st(t,a,u,e):`${f(a,t)}[${f(u,t)}]`;if(r==="scatter"){let[l,g]=a.props.children??[];return t.isWebGL?it(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)} ${et(a)} ${f(d,t)})`;if(r==="function")return a==="negate"?`(-${f(u,t)})`:a==="oneMinus"?`(1.0-${f(u,t)})`:a==="texture"?at(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 ut(t,a,u,s);if(r==="switch")return pt(t,a,s);if(r==="declare")return ft(t,a,u);if(r==="define")return t.code?.headers.has(n)||t.code?.headers.set(n,dt(t,o,e)),`${n}(${w(s.slice(1),t)})`;if(r==="struct")return t.code?.headers.has(n)||t.code?.headers.set(n,ct(t,n,i)),lt(t,n,a.props.id,p);if(r==="varying"){if(t.code?.vertOutputs.has(n))return t.isWebGL?`${n}`:`out.${n}`;let l=xt(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 Je(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=he(t,n,!0);return ye(a,l),e.listeners.add(l),t.code?.vertInputs.set(n,mt(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=he(t,n,!1,l==="texture");ye(a,g),e.listeners.add(g),T=Tt(t,n,l)}return r==="storage"&&(T=gt(t,n,X(e,t))),r==="constant"&&(T=bt(t,n,X(e,t),f(a,t))),T?(t.code?.headers.set(n,T),n):f(a,t)};var U=null,D=null,I=e=>{if(!U||(U.props.children||(U.props.children=[]),U.props.children.push(e),e.type!=="return"||!D))return;let{props:t}=D;t.inferFrom||(t.inferFrom=[]),t.inferFrom.push(e)};function Xe(e,t){t||(t=C());let r=m("variable",{id:t,inferFrom:[e]}),o=m("declare",null,e,r);return I(o),r}var Ce=(e,t=!1,r)=>{let o=m(t?"scatter":"assign",null,e,r);return I(o),e},vt=e=>{let t=m("return",{inferFrom:[e]},e);return I(t),t},Jt=(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=D)=>{let[o,n]=[U,D];[U,D]=[e,r];let s=t();s&&vt(s),[U,D]=[o,n]},er=(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()},tr=(e,t)=>{let r=m("scope"),o=C();A(r,()=>t({i:m("variable",{id:o,inferFrom:[b("int",0)]})}));let n=m("loop",{id:o},e,r);return I(n),n},rr=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 nr(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:[b(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 or=(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 Xe.bind(null,i);if(a==="isProxy")return!0;if(a==="toString")return f.bind(null,i);if(a===Symbol.toPrimitive)return or.bind(null,i);if(a==="listeners")return o;if(a==="attribute")return(u=C())=>ht(i,u);if(a==="constant")return(u=C())=>yt(i,u);if(a==="uniform")return(u=C())=>B(i,u);if(a==="variable")return(u=C())=>Et(u);if(a==="builtin")return(u=C())=>_(u);if(a==="vertexStage")return(u=C())=>Xt(i,u);if(a==="element")return u=>e==="storage"?Ct(i,u):_e(i,u);if(a==="member")return u=>ee(i,u);if(a==="assign")return Ce.bind(null,i,i.type==="gather");if(je(a))return(...u)=>_t(a,i,...u);if(Ke(a))return(...u)=>c(a,i,...u);if(Ze(a))return()=>b(tt(a),i);if(x.str(a))return nt(a)?_e(i,a):ee(i,a)}},s=(p,a,u)=>(a==="value"&&o.forEach(d=>d(u)),x.str(a)&&ee(i,a).assign(u),!0),i=new Proxy({},{get:n,set:s});return i},ht=(e,t=C())=>m("attribute",{id:t},e),yt=(e,t=C())=>m("constant",{id:t},e),B=(e,t=C())=>m("uniform",{id:t},e),sr=(e,t=C())=>m("storage",{id:t},e),Et=(e=C())=>m("variable",{id:e}),_=(e=C())=>m("builtin",{id:e}),Xt=(e,t=C())=>m("varying",{id:t,inferFrom:[e]},e),ee=(e,t)=>m("member",null,e,t),_e=(e,t)=>m("element",null,e,t),Ct=(e,t)=>m("gather",null,e,t),ir=(e,t)=>m("scatter",null,e,t),ar=(e,t,r)=>m("ternary",null,e,t,r),_t=(e,...t)=>m("operator",null,e,...t),c=(e,...t)=>m("function",null,e,...t),b=(e,...t)=>m("conversion",null,e,...t);var ur=`
|
|
29
|
-
#version 300 es
|
|
30
|
-
precision mediump float;
|
|
31
|
-
out vec4 fragColor;
|
|
32
|
-
`.trim(),pr=(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},Pe=(e,t)=>{let r=f(e,t),o="";return t.isWebGL&&t.code?.dependencies?o=pr(t.code.headers,t.code.dependencies).map(([,s])=>s).join(`
|
|
33
|
-
`):o=Array.from(t.code?.headers?.values()||[]).join(`
|
|
34
|
-
`),[o,r]},te=(e,t)=>`struct ${e} {
|
|
35
|
-
${Array.from(t.values()).join(`,
|
|
36
|
-
`)}
|
|
37
|
-
}`,z=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="frag";let[r,o]=Pe(e,t),n=[];if(t.isWebGL){n.push(ur);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(te("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()},q=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="vert";let[r,o]=Pe(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(te("In",t.code.vertInputs)),t.code?.vertOutputs?.size&&n.push(te("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()},Y=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="compute";let[r,o]=Pe(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(te("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 re=_("position"),ne=_("vertex_index"),fr=_("instance_index"),cr=_("front_facing"),lr=_("frag_depth"),dr=_("sample_index"),xr=_("sample_mask"),mr=_("point_coord"),Tr=_("global_invocation_id"),gr=_("position"),br=_("positionWorld"),vr=_("positionView"),hr=_("normalLocal"),yr=_("normalWorld"),Er=_("normalView"),Xr=_("screenCoordinate"),Cr=_("screenUV"),H=e=>b("float",e),W=e=>b("int",e),_r=e=>b("uint",e),Pr=e=>b("bool",e),Ge=(e,t)=>b("vec2",e,t),$e=(e,t,r)=>b("vec3",e,t,r),oe=(e,t,r,o)=>b("vec4",e,t,r,o),$r=(...e)=>b("mat2",...e),Gr=(...e)=>b("mat3",...e),Lr=(...e)=>b("mat4",...e),Nr=(e,t)=>b("ivec2",e,t),Sr=(e,t,r)=>b("ivec3",e,t,r),Rr=(e,t,r,o)=>b("ivec4",e,t,r,o),wr=(e,t)=>b("uvec2",e,t),Fr=(e,t,r)=>b("uvec3",e,t,r),Ur=(e,t,r,o)=>b("uvec4",e,t,r,o),Ar=(e,t)=>b("bvec2",e,t),Ir=(e,t,r)=>b("bvec3",e,t,r),Or=(e,t,r,o)=>b("bvec4",e,t,r,o),Mr=e=>b("texture",e),Dr=()=>b("sampler2D"),Br=(e,t,r)=>x.num(e)&&x.und(t)&&x.und(r)?$e(...Qe(e)):$e(e,t,r),se=B(Ge(),"iResolution"),Wr=B(Ge(),"iMouse"),kr=B(H(),"iTime"),Vr=re.xy.div(se),zr=e=>c("all",e),qr=e=>c("any",e),Yr=e=>c("length",e),Hr=e=>c("lengthSq",e),jr=(e,t)=>c("distance",e,t),Kr=(e,t)=>c("dot",e,t),Zr=(e,t)=>c("cross",e,t),Qr=(e,t,r)=>c("cubeTexture",e,t,r),Jr=(e,t,r)=>c("texture",e,t,r),en=(e,t,r)=>c("texelFetch",e,t,r),tn=(e,t,r)=>c("textureLod",e,t,r),rn=e=>c("abs",e),nn=e=>c("acos",e),on=e=>c("acosh",e),sn=e=>c("asin",e),an=e=>c("asinh",e),un=e=>c("atan",e),pn=e=>c("atanh",e),fn=e=>c("ceil",e),cn=e=>c("cos",e),ln=e=>c("cosh",e),dn=e=>c("dFdx",e),xn=e=>c("dFdy",e),mn=e=>c("degrees",e),Tn=e=>c("exp",e),gn=e=>c("exp2",e),bn=e=>c("floor",e),Le=e=>c("fract",e),vn=e=>c("fwidth",e),hn=e=>c("inverseSqrt",e),yn=e=>c("log",e),En=e=>c("log2",e),Xn=e=>c("negate",e),Cn=e=>c("normalize",e),_n=e=>c("oneMinus",e),Pn=e=>c("radians",e),$n=e=>c("reciprocal",e),Gn=e=>c("round",e),Ln=e=>c("saturate",e),Nn=e=>c("sign",e),Sn=e=>c("sin",e),Rn=e=>c("sinh",e),wn=e=>c("sqrt",e),Fn=e=>c("tan",e),Un=e=>c("tanh",e),An=e=>c("trunc",e),In=(e,t)=>c("atan2",e,t),On=(e,t,r)=>c("clamp",e,t,r),Mn=(e,t)=>c("max",e,t),Dn=(e,t)=>c("min",e,t),Bn=(e,t,r)=>c("mix",e,t,r),Wn=(e,t)=>c("pow",e,t),kn=(e,t)=>c("reflect",e,t),Vn=(e,t,r)=>c("refract",e,t,r),zn=(e,t,r)=>c("smoothstep",e,t,r),qn=(e,t)=>c("step",e,t),Yn=(e,t)=>e.sub(e.div(t).toFloat().floor().mul(t));var Hn=`
|
|
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(),jn=(e,t)=>{if(!e.cs)return null;t.getExtension("EXT_color_buffer_float");let r=0,o=0,n=(0,O.nested)(()=>r++),s={isWebGL:!0,gl:e,units:n},i=ce(t,Y(e.cs,s),Hn,e),p=Math.ceil(Math.sqrt(e.particles)),a=(0,O.nested)(g=>t.getUniformLocation(i,g)),u=(0,O.nested)(g=>{let v=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:v,loc:a(g),unit:n(g)}});return{render:()=>{t.useProgram(i);let g=u.map.values().map(({ping:v,pong:P,loc:S,unit:F},k)=>{let[K,ue]=o%2?[v,P]:[P,v];return Be(t,K,ue,S,F,k)});t.drawBuffers(g),t.drawArrays(t.TRIANGLES,0,3),t.bindFramebuffer(t.FRAMEBUFFER,null),o++},clean:()=>{t.deleteProgram(i),De(t,u.map.values())},_uniform:(g,v)=>{t.useProgram(i),le(t,a(g),v)},_storage:(g,v)=>{let{ping:P,pong:S,unit:F,array:k}=u(g);Me(t,v,p,P,S,F,k)},storages:u}},Ne=async e=>{let t={isWebGL:!0,gl:e},r=e.el.getContext("webgl2"),o=jn(e,r),n=ce(r,z(e.fs,t),q(e.vs,t),e);r.useProgram(n);let s=0,i=(0,O.nested)(()=>s++),p=(0,O.nested)(v=>r.getAttribLocation(n,v)),a=(0,O.nested)(v=>r.getUniformLocation(n,v)),u=(v="",P,S)=>{let F=p(v,!0);Ie(r,F,e.count,P,S)},d=(v,P)=>{r.useProgram(n),le(r,a(v),P),o?._uniform(v,P)},h=(v,P)=>{r.useProgram(n),Z(e,P,S=>{Oe(r,S,a(v),i(v))})},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}};var j=require("reev");var Pt=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}},$t=()=>{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}}}},Kn=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",Gt=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:Kn(s)}]};return{vertexBuffers:t,bufferLayouts:r}},Lt=(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},Nt=(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"}}),St=(e,t,r)=>e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:r}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})}),Zn=e=>e==="uniform"?72:e==="attrib"?40:140,ie=(e,t,r)=>{Ue(t)||(t=new Float32Array(t));let o=Zn(r),n=r==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:n,usage:o});return{array:t,buffer:s}},Rt=(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"}}),wt=(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}},Ft=(e,t,r)=>e.createTexture({size:[t,r],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT});var Qn=32,Jn=(e,t,r)=>{let o=u=>{},n=(0,j.nested)((u,d)=>{let{array:h,buffer:T}=ie(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=St(t,d,h);o=l=>{l.setPipeline(T),u.forEach((v,P)=>l.setBindGroup(P,v));let g=Math.ceil(e.particles/Qn);l.dispatchWorkgroups(g,1,1),l.end()}},render:u=>{o(u)},clean:()=>{for(let{buffer:u}of n.map.values())u.destroy()}}},Se=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:o}=await Pt(t,e.error),n=$t(),s=Jn(e,r,n),i,p,a,u=y=>{},d=!0,h,T=(0,j.nested)((y,E)=>{d=!0;let $=E.length/e.count,{location:G}=n.attrib(),{array:R,buffer:L}=ie(r,E,"attrib");return{array:R,buffer:L,location:G,stride:$}}),l=(0,j.nested)((y,E)=>{d=!0;let{binding:$,group:G}=n.uniform(),{array:R,buffer:L}=ie(r,E,"uniform");return{array:R,buffer:L,binding:$,group:G}}),g=(0,j.nested)((y,E=0,$=0)=>{d=!0;let{binding:G,group:R}=n.texture(),{texture:L,sampler:V}=wt(r,E,$);return{texture:L,sampler:V,binding:G,group:R,view:L.createView()}}),v=(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}=Gt(T.map.values()),{bindGroups:$,bindGroupLayouts:G}=Lt(r,l.map.values(),g.map.values(),s.storages.map.values()),R=Nt(r,o,E,G,a,i);u=L=>{L.setPipeline(R),$.forEach((V,pe)=>L.setBindGroup(pe,V)),y.forEach((V,pe)=>L.setVertexBuffer(pe,V)),L.draw(e.count,1,0,0),L.end()},e.cs&&s.update($,G,p)},k=()=>{if(!i||!a){let E={isWebGL:!1,gl:e};i=z(e.fs,E),a=q(e.vs,E),p=Y(e.cs,E)}if(e.loading)return;d&&F(),d=!1;let y=r.createCommandEncoder();e.cs&&s.render(y.beginComputePass()),u(y.beginRenderPass(Rt(t,h))),r.queue.submit([y.finish()])},K=()=>{let y=e.el;h?.destroy(),h=Ft(r,y.width,y.height)},ue=()=>{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 K(),{webgpu:{device:r,uniforms:l,textures:g,attribs:T,storages:s.storages},render:k,resize:K,clean:ue,_attribute:v,_uniform:P,_texture:S,_storage:s._storage}};var we=e=>x.obj(e)?"isGL"in e:!1,Ut=()=>typeof window>"u",At=()=>Ut()?!1:"gpu"in navigator,Re=performance.now(),eo=()=>oe(Le(re.xy.div(se)),0,1),to=()=>oe(H(W(ne).mod(W(2))).mul(4).sub(1),H(W(ne).div(W(2))).mul(4).sub(1),0,1),Fe=e=>{let t=(0,M.event)({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=(0,ae.createQueue)(),t.frame=(0,ae.createFrame)(),t.attribute=(0,M.durable)((r,o,n)=>t.queue(()=>t._attribute?.(r,o,n)),t),t.storage=(0,M.durable)((r,o)=>t.queue(()=>t._storage?.(r,o)),t),t.uniform=(0,M.durable)((r,o)=>t.queue(()=>t._uniform?.(r,o)),t),t.texture=(0,M.durable)((r,o)=>t.queue(()=>t._texture?.(r,o)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:Re}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex||to(),t.fs=t.fs||t.frag||t.fragment||eo(),t.cs=t.cs||t.comp||t.compute,At()||(t.isWebGL=!0),t.isWebGL?t(await Ne(t)):t(await Se(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",()=>{Re=performance.now()/1e3,t.uniform("iTime",Re)}),t(e)};var ro=(e={})=>(0,It.useState)(()=>{let t=we(e)?e:Fe(e);return t.ref=r=>{r?(t.el=r,t.mount()):t.clean()},t})[0];0&&(module.exports={Fn,If,Loop,Return,Switch,abs,acos,acosh,all,any,asin,asinh,assign,atan,atan2,atanh,attribute,bool,builtin,bvec2,bvec3,bvec4,ceil,clamp,color,compute,constant,conversion,cos,cosh,createGL,cross,cubeTexture,dFdx,dFdy,degrees,distance,dot,element,exp,exp2,float,floor,fract,fragDepth,fragment,frontFacing,function_,fwidth,gather,iMouse,iResolution,iTime,id,instanceIndex,int,inverseSqrt,isGL,isServer,isWebGPUSupported,ivec2,ivec3,ivec4,length,lengthSq,log,log2,mat2,mat3,mat4,max,member,min,mix,mod,negate,node,normalLocal,normalView,normalWorld,normalize,oneMinus,operator,pointCoord,position,positionLocal,positionView,positionWorld,pow,radians,reciprocal,reflect,refract,round,sampleIndex,sampleMask,sampler2D,saturate,scatter,screenCoordinate,screenUV,select,sign,sin,sinh,smoothstep,sqrt,step,storage,struct,tan,tanh,texelFetch,texture,texture2D,textureLod,toVar,trunc,uint,uniform,useGL,uv,uvec2,uvec3,uvec4,variable,vec2,vec3,vec4,vertex,vertexIndex,vertexStage,webgl,webgpu});
|
|
1
|
+
"use strict";var f=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var c=(t,e)=>{for(var r in e)f(t,r,{get:e[r],enumerable:!0})},l=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of L(e))!G.call(t,n)&&n!==r&&f(t,n,{get:()=>e[n],enumerable:!(i=u(e,n))||i.enumerable});return t},m=(t,e,r)=>(l(t,e,"default"),r&&l(r,e,"default"));var p=t=>l(f({},"__esModule",{value:!0}),t);var o={};c(o,{useGL:()=>x});module.exports=p(o);var s=require("react"),a=require("./index.cjs");m(o,require("./index.cjs"),module.exports);var x=(t={})=>(0,s.useState)(()=>{let e=(0,a.isGL)(t)?t:(0,a.createGL)(t);return e.ref=r=>{r?(e.el=r,e.mount()):e.clean()},e})[0];0&&(module.exports={useGL,...require("./index.cjs")});
|
|
49
2
|
//# sourceMappingURL=react.cjs.map
|