glre 0.37.0 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addons.cjs +2 -0
- package/dist/addons.cjs.map +1 -0
- package/dist/addons.d.ts +457 -0
- package/dist/addons.js +2 -0
- package/dist/addons.js.map +1 -0
- package/dist/index.cjs +31 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +170 -1791
- package/dist/index.js +31 -40
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +1 -45
- package/dist/native.cjs.map +1 -1
- package/dist/native.d.ts +511 -11
- package/dist/native.js +1 -45
- package/dist/native.js.map +1 -1
- package/dist/node.cjs +40 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.ts +614 -0
- package/dist/node.js +40 -0
- package/dist/node.js.map +1 -0
- package/dist/react.cjs +1 -45
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.ts +506 -4
- package/dist/react.js +1 -45
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +1 -45
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.ts +506 -4
- package/dist/solid.js +1 -45
- package/dist/solid.js.map +1 -1
- package/package.json +56 -3
- package/src/addons/index.ts +6 -0
- package/src/index.ts +6 -22
- package/src/node/{core.ts → build.ts} +3 -7
- package/src/node/create.ts +73 -0
- package/src/node/index.ts +63 -47
- package/src/node/scope.ts +65 -50
- package/src/node/types.ts +222 -164
- package/src/node/utils/const.ts +64 -3
- package/src/node/utils/index.ts +8 -5
- package/src/node/utils/infer.ts +23 -35
- package/src/node/utils/parse.ts +15 -18
- package/src/node/utils/utils.ts +13 -12
- package/src/types.ts +5 -7
- package/src/utils/pipeline.ts +3 -3
- package/src/utils/program.ts +7 -2
- package/src/{webgl.ts → utils/webgl.ts} +24 -14
- package/src/{webgpu.ts → utils/webgpu.ts} +28 -7
- package/src/node/node.ts +0 -64
package/dist/node.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var U=["toBool","toUint","toInt","toFloat","toBvec2","toIvec2","toUvec2","toVec2","toBvec3","toIvec3","toUvec3","toVec3","toBvec4","toIvec4","toUvec4","toVec4","toColor","toMat2","toMat3","toMat4"],L={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"},P=Object.keys(L),A={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(A),G={1:"float",2:"vec2",3:"vec3",4:"vec4",9:"mat3",16:"mat4"},B={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"},H=["equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual"],K=["and","or"],Z=[["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"]],J={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"},M={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"},Q=[...Object.keys(M),"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"],E=(e,t)=>e===t,Pe=(e,t)=>Z.some(([n,r,o])=>n===e&&r===t||n===t&&r===e),ee=(e,t,n)=>H.includes(n)||K.includes(n)?E(e,t):E(e,t)?!0:Pe(e,t),te=(e,t,n)=>{if(H.includes(n)||K.includes(n))return"bool";if(E(e,t))return e;let r=Z.find(([o,a,i])=>o===e&&a===t||o===t&&a===e);return r?r[2]:e};var x={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)};var ne=e=>x.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),oe=e=>j.includes(e),re=e=>Q.includes(e),se=e=>U.includes(e),O=e=>!e||typeof e!="object"?!1:e.isProxy,W=e=>x.str(e)?P.includes(e):!1,ie=e=>{let t=(e>>16&255)/255,n=(e>>8&255)/255,r=(e&255)/255;return[t,n,r]},Ae=0,g=()=>`x${Ae++}`,ae=(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 n=J[t];if(!n)throw new Error(`Error: unknown builtin variable ${t}`);return n},b=(e,t)=>x.str(e)?t?.isWebGL?e:L[e]||e:"",V=e=>A[e]||e,ue=e=>{let t=U.indexOf(e);return t!==-1?P[t]:"float"},R=(e,t,n=!1,r=!1)=>e.isWebGL?n?o=>e.gl?.attribute?.(t,o):r?o=>e.gl?.texture?.(t,o):o=>e.gl?.uniform?.(t,o):n?o=>e.gl?._attribute?.(t,o):r?o=>e.gl?._texture?.(t,o):o=>e.gl?._uniform?.(t,o),z=(e,t)=>{if(x.und(e))return;if(!O(e))return t(e);if(e.type!=="conversion")return;let n=e.props.children?.slice(1);x.und(n?.[0])||t(n.map(r=>r??n[0]))},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),pe=e=>x.num(e)||x.str(e)&&/^\d+$/.test(e),F=(e,t="",n)=>{e.code?.dependencies?.has(t)||e.code.dependencies.set(t,new Set),W(n)||e.code.dependencies.get(t).add(n)};var Ge=e=>B[e],Me=(e,t,n)=>(ee(e,t,n)||console.warn(`GLRE Type Warning: Invalid operator '${n}' between types '${e}' and '${t}'`),te(e,t,n)),We=e=>x.bol(e)?"bool":x.str(e)?"texture":x.num(e)?"float":x.arr(e)?G[e.length]:"float",k=e=>G[e],le=(e,t)=>{if(e.length===0)return"void";let[n]=e;return x.str(n)?n:v(n,t)},Ve=e=>M[e],Re=(e,t)=>{let{type:n,props:r}=e,{id:o,children:a=[],inferFrom:i,layout:f}=r,[s,u,m]=a;if(n==="conversion")return s;if(n==="operator")return Me(v(u,t),v(m,t),s);if(n==="builtin")return Ge(o);if(n==="function")return Ve(s)||v(u,t);if(n==="define")return W(f?.type)?f?.type:!i||i.length===0?"void":le(i,t);if(n==="attribute"&&x.arr(s)&&t.gl?.count)return k(s.length/t.gl.count);if(n==="member"){if(ne(u))return k(u.length);if(O(s)){let Y=v(s,t),C=t.code?.structStructFields?.get(Y);if(C&&C[u])return v(C[u],t)}return"float"}return i?le(i,t):s?v(s,t):"void"},v=(e,t)=>{if(t||(t={}),!O(e))return We(e);if(x.arr(e))return k(e.length);if(t.infers||(t.infers=new WeakMap),t.infers.has(e))return t.infers.get(e);let n=Re(e,t);return t.infers.set(e,n),n};var X=(e,t)=>e.filter(n=>!x.und(n)&&!x.nul(n)).map(n=>c(n,t)).join(", "),fe=(e,t,n,r)=>{let o=()=>{let u=v(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}`)},a=c(n,e),i=Math.floor(Math.sqrt(e.gl?.particles||1024)),f=`int(${a}) % ${i}`,s=`int(${a}) / ${i}`;return`texelFetch(${c(t,e)}, ivec2(${f}, ${s}), 0)${o()}`},de=(e,t,n)=>{let r=c(t,e),o=c(n,e),a=v(n,e);if(a==="float")return`_${r} = vec4(${o}, 0.0, 0.0, 1.0);`;if(a==="vec2")return`_${r} = vec4(${o}, 0.0, 1.0);`;if(a==="vec3")return`_${r} = vec4(${o}, 1.0);`;if(a==="vec4")return`_${r} = ${o};`;throw new Error(`Unsupported storage scatter type: ${a}`)},xe=(e,t,n,r)=>{if(e.isWebGL)return`texture(${X(r?[t,n,r]:[t,n],e)})`;let o=c(t,e),a=[o,o+"Sampler",c(n,e)];return r?(a.push(c(r,e)),`textureSampleLevel(${a})`):`textureSample(${a})`},Te=(e,t,n,r)=>{let o=`if (${c(t,e)}) {
|
|
2
|
+
${c(n,e)}
|
|
3
|
+
}`;for(let a=2;a<r.length;a+=2){let i=a>=r.length-1;o+=i?` else {
|
|
4
|
+
${c(r[a],e)}
|
|
5
|
+
}`:` else if (${c(r[a],e)}) {
|
|
6
|
+
${c(r[a+1],e)}
|
|
7
|
+
}`}return o},me=(e,t,n)=>{let r=`switch (${c(t,e)}) {
|
|
8
|
+
`;for(let o=1;o<n.length;o+=2)o>=n.length-1&&n.length%2===0?r+=`default:
|
|
9
|
+
${c(n[o],e)}
|
|
10
|
+
break;
|
|
11
|
+
`:o+1<n.length&&(r+=`case ${c(n[o],e)}:
|
|
12
|
+
${c(n[o+1],e)}
|
|
13
|
+
break;
|
|
14
|
+
`);return r+="}",r},ve=(e,t,n)=>{let r=v(t,e),o=n?.props?.id;if(e.isWebGL)return`${r} ${o} = ${c(t,e)};`;let a=b(r);return`var ${o}: ${a} = ${c(t,e)};`},ge=(e,t,n={})=>{e.code?.structStructFields?.set(t,n);let r=[];for(let a in n){let i=n[a],f=v(i,e);e.isWebGL&&F(e,t,f),r.push(e.isWebGL?`${f} ${a};`:`${a}: ${b(f,e)},`)}let o=r.join(`
|
|
15
|
+
`);return`struct ${t} {
|
|
16
|
+
${o}
|
|
17
|
+
};`},he=(e,t,n="",r)=>{let o=e.code?.structStructFields?.get(t)||{};if(e.isWebGL)if(r){let a=[];for(let i in o)a.push(r[i]);return`${t} ${n} = ${t}(${X(a,e)});`}else return`${t} ${n};`;else if(r){let a=[];for(let i in o)a.push(r[i]);return`var ${n}: ${t} = ${t}(${X(a,e)});`}else return`var ${n}: ${t};`},Ce=(e,t,n)=>{let{id:r,children:o=[],layout:a}=t,[i,...f]=o,s=[],u=[];if(a?.inputs)for(let d of a.inputs)s.push([d.name,d.type]);else for(let d=0;d<f.length;d++)s.push([`p${d}`,v(f[d],e)]);let m=c(i,e),Y=v(n,e),C=[];if(e?.isWebGL){for(let[d,y]of s)F(e,r,y),u.push(`${y} ${d}`);F(e,r,Y),C.push(`${Y} ${r}(${u}) {`)}else{for(let[y,Le]of s)u.push(`${y}: ${b(Le,e)}`);Y==="void"?C.push(`fn ${r}(${u}) {`):C.push(`fn ${r}(${u}) -> ${b(Y,e)} {`)}return m&&C.push(m),C.push("}"),C.join(`
|
|
18
|
+
`)},be=(e,t,n)=>e.isWebGL?`${n} ${t};`:`@location(${e.code?.vertVaryings?.size||0}) ${t}: ${b(n,e)}`,$e=(e,t,n)=>{if(e.isWebGL)return`${n} ${t};`;let{location:r=0}=e.gl?.webgpu?.attribs.map.get(t)||{},o=b(n,e);return`@location(${r}) ${t}: ${o}`},ye=(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:s=0}=e.gl?.webgpu?.textures.map.get(t)||{};return`@group(${f}) @binding(${s}) var ${t}Sampler: sampler;
|
|
19
|
+
@group(${f}) @binding(${s+1}) var ${t}: texture_2d<f32>;`}let{group:o=0,binding:a=0}=e.gl?.webgpu?.uniforms.map.get(t)||{},i=b(n,e);return`@group(${o}) @binding(${a}) var<uniform> ${t}: ${i};`},Ye=(e,t,n)=>{if(e.isWebGL){let i=`uniform sampler2D ${t};`;if(e.label!=="compute")return i;let f=e.units?.(t);return`${i}
|
|
20
|
+
layout(location = ${f}) out vec4 _${t};`}let{group:r=0,binding:o=0}=e.gl?.webgpu?.storages.map.get(t)||{},a=b(n,e);return`@group(${r}) @binding(${o}) var<storage, read_write> ${t}: array<${a}>;`},Xe=(e,t,n,r)=>e.isWebGL?`const ${n} ${t} = ${r};`:`const ${t}: ${b(n,e)} = ${r};`;var c=(e,t)=>{if(t||(t={}),ce(t),x.arr(e))return X(e,t);if(x.str(e))return e;if(x.num(e)){let d=`${e}`;return d.includes(".")?d:d+".0"}if(x.bol(e))return e?"true":"false";if(!e)return"";let{type:n,props:r={}}=e,{id:o="i",children:a=[],fields:i,initialValues:f}=r,[s,u,m,Y]=a;if(n==="variable")return o;if(n==="member")return`${c(s,t)}.${c(u,t)}`;if(n==="element")return`${c(s,t)}[${c(u,t)}]`;if(n==="gather")return t.isWebGL?fe(t,s,u,e):`${c(s,t)}[${c(u,t)}]`;if(n==="scatter"){let[d,y]=s.props.children??[];return t.isWebGL?de(t,d,u):`${c(d,t)}[${c(y,t)}] = ${c(u,t)};`}if(n==="ternary")return t.isWebGL?`(${c(m,t)} ? ${c(s,t)} : ${c(u,t)})`:`select(${c(s,t)}, ${c(u,t)}, ${c(m,t)})`;if(n==="conversion")return`${b(s,t)}(${X(a.slice(1),t)})`;if(n==="operator")return s==="not"||s==="bitNot"?`!${c(u,t)}`:s.endsWith("Assign")?`${c(u,t)} ${V(s)} ${c(m,t)};`:`(${c(u,t)} ${V(s)} ${c(m,t)})`;if(n==="function")return s==="negate"?`(-${c(u,t)})`:s==="oneMinus"?`(1.0-${c(u,t)})`:s==="texture"?xe(t,u,m,Y):s==="atan2"&&t.isWebGL?`atan(${c(u,t)}, ${c(m,t)})`:`${s}(${X(a.slice(1),t)})`;if(n==="scope")return a.map(d=>c(d,t)).join(`
|
|
21
|
+
`);if(n==="assign")return`${c(s,t)} = ${c(u,t)};`;if(n==="return")return`return ${c(s,t)};`;if(n==="break")return"break;";if(n==="continue")return"continue;";if(n==="loop")return t.isWebGL?`for (int ${o} = 0; ${o} < ${c(s,t)}; ${o} += 1) {
|
|
22
|
+
${c(u,t)}
|
|
23
|
+
}`:`for (var ${o}: i32 = 0; ${o} < ${c(s,t)}; ${o}++) {
|
|
24
|
+
${c(u,t)}
|
|
25
|
+
}`;if(n==="if")return Te(t,s,u,a);if(n==="switch")return me(t,s,a);if(n==="declare")return ve(t,s,u);if(n==="define")return t.code?.headers.has(o)||t.code?.headers.set(o,Ce(t,r,e)),`${o}(${X(a.slice(1),t)})`;if(n==="struct")return t.code?.headers.has(o)||t.code?.headers.set(o,ge(t,o,i)),he(t,o,s.props.id,f);if(n==="varying"){if(t.code?.vertOutputs.has(o))return t.isWebGL?`${o}`:`out.${o}`;let d=be(t,o,v(e,t));return t.code?.fragInputs.set(o,d),t.code?.vertOutputs.set(o,d),t.code?.vertVaryings.set(o,c(s,t)),t.isWebGL?`${o}`:`out.${o}`}if(n==="builtin"){if(t.isWebGL)return ae(t,o);if(o==="position")return"out.position";let d=`@builtin(${o}) ${o}: ${b(v(e,t),t)}`;return t.label==="compute"?t.code?.computeInputs.set(o,d):t.label==="frag"?t.code?.fragInputs.set(o,d):t.label==="vert"&&t.code?.vertInputs.set(o,d),`in.${o}`}if(n==="attribute"){let d=R(t,o,!0);return z(s,d),e.listeners.add(d),t.code?.vertInputs.set(o,$e(t,o,v(e,t))),t.isWebGL?`${o}`:`in.${o}`}if(t.code?.headers.has(o))return o;let C="";if(n==="uniform"){let d=v(e,t),y=R(t,o,!1,d==="texture");z(s,y),e.listeners.add(y),C=ye(t,o,d)}return n==="storage"&&(C=Ye(t,o,v(e,t))),n==="constant"&&(C=Xe(t,o,v(e,t),c(s,t))),C?(t.code?.headers.set(o,C),o):c(s,t)};var ze=`
|
|
26
|
+
#version 300 es
|
|
27
|
+
precision mediump float;
|
|
28
|
+
out vec4 fragColor;
|
|
29
|
+
`.trim(),ke=(e,t)=>{let n=[],r=new Set,o=new Set,a=i=>{if(o.has(i)||r.has(i))return;o.add(i);let f=t.get(i)||new Set;for(let s of f)e.has(s)&&a(s);o.delete(i),r.add(i),e.has(i)&&n.push([i,e.get(i)])};for(let[i]of e)a(i);return n},D=(e,t)=>{let n=c(e,t),r="";return t.isWebGL&&t.code?.dependencies?r=ke(t.code.headers,t.code.dependencies).map(([,a])=>a).join(`
|
|
30
|
+
`):r=Array.from(t.code?.headers?.values()||[]).join(`
|
|
31
|
+
`),[r,n]},I=(e,t)=>`struct ${e} {
|
|
32
|
+
${Array.from(t.values()).join(`,
|
|
33
|
+
`)}
|
|
34
|
+
}`,_e=(e,t={})=>{t.code?.headers?.clear(),t.label="frag";let[n,r]=D(e,t),o=[];if(t.isWebGL){o.push(ze);for(let i of t.code?.fragInputs?.values()||[])o.push(`in ${i}`);o.push(n),o.push(`void main() {
|
|
35
|
+
fragColor = ${r};`)}else t.code?.fragInputs?.size&&o.push(I("Out",t.code.fragInputs)),o.push(n),o.push(`@fragment
|
|
36
|
+
fn main(out: Out) -> @location(0) vec4f {`),o.push(` return ${r};`);return o.push("}"),o.filter(Boolean).join(`
|
|
37
|
+
`).trim()},Se=(e,t={})=>{t.code?.headers?.clear(),t.label="vert";let[n,r]=D(e,t),o=[];if(t.isWebGL){o.push("#version 300 es");for(let i of t.code?.vertInputs?.values()||[])o.push(`in ${i}`);for(let i of t.code?.vertOutputs?.values()||[])o.push(`out ${i}`);o.push(n),o.push("void main() {"),o.push(` gl_Position = ${r};`);for(let[i,f]of t.code?.vertVaryings?.entries()||[])o.push(` ${i} = ${f};`)}else{t.code?.vertInputs?.size&&o.push(I("In",t.code.vertInputs)),t.code?.vertOutputs?.size&&o.push(I("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(` out.position = ${r};`);for(let[i,f]of t.code?.vertVaryings?.entries()||[])o.push(` out.${i} = ${f};`);o.push(" return out;")}return o.push("}"),o.filter(Boolean).join(`
|
|
38
|
+
`).trim()},Ne=(e,t={})=>{t.code?.headers?.clear(),t.label="compute";let[n,r]=D(e,t),o=[];return t.isWebGL?(o.push("#version 300 es"),o.push("precision mediump float;"),o.push(n),o.push("void main() {"),o.push(` ${r};`),o.push("}")):(t.code?.computeInputs?.size&&o.push(I("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("}")),o.filter(Boolean).join(`
|
|
39
|
+
`).trim()};var _=null,N=null,$=e=>{if(!_)return;if(_.props.children||(_.props.children=[]),_.props.children.push(e),e.type!=="return"||!N)return e;let{props:t}=N;return t.inferFrom||(t.inferFrom=[]),t.inferFrom.push(e),e};function we(e,t){t||(t=g());let n=l("variable",{id:t,inferFrom:[e]}),r=l("declare",null,e,n);return $(r),n}var Oe=(e,t=!1,n)=>{let r=l(t?"scatter":"assign",null,e,n);return $(r),e},De=e=>$(l("return",{inferFrom:[e]},e)),Xt=()=>$(l("break")),_t=()=>$(l("continue")),St=(e,t=g())=>(n={},r=g())=>{let o=l("variable",{id:r,inferFrom:[t]}),a=l("struct",{id:t,fields:e,initialValues:n},o);return $(a),o},S=(e,t,n=N)=>{let[r,o]=[_,N];[_,N]=[e,n];let a=t();a&&De(a),[_,N]=[r,o]},Nt=(e,t)=>{let n=l("scope");S(n,t);let r=l("if",null,e,n);$(r);let o=()=>({ElseIf:(a,i)=>{let f=l("scope");return S(f,i),r.props.children.push(a,f),o()},Else:a=>{let i=l("scope");S(i,a),r.props.children.push(i)}});return o()},wt=(e,t)=>{let n=l("scope"),r=g();S(n,()=>t({i:l("variable",{id:r,inferFrom:[T("int",0)]})}));let o=l("loop",{id:r},e,n);return $(o)},Ot=e=>{let t=l("switch",null,e);$(t);let n=()=>({Case:(...r)=>o=>{let a=l("scope");S(a,o);for(let i of r)t.props.children.push(i,a);return n()},Default:r=>{let o=l("scope");S(o,r),t.props.children.push(o)}});return n()};function Ft(e,t=g()){let n,r=(...o)=>{let a=n?.name||t,i=l("scope"),f=[],s=[];if(n?.inputs)for(let m of n.inputs)s.push({id:m.name,inferFrom:[T(m.type)]});else for(let m=0;m<o.length;m++)s.push({id:`p${m}`,inferFrom:[o[m]]});for(let m of s)f.push(l("variable",m));let u=l("define",{id:a,layout:n},i,...o);return S(i,()=>e(f),u),u};return r.setLayout=o=>(n=o,r),r}var qe=(e,t)=>{if(t==="string")return c(e,null)},l=(e,t,...n)=>{t||(t={}),n.length&&(t.children=n);let r=new Set,o=(f,s)=>{if(s==="type")return e;if(s==="props")return t;if(s!=="__nodeType"){if(s==="toVar")return we.bind(null,i);if(s==="isProxy")return!0;if(s==="toString")return c.bind(null,i);if(s==="fragment")return _e.bind(null,i);if(s==="compute")return Ne.bind(null,i);if(s==="vertex")return Se.bind(null,i);if(s===Symbol.toPrimitive)return qe.bind(null,i);if(s==="listeners")return r;if(s==="attribute")return(u=g())=>je(i,u);if(s==="constant")return(u=g())=>Be(i,u);if(s==="uniform")return(u=g())=>w(i,u);if(s==="variable")return(u=g())=>He(u);if(s==="builtin")return(u=g())=>h(u);if(s==="vertexStage")return(u=g())=>Ke(i,u);if(s==="element")return u=>e==="storage"?Ze(i,u):Fe(i,u);if(s==="member")return u=>q(i,u);if(s==="assign")return Oe.bind(null,i,i.type==="gather");if(oe(s))return s.endsWith("Assign")?(...u)=>$(Ie(s,i,...u)):(...u)=>Ie(s,i,...u);if(re(s))return(...u)=>p(s,i,...u);if(se(s))return()=>T(ue(s),i);if(x.str(s))return pe(s)?Fe(i,s):q(i,s)}},a=(f,s,u)=>(s==="value"&&r.forEach(m=>m(u)),x.str(s)&&q(i,s).assign(u),!0),i=new Proxy({},{get:o,set:a});return i},je=(e,t=g())=>l("attribute",{id:t},e),Be=(e,t=g())=>l("constant",{id:t},e),w=(e,t=g())=>l("uniform",{id:t},e),At=(e,t=g())=>l("storage",{id:t},e),He=(e=g())=>l("variable",{id:e}),h=(e=g())=>l("builtin",{id:e}),Ke=(e,t=g())=>l("varying",{id:t,inferFrom:[e]},e),q=(e,t)=>l("member",null,e,t),Fe=(e,t)=>l("element",null,e,t),Ze=(e,t)=>l("gather",null,e,t),Gt=(e,t)=>l("scatter",null,e,t),Mt=(e,t,n)=>l("ternary",null,e,t,n),Ie=(e,...t)=>l("operator",null,e,...t),p=(e,...t)=>l("function",null,e,...t),T=(e,...t)=>l("conversion",null,e,...t);var Je=h("position"),kt=h("vertex_index"),Dt=h("instance_index"),qt=h("front_facing"),jt=h("frag_depth"),Bt=h("sample_index"),Ht=h("sample_mask"),Kt=h("point_coord"),Zt=h("global_invocation_id"),Jt=h("position"),Qt=h("positionWorld"),en=h("positionView"),tn=h("normalLocal"),nn=h("normalWorld"),on=h("normalView"),rn=h("screenCoordinate"),sn=h("screenUV"),Qe=e=>T("float",e),an=e=>T("int",e),un=e=>T("uint",e),cn=e=>T("bool",e),Ue=(e,t)=>T("vec2",e,t),Ee=(e,t,n)=>T("vec3",e,t,n),pn=(e,t,n,r)=>T("vec4",e,t,n,r),ln=(...e)=>T("mat2",...e),fn=(...e)=>T("mat3",...e),dn=(...e)=>T("mat4",...e),xn=(e,t)=>T("ivec2",e,t),Tn=(e,t,n)=>T("ivec3",e,t,n),mn=(e,t,n,r)=>T("ivec4",e,t,n,r),vn=(e,t)=>T("uvec2",e,t),gn=(e,t,n)=>T("uvec3",e,t,n),hn=(e,t,n,r)=>T("uvec4",e,t,n,r),Cn=(e,t)=>T("bvec2",e,t),bn=(e,t,n)=>T("bvec3",e,t,n),$n=(e,t,n,r)=>T("bvec4",e,t,n,r),yn=e=>T("texture",e),Yn=()=>T("sampler2D"),Xn=(e,t,n)=>x.num(e)&&x.und(t)&&x.und(n)?Ee(...ie(e)):Ee(e,t,n),et=w(Ue(),"iResolution"),_n=w(Ue(),"iMouse"),Sn=w(Qe(),"iTime"),Nn=Je.xy.div(et),wn=e=>p("all",e),On=e=>p("any",e),Fn=e=>p("determinant",e),In=(e,t)=>p("distance",e,t),En=(e,t)=>p("dot",e,t),Un=e=>p("length",e),Ln=e=>p("lengthSq",e),Pn=e=>p("luminance",e),An=(e,t)=>p("cross",e,t),Gn=(e,t,n)=>p("cubeTexture",e,t,n),Mn=(e,t,n)=>p("texture",e,t,n),Wn=(e,t,n)=>p("texelFetch",e,t,n),Vn=(e,t,n)=>p("textureLod",e,t,n),Rn=e=>p("abs",e),zn=e=>p("acos",e),kn=e=>p("acosh",e),Dn=e=>p("asin",e),qn=e=>p("asinh",e),jn=e=>p("atan",e),Bn=e=>p("atanh",e),Hn=e=>p("ceil",e),Kn=e=>p("cos",e),Zn=e=>p("cosh",e),Jn=e=>p("dFdx",e),Qn=e=>p("dFdy",e),eo=e=>p("degrees",e),to=e=>p("exp",e),no=e=>p("exp2",e),oo=e=>p("floor",e),ro=e=>p("fract",e),so=e=>p("fwidth",e),io=e=>p("inverseSqrt",e),ao=e=>p("log",e),uo=e=>p("log2",e),co=e=>p("negate",e),po=e=>p("normalize",e),lo=e=>p("oneMinus",e),fo=e=>p("radians",e),xo=e=>p("reciprocal",e),To=e=>p("round",e),mo=e=>p("saturate",e),vo=e=>p("sign",e),go=e=>p("sin",e),ho=e=>p("sinh",e),Co=e=>p("sqrt",e),bo=e=>p("tan",e),$o=e=>p("tanh",e),yo=e=>p("trunc",e),Yo=(e,t)=>p("atan2",e,t),Xo=(e,t,n)=>p("clamp",e,t,n),_o=(e,t)=>p("max",e,t),So=(e,t)=>p("min",e,t),No=(e,t,n)=>p("mix",e,t,n),wo=(e,t)=>p("pow",e,t),Oo=(e,t)=>p("reflect",e,t),Fo=(e,t,n)=>p("refract",e,t,n),Io=(e,t,n)=>p("smoothstep",e,t,n),Eo=(e,t)=>p("step",e,t),Uo=(e,t)=>e.sub(e.div(t).floor().mul(t));export{Xt as Break,_t as Continue,Ft as Fn,Nt as If,wt as Loop,De as Return,Ot as Switch,Rn as abs,zn as acos,kn as acosh,$ as addToScope,wn as all,On as any,Dn as asin,qn as asinh,Oe as assign,jn as atan,Yo as atan2,Bn as atanh,je as attribute,cn as bool,h as builtin,Cn as bvec2,bn as bvec3,$n as bvec4,Hn as ceil,Xo as clamp,Xn as color,Ne as compute,Be as constant,T as conversion,Kn as cos,Zn as cosh,l as create,An as cross,Gn as cubeTexture,Jn as dFdx,Qn as dFdy,eo as degrees,Fn as determinant,In as distance,En as dot,Fe as element,to as exp,no as exp2,Qe as float,oo as floor,ro as fract,jt as fragDepth,_e as fragment,qt as frontFacing,p as function_,so as fwidth,Ze as gather,_n as iMouse,et as iResolution,Sn as iTime,Zt as id,Dt as instanceIndex,an as int,io as inverseSqrt,xn as ivec2,Tn as ivec3,mn as ivec4,Un as length,Ln as lengthSq,ao as log,uo as log2,Pn as luminance,ln as mat2,fn as mat3,dn as mat4,_o as max,q as member,So as min,No as mix,Uo as mod,co as negate,tn as normalLocal,on as normalView,nn as normalWorld,po as normalize,lo as oneMinus,Ie as operator,Kt as pointCoord,Je as position,Jt as positionLocal,en as positionView,Qt as positionWorld,wo as pow,fo as radians,xo as reciprocal,Oo as reflect,Fo as refract,To as round,Bt as sampleIndex,Ht as sampleMask,Yn as sampler2D,mo as saturate,Gt as scatter,S as scoped,rn as screenCoordinate,sn as screenUV,Mt as select,vo as sign,go as sin,ho as sinh,Io as smoothstep,Co as sqrt,Eo as step,At as storage,St as struct,bo as tan,$o as tanh,Wn as texelFetch,Mn as texture,yn as texture2D,Vn as textureLod,we as toVar,yo as trunc,un as uint,w as uniform,Nn as uv,vn as uvec2,gn as uvec3,hn as uvec4,He as variable,Ue as vec2,Ee as vec3,pn as vec4,Se as vertex,kt as vertexIndex,Ke as vertexStage};
|
|
40
|
+
//# 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/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 'inverseSqrt',\n 'log',\n 'log2',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'radians',\n 'reciprocal',\n 'round',\n 'saturate',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n 'trunc',\n // 1. Functions where first argument determines return type\n 'atan2',\n 'clamp',\n 'max',\n 'min',\n 'mix',\n 'pow',\n 'reflect',\n 'refract',\n // 2. Functions where not first argument determines return type\n 'smoothstep',\n 'step',\n // @NOTE: mod is operator\n] as const\n\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","import {\n CONSTANTS,\n CONVERSIONS,\n FUNCTIONS,\n OPERATOR_KEYS,\n OPERATORS,\n TYPE_MAPPING,\n WGSL_TO_GLSL_BUILTIN,\n} from './const'\nimport { is } from '../../utils/helpers'\nimport type { Constants as C, Conversions, Functions, NodeContext, Operators, Swizzles, X, Y } from '../types'\n\nexport const isSwizzle = (key: unknown): key is Swizzles => {\n return is.str(key) && /^[xyzwrgbastpq]{1,4}$/.test(key)\n}\n\nexport const isOperator = (key: unknown): key is Operators => {\n return OPERATOR_KEYS.includes(key as Operators)\n}\n\nexport const isFunction = (key: unknown): key is Functions => {\n return FUNCTIONS.includes(key as Functions)\n}\n\nexport const isConversion = (key: unknown): key is Conversions => {\n return CONVERSIONS.includes(key as Conversions)\n}\n\nexport const 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 = Math.floor(Math.sqrt(c.gl?.particles || 1024))\n return `uvec3(uint(gl_FragCoord.y) * uint(${size}) + uint(gl_FragCoord.x), 0u, 0u)`\n }\n const ret = WGSL_TO_GLSL_BUILTIN[id as keyof typeof WGSL_TO_GLSL_BUILTIN]\n if (!ret) throw new Error(`Error: unknown builtin variable ${id}`)\n return ret\n}\n\nexport const getConversions = <T extends 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 getEventFun = (c: NodeContext, id: string, isAttribute = false, isTexture = false) => {\n if (c.isWebGL) {\n if (isAttribute) return (value: any) => c.gl?.attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?.texture?.(id, value)\n return (value: any) => c.gl?.uniform?.(id, value)\n }\n if (isAttribute) return (value: any) => c.gl?._attribute?.(id, value)\n if (isTexture) return (value: any) => c.gl?._texture?.(id, value)\n return (value: any) => c.gl?._uniform?.(id, value)\n}\n\nexport const safeEventCall = <T extends 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 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","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 } 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 'float' as T\n}\n\nconst inferFromCount = <T extends C>(count: number) => {\n return COMPONENT_COUNT_TO_TYPE[count as keyof typeof COMPONENT_COUNT_TO_TYPE] as T\n}\n\nconst inferFromArray = <T extends C>(arr: 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 new Error(`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) && c.gl?.count) return inferFromCount(x.length / c.gl.count)\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'\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 texSize = Math.floor(Math.sqrt(c.gl?.particles || 1024))\n const coordX = `int(${indexVar}) % ${texSize}`\n const coordY = `int(${indexVar}) / ${texSize}`\n return `texelFetch(${code(x, c)}, ivec2(${coordX}, ${coordY}), 0)${parseSwizzle()}`\n}\n\n// only for webgl\nexport const parseScatter = (c: NodeContext, storageNode: 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: string][] = []\n const params: string[] = []\n if (layout?.inputs)\n for (const input of layout.inputs) {\n argParams.push([input.name, input.type])\n }\n else\n for (let i = 0; i < args.length; i++) {\n argParams.push([`p${i}`, infer(args[i], c)])\n }\n const scopeCode = code(x, c) // build struct headers before inferring returnType\n const returnType = infer(target, c)\n const ret = []\n if (c?.isWebGL) {\n for (const [paramId, type] of argParams) {\n addDependency(c, id!, type)\n params.push(`${type} ${paramId}`)\n }\n addDependency(c, id!, returnType)\n ret.push(`${returnType} ${id}(${params}) {`)\n } else {\n for (const [paramId, type] of argParams) params.push(`${paramId}: ${getConversions(type, c)}`)\n const isVoid = returnType === 'void'\n if (isVoid) {\n ret.push(`fn ${id}(${params}) {`)\n } else ret.push(`fn ${id}(${params}) -> ${getConversions(returnType, c)} {`)\n }\n if (scopeCode) ret.push(scopeCode)\n ret.push('}')\n return ret.join('\\n')\n}\n\n/**\n * headers\n */\nexport const parseVaryingHead = (c: NodeContext, id: string, type: string) => {\n return c.isWebGL\n ? `${type} ${id};`\n : `@location(${c.code?.vertVaryings?.size || 0}) ${id}: ${getConversions(type, c)}`\n}\n\nexport const parseAttribHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) return `${type} ${id};`\n const { location = 0 } = c.gl?.webgpu?.attribs.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@location(${location}) ${id}: ${wgslType}`\n}\n\nexport const parseUniformHead = (c: NodeContext, id: string, type: Constants) => {\n const isTexture = type === 'sampler2D' || type === 'texture'\n if (c.isWebGL)\n return isTexture //\n ? `uniform sampler2D ${id};`\n : `uniform ${type} ${id};`\n if (isTexture) {\n const { group = 1, binding = 0 } = c.gl?.webgpu?.textures.map.get(id) || {}\n return (\n `@group(${group}) @binding(${binding}) var ${id}Sampler: sampler;\\n` +\n `@group(${group}) @binding(${binding + 1}) var ${id}: texture_2d<f32>;`\n )\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.uniforms.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<uniform> ${id}: ${wgslType};`\n}\n\nexport const parseStorageHead = (c: NodeContext, id: string, type: Constants) => {\n if (c.isWebGL) {\n const ret = `uniform sampler2D ${id};`\n if (c.label !== 'compute') return ret\n const location = c.units?.(id)\n return `${ret}\\nlayout(location = ${location}) out vec4 _${id};` // out texture buffer\n }\n const { group = 0, binding = 0 } = c.gl?.webgpu?.storages.map.get(id) || {}\n const wgslType = getConversions(type, c)\n return `@group(${group}) @binding(${binding}) var<storage, read_write> ${id}: array<${wgslType}>;`\n}\n\nexport const parseConstantHead = (c: NodeContext, id: string, type: Constants, value: string) => {\n return c.isWebGL ? `const ${type} ${id} = ${value};` : `const ${id}: ${getConversions(type, c)} = ${value};`\n}\n","import { infer } from './infer'\nimport {\n parseArray,\n parseAttribHead,\n parseConstantHead,\n parseDeclare,\n parseDefine,\n parseGather,\n parseIf,\n parseScatter,\n parseStorageHead,\n parseStruct,\n parseStructHead,\n parseSwitch,\n parseTexture,\n parseUniformHead,\n parseVaryingHead,\n} from './parse'\nimport { getBluiltin, getConversions, getEventFun, getOperator, initNodeContext, safeEventCall } from './utils'\nimport { is } from '../../utils/helpers'\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.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 === 'oneMinus') return `(1.0-${code(y, c)})`\n if (x === 'texture') return parseTexture(c, y, z, w)\n if (x === 'atan2' && c.isWebGL) return `atan(${code(y, c)}, ${code(z, c)})`\n return `${x}(${parseArray(children.slice(1), c)})`\n }\n /**\n * scopes\n */\n if (type === 'scope') return children.map((child: any) => code(child, c)).join('\\n')\n if (type === 'assign') return `${code(x, c)} = ${code(y, c)};`\n if (type === 'return') return `return ${code(x, c)};`\n if (type === 'break') return 'break;'\n if (type === 'continue') return 'continue;'\n if (type === 'loop')\n return c.isWebGL\n ? `for (int ${id} = 0; ${id} < ${code(x, c)}; ${id} += 1) {\\n${code(y, c)}\\n}`\n : `for (var ${id}: i32 = 0; ${id} < ${code(x, c)}; ${id}++) {\\n${code(y, c)}\\n}`\n if (type === 'if') return parseIf(c, x, y, children)\n if (type === 'switch') return parseSwitch(c, x, children)\n if (type === 'declare') return parseDeclare(c, x, y)\n if (type === 'define') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseDefine(c, props, target))\n return `${id}(${parseArray(children.slice(1), c)})`\n }\n if (type === 'struct') {\n if (!c.code?.headers.has(id)) c.code?.headers.set(id, parseStructHead(c, id, fields))\n return parseStruct(c, id, x.props.id, initialValues)\n }\n /**\n * headers\n */\n if (type === 'varying') {\n if (c.code?.vertOutputs.has(id)) return c.isWebGL ? `${id}` : `out.${id}`\n const field = parseVaryingHead(c, id, infer(target, c))\n c.code?.fragInputs.set(id, field)\n c.code?.vertOutputs.set(id, field)\n c.code?.vertVaryings.set(id, code(x, c))\n return c.isWebGL ? `${id}` : `out.${id}`\n }\n if (type === 'builtin') {\n if (c.isWebGL) return getBluiltin(c, id)\n if (id === 'position') return 'out.position'\n const field = `@builtin(${id}) ${id}: ${getConversions(infer(target, c), c)}`\n if (c.label === 'compute') c.code?.computeInputs.set(id, field)\n else if (c.label === 'frag') c.code?.fragInputs.set(id, field)\n else if (c.label === 'vert') c.code?.vertInputs.set(id, field)\n return `in.${id}`\n }\n if (type === 'attribute') {\n const fun = getEventFun(c, id, true)\n safeEventCall(x, fun)\n target.listeners.add(fun)\n c.code?.vertInputs.set(id, parseAttribHead(c, id, infer(target, c)))\n return c.isWebGL ? `${id}` : `in.${id}`\n }\n if (c.code?.headers.has(id)) return id // must last\n let head = ''\n if (type === 'uniform') {\n const varType = infer(target, c)\n const fun = getEventFun(c, id, false, varType === 'texture')\n safeEventCall(x, fun)\n target.listeners.add(fun)\n head = parseUniformHead(c, id, varType)\n }\n if (type === 'storage') head = parseStorageHead(c, id, infer(target, c))\n if (type === 'constant') head = parseConstantHead(c, id, infer(target, c), code(x, c))\n if (head) {\n c.code?.headers.set(id, head)\n return id\n }\n return code(x, c)\n}\n","import { 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 generateHead = (x: X, c: NodeContext) => {\n const body = code(x, c)\n let head = ''\n if (c.isWebGL && c.code?.dependencies) {\n const sorted = topological(c.code.headers, c.code.dependencies)\n head = sorted.map(([, value]) => value).join('\\n')\n } else head = Array.from(c.code?.headers?.values() || []).join('\\n')\n return [head, body]\n}\n\nconst generateStruct = (id: string, map: Map<string, string>) => {\n return `struct ${id} {\\n ${Array.from(map.values()).join(',\\n ')}\\n}`\n}\n\nexport const fragment = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'frag' // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push(GLSL_FRAGMENT_HEAD)\n for (const code of c.code?.fragInputs?.values() || []) ret.push(`in ${code}`)\n ret.push(head)\n ret.push(`void main() {\\n fragColor = ${body};`)\n } else {\n if (c.code?.fragInputs?.size) ret.push(generateStruct('Out', c.code.fragInputs))\n ret.push(head)\n ret.push(`@fragment\\nfn main(out: Out) -> @location(0) vec4f {`)\n ret.push(` return ${body};`)\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const vertex = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'vert' // for varying inputs or outputs\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push('#version 300 es')\n for (const code of c.code?.vertInputs?.values() || []) ret.push(`in ${code}`)\n for (const code of c.code?.vertOutputs?.values() || []) ret.push(`out ${code}`)\n ret.push(head)\n ret.push('void main() {')\n ret.push(` gl_Position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` ${id} = ${code};`)\n } else {\n if (c.code?.vertInputs?.size) ret.push(generateStruct('In', c.code.vertInputs))\n if (c.code?.vertOutputs?.size) ret.push(generateStruct('Out', c.code.vertOutputs))\n ret.push(head)\n ret.push('@vertex')\n ret.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)\n ret.push(' var out: Out;')\n ret.push(` out.position = ${body};`)\n for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` out.${id} = ${code};`)\n ret.push(' return out;')\n }\n ret.push('}')\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n\nexport const compute = (x: X, c: NodeContext = {}) => {\n c.code?.headers?.clear()\n c.label = 'compute'\n const [head, body] = generateHead(x, c)\n const ret = []\n if (c.isWebGL) {\n ret.push('#version 300 es')\n ret.push('precision mediump float;')\n ret.push(head)\n ret.push('void main() {')\n ret.push(` ${body};`)\n ret.push('}')\n } else {\n if (c.code?.computeInputs?.size) ret.push(generateStruct('In', c.code.computeInputs))\n ret.push(head)\n ret.push('@compute @workgroup_size(32)')\n ret.push(`fn main(${c.code?.computeInputs?.size ? 'in: In' : ''}) {`)\n ret.push(` ${body};`)\n ret.push('}')\n }\n const main = ret.filter(Boolean).join('\\n').trim()\n // console.log(`↓↓↓generated↓↓↓\\n${main}`)\n return main\n}\n","import { 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 If = (x: Y, fun: () => void) => {\n const y = create('scope')\n scoped(y, fun)\n const ifNode = create('if', null, x, y)\n addToScope(ifNode)\n const ret = () => ({\n ElseIf: (_x: X, _fun: () => void) => {\n const _y = create('scope')\n scoped(_y, _fun)\n ifNode.props.children!.push(_x, _y)\n return ret()\n },\n Else: (_fun: () => void) => {\n const _x = create('scope')\n scoped(_x, _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 y = create('scope')\n const id = getId()\n scoped(y, () => 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 = create('scope')\n scoped(y, fun)\n for (const _x of values) switchNode.props.children!.push(_x, y)\n return ret()\n }\n },\n Default: (fun: () => void) => {\n const scope = create('scope')\n scoped(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, defaultId = getId()) {\n let layout: FnLayout\n const ret = (...args: any[]) => {\n const id = layout?.name || defaultId\n const x = create('scope')\n const paramVars: X[] = []\n const paramDefs: NodeProps[] = []\n if (layout?.inputs) {\n for (const input of layout.inputs) {\n paramDefs.push({ id: input.name, inferFrom: [conversion(input.type)] })\n }\n } else {\n for (let i = 0; i < args.length; i++) {\n paramDefs.push({ id: `p${i}`, inferFrom: [args[i]] })\n }\n }\n for (const props of paramDefs) paramVars.push(create('variable', props))\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.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 === '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 (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 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<'vec3'>('global_invocation_id')\n\n// TSL Compatible Builtin Variables\nexport const positionLocal = b<'vec3'>('position')\nexport const positionWorld = b<'vec3'>('positionWorld')\nexport const positionView = b<'vec3'>('positionView')\nexport const normalLocal = b<'vec3'>('normalLocal')\nexport const normalWorld = b<'vec3'>('normalWorld')\nexport const normalView = b<'vec3'>('normalView')\nexport const screenCoordinate = b<'vec2'>('screenCoordinate')\nexport const screenUV = b<'vec2'>('screenUV')\n\n// Type constructors with proper type inference\nexport const float = (x?: 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 saturate = <T extends C>(x: X<T>) => f<T>('saturate', x)\nexport const sign = <T extends C>(x: X<T>) => f<T>('sign', x)\nexport const sin = <T extends C>(x: X<T>) => f<T>('sin', x)\nexport const sinh = <T extends C>(x: X<T>) => f<T>('sinh', x)\nexport const sqrt = <T extends C>(x: X<T>) => f<T>('sqrt', x)\nexport const tan = <T extends C>(x: X<T>) => f<T>('tan', x)\nexport const tanh = <T extends C>(x: X<T>) => f<T>('tanh', x)\nexport const trunc = <T extends C>(x: X<T>) => f<T>('trunc', x)\n\n// 1. Functions where first argument determines return type 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","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","ret","WGSL_TO_GLSL_BUILTIN","getConversions","TYPE_MAPPING","getOperator","op","OPERATORS","getConstant","conversionKey","index","getEventFun","isAttribute","isTexture","value","safeEventCall","fun","args","initNodeContext","isArrayAccess","addDependency","inferBuiltin","id","BUILTIN_TYPES","inferOperator","L","R","op","validateOperatorTypes","getOperatorResultType","inferPrimitiveType","x","is","COMPONENT_COUNT_TO_TYPE","inferFromCount","count","inferFromArray","arr","c","infer","inferFunction","FUNCTION_RETURN_TYPES","inferImpl","target","type","props","children","inferFrom","layout","y","z","isConstants","isSwizzle","isX","structType","fields","ret","parseArray","children","c","x","is","code","parseGather","y","target","parseSwizzle","valueType","infer","indexVar","texSize","coordX","coordY","parseScatter","storageNode","valueNode","storageId","valueCode","parseTexture","z","w","_y","args","parseIf","ret","i","isElse","parseSwitch","parseDeclare","type","varName","wgslType","getConversions","parseStructHead","id","fields","lines","key","fieldType","addDependency","parseStruct","instanceId","initialValues","ordered","parseDefine","props","layout","argParams","params","input","scopeCode","returnType","paramId","parseVaryingHead","parseAttribHead","location","parseUniformHead","isTexture","group","binding","parseStorageHead","parseConstantHead","value","code","target","c","initNodeContext","is","parseArray","ret","type","props","id","children","fields","initialValues","x","y","z","w","parseGather","storageNode","indexNode","parseScatter","getConversions","getOperator","parseTexture","child","parseIf","parseSwitch","parseDeclare","parseDefine","parseStructHead","parseStruct","field","parseVaryingHead","infer","getBluiltin","fun","getEventFun","safeEventCall","parseAttribHead","head","varType","parseUniformHead","parseStorageHead","parseConstantHead","GLSL_FRAGMENT_HEAD","topological","headers","dependencies","sorted","visited","visiting","visit","id","deps","dep","generateHead","x","c","body","code","head","value","generateStruct","map","fragment","ret","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","If","ifNode","ret","_x","_fun","_y","Loop","conversion","Switch","switchNode","values","Fn","defaultId","layout","args","paramVars","paramDefs","input","i","_layout","toPrimitive","x","hint","code","create","type","props","args","listeners","get","_","key","toVar","fragment","compute","vertex","id","getId","attribute","constant","uniform","variable","builtin","vertexStage","arg","gather","element","member","assign","isOperator","addToScope","operator","isFunction","function_","isConversion","conversion","getConstant","is","isArrayAccess","set","fun","storage","index","scatter","select","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","saturate","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,46 +1,2 @@
|
|
|
1
|
-
"use strict";var fe=Object.defineProperty;var Dt=Object.getOwnPropertyDescriptor;var Mt=Object.getOwnPropertyNames;var Bt=Object.prototype.hasOwnProperty;var Wt=(e,t)=>{for(var r in t)fe(e,r,{get:t[r],enumerable:!0})},kt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Mt(t))!Bt.call(e,o)&&o!==r&&fe(e,o,{get:()=>t[o],enumerable:!(n=Dt(t,o))||n.enumerable});return e};var Vt=e=>kt(fe({},"__esModule",{value:!0}),e);var on={};Wt(on,{Fn:()=>or,If:()=>er,Loop:()=>tr,Return:()=>ht,Switch:()=>rr,abs:()=>ro,acos:()=>oo,acosh:()=>no,all:()=>zr,any:()=>qr,asin:()=>so,asinh:()=>io,assign:()=>Xe,atan:()=>ao,atan2:()=>Io,atanh:()=>uo,attribute:()=>yt,bool:()=>Pr,builtin:()=>_,bvec2:()=>Ar,bvec3:()=>Ir,bvec4:()=>Or,ceil:()=>po,clamp:()=>Oo,color:()=>Br,compute:()=>Y,constant:()=>Et,conversion:()=>b,cos:()=>fo,cosh:()=>co,createGL:()=>Ue,cross:()=>Zr,cubeTexture:()=>Qr,dFdx:()=>lo,dFdy:()=>xo,degrees:()=>mo,distance:()=>jr,dot:()=>Kr,element:()=>_e,exp:()=>To,exp2:()=>go,float:()=>H,floor:()=>bo,fract:()=>Le,fragDepth:()=>lr,fragment:()=>z,frontFacing:()=>cr,function_:()=>c,fwidth:()=>vo,gather:()=>_t,iMouse:()=>Wr,iResolution:()=>se,iTime:()=>kr,id:()=>Tr,instanceIndex:()=>fr,int:()=>W,inverseSqrt:()=>ho,isGL:()=>Se,isServer:()=>At,isWebGPUSupported:()=>It,ivec2:()=>Nr,ivec3:()=>Rr,ivec4:()=>wr,length:()=>Yr,lengthSq:()=>Hr,log:()=>yo,log2:()=>Eo,mat2:()=>$r,mat3:()=>Gr,mat4:()=>Lr,max:()=>Do,member:()=>ee,min:()=>Mo,mix:()=>Bo,mod:()=>Yo,negate:()=>Co,node:()=>m,normalLocal:()=>hr,normalView:()=>Er,normalWorld:()=>yr,normalize:()=>Xo,oneMinus:()=>_o,operator:()=>Pt,pointCoord:()=>mr,position:()=>re,positionLocal:()=>gr,positionView:()=>vr,positionWorld:()=>br,pow:()=>Wo,radians:()=>Po,reciprocal:()=>$o,reflect:()=>ko,refract:()=>Vo,round:()=>Go,sampleIndex:()=>dr,sampleMask:()=>xr,sampler2D:()=>Mr,saturate:()=>Lo,scatter:()=>ir,screenCoordinate:()=>Cr,screenUV:()=>Xr,select:()=>ar,sign:()=>No,sin:()=>Ro,sinh:()=>wo,smoothstep:()=>zo,sqrt:()=>So,step:()=>qo,storage:()=>sr,struct:()=>Jt,tan:()=>Uo,tanh:()=>Fo,texelFetch:()=>eo,texture:()=>Jr,texture2D:()=>Dr,textureLod:()=>to,toVar:()=>Ce,trunc:()=>Ao,uint:()=>_r,uniform:()=>B,useGL:()=>rn,uv:()=>Vr,uvec2:()=>Sr,uvec3:()=>Ur,uvec4:()=>Fr,variable:()=>Ct,vec2:()=>Ge,vec3:()=>$e,vec4:()=>ne,vertex:()=>q,vertexIndex:()=>oe,vertexStage:()=>Xt,webgl:()=>Ne,webgpu:()=>Re});module.exports=Vt(on);var Ot=require("react");var D=require("reev"),ae=require("refr");var O=require("reev");var x={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)};var Fe=e=>e instanceof Float32Array,Z=(e,t,r)=>{e.loading++;let n=new Image;Object.assign(n,{src:t,crossOrigin:"anonymous"}),n.decode().then(()=>{r(n),e.loading--})};var Ae=(e,t,r,n=console.warn)=>{let o=e.createShader(r);if(!o)return n("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let s=e.getShaderInfoLog(o);e.deleteShader(o),n(`Could not compile shader: ${s}`)},ce=(e,t,r,n)=>{let o=e.createProgram(),s=Ae(e,t,e.FRAGMENT_SHADER,n.error),i=Ae(e,r,e.VERTEX_SHADER,n.error);if(!s||!i)return;if(e.attachShader(o,s),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let p=e.getProgramInfoLog(o);e.deleteProgram(o),n.error(`Could not link program: ${p}`)},zt=(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},qt=(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},Yt=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},Ie=(e,t,r,n,o)=>{let s=zt(e,n),i=qt(e,o),p=Yt(r,n,o);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 n=r.length;if(n<=4)return e[`uniform${n}fv`](t,r);n=Math.sqrt(n)<<0,e[`uniformMatrix${n}fv`](t,!1,r)},Oe=(e,t,r,n)=>{let o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,o)},De=(e,t,r,n,o,s,i)=>{let p=r*r,a=t.length/p;for(let u=0;u<p;u++)for(let l=0;l<Math.min(a,4);l++)i[4*u+l]=t[u*a+l]||0;e.activeTexture(e.TEXTURE0+s),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),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)},Me=(e,t)=>{for(let{ping:r,pong:n}of t)e.deleteTexture(r.texture),e.deleteTexture(n.texture),e.deleteFramebuffer(r.buffer),e.deleteFramebuffer(n.buffer)},Be=(e,t,r,n,o,s)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(n,o),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={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,n=(e&255)/255;return[t,r,n]},Ht=0,X=()=>`x${Ht++}`,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,n=!1)=>e.isWebGL?r?o=>e.gl?.attribute?.(t,o):n?o=>e.gl?.texture?.(t,o):o=>e.gl?.uniform?.(t,o):r?o=>e.gl?._attribute?.(t,o):n?o=>e.gl?._texture?.(t,o):o=>e.gl?._uniform?.(t,o),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).filter(Boolean);r?.length&&t(r)},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},e.isWebGL)||(e.code.fragInputs.set("position","@builtin(position) position: vec4f"),e.code.vertOutputs.set("position","@builtin(position) position: vec4f")),e),ot=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 jt=e=>ke[e],nt=(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],st=(e,t)=>{if(e.length===0)return"void";let[r]=e;if(x.str(r))return r;let n=E(r,t);for(let o of e.slice(1))if(n!==E(o,t))throw new Error("glre node system error: defined scope return mismatch");return n},Zt=e=>be[e],Qt=(e,t)=>{let{type:r,props:n}=e,{id:o,children:s=[],inferFrom:i,layout:p}=n,[a,u,l]=s;if(r==="conversion")return a;if(r==="operator")return nt(E(u,t),E(l,t),a);if(r==="ternary")return nt(E(u,t),E(l,t),"add");if(r==="builtin")return jt(o);if(r==="function")return Zt(a)||E(u,t);if(r==="define")return ve(p?.type)?p?.type:!i||i.length===0?"void":st(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 y=a.props.fields[u];if(y)return E(y,t)}return"float"}return i?st(i,t):E(a,t)},E=(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 S=(e,t)=>e.filter(r=>!x.und(r)&&!x.nul(r)).map(r=>f(r,t)).join(", "),it=(e,t,r,n)=>{let o=()=>{let u=E(n,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)${o()}`},at=(e,t,r)=>{let n=f(t,e),o=f(r,e),s=E(r,e);if(s==="float")return`_${n} = vec4(${o}, 0.0, 0.0, 1.0);`;if(s==="vec2")return`_${n} = vec4(${o}, 0.0, 1.0);`;if(s==="vec3")return`_${n} = vec4(${o}, 1.0);`;if(s==="vec4")return`_${n} = ${o};`;throw new Error(`Unsupported storage scatter type: ${s}`)},ut=(e,t,r,n)=>{if(e.isWebGL)return`texture(${S(n?[t,r,n]:[t,r],e)})`;let o=f(t,e),s=[o,o+"Sampler",f(r,e)];return n?(s.push(f(n,e)),`textureSampleLevel(${s})`):`textureSample(${s})`},pt=(e,t,r,n)=>{let o=`if (${f(t,e)}) {
|
|
2
|
-
${f(r,e)}
|
|
3
|
-
}`;for(let s=2;s<n.length;s+=2){let i=s>=n.length-1;o+=i?` else {
|
|
4
|
-
${f(n[s],e)}
|
|
5
|
-
}`:` else if (${f(n[s],e)}) {
|
|
6
|
-
${f(n[s+1],e)}
|
|
7
|
-
}`}return o},ft=(e,t,r)=>{let n=`switch (${f(t,e)}) {
|
|
8
|
-
`;for(let o=1;o<r.length;o+=2)o>=r.length-1&&r.length%2===0?n+=`default:
|
|
9
|
-
${f(r[o],e)}
|
|
10
|
-
break;
|
|
11
|
-
`:o+1<r.length&&(n+=`case ${f(r[o],e)}:
|
|
12
|
-
${f(r[o+1],e)}
|
|
13
|
-
break;
|
|
14
|
-
`);return n+="}",n},ct=(e,t,r)=>{let n=E(t,e),o=r?.props?.id;if(e.isWebGL)return`${n} ${o} = ${f(t,e)};`;let s=N(n);return`var ${o}: ${s} = ${f(t,e)};`},lt=(e,t,r={})=>{let n=[];for(let s in r){let i=r[s],p=E(i,e);e.isWebGL&&J(e,t,p),n.push(e.isWebGL?`${p} ${s};`:`${s}: ${N(p,e)},`)}let o=n.join(`
|
|
15
|
-
`);return`struct ${t} {
|
|
16
|
-
${o}
|
|
17
|
-
};`},dt=(e,t,r="",n,o)=>{if(e.isWebGL)if(o){let s=[];for(let i in n)s.push(o[i]);return`${t} ${r} = ${t}(${S(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}(${S(s,e)});`}else return`var ${r}: ${t};`},xt=(e,t,r)=>{let{id:n,children:o=[],layout:s}=t,[i,...p]=o,a=[],u=[];if(s?.inputs)for(let T of s.inputs)a.push([T.name,T.type]);else for(let T=0;T<p.length;T++)a.push([`p${T}`,E(p[T],e)]);let l=[];if(e?.isWebGL){for(let[T,d]of a)J(e,n,d),u.push(`${d} ${T}`);J(e,n,r),l.push(`${r} ${n}(${u}) {`)}else{for(let[d,g]of a)u.push(`${d}: ${N(g,e)}`);r==="void"?l.push(`fn ${n}(${u}) {`):l.push(`fn ${n}(${u}) -> ${N(r,e)} {`)}let y=f(i,e);return y&&l.push(y),l.push("}"),l.join(`
|
|
18
|
-
`)},mt=(e,t,r)=>e.isWebGL?`${r} ${t};`:`@location(${e.code?.vertVaryings?.size||0}) ${t}: ${N(r,e)}`,Tt=(e,t,r)=>{if(e.isWebGL)return`${r} ${t};`;let{location:n=0}=e.gl?.webgpu?.attribs.map.get(t)||{},o=N(r,e);return`@location(${n}) ${t}: ${o}`},gt=(e,t,r)=>{let n=r==="sampler2D"||r==="texture";if(e.isWebGL)return n?`uniform sampler2D ${t};`:`uniform ${r} ${t};`;if(n){let{group:p=1,binding:a=0}=e.gl?.webgpu?.textures.map.get(t)||{};return`@group(${p}) @binding(${a}) var ${t}Sampler: sampler;
|
|
19
|
-
@group(${p}) @binding(${a+1}) var ${t}: texture_2d<f32>;`}let{group:o=0,binding:s=0}=e.gl?.webgpu?.uniforms.map.get(t)||{},i=N(r,e);return`@group(${o}) @binding(${s}) var<uniform> ${t}: ${i};`},bt=(e,t,r)=>{if(e.isWebGL){let i=`uniform sampler2D ${t};`;if(e.label!=="compute")return i;let p=e.units?.(t);return`${i}
|
|
20
|
-
layout(location = ${p}) out vec4 _${t};`}let{group:n=0,binding:o=0}=e.gl?.webgpu?.storages.map.get(t)||{},s=N(r,e);return`@group(${n}) @binding(${o}) var<storage, read_write> ${t}: array<${s}>;`},vt=(e,t,r,n)=>e.isWebGL?`const ${r} ${t} = ${n};`:`const ${t}: ${N(r,e)} = ${n};`;var f=(e,t)=>{if(t||(t={}),rt(t),x.arr(e))return S(e,t);if(x.str(e))return e;if(x.num(e)){let d=`${e}`;return d.includes(".")?d:d+".0"}if(x.bol(e))return e?"true":"false";if(!e)return"";let{type:r,props:n={}}=e,{id:o="i",children:s=[],fields:i,initialValues:p}=n,[a,u,l,y]=s;if(r==="variable")return o;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?it(t,a,u,e):`${f(a,t)}[${f(u,t)}]`;if(r==="scatter"){let[d,g]=a.props.children??[];return t.isWebGL?at(t,d,u):`${f(d,t)}[${f(g,t)}] = ${f(u,t)};`}if(r==="ternary")return t.isWebGL?`(${f(l,t)} ? ${f(a,t)} : ${f(u,t)})`:`select(${f(a,t)}, ${f(u,t)}, ${f(l,t)})`;if(r==="conversion")return`${N(a,t)}(${S(s.slice(1),t)})`;if(r==="operator")return a==="not"||a==="bitNot"?`!${f(u,t)}`:`(${f(u,t)} ${et(a)} ${f(l,t)})`;if(r==="function")return a==="negate"?`(-${f(u,t)})`:a==="oneMinus"?`(1.0-${f(u,t)})`:a==="texture"?ut(t,u,l,y):a==="atan2"&&t.isWebGL?`atan(${f(u,t)}, ${f(l,t)})`:`${a}(${S(s.slice(1),t)})`;if(r==="scope")return s.map(d=>f(d,t)).join(`
|
|
21
|
-
`);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 ${o} = 0; ${o} < ${f(a,t)}; ${o} += 1) {
|
|
22
|
-
${f(u,t)}
|
|
23
|
-
}`:`for (var ${o}: i32 = 0; ${o} < ${f(a,t)}; ${o}++) {
|
|
24
|
-
${f(u,t)}
|
|
25
|
-
}`;if(r==="if")return pt(t,a,u,s);if(r==="switch")return ft(t,a,s);if(r==="declare")return ct(t,a,u);if(r==="define")return t.code?.headers.has(o)||t.code?.headers.set(o,xt(t,n,E(e,t))),`${o}(${S(s.slice(1),t)})`;if(r==="struct")return t.code?.headers.has(o)||t.code?.headers.set(o,lt(t,o,i)),dt(t,o,a.props.id,i,p);if(r==="varying"){if(t.code?.vertOutputs.has(o))return t.isWebGL?`${o}`:`out.${o}`;let d=mt(t,o,E(e,t));return t.code?.fragInputs.set(o,d),t.code?.vertOutputs.set(o,d),t.code?.vertVaryings.set(o,f(a,t)),t.isWebGL?`${o}`:`out.${o}`}if(r==="builtin"){if(t.isWebGL)return Je(t,o);if(o==="position")return"out.position";let d=`@builtin(${o}) ${o}: ${N(E(e,t),t)}`;return t.label==="compute"?t.code?.computeInputs.set(o,d):t.label==="frag"?t.code?.fragInputs.set(o,d):t.label==="vert"&&t.code?.vertInputs.set(o,d),`in.${o}`}if(r==="attribute"){let d=he(t,o,!0);return ye(a,d),e.listeners.add(d),t.code?.vertInputs.set(o,Tt(t,o,E(e,t))),t.isWebGL?`${o}`:`in.${o}`}if(t.code?.headers.has(o))return o;let T="";if(r==="uniform"){let d=E(e,t),g=he(t,o,!1,d==="texture");ye(a,g),e.listeners.add(g),T=gt(t,o,d)}return r==="storage"&&(T=bt(t,o,E(e,t))),r==="constant"&&(T=vt(t,o,E(e,t),f(a,t))),T?(t.code?.headers.set(o,T),o):f(a,t)};var F=null,M=null,I=e=>{if(!F||(F.props.children||(F.props.children=[]),F.props.children.push(e),e.type!=="return"||!M))return;let{props:t}=M;t.inferFrom||(t.inferFrom=[]),t.inferFrom.push(e)},Ce=(e,t)=>{t||(t=X());let r=m("variable",{id:t,inferFrom:[e]}),n=m("declare",null,e,r);return I(n),r},Xe=(e,t=!1,r)=>{let n=m(t?"scatter":"assign",null,e,r);return I(n),e},ht=e=>{let t=m("return",{inferFrom:[e]},e);return I(t),t},Jt=(e,t=X())=>(r={},n=X())=>{let o=m("variable",{id:n,inferFrom:[t]}),s=m("struct",{id:t,fields:e,initialValues:r},o);return I(s),o},A=(e,t,r=M)=>{let[n,o]=[F,M];[F,M]=[e,r];let s=t();s&&ht(s),[F,M]=[n,o]},er=(e,t)=>{let r=m("scope");A(r,t);let n=m("if",null,e,r);I(n);let o=()=>({ElseIf:(s,i)=>{let p=m("scope");return A(p,i),n.props.children.push(s,p),o()},Else:s=>{let i=m("scope");A(i,s),n.props.children.push(i)}});return o()},tr=(e,t)=>{let r=m("scope"),n=X();A(r,()=>t({i:m("variable",{id:n,inferFrom:[b("int",0)]})}));let o=m("loop",{id:n},e,r);return I(o),o},rr=e=>{let t=m("switch",null,e);I(t);let r=()=>({Case:(...n)=>o=>{let s=m("scope");A(s,o);for(let i of n)t.props.children.push(i,s);return r()},Default:n=>{let o=m("scope");A(o,n),t.props.children.push(o)}});return r()},or=(e,t=X())=>{let r,n=(...o)=>{let s=r?.name||t,i=m("scope"),p=[],a=[];if(r?.inputs)for(let l of r.inputs)a.push({id:l.name,inferFrom:[b(l.type)]});else for(let l=0;l<o.length;l++)a.push({id:`p${l}`,inferFrom:[o[l]]});for(let l of a)p.push(m("variable",l));let u=m("define",{id:s,layout:r},i,...o);return A(i,()=>e(p),u),u};return n.setLayout=o=>(r=o,n),n};var nr=(e,t)=>{if(t==="string")return f(e,null)},m=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let n=new Set,o=(p,a)=>{if(a==="type")return e;if(a==="props")return t;if(a==="toVar")return Ce.bind(null,i);if(a==="isProxy")return!0;if(a==="toString")return f.bind(null,i);if(a===Symbol.toPrimitive)return nr.bind(null,i);if(a==="listeners")return n;if(a==="attribute")return(u=X())=>yt(i,u);if(a==="constant")return(u=X())=>Et(i,u);if(a==="uniform")return(u=X())=>B(i,u);if(a==="variable")return(u=X())=>Ct(u);if(a==="builtin")return(u=X())=>_(u);if(a==="vertexStage")return(u=X())=>Xt(i,u);if(a==="element")return u=>e==="storage"?_t(i,u):_e(i,u);if(a==="member")return u=>ee(i,u);if(a==="assign")return Xe.bind(null,i,i.type==="gather");if(je(a))return(...u)=>Pt(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 ot(a)?_e(i,a):ee(i,a)},s=(p,a,u)=>(a==="value"&&n.forEach(l=>l(u)),x.str(a)&&ee(i,a).assign(u),!0),i=new Proxy({},{get:o,set:s});return i},yt=(e,t=X())=>m("attribute",{id:t},e),Et=(e,t=X())=>m("constant",{id:t},e),B=(e,t=X())=>m("uniform",{id:t},e),sr=(e,t=X())=>m("storage",{id:t},e),Ct=(e=X())=>m("variable",{id:e}),_=(e=X())=>m("builtin",{id:e}),Xt=(e,t=X())=>m("varying",{id:t,inferFrom:[e]},e),ee=(e,t)=>m("member",null,e,t),_e=(e,t)=>m("element",null,e,t),_t=(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),Pt=(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=`
|
|
26
|
-
#version 300 es
|
|
27
|
-
precision mediump float;
|
|
28
|
-
out vec4 fragColor;
|
|
29
|
-
`.trim(),pr=(e,t)=>{let r=[],n=new Set,o=new Set,s=i=>{if(o.has(i)||n.has(i))return;o.add(i);let p=t.get(i)||new Set;for(let a of p)e.has(a)&&s(a);o.delete(i),n.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),n="";return t.isWebGL&&t.code?.dependencies?n=pr(t.code.headers,t.code.dependencies).map(([,s])=>s).join(`
|
|
30
|
-
`):n=Array.from(t.code?.headers?.values()||[]).join(`
|
|
31
|
-
`),[n,r]},te=(e,t)=>`struct ${e} {
|
|
32
|
-
${Array.from(t.values()).join(`,
|
|
33
|
-
`)}
|
|
34
|
-
}`,z=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="frag";let[r,n]=Pe(e,t),o=[];if(t.isWebGL){o.push(ur);for(let i of t.code?.fragInputs?.values()||[])o.push(`in ${i}`);o.push(r),o.push(`void main() {
|
|
35
|
-
fragColor = ${n};`)}else t.code?.fragInputs?.size&&o.push(te("Out",t.code.fragInputs)),o.push(r),o.push(`@fragment
|
|
36
|
-
fn main(out: Out) -> @location(0) vec4f {`),o.push(` return ${n};`);return o.push("}"),o.filter(Boolean).join(`
|
|
37
|
-
`).trim()},q=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="vert";let[r,n]=Pe(e,t),o=[];if(t.isWebGL){o.push("#version 300 es");for(let i of t.code?.vertInputs?.values()||[])o.push(`in ${i}`);for(let i of t.code?.vertOutputs?.values()||[])o.push(`out ${i}`);o.push(r),o.push("void main() {"),o.push(` gl_Position = ${n};`);for(let[i,p]of t.code?.vertVaryings?.entries()||[])o.push(` ${i} = ${p};`)}else{t.code?.vertInputs?.size&&o.push(te("In",t.code.vertInputs)),t.code?.vertOutputs?.size&&o.push(te("Out",t.code.vertOutputs)),o.push(r),o.push("@vertex"),o.push(`fn main(${t.code?.vertInputs?.size?"in: In":""}) -> Out {`),o.push(" var out: Out;"),o.push(` out.position = ${n};`);for(let[i,p]of t.code?.vertVaryings?.entries()||[])o.push(` out.${i} = ${p};`);o.push(" return out;")}return o.push("}"),o.filter(Boolean).join(`
|
|
38
|
-
`).trim()},Y=(e,t)=>{if(x.str(e))return e.trim();t.code?.headers?.clear(),t.label="compute";let[r,n]=Pe(e,t),o=[];return t.isWebGL?(o.push("#version 300 es"),o.push("precision mediump float;"),o.push(r),o.push("void main() {"),o.push(` ${n};`),o.push("}")):(t.code?.computeInputs?.size&&o.push(te("In",t.code.computeInputs)),o.push(r),o.push("@compute @workgroup_size(32)"),o.push(`fn main(${t.code?.computeInputs?.size?"in: In":""}) {`),o.push(` ${n};`),o.push("}")),o.filter(Boolean).join(`
|
|
39
|
-
`).trim()};var re=_("position"),oe=_("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"),Cr=_("screenCoordinate"),Xr=_("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),ne=(e,t,r,n)=>b("vec4",e,t,r,n),$r=(...e)=>b("mat2",...e),Gr=(...e)=>b("mat3",...e),Lr=(...e)=>b("mat4",...e),Nr=(e,t)=>b("ivec2",e,t),Rr=(e,t,r)=>b("ivec3",e,t,r),wr=(e,t,r,n)=>b("ivec4",e,t,r,n),Sr=(e,t)=>b("uvec2",e,t),Ur=(e,t,r)=>b("uvec3",e,t,r),Fr=(e,t,r,n)=>b("uvec4",e,t,r,n),Ar=(e,t)=>b("bvec2",e,t),Ir=(e,t,r)=>b("bvec3",e,t,r),Or=(e,t,r,n)=>b("bvec4",e,t,r,n),Dr=e=>b("texture",e),Mr=()=>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),eo=(e,t,r)=>c("texelFetch",e,t,r),to=(e,t,r)=>c("textureLod",e,t,r),ro=e=>c("abs",e),oo=e=>c("acos",e),no=e=>c("acosh",e),so=e=>c("asin",e),io=e=>c("asinh",e),ao=e=>c("atan",e),uo=e=>c("atanh",e),po=e=>c("ceil",e),fo=e=>c("cos",e),co=e=>c("cosh",e),lo=e=>c("dFdx",e),xo=e=>c("dFdy",e),mo=e=>c("degrees",e),To=e=>c("exp",e),go=e=>c("exp2",e),bo=e=>c("floor",e),Le=e=>c("fract",e),vo=e=>c("fwidth",e),ho=e=>c("inverseSqrt",e),yo=e=>c("log",e),Eo=e=>c("log2",e),Co=e=>c("negate",e),Xo=e=>c("normalize",e),_o=e=>c("oneMinus",e),Po=e=>c("radians",e),$o=e=>c("reciprocal",e),Go=e=>c("round",e),Lo=e=>c("saturate",e),No=e=>c("sign",e),Ro=e=>c("sin",e),wo=e=>c("sinh",e),So=e=>c("sqrt",e),Uo=e=>c("tan",e),Fo=e=>c("tanh",e),Ao=e=>c("trunc",e),Io=(e,t)=>c("atan2",e,t),Oo=(e,t,r)=>c("clamp",e,t,r),Do=(e,t)=>c("max",e,t),Mo=(e,t)=>c("min",e,t),Bo=(e,t,r)=>c("mix",e,t,r),Wo=(e,t)=>c("pow",e,t),ko=(e,t)=>c("reflect",e,t),Vo=(e,t,r)=>c("refract",e,t,r),zo=(e,t,r)=>c("smoothstep",e,t,r),qo=(e,t)=>c("step",e,t),Yo=(e,t)=>e.sub(e.div(t).toFloat().floor().mul(t));var Ho=`
|
|
40
|
-
#version 300 es
|
|
41
|
-
void main() {
|
|
42
|
-
float x = float(gl_VertexID % 2) * 4.0 - 1.0;
|
|
43
|
-
float y = float(gl_VertexID / 2) * 4.0 - 1.0;
|
|
44
|
-
gl_Position = vec4(x, y, 0.0, 1.0);
|
|
45
|
-
}`.trim(),jo=(e,t)=>{if(!e.cs)return null;t.getExtension("EXT_color_buffer_float");let r=0,n=0,o=(0,O.nested)(()=>r++),s={isWebGL:!0,gl:e,units:o},i=ce(t,Y(e.cs,s),Ho,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()},R={texture:t.createTexture(),buffer:t.createFramebuffer()};return{ping:P,pong:R,array:v,loc:a(g),unit:o(g)}});return{render:()=>{t.useProgram(i);let g=u.map.values().map(({ping:v,pong:P,loc:R,unit:U},k)=>{let[K,ue]=n%2?[v,P]:[P,v];return Be(t,K,ue,R,U,k)});t.drawBuffers(g),t.drawArrays(t.TRIANGLES,0,3),t.bindFramebuffer(t.FRAMEBUFFER,null),n++},clean:()=>{t.deleteProgram(i),Me(t,u.map.values())},_uniform:(g,v)=>{t.useProgram(i),le(t,a(g),v)},_storage:(g,v)=>{let{ping:P,pong:R,unit:U,array:k}=u(g);De(t,v,p,P,R,U,k)},storages:u}},Ne=async e=>{let t={isWebGL:!0,gl:e},r=e.el.getContext("webgl2"),n=jo(e,r),o=ce(r,z(e.fs,t),q(e.vs,t),e);r.useProgram(o);let s=0,i=(0,O.nested)(()=>s++),p=(0,O.nested)(v=>r.getAttribLocation(o,v)),a=(0,O.nested)(v=>r.getUniformLocation(o,v)),u=(v="",P,R)=>{let U=p(v,!0);Ie(r,U,e.count,P,R)},l=(v,P)=>{r.useProgram(o),le(r,a(v),P),n?._uniform(v,P)},y=(v,P)=>{r.useProgram(o),Z(e,P,R=>{Oe(r,R,a(v),i(v))})},T=()=>{n?.clean(),r.deleteProgram(o),r.getExtension("WEBGL_lose_context")?.loseContext()},d=()=>{n?.render(),r.useProgram(o),r.viewport(0,0,...e.size),r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)};return{webgl:{context:r,program:o,storages:n?.storages},render:d,clean:T,_attribute:u,_uniform:l,_texture:y,_storage:n?._storage}};var j=require("reev");var $t=async(e,t=console.log)=>{let r=navigator.gpu,n=r.getPreferredCanvasFormat(),s=await(await r.requestAdapter()).requestDevice();return s.onuncapturederror=i=>t(i.error.message),e.configure({device:s,format:n,alphaMode:"opaque"}),{device:s,format:n}},Gt=()=>{let e=0,t=0,r=0,n=0;return{uniform:()=>{let o=Math.floor(e/12),s=e%12;return e++,{group:o,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 o=n;return n++,{location:o}}}},Ko=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",Lt=e=>{let t=[],r=[];for(let{buffer:n,location:o,stride:s}of e)t[o]=n,r[o]={arrayStride:s*4,attributes:[{shaderLocation:o,offset:0,format:Ko(s)}]};return{vertexBuffers:t,bufferLayouts:r}},Nt=(e,t,r,n=[])=>{let o=new Map,s={bindGroups:[],bindGroupLayouts:[]},i=(p,a,u)=>{o.has(p)||o.set(p,{layouts:[],bindings:[]});let{layouts:l,bindings:y}=o.get(p);l.push(a),y.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 n)i(u,{binding:p,visibility:6,buffer:{type:"storage"}},{binding:p,resource:{buffer:a}});for(let{binding:p,group:a,sampler:u,view:l}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:l});for(let[p,{layouts:a,bindings:u}]of o)s.bindGroupLayouts[p]=e.createBindGroupLayout({entries:a}),s.bindGroups[p]=e.createBindGroup({layout:s.bindGroupLayouts[p],entries:u});return s},Rt=(e,t,r,n,o,s)=>e.createRenderPipeline({vertex:{module:e.createShaderModule({label:"vert",code:o}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({label:"frag",code:s}),entryPoint:"main",targets:[{format:t}]},layout:e.createPipelineLayout({bindGroupLayouts:n}),primitive:{topology:"triangle-list"},depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}}),wt=(e,t,r)=>e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:r}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})}),Zo=e=>e==="uniform"?72:e==="attrib"?40:140,ie=(e,t,r)=>{Fe(t)||(t=new Float32Array(t));let n=Zo(r),o=r==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:o,usage:n});return{array:t,buffer:s}},St=(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"}}),Ut=(e,t=1280,r=800)=>{let n=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:n,sampler:o}},Ft=(e,t,r)=>e.createTexture({size:[t,r],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT});var Qo=32,Jo=(e,t,r)=>{let n=u=>{},o=(0,j.nested)((u,l)=>{let{array:y,buffer:T}=ie(t,l,"storage"),{binding:d,group:g}=r.storage();return{array:y,buffer:T,binding:d,group:g}});return{storages:o,_storage:(u,l)=>{let{array:y,buffer:T}=o(u,l);t.queue.writeBuffer(T,0,y)},update:(u,l,y)=>{let T=wt(t,l,y);n=d=>{d.setPipeline(T),u.forEach((v,P)=>d.setBindGroup(P,v));let g=Math.ceil(e.particles/Qo);d.dispatchWorkgroups(g,1,1),d.end()}},render:u=>{n(u)},clean:()=>{for(let{buffer:u}of o.map.values())u.destroy()}}},Re=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await $t(t,e.error),o=Gt(),s=Jo(e,r,o),i,p,a,u=h=>{},l=!0,y,T=(0,j.nested)((h,C)=>{l=!0;let $=C.length/e.count,{location:G}=o.attrib(),{array:w,buffer:L}=ie(r,C,"attrib");return{array:w,buffer:L,location:G,stride:$}}),d=(0,j.nested)((h,C)=>{l=!0;let{binding:$,group:G}=o.uniform(),{array:w,buffer:L}=ie(r,C,"uniform");return{array:w,buffer:L,binding:$,group:G}}),g=(0,j.nested)((h,C=0,$=0)=>{l=!0;let{binding:G,group:w}=o.texture(),{texture:L,sampler:V}=Ut(r,C,$);return{texture:L,sampler:V,binding:G,group:w,view:L.createView()}}),v=(h="",C)=>{let{array:$,buffer:G}=T(h,C);r.queue.writeBuffer(G,0,$)},P=(h,C)=>{x.num(C)&&(C=[C]);let{array:$,buffer:G}=d(h,C);$.set(C),r.queue.writeBuffer(G,0,$)},R=(h,C)=>{Z(e,C,$=>{let{width:G,height:w}=$,{texture:L}=g(h,G,w);r.queue.copyExternalImageToTexture({source:$},{texture:L},{width:G,height:w})})},U=()=>{let{vertexBuffers:h,bufferLayouts:C}=Lt(T.map.values()),{bindGroups:$,bindGroupLayouts:G}=Nt(r,d.map.values(),g.map.values(),s.storages.map.values()),w=Rt(r,n,C,G,a,i);u=L=>{L.setPipeline(w),$.forEach((V,pe)=>L.setBindGroup(pe,V)),h.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 C={isWebGL:!1,gl:e};i=z(e.fs,C),a=q(e.vs,C),p=Y(e.cs,C)}if(e.loading)return;l&&U(),l=!1;let h=r.createCommandEncoder();e.cs&&s.render(h.beginComputePass()),u(h.beginRenderPass(St(t,y))),r.queue.submit([h.finish()])},K=()=>{let h=e.el;y?.destroy(),y=Ft(r,h.width,h.height)},ue=()=>{r.destroy(),y?.destroy();for(let{texture:h}of g.map.values())h.destroy();for(let{buffer:h}of d.map.values())h.destroy();for(let{buffer:h}of T.map.values())h.destroy();s.clean()};return K(),{webgpu:{device:r,uniforms:d,textures:g,attribs:T,storages:s.storages},render:k,resize:K,clean:ue,_attribute:v,_uniform:P,_texture:R,_storage:s._storage}};var Se=e=>x.obj(e)?"isGL"in e:!1,At=()=>typeof window>"u",It=()=>At()?!1:"gpu"in navigator,we=performance.now(),en=()=>ne(Le(re.xy.div(se)),0,1),tn=()=>ne(H(W(oe).mod(W(2))).mul(4).sub(1),H(W(oe).div(W(2))).mul(4).sub(1),0,1),Ue=e=>{let t=(0,D.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,D.durable)((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o)),t),t.storage=(0,D.durable)((r,n)=>t.queue(()=>t._storage?.(r,n)),t),t.uniform=(0,D.durable)((r,n)=>t.queue(()=>t._uniform?.(r,n)),t),t.texture=(0,D.durable)((r,n)=>t.queue(()=>t._texture?.(r,n)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:we}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex||tn(),t.fs=t.fs||t.frag||t.fragment||en(),t.cs=t.cs||t.comp||t.compute,It()||(t.isWebGL=!0),t.isWebGL?t(await Ne(t)):t(await Re(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,n=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=n,t.uniform("iResolution",t.size)}),t("mousemove",(r,n=r.clientX,o=r.clientY)=>{let[s,i]=t.size,{top:p,left:a}=t.el.getBoundingClientRect();t.mouse[0]=(n-p-s/2)/(s/2),t.mouse[1]=-(o-a-i/2)/(i/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{we=performance.now()/1e3,t.uniform("iTime",we)}),t(e)};var rn=(e={})=>(0,Ot.useState)(()=>{let t=Se(e)?e:Ue(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")});
|
|
46
2
|
//# sourceMappingURL=react.cjs.map
|