glre 0.20.0 → 0.22.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.
Files changed (48) hide show
  1. package/README.md +150 -80
  2. package/dist/index.d.ts +442 -236
  3. package/dist/index.js +46 -13
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +46 -13
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/native.d.ts +7 -530
  8. package/dist/native.js +46 -13
  9. package/dist/native.js.map +1 -1
  10. package/dist/native.mjs +46 -13
  11. package/dist/native.mjs.map +1 -1
  12. package/dist/react.d.ts +7 -478
  13. package/dist/react.js +46 -13
  14. package/dist/react.js.map +1 -1
  15. package/dist/react.mjs +46 -13
  16. package/dist/react.mjs.map +1 -1
  17. package/dist/solid.d.ts +7 -424
  18. package/dist/solid.js +46 -13
  19. package/dist/solid.js.map +1 -1
  20. package/dist/solid.mjs +46 -13
  21. package/dist/solid.mjs.map +1 -1
  22. package/package.json +26 -61
  23. package/src/code/glsl.ts +186 -0
  24. package/src/code/wgsl.ts +170 -0
  25. package/src/index.ts +105 -0
  26. package/src/native.ts +24 -0
  27. package/src/node/cache.ts +67 -0
  28. package/src/node/const.ts +147 -0
  29. package/src/node/conv.ts +122 -0
  30. package/src/node/index.ts +96 -0
  31. package/src/node/node.ts +114 -0
  32. package/src/node/types.ts +101 -0
  33. package/src/node/uniform.ts +99 -0
  34. package/src/react.ts +18 -0
  35. package/src/solid.ts +15 -0
  36. package/src/types.ts +90 -0
  37. package/src/utils.ts +53 -0
  38. package/src/webgl/buffer.ts +78 -0
  39. package/src/webgl/index.ts +79 -0
  40. package/src/webgl/program.ts +61 -0
  41. package/src/webgl/shader.ts +60 -0
  42. package/src/webgl/texture.ts +93 -0
  43. package/src/webgpu/buffer.ts +96 -0
  44. package/src/webgpu/device.ts +91 -0
  45. package/src/webgpu/index.ts +40 -0
  46. package/src/webgpu/pipeline.ts +94 -0
  47. package/src/webgpu/texture.ts +139 -0
  48. package/dist/types-2792569d.d.ts +0 -7
package/dist/index.js CHANGED
@@ -1,15 +1,48 @@
1
- var A=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var C=(e,t)=>{for(var n in t)A(e,n,{get:t[n],enumerable:!0})},z=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of w(t))!O.call(e,a)&&a!==n&&A(e,a,{get:()=>t[a],enumerable:!(o=G(t,a))||o.enumerable});return e};var H=e=>z(A({},"__esModule",{value:!0}),e);var q={};C(q,{createGL:()=>b,createTF:()=>k,default:()=>$,gl:()=>U});module.exports=H(q);var s=require("reev"),_=require("refr");var x=(e,t=!1)=>{let n=typeof e=="number"?0:e?.length;return n?t?(n=Math.sqrt(n)<<0,`uniformMatrix${n}fv`):`uniform${n}fv`:"uniform1f"},P=(e,t,n)=>{n&&(e=Math.max(...n)+1);let o=t.length/e;return o!==o<<0&&console.warn(`Vertex Stride Error: count ${e} is mismatch`),o<<0},d=(e,t,n)=>{let o=e.createShader(n);if(e.shaderSource(o,t),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;throw`Could not compile glsl
1
+ "use strict";var U=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Re=Object.prototype.hasOwnProperty;var Se=(e,r)=>{for(var t in r)U(e,t,{get:r[t],enumerable:!0})},$e=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of ye(r))!Re.call(e,o)&&o!==t&&U(e,o,{get:()=>r[o],enumerable:!(n=be(r,o))||n.enumerable});return e};var _e=e=>$e(U({},"__esModule",{value:!0}),e);var ct={};Se(ct,{BufferUsage:()=>Er,CACHE_BOOLS:()=>J,CACHE_FLOATS:()=>re,CACHE_INTS:()=>ee,FUNCTIONS:()=>Q,Fn:()=>kr,If:()=>Hr,OPERATORS:()=>Z,SWIZZLES:()=>K,TYPES:()=>Cr,TextureFormat:()=>Ar,TextureUsage:()=>Lr,abs:()=>et,activeTexture:()=>D,alignBufferSize:()=>gr,bool:()=>zr,calculateBufferSize:()=>xr,ceil:()=>at,checkWebGPUSupport:()=>je,color:()=>Yr,configureCanvasContext:()=>Qe,convertToNode:()=>Wr,cos:()=>tt,createAttribute:()=>N,createBindGroup:()=>or,createBindGroupLayout:()=>nr,createBuffer:()=>R,createBuffers:()=>Tr,createCommandEncoder:()=>H,createComputePipeline:()=>rr,createCubeTexture:()=>Me,createDepthTexture:()=>yr,createEmptyTexture:()=>Fe,createFragmentShader:()=>I,createGL:()=>he,createIbo:()=>P,createIndexBuffer:()=>mr,createNode:()=>h,createProgram:()=>B,createRenderPass:()=>k,createRenderPipeline:()=>Y,createSampler:()=>Rr,createShaderModule:()=>tr,createStorageBuffer:()=>cr,createTexture:()=>W,createTextureFromImage:()=>br,createTextureView:()=>Sr,createUniformBuffer:()=>pr,createVbo:()=>v,createVertexBuffer:()=>fr,createVertexShader:()=>X,default:()=>pt,deleteBuffer:()=>Le,deleteProgram:()=>F,deleteShader:()=>ae,deleteTexture:()=>Be,destroyBuffer:()=>dr,destroyTexture:()=>_r,dig:()=>Oe,each:()=>fe,ext:()=>We,fig:()=>De,findDuplicateNodes:()=>Xr,float:()=>A,floor:()=>it,flush:()=>Xe,fract:()=>st,getAttribLocation:()=>ve,getCachedBool:()=>$,getCachedFloat:()=>L,getCachedInt:()=>_,getDeviceLimits:()=>Ke,getProgramInfo:()=>we,getShaderInfo:()=>Ge,getUniformLocation:()=>Ue,getUniformType:()=>M,gl_FragCoord:()=>jr,gl_Position:()=>Kr,glsl:()=>b,iDeltaTime:()=>de,iMouse:()=>Jr,iPrevTime:()=>le,iResolution:()=>Qr,iTime:()=>Zr,int:()=>Or,is:()=>a,isGL:()=>mt,isServer:()=>ue,isWebGPUSupported:()=>O,length:()=>ft,node:()=>u,nodeToGLSL:()=>me,nodeToWGSL:()=>pe,normalize:()=>ut,replace:()=>Ie,requestWebGPUDevice:()=>q,setupDeviceErrorHandling:()=>Ze,sig:()=>ze,sin:()=>rt,sqrt:()=>ot,tan:()=>nt,uniform:()=>l,updateBuffer:()=>lr,updateIbo:()=>Ce,updateTexture:()=>$r,updateUniforms:()=>Mr,updateVbo:()=>Ae,vec2:()=>Vr,vec3:()=>Te,vec4:()=>qr,vertexStride:()=>G,webgl:()=>V,webgpu:()=>j,wgsl:()=>y});module.exports=_e(ct);var d=require("reev"),w=require("refr");var z=require("reev");var v=(e,r)=>{let t=e.createBuffer();if(!t)throw new Error("Failed to create VBO");return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array(r),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),t},P=(e,r)=>{let t=e.createBuffer();if(!t)throw new Error("Failed to create IBO");return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(r),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),t},N=(e,r,t,n,o)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,r,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o)},Le=(e,r)=>{e.deleteBuffer(r)},G=(e,r,t)=>{t&&(e=Math.max(...t)+1);let n=r.length/e;return n!==Math.floor(n)&&console.warn(`Vertex Stride Error: count ${e} is mismatch`),Math.floor(n)},Ae=(e,r,t,n=e.STATIC_DRAW)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),n),e.bindBuffer(e.ARRAY_BUFFER,null)},Ce=(e,r,t,n=e.STATIC_DRAW)=>{e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),n),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)};var B=(e,r,t)=>{let n=e.createProgram();if(!n)throw new Error("Failed to create pg");if(e.attachShader(n,r),e.attachShader(n,t),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS))return n;let o=e.getProgramInfoLog(n);throw e.deleteProgram(n),new Error(`Could not link pg: ${o}`)},F=(e,r)=>{e.deleteProgram(r)},we=(e,r)=>({linked:e.getProgramParameter(r,e.LINK_STATUS),log:e.getProgramInfoLog(r),activeAttributes:e.getProgramParameter(r,e.ACTIVE_ATTRIBUTES),activeUniforms:e.getProgramParameter(r,e.ACTIVE_UNIFORMS)}),M=(e,r=!1)=>{let t=typeof e=="number"?0:e?.length;return t?r?(t=Math.sqrt(t)<<0,`uniformMatrix${t}fv`):`uniform${t}fv`:"uniform1f"},Ue=(e,r,t)=>e.getUniformLocation(r,t),ve=(e,r,t)=>e.getAttribLocation(r,t);var Pe=`
2
+ attribute vec4 a_position;
3
+ void main() {
4
+ gl_Position = a_position;
5
+ }
6
+ `,Ne=`
7
+ precision mediump float;
8
+ uniform vec2 iResolution;
9
+ void main() {
10
+ gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
11
+ }
12
+ `,ae=(e,r)=>{e.deleteShader(r)},se=(e,r,t)=>{let n=e.createShader(t);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,r),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;let o=e.getShaderInfoLog(n);throw ae(e,n),new Error(`Could not compile shader: ${o}`)},X=(e,r=Pe)=>se(e,r,e.VERTEX_SHADER),I=(e,r=Ne)=>se(e,r,e.FRAGMENT_SHADER),Ge=(e,r)=>({compiled:e.getShaderParameter(r,e.COMPILE_STATUS),log:e.getShaderInfoLog(r),source:e.getShaderSource(r)});var W=(e,r)=>{let t=e.createTexture();if(!t)throw new Error("Failed to create texture");return e.bindTexture(e.TEXTURE_2D,t),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r),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),t},D=(e,r,t,n)=>{r&&(e.uniform1i(r,t),e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,n))},Be=(e,r)=>{e.deleteTexture(r)},Fe=(e,r=1280,t=800,n=e.RGBA,o=e.UNSIGNED_BYTE)=>{let i=e.createTexture();if(!i)throw new Error("Failed to create empty texture");return e.bindTexture(e.TEXTURE_2D,i),e.texImage2D(e.TEXTURE_2D,0,n,r,t,0,n,o,null),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),i},Me=(e,r)=>{if(r.length!==6)throw new Error("Cube texture requires exactly 6 imgs");let t=e.createTexture();if(!t)throw new Error("Failed to create cube texture");return e.bindTexture(e.TEXTURE_CUBE_MAP,t),[e.TEXTURE_CUBE_MAP_POSITIVE_X,e.TEXTURE_CUBE_MAP_NEGATIVE_X,e.TEXTURE_CUBE_MAP_POSITIVE_Y,e.TEXTURE_CUBE_MAP_NEGATIVE_Y,e.TEXTURE_CUBE_MAP_POSITIVE_Z,e.TEXTURE_CUBE_MAP_NEGATIVE_Z].forEach((o,i)=>{e.texImage2D(o,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r[i])}),e.generateMipmap(e.TEXTURE_CUBE_MAP),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_CUBE_MAP,null),t};var a={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)},ue=()=>typeof window>"u",O=()=>ue()?!1:"gpu"in navigator,fe=(e,r)=>e.forEach(r),Xe=(e,...r)=>{fe(e,t=>t(...r))},Ie=(e="",r="_",t="/")=>e.split(r).join(t),We=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",De=(e=0)=>`${e}`.split(".")[1]?.length??0,Oe=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),ze=(e=0,r=-2)=>(r*=-1,r=Math.pow(10,r),e*=r,e=Math.round(e),e/=r,e);var me=(e,r)=>{let t={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...r};return T(e,t)},T=(e,r)=>e?a.und(e.value)?e.property&&e.parent?`${T(e.parent,r)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?qe(e,r):e.mathFunction&&e.children&&e.children.length>=1?Ye(e,r):"0.0":Ve(e.value,e.type):"0.0",Ve=(e,r)=>{if(r==="float"){let t=Number(e);return t%1===0?`${t}.0`:`${t}`}if(r==="int")return`${Math.floor(Number(e))}`;if(r==="bool")return e?"true":"false";if(a.arr(e)){let t=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(r==="vec2")return`vec2(${t})`;if(r==="vec3")return`vec3(${t})`;if(r==="vec4")return`vec4(${t})`;if(r==="color")return`vec3(${t})`}return"0.0"},qe=(e,r)=>{if(!e.children||e.children.length<2)return"0.0";let t=T(e.children[0],r),n=T(e.children[1],r);return e.operator==="add"?`(${t} + ${n})`:e.operator==="sub"?`(${t} - ${n})`:e.operator==="mul"?`(${t} * ${n})`:e.operator==="div"?`(${t} / ${n})`:e.operator==="mod"?`mod(${t}, ${n})`:e.operator==="equal"?`(${t} == ${n})`:e.operator==="notEqual"?`(${t} != ${n})`:e.operator==="lessThan"?`(${t} < ${n})`:e.operator==="lessThanEqual"?`(${t} <= ${n})`:e.operator==="greaterThan"?`(${t} > ${n})`:e.operator==="greaterThanEqual"?`(${t} >= ${n})`:e.operator==="and"?`(${t} && ${n})`:e.operator==="or"?`(${t} || ${n})`:`(${t} + ${n})`},Ye=(e,r)=>{if(!e.children||e.children.length<1)return"0.0";let t=e.mathFunction,n=e.children.map(f=>T(f,r)),[o,i,s]=n;if(n.length===1){if(t==="abs")return`abs(${o})`;if(t==="acos")return`acos(${o})`;if(t==="asin")return`asin(${o})`;if(t==="atan")return`atan(${o})`;if(t==="ceil")return`ceil(${o})`;if(t==="cos")return`cos(${o})`;if(t==="floor")return`floor(${o})`;if(t==="fract")return`fract(${o})`;if(t==="length")return`length(${o})`;if(t==="normalize")return`normalize(${o})`;if(t==="sin")return`sin(${o})`;if(t==="sqrt")return`sqrt(${o})`;if(t==="tan")return`tan(${o})`}if(n.length===2){if(t==="atan2")return`atan(${o}, ${i})`;if(t==="pow")return`pow(${o}, ${i})`;if(t==="min")return`min(${o}, ${i})`;if(t==="max")return`max(${o}, ${i})`;if(t==="dot")return`dot(${o}, ${i})`;if(t==="cross")return`cross(${o}, ${i})`;if(t==="distance")return`distance(${o}, ${i})`;if(t==="reflect")return`reflect(${o}, ${i})`}if(n.length===3){if(t==="mix")return`mix(${o}, ${i}, ${s})`;if(t==="clamp")return`clamp(${o}, ${i}, ${s})`;if(t==="smoothstep")return`smoothstep(${o}, ${i}, ${s})`;if(t==="refract")return`refract(${o}, ${i}, ${s})`}return o||"0.0"},ke=e=>{if(a.num(e))return"float";if(a.bol(e))return"bool";if(a.arr(e)){let r=e.length;if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4"}return"float"},b=(e,r)=>{let t=r?.precision||"mediump",o=(r?.version||"300 es")==="300 es",i=me(e),s="";return o&&(s+=`#version 300 es
13
+ `),s+=`precision ${t} float;
2
14
 
3
- `+e.getShaderInfoLog(o)},D=(e,t,n)=>{let o=e.createProgram();return e.attachShader(o,t),e.attachShader(o,n),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS)?(e.useProgram(o),o):(console.log(e.getProgramInfoLog(o)),null)},p=(e,t,n,o)=>{let a=e.createProgram();return e.attachShader(a,t),e.attachShader(a,n),e.transformFeedbackVaryings(a,o,e.SEPARATE_ATTRIBS),e.linkProgram(a),e.getProgramParameter(a,e.LINK_STATUS)?(e.useProgram(a),a):(console.warn(e.getProgramInfoLog(a)),null)},L=(e,t)=>{if(!t)return;let n=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),n},y=(e,t)=>{if(!t)return;let n=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),n},B=(e,t,n,o,a)=>{e.bindBuffer(e.ARRAY_BUFFER,o),e.enableVertexAttribArray(n),e.vertexAttribPointer(n,t,e.FLOAT,!1,0,0),a&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a)};var X=(e,t)=>{let n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),n},S=(e,t,n,o)=>{e.uniform1i(t,n),e.activeTexture(e["TEXTURE"+n]),e.bindTexture(e.TEXTURE_2D,o)};var Y=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],W=`
4
- attribute vec4 a_position;
5
- void main() {
6
- gl_Position = a_position;
7
- }
8
- `,V=`
9
- precision mediump float;
10
- uniform vec2 iResolution;
11
- void main() {
12
- gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
13
- }
14
- `,R=performance.now(),F=0,v=0,b=e=>{let r=(0,s.event)({vertex:W,fragment:V,size:[0,0],mouse:[0,0],count:6,counter:0,init:()=>{r(e);let E=r.gl,i=r.vs||r.vert||r.vertex,u=r.fs||r.frag||r.fragment,T=d(E,i,E.VERTEX_SHADER),c=d(E,u,E.FRAGMENT_SHADER);r.count===6&&r.attribute({a_position:Y}),(0,_.frame)(()=>void r.render()||1),r.pg=r.varying?p(E,T,c,r.varying):D(E,T,c),r.lastActiveUnit=0,r.activeUnit=(0,s.nested)(()=>r.lastActiveUnit++),r.location=(0,s.nested)((f,m=!1)=>m?E?.getAttribLocation(r.pg,f):E?.getUniformLocation(r.pg,f))},render:()=>{r.gl.useProgram(r.pg),r.frame.flush(),F=R,R=performance.now()/1e3,v=R-F,r.uniform({iTime:R,iPrevTime:F,iDeltaTime:v})},resize:(E,i=r.width||window.innerWidth,u=r.height||window.innerHeight)=>{r.size[0]=r.el.width=i,r.size[1]=r.el.height=u,r.uniform("iResolution",r.size)},mousemove:(E,i=E.clientX,u=E.clientY)=>{let[T,c]=r.size,{top:f,left:m}=r.el.getBoundingClientRect();r.mouse[0]=(i-f-T/2)/(T/2),r.mouse[1]=-(u-m-c/2)/(c/2),r.uniform("iMouse",r.mouse)},load:(E,i)=>{r.frame(()=>{let u=r.location(i.alt),T=r.activeUnit(i.alt),c=X(r.gl,i);r.frame(()=>(S(r.gl,u,T,c),!0))})},clear:(E="COLOR_BUFFER_BIT")=>{r.frame(()=>void r.gl.clear(r.gl[E]))},viewport:(E=r.size)=>{r.frame(()=>void r.gl.viewport(0,0,...E))},drawArrays:(E="TRIANGLES")=>{r.frame(()=>{r.gl.drawArrays(r.gl[E],0,r.count)})},drawElements:(E="TRIANGLES",i="UNSIGNED_SHORT")=>{r.frame(()=>{E=r.gl[E],i=r.gl[i],r.gl.drawElements(E,r.count,i,0)})}}),I=(E,i,u="anonymous")=>{if(typeof window>"u")return;let T=new Image,c=f=>r.load(f,T);T.addEventListener("load",c,!1),Object.assign(T,{src:i,alt:E,crossOrigin:u})},M=(E,i=0,u=!1)=>{let T=x(i,u);r.frame(()=>{let c=r.location(E);u?r.gl[T](c,!1,i):r.gl[T](c,i)})},N=(E,i,u)=>{r.frame(()=>{let T=r.location(E,!0),c=L(r.gl,i),f=y(r.gl,u),m=r.count,h=P(m,i,u);B(r.gl,h,T,c,f)})};return r.frame=(0,_.queue)(),r.texture=(0,s.durable)(I),r.uniform=(0,s.durable)(M),r.attribute=(0,s.durable)(N),r},U=b(),k=(e,t=U)=>{let n=()=>{a(e),a.el=t.el,a.gl=t.gl,a.frame=t.frame,a.init(),t({resize:a.resize,mousemove:a.mousemove})},o=()=>{a(e),t({resize:a.resize,mousemove:a.mousemove})},a=b();return a({mount:n,clean:o}),a},$=U;0&&(module.exports={createGL,createTF,gl});
15
+ `,r?.uniforms&&(Object.entries(r.uniforms).forEach(([f,p])=>{let x=ke(p);s+=`uniform ${x} ${f};
16
+ `}),s+=`
17
+ `),o&&(s+=`out vec4 fragColor;
18
+
19
+ `),s+=`void main() {
20
+ `,s+=o?` fragColor = ${i};
21
+ `:` gl_FragColor = ${i};
22
+ `,s+=`}
23
+ `,s};var He=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],V=e=>{e("init",()=>{let n=e.gl,o=e.vs||e.vert||e.vertex,i=e.fs||e.frag||e.fragment;a.obj(i)&&(i=b(i)),a.obj(o)&&(o=b(o)),e.count===6&&e.attribute({a_position:He}),e.pg=B(n,X(n,o),I(n,i)),e.location=(0,z.nested)((s,f=!1)=>f?n.getAttribLocation(e.pg,s):n.getUniformLocation(e.pg,s))}),e("clean",()=>{let n=e.gl;F(n,e.pg)}),e("render",()=>{let n=e.gl;n.useProgram(e.pg),e.queue.flush(),n.clear(n.COLOR_BUFFER_BIT),n.viewport(0,0,...e.size),n.drawArrays(n.TRIANGLES,0,e.count)}),e("_attribute",(n="",o,i)=>{let s=e.gl,f=e.count,p=e.location(n,!0),x=v(s,o),c=P(s,i),m=G(f,o,i);N(s,m,p,x,c)}),e("_uniform",(n,o=0,i=!1)=>{let s=M(o,i),f=e.gl,p=e.location(n);i?f[s](p,!1,o):f[s](p,o)});let r=n=>{let o=e.location(n.alt),i=e.activeUnit(n.alt),s=W(e.gl,n);D(e.gl,o,i,s)};e("_texture",(n,o)=>{let i=new Image;i.addEventListener("load",r.bind(null,i),!1),Object.assign(i,{src:o,alt:n,crossOrigin:"anonymous"})});let t=0;return e.activeUnit=(0,z.nested)(()=>t++),e};var q=async()=>{if(!navigator.gpu)throw new Error("WebGPU is not supported in this browser");let e=await navigator.gpu.requestAdapter();if(!e)throw new Error("Failed to get WebGPU adapter");let r=await e.requestDevice();if(!r)throw new Error("Failed to get WebGPU device");return{adapter:e,device:r}},je=()=>"gpu"in navigator,Ke=e=>({maxTextureDimension1D:e.limits.maxTextureDimension1D,maxTextureDimension2D:e.limits.maxTextureDimension2D,maxTextureDimension3D:e.limits.maxTextureDimension3D,maxTextureArrayLayers:e.limits.maxTextureArrayLayers,maxBindGroups:e.limits.maxBindGroups,maxDynamicUniformBuffersPerPipelineLayout:e.limits.maxDynamicUniformBuffersPerPipelineLayout,maxDynamicStorageBuffersPerPipelineLayout:e.limits.maxDynamicStorageBuffersPerPipelineLayout,maxSampledTexturesPerShaderStage:e.limits.maxSampledTexturesPerShaderStage,maxSamplersPerShaderStage:e.limits.maxSamplersPerShaderStage,maxStorageBuffersPerShaderStage:e.limits.maxStorageBuffersPerShaderStage,maxStorageTexturesPerShaderStage:e.limits.maxStorageTexturesPerShaderStage,maxUniformBuffersPerShaderStage:e.limits.maxUniformBuffersPerShaderStage,maxUniformBufferBindingSize:e.limits.maxUniformBufferBindingSize,maxStorageBufferBindingSize:e.limits.maxStorageBufferBindingSize,maxVertexBuffers:e.limits.maxVertexBuffers,maxVertexAttributes:e.limits.maxVertexAttributes,maxVertexBufferArrayStride:e.limits.maxVertexBufferArrayStride,maxComputeWorkgroupStorageSize:e.limits.maxComputeWorkgroupStorageSize,maxComputeInvocationsPerWorkgroup:e.limits.maxComputeInvocationsPerWorkgroup,maxComputeWorkgroupSizeX:e.limits.maxComputeWorkgroupSizeX,maxComputeWorkgroupSizeY:e.limits.maxComputeWorkgroupSizeY,maxComputeWorkgroupSizeZ:e.limits.maxComputeWorkgroupSizeZ,maxComputeWorkgroupsPerDimension:e.limits.maxComputeWorkgroupsPerDimension}),Ze=e=>{e.addEventListener("uncapturederror",r=>{console.error("WebGPU uncaptured error:",r.error)})},Qe=(e,r,t="bgra8unorm")=>{let n=e.getContext("webgpu");if(!n)throw new Error("Failed to get WebGPU canvas context");return n.configure({device:r,format:t,alphaMode:"premultiplied"}),n};var Je=`
24
+ @vertex
25
+ fn main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {
26
+ var pos = array<vec2<f32>, 6>(
27
+ vec2<f32>(-1.0, -1.0),
28
+ vec2<f32>( 1.0, -1.0),
29
+ vec2<f32>(-1.0, 1.0),
30
+ vec2<f32>(-1.0, 1.0),
31
+ vec2<f32>( 1.0, -1.0),
32
+ vec2<f32>( 1.0, 1.0)
33
+ );
34
+ return vec4<f32>(pos[vertexIndex], 0.0, 1.0);
35
+ }
36
+ `,er=`
37
+ @fragment
38
+ fn main() -> @location(0) vec4<f32> {
39
+ return vec4<f32>(1.0, 0.0, 0.0, 1.0);
40
+ }
41
+ `,Y=(e,r=Je,t=er,n="bgra8unorm")=>{let o=e.createShaderModule({code:r}),i=e.createShaderModule({code:t});return e.createRenderPipeline({layout:"auto",vertex:{module:o,entryPoint:"main"},fragment:{module:i,entryPoint:"main",targets:[{format:n}]},primitive:{topology:"triangle-list"}})},rr=(e,r)=>{let t=e.createShaderModule({code:r});return e.createComputePipeline({layout:"auto",compute:{module:t,entryPoint:"main"}})},tr=(e,r)=>e.createShaderModule({code:r}),nr=(e,r)=>e.createBindGroupLayout({entries:r}),or=(e,r,t)=>e.createBindGroup({layout:r,entries:t}),k=(e,r,t)=>{let n={colorAttachments:[r]};return t&&(n.depthStencilAttachment=t),e.beginRenderPass(n)},H=e=>e.createCommandEncoder();var pe=(e,r)=>{let t={target:"webgpu",nodes:new Map,variables:new Map,functions:new Map,...r};return E(e,t)},E=(e,r)=>e?e.value!==void 0?ir(e.value,e.type):e.property&&e.parent?`${E(e.parent,r)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?ar(e,r):e.mathFunction&&e.children&&e.children.length>=1?sr(e,r):"0.0":"0.0",ir=(e,r)=>{if(r==="float"){let t=Number(e);return t%1===0?`${t}.0`:`${t}`}if(r==="int")return`${Math.floor(Number(e))}`;if(r==="bool")return e?"true":"false";if(a.arr(e)){let t=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(r==="vec2")return`vec2<f32>(${t})`;if(r==="vec3")return`vec3<f32>(${t})`;if(r==="vec4")return`vec4<f32>(${t})`;if(r==="color")return`vec3<f32>(${t})`}return"0.0"},ar=(e,r)=>{if(!e.children||e.children.length<2)return"0.0";let t=E(e.children[0],r),n=E(e.children[1],r);return e.operator==="add"?`(${t} + ${n})`:e.operator==="sub"?`(${t} - ${n})`:e.operator==="mul"?`(${t} * ${n})`:e.operator==="div"?`(${t} / ${n})`:e.operator==="mod"?`(${t} % ${n})`:e.operator==="equal"?`(${t} == ${n})`:e.operator==="notEqual"?`(${t} != ${n})`:e.operator==="lessThan"?`(${t} < ${n})`:e.operator==="lessThanEqual"?`(${t} <= ${n})`:e.operator==="greaterThan"?`(${t} > ${n})`:e.operator==="greaterThanEqual"?`(${t} >= ${n})`:e.operator==="and"?`(${t} && ${n})`:e.operator==="or"?`(${t} || ${n})`:`(${t} + ${n})`},sr=(e,r)=>{if(!e.children||e.children.length<1)return"0.0";let t=e.mathFunction,n=e.children.map(f=>E(f,r)),[o,i,s]=n;if(n.length===1){if(t==="abs")return`abs(${o})`;if(t==="acos")return`acos(${o})`;if(t==="asin")return`asin(${o})`;if(t==="atan")return`atan(${o})`;if(t==="ceil")return`ceil(${o})`;if(t==="cos")return`cos(${o})`;if(t==="floor")return`floor(${o})`;if(t==="fract")return`fract(${o})`;if(t==="length")return`length(${o})`;if(t==="normalize")return`normalize(${o})`;if(t==="sin")return`sin(${o})`;if(t==="sqrt")return`sqrt(${o})`;if(t==="tan")return`tan(${o})`}if(n.length===2){if(t==="atan2")return`atan2(${o}, ${i})`;if(t==="pow")return`pow(${o}, ${i})`;if(t==="min")return`min(${o}, ${i})`;if(t==="max")return`max(${o}, ${i})`;if(t==="dot")return`dot(${o}, ${i})`;if(t==="cross")return`cross(${o}, ${i})`;if(t==="distance")return`distance(${o}, ${i})`;if(t==="reflect")return`reflect(${o}, ${i})`}return n.length===3?t==="mix"?`mix(${o}, ${i}, ${s})`:t==="clamp"?`clamp(${o}, ${i}, ${s})`:t==="smoothstep"?`smoothstep(${o}, ${i}, ${s})`:o:o||"0.0"},y=(e,r)=>{let t="";r?.uniforms&&(Object.entries(r.uniforms).forEach(([o,i])=>{let s=ur(i);t+=`@group(0) @binding(0) var<uniform> ${o}: ${s};
42
+ `}),t+=`
43
+ `),t+=`@fragment
44
+ `,t+=`fn main() -> @location(0) vec4<f32> {
45
+ `;let n=pe(e);return t+=` return ${n};
46
+ `,t+=`}
47
+ `,t},ur=e=>{if(a.num(e))return"f32";if(a.bol(e))return"bool";if(a.arr(e)){let r=e.length;if(r===2)return"vec2<f32>";if(r===3)return"vec3<f32>";if(r===4)return"vec4<f32>"}return"f32"};var R=(e,r,t)=>{let n=a.arr(r)?new Float32Array(r):r,o=e.createBuffer({size:n.byteLength,usage:t,mappedAtCreation:!0});return n instanceof Float32Array?new Float32Array(o.getMappedRange()).set(n):n instanceof Uint32Array&&new Uint32Array(o.getMappedRange()).set(n),o.unmap(),o},fr=(e,r)=>R(e,r,32),mr=(e,r)=>R(e,new Uint32Array(r),64),pr=(e,r)=>e.createBuffer({size:r,usage:68,mappedAtCreation:!1}),cr=(e,r)=>e.createBuffer({size:r,usage:132,mappedAtCreation:!1}),lr=(e,r,t,n=0)=>{let o=a.arr(t)?new Float32Array(t):t;e.queue.writeBuffer(r,n,o)},dr=e=>e.destroy(),xr=e=>e.length*4,gr=(e,r=256)=>Math.ceil(e/r)*r,Tr=(e,r)=>r.map(t=>R(e,t.data,t.usage)),Er={VERTEX:32,INDEX:64,UNIFORM:64,STORAGE:128,COPY_SRC:4,COPY_DST:8,MAP_READ:1,MAP_WRITE:2};var hr=(e,r=1280,t=800,n="rgba8unorm",o=20)=>e.createTexture({size:{width:r,height:t,depthOrArrayLayers:1},format:n,usage:o}),br=(e,r,t="rgba8unorm")=>{let n=hr(e,r.width,r.height,t,20);return e.queue.copyExternalImageToTexture({source:r},{texture:n},{width:r.width,height:r.height}),n};var yr=(e,r=1280,t=800,n="depth24plus")=>e.createTexture({size:{width:r,height:t,depthOrArrayLayers:1},format:n,usage:16}),Rr=(e,r={})=>e.createSampler({magFilter:r.magFilter||"linear",minFilter:r.minFilter||"linear",addressModeU:r.addressModeU||"repeat",addressModeV:r.addressModeV||"repeat",addressModeW:r.addressModeW||"repeat"}),Sr=(e,r={})=>e.createView(r),$r=(e,r,t,n=1280,o=800)=>{e.queue.writeTexture({texture:r},t,{bytesPerRow:n*4},{width:n,height:o})},_r=e=>e.destroy(),Lr={COPY_SRC:1,COPY_DST:2,TEXTURE_BINDING:4,STORAGE_BINDING:8,RENDER_ATTACHMENT:16},Ar={RGBA8_UNORM:"rgba8unorm",RGBA8_SRGB:"rgba8unorm-srgb",BGRA8_UNORM:"bgra8unorm",BGRA8_SRGB:"bgra8unorm-srgb",DEPTH24_PLUS:"depth24plus",DEPTH32_FLOAT:"depth32float"};var j=e=>e({init:async()=>{let{device:n}=await q();e.gl={device:n};let o=e.vs||e.vert||e.vertex,i=e.fs||e.frag||e.fragment;a.obj(o)&&(o=y(i)),a.obj(i)&&(i=y(i)),e.gl.pipeline=Y(n,o,i)},loop:()=>{let{device:n,context:o,pipeline:i}=e.gl,s=H(n),f=k(s,{view:o.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"});f.setPipeline(i),f.draw(e.count),f.end(),n.queue.submit([s.finish()])}});var Cr=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],K=["x","y","z","w","r","g","b","a","s","t","p","q"],Z=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],Q=["abs","acos","asin","atan","atan2","ceil","clamp","cos","cross","degrees","distance","dot","exp","exp2","faceforward","floor","fract","length","all","any","bitcast","cbrt","dFdx","dFdy","difference","equals","fwidth","inverseSqrt","lengthSq","log","log2","max","min","mix","negate","normalize","oneMinus","pow","pow2","pow3","pow4","radians","reciprocal","reflect","refract","round","saturate","sign","sin","smoothstep","sqrt","step","tan","transformDirection","trunc"],J=[!0,!1],ee=[0,1,2,3,4,5],re=[0,1,.5,2];var wr=0,Ur=()=>`node_${++wr}`,h=(e,r,t)=>({id:Ur(),type:e,value:r,children:[],...t}),vr=(e="")=>K.includes(e),Pr=(e="")=>Z.includes(e),Nr=(e="")=>Q.includes(e),S=(e,r)=>{let t=(o,i)=>{if(!(!a.str(i)||i==="then"))return i==="id"?e.id:i==="type"?e.type:i==="value"?e.value:i==="property"?e.property:vr(i)?S(h(Gr(i),void 0,{parent:e,property:i}),r):Pr(i)?(...s)=>S(h(e.type,void 0,{operator:i,children:[e,...s]}),r):Nr(i)?(...s)=>S(h(Br(i,e.type),void 0,{mathFunction:i,children:[e,...s]}),r):r?.({path:[i],args:[]})},n=(o,i,s)=>r?.({path:[],args:s});return new Proxy(()=>{},{get:t,apply:n})},Gr=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",Br=(e,r)=>e==="length"?"float":r,u=(e,r,t)=>{let n=h(e,r,t);return S(n)};var Fr=e=>{if(a.num(e))return"float";if(a.bol(e))return"bool";if(a.arr(e)){let r=e.length;if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4";if(r===9)return"mat3";if(r===16)return"mat4"}return a.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},l=e=>{let r=Fr(e),t=e,n=null,o=null,i=u(r,t),s=m=>{t=m,i.value=m},f=m=>(n=m,c),p=m=>(o=m,c),x=m=>{if(n){let g=n(m);g!==void 0&&s(g)}if(o){let g=o(m);g!==void 0&&s(g)}},c=Object.create(i);return c.set=s,c.onObjectUpdate=f,c.onRenderUpdate=p,c._updateFromContext=x,c.isUniform=!0,c},ce=l(0),le=l(0),de=l(0),rn=l([1920,1080]),tn=l([0,0]),Mr=e=>{if(e.time!==void 0){let r=ce.value||0;ce.set(e.time),le.set(r),de.set(e.time-r)}};var te=new Map,ne=new Map,oe=new Map,xe=()=>{J.forEach(e=>{te.set(e,u("bool",e))}),ee.forEach(e=>{ne.set(e,u("int",e))}),re.forEach(e=>{oe.set(e,u("float",e))})},$=e=>(te.has(e)||xe(),te.get(e)||u("bool",e)),_=e=>ne.has(e)?ne.get(e):u("int",e),L=e=>oe.has(e)?oe.get(e):u("float",e),Xr=e=>{let r=new Map,t=new Map;return e.forEach(n=>{let o=Ir(n);t.has(o)?(r.has(o)||r.set(o,[t.get(o)]),r.get(o).push(n)):t.set(o,n)}),r},Ir=e=>[e.type,`${e.value}`,e.property||""].join("|");xe();var Wr=e=>a.bol(e)?$(e):a.num(e)?a.int(e)?_(e):L(e):a.arr(e)?ge(e):a.obj(e)?Dr(e):u("float",0),ge=e=>{let r=e.length;return r===2?u("vec2",e):r===3?u("vec3",e):r===4?u("vec4",e):r===9?u("mat3",e):r===16?u("mat4",e):u("float",e[0])},Dr=e=>{if("r"in e&&"g"in e&&"b"in e){let r=[e.r,e.g,e.b];return"a"in e&&r.push(e.a),u("color",r)}if("x"in e&&"y"in e){let r=[e.x,e.y];return"z"in e&&r.push(e.z),"w"in e&&r.push(e.w),ge(r)}return u("float",0)},A=e=>a.num(e)?L(e):u("float",Number(e)),Or=e=>a.num(e)&&Number.isInteger(e)?_(e):u("int",Math.floor(Number(e))),zr=e=>$(!!e),Vr=(e,r)=>a.und(e)?u("vec2",[0,0]):a.und(r)?a.arr(e)?u("vec2",e.slice(0,2)):a.obj(e)&&"x"in e&&"y"in e?u("vec2",[e.x,e.y]):u("vec2",[Number(e),Number(e)]):u("vec2",[Number(e),Number(r)]),Te=(e,r,t)=>a.und(e)?u("vec3",[0,0,0]):a.und(r)?a.arr(e)?u("vec3",e.slice(0,3)):a.obj(e)&&"x"in e&&"y"in e&&"z"in e?u("vec3",[e.x,e.y,e.z]):u("vec3",[Number(e),Number(e),Number(e)]):t===void 0?u("vec3",[Number(e),Number(r),0]):u("vec3",[Number(e),Number(r),Number(t)]),qr=(e,r,t,n)=>a.und(e)?u("vec4",[0,0,0,1]):a.und(r)?a.arr(e)?u("vec4",e.slice(0,4)):a.obj(e)&&"x"in e&&"y"in e&&"z"in e&&"w"in e?u("vec4",[e.x,e.y,e.z,e.w]):u("vec4",[Number(e),Number(e),Number(e),1]):u("vec4",[Number(e),Number(r),Number(t),Number(n)]),Yr=(e,r,t)=>{if(e===void 0)return u("color",[1,1,1]);if(a.str(e)&&e.startsWith("#")){let n=e.slice(1),o=parseInt(n,16);return u("color",[(o>>16&255)/255,(o>>8&255)/255,(o&255)/255])}return a.num(e)&&r===void 0&&t===void 0?u("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):Te(e,r,t)};var kr=e=>{let r=(...t)=>{let n=t.map(i=>a.obj(i)&&"type"in i&&i.type?i:A(i));return e(n)||A(0)};return r.call=t=>e(t),r},Hr=(e,r)=>{r();let t={ElseIf(n,o){return o(),t},Else(n){n()}};return t},jr=u("vec4",void 0),Kr=u("vec4",void 0),Zr=l(0),Qr=l([1920,1080]),Jr=l([0,0]),et=e=>e.abs(),rt=e=>e.sin(),tt=e=>e.cos(),nt=e=>e.tan(),ot=e=>e.sqrt(),it=e=>e.floor(),at=e=>e.ceil(),st=e=>e.fract(),ut=e=>e.normalize(),ft=e=>e.length();var C=performance.now(),ie=0,Ee=0,mt=e=>a.obj(e)?"isGL"in e:!1,he=e=>{let r=(0,d.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,counter:0});return r("mount",()=>{O()||(r.isWebGL=!0),r.isWebGL?V(r):j(r),r.init(),r.resize(),r.frame(()=>(r.loop(),r.render(),r.isLoop)),!r.isNative&&(window.addEventListener("resize",r.resize),r.el.addEventListener("mousemove",r.mousemove))}),r("clean",()=>{r.frame.stop(),r.frame.clean(r.render),!r.isNative&&(window.removeEventListener("resize",r.resize),r.el.removeEventListener("mousemove",r.mousemove))}),r("loop",()=>{ie=C,C=performance.now()/1e3,Ee=C-ie,r.uniform({iPrevTime:ie,iTime:C,iDeltaTime:Ee})}),r("resize",()=>{let t=r.width||window.innerWidth,n=r.height||window.innerHeight;r.size[0]=r.el.width=t,r.size[1]=r.el.height=n,r.uniform("iResolution",r.size)}),r("mousemove",(t,n=t.clientX,o=t.clientY)=>{let[i,s]=r.size,{top:f,left:p}=r.el.getBoundingClientRect();r.mouse[0]=(n-f-i/2)/(i/2),r.mouse[1]=-(o-p-s/2)/(s/2),r.uniform("iMouse",r.mouse)}),r.queue=(0,w.createQueue)(),r.frame=(0,w.createFrame)(),r.attribute=(0,d.durable)((t,n,o)=>{r.queue(()=>void r._attribute?.(t,n,o))}),r.uniform=(0,d.durable)((t,n,o)=>{r.queue(()=>void r._uniform?.(t,n,o))}),r.texture=(0,d.durable)((t,n)=>{r.queue(()=>void r._texture?.(t,n))}),r(e)},pt=he;0&&(module.exports={BufferUsage,CACHE_BOOLS,CACHE_FLOATS,CACHE_INTS,FUNCTIONS,Fn,If,OPERATORS,SWIZZLES,TYPES,TextureFormat,TextureUsage,abs,activeTexture,alignBufferSize,bool,calculateBufferSize,ceil,checkWebGPUSupport,color,configureCanvasContext,convertToNode,cos,createAttribute,createBindGroup,createBindGroupLayout,createBuffer,createBuffers,createCommandEncoder,createComputePipeline,createCubeTexture,createDepthTexture,createEmptyTexture,createFragmentShader,createGL,createIbo,createIndexBuffer,createNode,createProgram,createRenderPass,createRenderPipeline,createSampler,createShaderModule,createStorageBuffer,createTexture,createTextureFromImage,createTextureView,createUniformBuffer,createVbo,createVertexBuffer,createVertexShader,deleteBuffer,deleteProgram,deleteShader,deleteTexture,destroyBuffer,destroyTexture,dig,each,ext,fig,findDuplicateNodes,float,floor,flush,fract,getAttribLocation,getCachedBool,getCachedFloat,getCachedInt,getDeviceLimits,getProgramInfo,getShaderInfo,getUniformLocation,getUniformType,gl_FragCoord,gl_Position,glsl,iDeltaTime,iMouse,iPrevTime,iResolution,iTime,int,is,isGL,isServer,isWebGPUSupported,length,node,nodeToGLSL,nodeToWGSL,normalize,replace,requestWebGPUDevice,setupDeviceErrorHandling,sig,sin,sqrt,tan,uniform,updateBuffer,updateIbo,updateTexture,updateUniforms,updateVbo,vec2,vec3,vec4,vertexStride,webgl,webgpu,wgsl});
15
48
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts","../utils.ts"],"sourcesContent":["import { event, durable, nested } from 'reev'\nimport { queue, frame } from 'refr'\nimport {\n uniformType,\n vertexStride,\n createProgram,\n createTfProgram,\n createShader,\n createAttribute,\n createTexture,\n createVbo,\n createIbo,\n activeTexture,\n} from './utils'\nimport type { GL } from './types'\n\nconst a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]\n\nconst _defaultVertex = `\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n`\n\nconst _defaultFragment = `\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n`\n\nlet iTime = performance.now(),\n iPrevTime = 0,\n iDeltaTime = 0\n\nexport const createGL = (props?: Partial<GL>) => {\n const init = () => {\n self(props)\n const gl = self.gl\n const _v = self.vs || self.vert || self.vertex\n const _f = self.fs || self.frag || self.fragment\n const vs = createShader(gl, _v, gl.VERTEX_SHADER)\n const fs = createShader(gl, _f, gl.FRAGMENT_SHADER)\n if (self.count === 6) self.attribute({ a_position })\n frame(() => void self.render() || 1)\n self.pg = self.varying\n ? createTfProgram(gl, vs, fs, self.varying)\n : createProgram(gl, vs, fs)\n self.lastActiveUnit = 0\n self.activeUnit = nested(() => self.lastActiveUnit++)\n self.location = nested((key, isAttribute = false) => {\n return isAttribute\n ? gl?.getAttribLocation(self.pg, key)\n : gl?.getUniformLocation(self.pg, key)\n })\n }\n\n const render = () => {\n self.gl.useProgram(self.pg)\n self.frame.flush()\n iPrevTime = iTime\n iTime = performance.now() / 1000\n iDeltaTime = iTime - iPrevTime\n self.uniform({ iTime, iPrevTime, iDeltaTime })\n }\n\n const resize = (\n _e: any,\n width = self.width || window.innerWidth,\n height = self.height || window.innerHeight\n ) => {\n self.size[0] = self.el.width = width\n self.size[1] = self.el.height = height\n self.uniform('iResolution', self.size)\n }\n\n const mousemove = (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = self.size\n const { top, left } = self.el.getBoundingClientRect()\n self.mouse[0] = (x - top - w / 2) / (w / 2)\n self.mouse[1] = -(y - left - h / 2) / (h / 2)\n self.uniform('iMouse', self.mouse)\n }\n\n const load = (_: any, image: any) => {\n self.frame(() => {\n const loc = self.location(image.alt)\n const unit = self.activeUnit(image.alt)\n const tex = createTexture(self.gl, image)\n self.frame(() => {\n activeTexture(self.gl, loc, unit, tex)\n return true\n })\n })\n }\n\n const clear = (key = 'COLOR_BUFFER_BIT') => {\n self.frame(() => void self.gl.clear(self.gl[key]))\n }\n\n const viewport = (size: number[] = self.size) => {\n self.frame(() => void self.gl.viewport(0, 0, ...size))\n }\n\n const drawArrays = (mode = 'TRIANGLES') => {\n // self.gl.drawArrays(self.gl[mode], 0, self.count)\n self.frame(() => {\n self.gl.drawArrays(self.gl[mode], 0, self.count)\n })\n }\n\n const drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') => {\n self.frame(() => {\n mode = self.gl[mode]\n type = self.gl[type]\n self.gl.drawElements(mode, self.count, type, 0)\n })\n }\n\n const self = event<Partial<GL>>({\n vertex: _defaultVertex,\n fragment: _defaultFragment,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n counter: 0,\n init,\n render,\n resize,\n mousemove,\n load,\n clear,\n viewport,\n drawArrays,\n drawElements,\n }) as GL\n\n const _texture = (\n alt: string,\n src: string,\n crossOrigin = 'anonymous'\n ) => {\n if (typeof window === 'undefined') return\n const image = new Image()\n const callback = (_: any) => self.load(_, image)\n image.addEventListener('load', callback, false)\n Object.assign(image, { src, alt, crossOrigin })\n }\n\n const _uniform = (key: string, value = 0, isMatrix = false) => {\n const type = uniformType(value, isMatrix)\n self.frame(() => {\n const loc = self.location(key)\n if (isMatrix) self.gl[type](loc, false, value)\n else self.gl[type](loc, value)\n })\n }\n\n const _attribute = (\n key: string,\n value: number[],\n iboValue?: number[]\n ) => {\n self.frame(() => {\n const loc = self.location(key, true)\n const vbo = createVbo(self.gl, value)\n const ibo = createIbo(self.gl, iboValue)\n const n = self.count\n const stride = vertexStride(n, value, iboValue)\n createAttribute(self.gl, stride, loc, vbo, ibo)\n })\n }\n\n self.frame = queue()\n self.texture = durable(_texture)\n self.uniform = durable(_uniform)\n self.attribute = durable(_attribute)\n\n return self\n}\n\nexport const gl = createGL()\n\nexport const createTF = (props?: Partial<GL>, self = gl) => {\n const mount = () => {\n tf(props)\n tf.el = self.el\n tf.gl = self.gl\n tf.frame = self.frame\n tf.init()\n self({ resize: tf.resize, mousemove: tf.mousemove })\n }\n\n const clean = () => {\n tf(props)\n self({ resize: tf.resize, mousemove: tf.mousemove })\n }\n\n const tf = createGL()\n\n tf({ mount, clean })\n return tf\n}\n\nexport default gl\n","/**\n * utils\n */\nexport const uniformType = (value: number | number[], isMatrix = false) => {\n let length = typeof value === 'number' ? 0 : value?.length\n if (!length) return `uniform1f`\n if (!isMatrix) return `uniform${length}fv`\n length = Math.sqrt(length) << 0\n return `uniformMatrix${length}fv`\n}\n\nexport const vertexStride = (\n count: number,\n value: number[],\n iboValue?: number[]\n) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n if (stride !== stride << 0)\n console.warn(`Vertex Stride Error: count ${count} is mismatch`)\n return stride << 0\n}\n\n/**\n * graphics\n */\nexport const createShader = (gl: any, source: string, type: unknown) => {\n const shader = gl.createShader(type)\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n return shader\n } else throw 'Could not compile glsl\\n\\n' + gl.getShaderInfoLog(shader)\n}\n\nexport const createProgram = (gl: any, vs: any, fs: any) => {\n const program = gl.createProgram()\n gl.attachShader(program, vs)\n gl.attachShader(program, fs)\n gl.linkProgram(program)\n if (gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.useProgram(program)\n return program\n } else {\n console.log(gl.getProgramInfoLog(program))\n return null\n }\n}\n\nexport const createTfProgram = (gl: any, vs: any, fs: any, varyings?: any) => {\n const pg = gl.createProgram()\n gl.attachShader(pg, vs)\n gl.attachShader(pg, fs)\n gl.transformFeedbackVaryings(pg, varyings, gl.SEPARATE_ATTRIBS)\n gl.linkProgram(pg)\n if (gl.getProgramParameter(pg, gl.LINK_STATUS)) {\n gl.useProgram(pg)\n return pg\n } else {\n console.warn(gl.getProgramInfoLog(pg))\n return null\n }\n}\n\nexport const createVbo = (gl: any, data: number[]) => {\n if (!data) return\n const vbo = gl.createBuffer()\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo)\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW)\n gl.bindBuffer(gl.ARRAY_BUFFER, null)\n return vbo\n}\n\nexport const createIbo = (gl: any, data?: number[]) => {\n if (!data) return\n const ibo = gl.createBuffer()\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo)\n gl.bufferData(\n gl.ELEMENT_ARRAY_BUFFER,\n new Int16Array(data),\n gl.STATIC_DRAW\n )\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null)\n return ibo\n}\n\nexport const createAttribute = (\n gl: any,\n stride: number,\n location: any,\n vbo: any,\n ibo: any\n) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo)\n gl.enableVertexAttribArray(location)\n gl.vertexAttribPointer(location, stride, gl.FLOAT, false, 0, 0)\n if (ibo) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createFramebuffer = (gl: any, width: number, height: number) => {\n const frameBuffer = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n const renderBuffer = gl.createRenderbuffer()\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer)\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n gl.DEPTH_COMPONENT16,\n width,\n height\n )\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n renderBuffer\n )\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null\n )\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n )\n gl.bindTexture(gl.TEXTURE_2D, null)\n gl.bindRenderbuffer(gl.RENDERBUFFER, null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n return { frameBuffer, renderBuffer, texture }\n}\n\nexport const createFramebufferFloat = (\n gl: any,\n ext: any,\n width: number,\n height: number\n) => {\n const flg =\n ext.textureFloat != null\n ? gl.FLOAT\n : ext.textureHalfFloat.HALF_FLOAT_OES\n const frameBuffer = gl.createFramebuffer()\n const texture = gl.createTexture()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n flg,\n null\n )\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n )\n gl.bindTexture(gl.TEXTURE_2D, null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n return { frameBuffer, texture }\n}\n\nexport const createTexture = (gl: any, img: any) => {\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img)\n gl.generateMipmap(gl.TEXTURE_2D)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.bindTexture(gl.TEXTURE_2D, null)\n return texture\n}\n\nexport const activeTexture = (\n gl: any,\n location: any,\n activeUnit: any,\n texture: any\n) => {\n gl.uniform1i(location, activeUnit)\n gl.activeTexture(gl['TEXTURE' + activeUnit])\n gl.bindTexture(gl.TEXTURE_2D, texture)\n}\n"],"mappings":"4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,aAAAC,EAAA,YAAAC,EAAA,OAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAAuC,gBACvCC,EAA6B,gBCEtB,IAAMC,EAAc,CAACC,EAA0BC,EAAW,KAAU,CACnE,IAAIC,EAAS,OAAOF,GAAU,SAAW,EAAIA,GAAO,OACpD,OAAKE,EACAD,GACLC,EAAS,KAAK,KAAKA,CAAM,GAAK,EACvB,gBAAgBA,CAAM,MAFP,UAAUA,CAAM,KADlB,WAI5B,EAEaC,EAAe,CACpBC,EACAJ,EACAK,IACH,CACOA,IAAUD,EAAQ,KAAK,IAAI,GAAGC,CAAQ,EAAI,GAC9C,IAAMC,EAASN,EAAM,OAASI,EAC9B,OAAIE,IAAWA,GAAU,GACjB,QAAQ,KAAK,8BAA8BF,CAAK,cAAc,EAC/DE,GAAU,CACzB,EAKaC,EAAe,CAACC,EAASC,EAAgBC,IAAkB,CAChE,IAAMC,EAASH,EAAG,aAAaE,CAAI,EAGnC,GAFAF,EAAG,aAAaG,EAAQF,CAAM,EAC9BD,EAAG,cAAcG,CAAM,EACnBH,EAAG,mBAAmBG,EAAQH,EAAG,cAAc,EAC3C,OAAOG,EACR,KAAM;AAAA;AAAA,EAA+BH,EAAG,iBAAiBG,CAAM,CAC9E,EAEaC,EAAgB,CAACJ,EAASK,EAASC,IAAY,CACpD,IAAMC,EAAUP,EAAG,cAAc,EAIjC,OAHAA,EAAG,aAAaO,EAASF,CAAE,EAC3BL,EAAG,aAAaO,EAASD,CAAE,EAC3BN,EAAG,YAAYO,CAAO,EAClBP,EAAG,oBAAoBO,EAASP,EAAG,WAAW,GAC1CA,EAAG,WAAWO,CAAO,EACdA,IAEP,QAAQ,IAAIP,EAAG,kBAAkBO,CAAO,CAAC,EAClC,KAEvB,EAEaC,EAAkB,CAACR,EAASK,EAASC,EAASG,IAAmB,CACtE,IAAMC,EAAKV,EAAG,cAAc,EAK5B,OAJAA,EAAG,aAAaU,EAAIL,CAAE,EACtBL,EAAG,aAAaU,EAAIJ,CAAE,EACtBN,EAAG,0BAA0BU,EAAID,EAAUT,EAAG,gBAAgB,EAC9DA,EAAG,YAAYU,CAAE,EACbV,EAAG,oBAAoBU,EAAIV,EAAG,WAAW,GACrCA,EAAG,WAAWU,CAAE,EACTA,IAEP,QAAQ,KAAKV,EAAG,kBAAkBU,CAAE,CAAC,EAC9B,KAEvB,EAEaC,EAAY,CAACX,EAASY,IAAmB,CAC9C,GAAI,CAACA,EAAM,OACX,IAAMC,EAAMb,EAAG,aAAa,EAC5B,OAAAA,EAAG,WAAWA,EAAG,aAAca,CAAG,EAClCb,EAAG,WAAWA,EAAG,aAAc,IAAI,aAAaY,CAAI,EAAGZ,EAAG,WAAW,EACrEA,EAAG,WAAWA,EAAG,aAAc,IAAI,EAC5Ba,CACf,EAEaC,EAAY,CAACd,EAASY,IAAoB,CAC/C,GAAI,CAACA,EAAM,OACX,IAAMG,EAAMf,EAAG,aAAa,EAC5B,OAAAA,EAAG,WAAWA,EAAG,qBAAsBe,CAAG,EAC1Cf,EAAG,WACKA,EAAG,qBACH,IAAI,WAAWY,CAAI,EACnBZ,EAAG,WACX,EACAA,EAAG,WAAWA,EAAG,qBAAsB,IAAI,EACpCe,CACf,EAEaC,EAAkB,CACvBhB,EACAF,EACAmB,EACAJ,EACAE,IACH,CACGf,EAAG,WAAWA,EAAG,aAAca,CAAG,EAClCb,EAAG,wBAAwBiB,CAAQ,EACnCjB,EAAG,oBAAoBiB,EAAUnB,EAAQE,EAAG,MAAO,GAAO,EAAG,CAAC,EAC1De,GAAKf,EAAG,WAAWA,EAAG,qBAAsBe,CAAG,CAC3D,EA0FO,IAAMG,EAAgB,CAACC,EAASC,IAAa,CAC5C,IAAMC,EAAUF,EAAG,cAAc,EACjC,OAAAA,EAAG,YAAYA,EAAG,WAAYE,CAAO,EACrCF,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMA,EAAG,KAAMA,EAAG,cAAeC,CAAG,EACvED,EAAG,eAAeA,EAAG,UAAU,EAC/BA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,YAAYA,EAAG,WAAY,IAAI,EAC3BE,CACf,EAEaC,EAAgB,CACrBH,EACAI,EACAC,EACAH,IACH,CACGF,EAAG,UAAUI,EAAUC,CAAU,EACjCL,EAAG,cAAcA,EAAG,UAAYK,CAAU,CAAC,EAC3CL,EAAG,YAAYA,EAAG,WAAYE,CAAO,CAC7C,EDjMA,IAAMI,EAAa,CAAC,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,CAAC,EAEtDC,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjBC,EAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrBC,EAAQ,YAAY,IAAI,EACpBC,EAAY,EACZC,EAAa,EAERC,EAAYC,GAAwB,CAoFzC,IAAMC,KAAO,SAAmB,CACxB,OAAQP,EACR,SAAUC,EACV,KAAM,CAAC,EAAG,CAAC,EACX,MAAO,CAAC,EAAG,CAAC,EACZ,MAAO,EACP,QAAS,EACT,KA1FK,IAAM,CACXM,EAAKD,CAAK,EACV,IAAME,EAAKD,EAAK,GACVE,EAAKF,EAAK,IAAMA,EAAK,MAAQA,EAAK,OAClCG,EAAKH,EAAK,IAAMA,EAAK,MAAQA,EAAK,SAClCI,EAAKC,EAAaJ,EAAIC,EAAID,EAAG,aAAa,EAC1CK,EAAKD,EAAaJ,EAAIE,EAAIF,EAAG,eAAe,EAC9CD,EAAK,QAAU,GAAGA,EAAK,UAAU,CAAE,WAAAR,CAAW,CAAC,KACnD,SAAM,IAAM,KAAKQ,EAAK,OAAO,GAAK,CAAC,EACnCA,EAAK,GAAKA,EAAK,QACLO,EAAgBN,EAAIG,EAAIE,EAAIN,EAAK,OAAO,EACxCQ,EAAcP,EAAIG,EAAIE,CAAE,EAClCN,EAAK,eAAiB,EACtBA,EAAK,cAAa,UAAO,IAAMA,EAAK,gBAAgB,EACpDA,EAAK,YAAW,UAAO,CAACS,EAAKC,EAAc,KAC5BA,EACGT,GAAI,kBAAkBD,EAAK,GAAIS,CAAG,EAClCR,GAAI,mBAAmBD,EAAK,GAAIS,CAAG,CACpD,CACT,EAwEQ,OAtEO,IAAM,CACbT,EAAK,GAAG,WAAWA,EAAK,EAAE,EAC1BA,EAAK,MAAM,MAAM,EACjBJ,EAAYD,EACZA,EAAQ,YAAY,IAAI,EAAI,IAC5BE,EAAaF,EAAQC,EACrBI,EAAK,QAAQ,CAAE,MAAAL,EAAO,UAAAC,EAAW,WAAAC,CAAW,CAAC,CACrD,EAgEQ,OA9DO,CACPc,EACAC,EAAQZ,EAAK,OAAS,OAAO,WAC7Ba,EAASb,EAAK,QAAU,OAAO,cAClC,CACGA,EAAK,KAAK,CAAC,EAAIA,EAAK,GAAG,MAAQY,EAC/BZ,EAAK,KAAK,CAAC,EAAIA,EAAK,GAAG,OAASa,EAChCb,EAAK,QAAQ,cAAeA,EAAK,IAAI,CAC7C,EAuDQ,UArDU,CAACW,EAASG,EAAIH,EAAG,QAASI,EAAIJ,EAAG,UAAY,CACvD,GAAM,CAACK,EAAGC,CAAC,EAAIjB,EAAK,KACd,CAAE,IAAAkB,EAAK,KAAAC,CAAK,EAAInB,EAAK,GAAG,sBAAsB,EACpDA,EAAK,MAAM,CAAC,GAAKc,EAAII,EAAMF,EAAI,IAAMA,EAAI,GACzChB,EAAK,MAAM,CAAC,EAAI,EAAEe,EAAII,EAAOF,EAAI,IAAMA,EAAI,GAC3CjB,EAAK,QAAQ,SAAUA,EAAK,KAAK,CACzC,EAgDQ,KA9CK,CAACoB,EAAQC,IAAe,CAC7BrB,EAAK,MAAM,IAAM,CACT,IAAMsB,EAAMtB,EAAK,SAASqB,EAAM,GAAG,EAC7BE,EAAOvB,EAAK,WAAWqB,EAAM,GAAG,EAChCG,EAAMC,EAAczB,EAAK,GAAIqB,CAAK,EACxCrB,EAAK,MAAM,KACH0B,EAAc1B,EAAK,GAAIsB,EAAKC,EAAMC,CAAG,EAC9B,GACd,CACT,CAAC,CACT,EAqCQ,MAnCM,CAACf,EAAM,qBAAuB,CACpCT,EAAK,MAAM,IAAM,KAAKA,EAAK,GAAG,MAAMA,EAAK,GAAGS,CAAG,CAAC,CAAC,CACzD,EAkCQ,SAhCS,CAACkB,EAAiB3B,EAAK,OAAS,CACzCA,EAAK,MAAM,IAAM,KAAKA,EAAK,GAAG,SAAS,EAAG,EAAG,GAAG2B,CAAI,CAAC,CAC7D,EA+BQ,WA7BW,CAACC,EAAO,cAAgB,CAEnC5B,EAAK,MAAM,IAAM,CACTA,EAAK,GAAG,WAAWA,EAAK,GAAG4B,CAAI,EAAG,EAAG5B,EAAK,KAAK,CACvD,CAAC,CACT,EAyBQ,aAvBa,CAAC4B,EAAO,YAAaC,EAAO,mBAAqB,CAC9D7B,EAAK,MAAM,IAAM,CACT4B,EAAO5B,EAAK,GAAG4B,CAAI,EACnBC,EAAO7B,EAAK,GAAG6B,CAAI,EACnB7B,EAAK,GAAG,aAAa4B,EAAM5B,EAAK,MAAO6B,EAAM,CAAC,CACtD,CAAC,CACT,CAkBA,CAAC,EAEKC,EAAW,CACTC,EACAC,EACAC,EAAc,cACjB,CACG,GAAI,OAAO,OAAW,IAAa,OACnC,IAAMZ,EAAQ,IAAI,MACZa,EAAYd,GAAWpB,EAAK,KAAKoB,EAAGC,CAAK,EAC/CA,EAAM,iBAAiB,OAAQa,EAAU,EAAK,EAC9C,OAAO,OAAOb,EAAO,CAAE,IAAAW,EAAK,IAAAD,EAAK,YAAAE,CAAY,CAAC,CACtD,EAEME,EAAW,CAAC1B,EAAa2B,EAAQ,EAAGC,EAAW,KAAU,CACvD,IAAMR,EAAOS,EAAYF,EAAOC,CAAQ,EACxCrC,EAAK,MAAM,IAAM,CACT,IAAMsB,EAAMtB,EAAK,SAASS,CAAG,EACzB4B,EAAUrC,EAAK,GAAG6B,CAAI,EAAEP,EAAK,GAAOc,CAAK,EACxCpC,EAAK,GAAG6B,CAAI,EAAEP,EAAKc,CAAK,CACrC,CAAC,CACT,EAEMG,EAAa,CACX9B,EACA2B,EACAI,IACH,CACGxC,EAAK,MAAM,IAAM,CACT,IAAMsB,EAAMtB,EAAK,SAASS,EAAK,EAAI,EAC7BgC,EAAMC,EAAU1C,EAAK,GAAIoC,CAAK,EAC9BO,EAAMC,EAAU5C,EAAK,GAAIwC,CAAQ,EACjCK,EAAI7C,EAAK,MACT8C,EAASC,EAAaF,EAAGT,EAAOI,CAAQ,EAC9CQ,EAAgBhD,EAAK,GAAI8C,EAAQxB,EAAKmB,EAAKE,CAAG,CACtD,CAAC,CACT,EAEA,OAAA3C,EAAK,SAAQ,SAAM,EACnBA,EAAK,WAAU,WAAQ8B,CAAQ,EAC/B9B,EAAK,WAAU,WAAQmC,CAAQ,EAC/BnC,EAAK,aAAY,WAAQuC,CAAU,EAE5BvC,CACf,EAEaC,EAAKH,EAAS,EAEdmD,EAAW,CAAClD,EAAqBC,EAAOC,IAAO,CACpD,IAAMiD,EAAQ,IAAM,CACZC,EAAGpD,CAAK,EACRoD,EAAG,GAAKnD,EAAK,GACbmD,EAAG,GAAKnD,EAAK,GACbmD,EAAG,MAAQnD,EAAK,MAChBmD,EAAG,KAAK,EACRnD,EAAK,CAAE,OAAQmD,EAAG,OAAQ,UAAWA,EAAG,SAAU,CAAC,CAC3D,EAEMC,EAAQ,IAAM,CACZD,EAAGpD,CAAK,EACRC,EAAK,CAAE,OAAQmD,EAAG,OAAQ,UAAWA,EAAG,SAAU,CAAC,CAC3D,EAEMA,EAAKrD,EAAS,EAEpB,OAAAqD,EAAG,CAAE,MAAAD,EAAO,MAAAE,CAAM,CAAC,EACZD,CACf,EAEOE,EAAQpD","names":["core_exports","__export","createGL","createTF","core_default","gl","__toCommonJS","import_reev","import_refr","uniformType","value","isMatrix","length","vertexStride","count","iboValue","stride","createShader","gl","source","type","shader","createProgram","vs","fs","program","createTfProgram","varyings","pg","createVbo","data","vbo","createIbo","ibo","createAttribute","location","createTexture","gl","img","texture","activeTexture","location","activeUnit","a_position","_defaultVertex","_defaultFragment","iTime","iPrevTime","iDeltaTime","createGL","props","self","gl","_v","_f","vs","createShader","fs","createTfProgram","createProgram","key","isAttribute","_e","width","height","x","y","w","h","top","left","_","image","loc","unit","tex","createTexture","activeTexture","size","mode","type","_texture","alt","src","crossOrigin","callback","_uniform","value","isMatrix","uniformType","_attribute","iboValue","vbo","createVbo","ibo","createIbo","n","stride","vertexStride","createAttribute","createTF","mount","tf","clean","core_default"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/webgl/index.ts","../src/webgl/buffer.ts","../src/webgl/program.ts","../src/webgl/shader.ts","../src/webgl/texture.ts","../src/utils.ts","../src/code/glsl.ts","../src/webgpu/device.ts","../src/webgpu/pipeline.ts","../src/code/wgsl.ts","../src/webgpu/buffer.ts","../src/webgpu/texture.ts","../src/webgpu/index.ts","../src/node/const.ts","../src/node/node.ts","../src/node/uniform.ts","../src/node/cache.ts","../src/node/conv.ts","../src/node/index.ts"],"sourcesContent":["import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl/index'\nimport { webgpu } from './webgpu/index'\nimport { is, isWebGPUSupported } from './utils'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nexport * from './code/glsl'\nexport * from './code/wgsl'\nexport * from './node'\nexport * from './types'\nexport * from './utils'\nexport * from './webgl'\nexport * from './webgpu'\n\nlet iTime = performance.now(),\n iPrevTime = 0,\n iDeltaTime = 0\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\n\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event<Partial<GL>>({\n isNative: false,\n isWebGL: true,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n counter: 0,\n }) as EventState<GL>\n\n gl('mount', () => {\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n webgl(gl)\n } else webgpu(gl)\n gl.init()\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.render()\n return gl.isLoop\n })\n if (gl.isNative) return\n window.addEventListener('resize', gl.resize)\n gl.el.addEventListener('mousemove', gl.mousemove)\n })\n\n gl('clean', () => {\n gl.frame.stop()\n gl.frame.clean(gl.render)\n if (gl.isNative) return\n window.removeEventListener('resize', gl.resize)\n gl.el.removeEventListener('mousemove', gl.mousemove)\n })\n\n gl('loop', () => {\n iPrevTime = iTime\n iTime = performance.now() / 1000\n iDeltaTime = iTime - iPrevTime\n gl.uniform({ iPrevTime, iTime, iDeltaTime })\n // if (gl.fragmentNode) updateUniforms({ time: iTime }) // @TODO FIX\n })\n\n gl('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((key, value, iboValue) => {\n gl.queue(() => void gl._attribute?.(key, value, iboValue))\n })\n\n gl.uniform = durable((key, value, isMatrix) => {\n gl.queue(() => void gl._uniform?.(key, value, isMatrix))\n })\n\n gl.texture = durable((key, value) => {\n gl.queue(() => void gl._texture?.(key, value))\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested } from 'reev'\nimport { createAttribute, createIbo, createVbo, vertexStride } from './buffer'\nimport { createProgram, deleteProgram, getUniformType } from './program'\nimport { createFragmentShader, createVertexShader } from './shader'\nimport { activeTexture, createTexture } from './texture'\nimport { glsl } from '../code/glsl'\nimport { is } from '../utils'\nimport type { X } from '../node'\nimport type { GL } from '../types'\nexport * from './buffer'\nexport * from './program'\nexport * from './shader'\nexport * from './texture'\n\nconst a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]\n\nexport const webgl = (gl: GL) => {\n gl('init', () => {\n const c = gl.gl\n let vs = gl.vs || gl.vert || gl.vertex\n let fs = gl.fs || gl.frag || gl.fragment\n if (is.obj(fs)) fs = glsl(fs as X)\n if (is.obj(vs)) vs = glsl(vs as X)\n if (gl.count === 6) gl.attribute({ a_position })\n gl.pg = createProgram(c, createVertexShader(c, vs), createFragmentShader(c, fs))\n gl.location = nested((key, isAttribute = false) => {\n return isAttribute ? c.getAttribLocation(gl.pg, key) : c.getUniformLocation(gl.pg, key)\n })\n })\n\n gl('clean', () => {\n const c = gl.gl\n deleteProgram(c, gl.pg)\n })\n\n gl('render', () => {\n const c = gl.gl\n c.useProgram(gl.pg)\n gl.queue.flush()\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size)\n c.drawArrays(c.TRIANGLES, 0, gl.count)\n })\n\n gl('_attribute', (key = '', value: number[], iboValue: number[]) => {\n const c = gl.gl\n const n = gl.count\n const loc = gl.location(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const stride = vertexStride(n, value, iboValue)\n createAttribute(c, stride, loc, vbo, ibo)\n })\n\n gl('_uniform', (key: string, value = 0, isMatrix = false) => {\n const type = getUniformType(value, isMatrix)\n const c = gl.gl\n const loc = gl.location(key)\n if (isMatrix) c[type](loc, false, value)\n else c[type](loc, value)\n })\n\n const _loadFn = (image: HTMLImageElement) => {\n const loc = gl.location(image.alt)\n const unit = gl.activeUnit(image.alt)\n const tex = createTexture(gl.gl, image)\n activeTexture(gl.gl, loc, unit, tex)\n }\n\n gl('_texture', (alt: string, src: string) => {\n const image = new Image()\n image.addEventListener('load', _loadFn.bind(null, image), false)\n Object.assign(image, { src, alt, crossOrigin: 'anonymous' })\n })\n\n let _activeUnit = 0\n gl.activeUnit = nested(() => _activeUnit++)\n return gl\n}\n","// WebGLバッファー作成と管理\nexport const createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n if (!buffer) throw new Error('Failed to create VBO')\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\n// インデックスバッファーオブジェクト作成\nexport const createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n if (!buffer) throw new Error('Failed to create IBO')\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(\n c.ELEMENT_ARRAY_BUFFER,\n new Int16Array(data),\n c.STATIC_DRAW\n )\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\n// アトリビュート設定\nexport const createAttribute = (\n c: WebGLRenderingContext,\n stride: number,\n location: number,\n vbo: WebGLBuffer,\n ibo?: WebGLBuffer\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(location)\n c.vertexAttribPointer(location, stride, c.FLOAT, false, 0, 0)\n if (ibo) c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\n// バッファーの削除\nexport const deleteBuffer = (c: WebGLRenderingContext, buffer: WebGLBuffer) => {\n c.deleteBuffer(buffer)\n}\n\n// 頂点ストライドを計算\nexport const vertexStride = (\n count: number,\n value: number[],\n iboValue?: number[]\n) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n if (stride !== Math.floor(stride))\n console.warn(`Vertex Stride Error: count ${count} is mismatch`)\n return Math.floor(stride)\n}\n\n// バッファーデータの更新\nexport const updateVbo = (\n c: WebGLRenderingContext,\n buffer: WebGLBuffer,\n data: number[],\n usage = c.STATIC_DRAW\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), usage)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n}\n\nexport const updateIbo = (\n c: WebGLRenderingContext,\n buffer: WebGLBuffer,\n data: number[],\n usage = c.STATIC_DRAW\n) => {\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), usage)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n}\n","// WebGLプログラム作成と管理\nexport const createProgram = (\n c: WebGLRenderingContext,\n vs: WebGLShader,\n fs: WebGLShader\n) => {\n const pg = c.createProgram()\n if (!pg) throw new Error('Failed to create pg')\n c.attachShader(pg, vs)\n c.attachShader(pg, fs)\n c.linkProgram(pg)\n if (c.getProgramParameter(pg, c.LINK_STATUS)) return pg\n const error = c.getProgramInfoLog(pg)\n c.deleteProgram(pg)\n throw new Error(`Could not link pg: ${error}`)\n}\n\n// プログラムの削除\nexport const deleteProgram = (c: WebGLRenderingContext, pg: WebGLProgram) => {\n c.deleteProgram(pg)\n}\n\n// プログラムの情報を取得\nexport const getProgramInfo = (c: WebGLRenderingContext, pg: WebGLProgram) => {\n return {\n linked: c.getProgramParameter(pg, c.LINK_STATUS),\n log: c.getProgramInfoLog(pg),\n activeAttributes: c.getProgramParameter(\n pg,\n c.ACTIVE_ATTRIBUTES\n ),\n activeUniforms: c.getProgramParameter(pg, c.ACTIVE_UNIFORMS),\n }\n}\n\n// ユニフォームタイプの取得\nexport const getUniformType = (value: number | number[], isMatrix = false) => {\n let length = typeof value === 'number' ? 0 : value?.length\n if (!length) return `uniform1f`\n if (!isMatrix) return `uniform${length}fv`\n length = Math.sqrt(length) << 0\n return `uniformMatrix${length}fv`\n}\n\n// ユニフォーム位置を取得\nexport const getUniformLocation = (\n c: WebGLRenderingContext,\n pg: WebGLProgram,\n name: string\n) => {\n return c.getUniformLocation(pg, name)\n}\n\n// アトリビュート位置を取得\nexport const getAttribLocation = (\n c: WebGLRenderingContext,\n pg: WebGLProgram,\n name: string\n) => {\n return c.getAttribLocation(pg, name)\n}\n","const defaultVertexShader = /* cpp */ `\nattribute vec4 a_position;\nvoid main() {\n gl_Position = a_position;\n}\n`\n\nconst defaultFragmentShader = /* cpp */ `\nprecision mediump float;\nuniform vec2 iResolution;\nvoid main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n}\n`\n\nexport const deleteShader = (c: WebGLRenderingContext, shader: WebGLShader) => {\n c.deleteShader(shader)\n}\n\n// WebGLシェーダー作成と管理\nconst createShader = (\n c: WebGLRenderingContext,\n source: string,\n type: number\n) => {\n const shader = c.createShader(type)\n if (!shader) throw new Error('Failed to create shader')\n c.shaderSource(shader, source)\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n deleteShader(c, shader)\n throw new Error(`Could not compile shader: ${error}`)\n}\n\nexport const createVertexShader = (\n c: WebGLRenderingContext,\n source = defaultVertexShader\n) => {\n return createShader(c, source, c.VERTEX_SHADER)\n}\n\nexport const createFragmentShader = (\n c: WebGLRenderingContext,\n source = defaultFragmentShader\n) => {\n return createShader(c, source, c.FRAGMENT_SHADER)\n}\n\n// シェーダーの情報を取得\nexport const getShaderInfo = (\n c: WebGLRenderingContext,\n shader: WebGLShader\n) => {\n return {\n compiled: c.getShaderParameter(shader, c.COMPILE_STATUS),\n log: c.getShaderInfoLog(shader),\n source: c.getShaderSource(shader),\n }\n}\n","// WebGLテクスチャ作成と管理\nexport const createTexture = (\n c: WebGLRenderingContext,\n img: HTMLImageElement\n) => {\n const texture = c.createTexture()\n if (!texture) throw new Error('Failed to create texture')\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, img)\n c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n return texture\n}\n\n// テクスチャユニットをアクティブ化\nexport const activeTexture = (\n c: WebGLRenderingContext,\n location: WebGLUniformLocation | null,\n unit: number,\n texture: WebGLTexture\n) => {\n if (!location) return\n c.uniform1i(location, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n}\n\n// テクスチャの削除\nexport const deleteTexture = (\n c: WebGLRenderingContext,\n texture: WebGLTexture\n) => {\n c.deleteTexture(texture)\n}\n\n// 空のテクスチャを作成\nexport const createEmptyTexture = (\n c: WebGLRenderingContext,\n w = 1280,\n h = 800,\n format = c.RGBA,\n type = c.UNSIGNED_BYTE\n) => {\n const texture = c.createTexture()\n if (!texture) throw new Error('Failed to create empty texture')\n c.bindTexture(c.TEXTURE_2D, texture)\n // prettier-ignore\n c.texImage2D(c.TEXTURE_2D, 0, format, w, h, 0, format, type, null)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n return texture\n}\n\n// キューブマップテクスチャを作成\nexport const createCubeTexture = (\n c: WebGLRenderingContext,\n imgs: HTMLImageElement[]\n) => {\n if (imgs.length !== 6)\n throw new Error('Cube texture requires exactly 6 imgs')\n const texture = c.createTexture()\n if (!texture) throw new Error('Failed to create cube texture')\n c.bindTexture(c.TEXTURE_CUBE_MAP, texture)\n const faces = [\n c.TEXTURE_CUBE_MAP_POSITIVE_X,\n c.TEXTURE_CUBE_MAP_NEGATIVE_X,\n c.TEXTURE_CUBE_MAP_POSITIVE_Y,\n c.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n c.TEXTURE_CUBE_MAP_POSITIVE_Z,\n c.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n ]\n // prettier-ignore\n faces.forEach((face, index) => {\n c.texImage2D( face, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, imgs[index])\n })\n c.generateMipmap(c.TEXTURE_CUBE_MAP)\n // prettier-ignore\n c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_MIN_FILTER, c.LINEAR_MIPMAP_LINEAR)\n c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n\n c.bindTexture(c.TEXTURE_CUBE_MAP, null)\n\n return texture\n}\n","export 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\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\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","import { is } from './../utils'\nimport type { Node, NodeType, X, ConversionContext } from '../node'\n\n// GLSLコード生成コンテキスト\ninterface GLSLContext extends ConversionContext {\n target: 'webgl'\n precision: 'lowp' | 'mediump' | 'highp'\n version: '100' | '300 es'\n}\n\n// ノードからGLSLコードを生成\nexport const nodeToGLSL = (\n nodeProxy: X,\n context?: Partial<GLSLContext>\n): string => {\n const ctx: GLSLContext = {\n target: 'webgl',\n precision: 'mediump',\n version: '300 es',\n nodes: new Map(),\n variables: new Map(),\n functions: new Map(),\n ...context,\n }\n\n return generateGLSLExpression(nodeProxy as any, ctx)\n}\n\n// GLSL式を生成\nconst generateGLSLExpression = (node: Node, context: GLSLContext): string => {\n if (!node) return '0.0'\n // 値ノード\n if (!is.und(node.value)) return formatGLSLValue(node.value, node.type)\n // プロパティアクセス(スウィズル)\n if (node.property && node.parent) {\n const parentExpr = generateGLSLExpression(node.parent, context)\n return `${parentExpr}.${node.property}`\n }\n // 演算子ノード\n if (node.operator && node.children && node.children.length >= 2)\n return generateGLSLOperator(node, context)\n // 数学関数ノード\n if (node.mathFunction && node.children && node.children.length >= 1)\n return generateGLSLMathFunction(node, context)\n return '0.0'\n}\n\n// GLSL値をフォーマット\nconst formatGLSLValue = (value: any, type: NodeType): string => {\n if (type === 'float') {\n const num = Number(value)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n }\n if (type === 'int') return `${Math.floor(Number(value))}`\n if (type === 'bool') return Boolean(value) ? 'true' : 'false'\n if (is.arr(value)) {\n const values = value\n .map((v) => {\n const num = Number(v)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n })\n .join(', ')\n if (type === 'vec2') return `vec2(${values})`\n if (type === 'vec3') return `vec3(${values})`\n if (type === 'vec4') return `vec4(${values})`\n if (type === 'color') return `vec3(${values})`\n }\n return '0.0'\n}\n\n// GLSL演算子を生成\nconst generateGLSLOperator = (node: Node, context: GLSLContext): string => {\n if (!node.children || node.children.length < 2) return '0.0'\n const left = generateGLSLExpression(node.children[0], context)\n const right = generateGLSLExpression(node.children[1], context)\n if (node.operator === 'add') return `(${left} + ${right})`\n if (node.operator === 'sub') return `(${left} - ${right})`\n if (node.operator === 'mul') return `(${left} * ${right})`\n if (node.operator === 'div') return `(${left} / ${right})`\n if (node.operator === 'mod') return `mod(${left}, ${right})`\n if (node.operator === 'equal') return `(${left} == ${right})`\n if (node.operator === 'notEqual') return `(${left} != ${right})`\n if (node.operator === 'lessThan') return `(${left} < ${right})`\n if (node.operator === 'lessThanEqual') return `(${left} <= ${right})`\n if (node.operator === 'greaterThan') return `(${left} > ${right})`\n if (node.operator === 'greaterThanEqual') return `(${left} >= ${right})`\n if (node.operator === 'and') return `(${left} && ${right})`\n if (node.operator === 'or') return `(${left} || ${right})`\n return `(${left} + ${right})`\n}\n\n// GLSL数学関数を生成\nconst generateGLSLMathFunction = (node: Node, context: GLSLContext): string => {\n if (!node.children || node.children.length < 1) return '0.0'\n const fun = node.mathFunction\n const args = node.children.map((child) => {\n return generateGLSLExpression(child, context)\n })\n const [x, y, z] = args\n // @TODO FIX\n // if (fun === 'toVar') return x // toVarは変数化のヒントなので、そのまま返す\n // 単項関数\n if (args.length === 1) {\n if (fun === 'abs') return `abs(${x})`\n if (fun === 'acos') return `acos(${x})`\n if (fun === 'asin') return `asin(${x})`\n if (fun === 'atan') return `atan(${x})`\n if (fun === 'ceil') return `ceil(${x})`\n if (fun === 'cos') return `cos(${x})`\n if (fun === 'floor') return `floor(${x})`\n if (fun === 'fract') return `fract(${x})`\n if (fun === 'length') return `length(${x})`\n if (fun === 'normalize') return `normalize(${x})`\n if (fun === 'sin') return `sin(${x})`\n if (fun === 'sqrt') return `sqrt(${x})`\n if (fun === 'tan') return `tan(${x})`\n }\n // 二項関数\n if (args.length === 2) {\n if (fun === 'atan2') return `atan(${x}, ${y})`\n if (fun === 'pow') return `pow(${x}, ${y})`\n if (fun === 'min') return `min(${x}, ${y})`\n if (fun === 'max') return `max(${x}, ${y})`\n if (fun === 'dot') return `dot(${x}, ${y})`\n if (fun === 'cross') return `cross(${x}, ${y})`\n if (fun === 'distance') return `distance(${x}, ${y})`\n if (fun === 'reflect') return `reflect(${x}, ${y})`\n }\n // 三項関数\n if (args.length === 3) {\n if (fun === 'mix') return `mix(${x}, ${y}, ${z})`\n if (fun === 'clamp') return `clamp(${x}, ${y}, ${z})`\n if (fun === 'smoothstep') return `smoothstep(${x}, ${y}, ${z})`\n if (fun === 'refract') return `refract(${x}, ${y}, ${z})`\n }\n\n return x || '0.0'\n}\n\n// 値からGLSL型を推定\nconst inferGLSLType = (value: unknown): string => {\n if (is.num(value)) return 'float'\n if (is.bol(value)) return 'bool'\n if (is.arr(value)) {\n const len = value.length\n if (len === 2) return 'vec2'\n if (len === 3) return 'vec3'\n if (len === 4) return 'vec4'\n }\n return 'float'\n}\n\n// 完全なGLSLシェーダーを生成\nexport const glsl = (\n fragmentNode: X,\n options?: {\n precision?: 'lowp' | 'mediump' | 'highp'\n version?: '100' | '300 es'\n uniforms?: Record<string, any>\n }\n) => {\n const precision = options?.precision || 'mediump'\n const version = options?.version || '300 es'\n const is300ES = version === '300 es'\n const fragment = nodeToGLSL(fragmentNode)\n let shader = ''\n if (is300ES) shader += '#version 300 es\\n'\n shader += `precision ${precision} float;\\n\\n`\n // ユニフォーム変数の追加\n if (options?.uniforms) {\n Object.entries(options.uniforms).forEach(([name, value]) => {\n const type = inferGLSLType(value)\n shader += `uniform ${type} ${name};\\n`\n })\n shader += '\\n'\n }\n // 出力変数\n if (is300ES) shader += 'out vec4 fragColor;\\n\\n'\n shader += 'void main() {\\n'\n shader += is300ES\n ? ` fragColor = ${fragment};\\n`\n : ` gl_FragColor = ${fragment};\\n`\n shader += '}\\n'\n\n return shader\n}\n","// WebGPUデバイス管理\nexport const requestWebGPUDevice = async (): Promise<{\n adapter: any // GPUAdapter @TODO FIX\n device: any // GPUDevice @TODO FIX\n}> => {\n // @ts-ignore @TODO FIX\n if (!navigator.gpu)\n throw new Error('WebGPU is not supported in this browser')\n // @ts-ignore\n const adapter = await navigator.gpu.requestAdapter()\n if (!adapter) throw new Error('Failed to get WebGPU adapter')\n const device = await adapter.requestDevice()\n if (!device) throw new Error('Failed to get WebGPU device')\n return { adapter, device }\n}\n\n// WebGPUデバイスの機能チェック\nexport const checkWebGPUSupport = (): boolean => {\n return 'gpu' in navigator\n}\n\n// デバイスの制限情報を取得\nexport const getDeviceLimits = (device: any) => {\n return {\n maxTextureDimension1D: device.limits.maxTextureDimension1D,\n maxTextureDimension2D: device.limits.maxTextureDimension2D,\n maxTextureDimension3D: device.limits.maxTextureDimension3D,\n maxTextureArrayLayers: device.limits.maxTextureArrayLayers,\n maxBindGroups: device.limits.maxBindGroups,\n maxDynamicUniformBuffersPerPipelineLayout:\n device.limits.maxDynamicUniformBuffersPerPipelineLayout,\n maxDynamicStorageBuffersPerPipelineLayout:\n device.limits.maxDynamicStorageBuffersPerPipelineLayout,\n maxSampledTexturesPerShaderStage:\n device.limits.maxSampledTexturesPerShaderStage,\n maxSamplersPerShaderStage:\n device.limits.maxSamplersPerShaderStage,\n maxStorageBuffersPerShaderStage:\n device.limits.maxStorageBuffersPerShaderStage,\n maxStorageTexturesPerShaderStage:\n device.limits.maxStorageTexturesPerShaderStage,\n maxUniformBuffersPerShaderStage:\n device.limits.maxUniformBuffersPerShaderStage,\n maxUniformBufferBindingSize:\n device.limits.maxUniformBufferBindingSize,\n maxStorageBufferBindingSize:\n device.limits.maxStorageBufferBindingSize,\n maxVertexBuffers: device.limits.maxVertexBuffers,\n maxVertexAttributes: device.limits.maxVertexAttributes,\n maxVertexBufferArrayStride:\n device.limits.maxVertexBufferArrayStride,\n maxComputeWorkgroupStorageSize:\n device.limits.maxComputeWorkgroupStorageSize,\n maxComputeInvocationsPerWorkgroup:\n device.limits.maxComputeInvocationsPerWorkgroup,\n maxComputeWorkgroupSizeX:\n device.limits.maxComputeWorkgroupSizeX,\n maxComputeWorkgroupSizeY:\n device.limits.maxComputeWorkgroupSizeY,\n maxComputeWorkgroupSizeZ:\n device.limits.maxComputeWorkgroupSizeZ,\n maxComputeWorkgroupsPerDimension:\n device.limits.maxComputeWorkgroupsPerDimension,\n }\n}\n\n// デバイスエラーハンドリング\nexport const setupDeviceErrorHandling = (device: any) => {\n device.addEventListener('uncapturederror', (event: any) => {\n console.error('WebGPU uncaptured error:', event.error)\n })\n}\n\n// キャンバスコンテキストの設定\nexport const configureCanvasContext = (\n canvas: HTMLCanvasElement,\n device: any,\n format: any = 'bgra8unorm'\n) => {\n const context = canvas.getContext('webgpu')\n if (!context) throw new Error('Failed to get WebGPU canvas context')\n\n // @ts-ignore\n context.configure({\n device,\n format,\n alphaMode: 'premultiplied',\n })\n\n return context\n}\n","// デフォルトの頂点シェーダー\nconst defaultVertexShader = `\n@vertex\nfn main(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {\n var pos = array<vec2<f32>, 6>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>( 1.0, 1.0)\n );\n return vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n}\n`\n\n// デフォルトのフラグメントシェーダー\nconst defaultFragmentShader = `\n@fragment\nfn main() -> @location(0) vec4<f32> {\n return vec4<f32>(1.0, 0.0, 0.0, 1.0);\n}\n`\n\n// WebGPUパイプライン管理\nexport const createRenderPipeline = (\n device: any,\n vertexShader = defaultVertexShader,\n fragmentShader = defaultFragmentShader,\n format = 'bgra8unorm'\n) => {\n const v = device.createShaderModule({ code: vertexShader })\n const f = device.createShaderModule({ code: fragmentShader })\n return device.createRenderPipeline({\n layout: 'auto',\n vertex: {\n module: v,\n entryPoint: 'main',\n },\n fragment: {\n module: f,\n entryPoint: 'main',\n targets: [\n {\n format,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n })\n}\n\n// コンピュートパイプライン作成\nexport const createComputePipeline = (device: any, computeShader: string) => {\n const computeModule = device.createShaderModule({ code: computeShader })\n return device.createComputePipeline({\n layout: 'auto',\n compute: { module: computeModule, entryPoint: 'main' },\n })\n}\n\n// シェーダーモジュール作成\nexport const createShaderModule = (device: any, code: string) => {\n return device.createShaderModule({ code })\n}\n\n// バインドグループレイアウト作成\nexport const createBindGroupLayout = (device: any, entries: any[]) => {\n return device.createBindGroupLayout({ entries })\n}\n\n// バインドグループ作成\nexport const createBindGroup = (device: any, layout: any, entries: any[]) => {\n return device.createBindGroup({ layout, entries })\n}\n\n// レンダーパス作成\nexport const createRenderPass = (\n encoder: any,\n colorAttachment: any,\n depthStencilAttachment?: any\n) => {\n const descriptor: any = { colorAttachments: [colorAttachment] }\n if (depthStencilAttachment)\n descriptor.depthStencilAttachment = depthStencilAttachment\n return encoder.beginRenderPass(descriptor)\n}\n\n// コマンドエンコーダー作成\nexport const createCommandEncoder = (device: any) => {\n return device.createCommandEncoder()\n}\n","import { is } from '../utils'\nimport type { Node, NodeType, ConversionContext, X } from '../node'\n\n// WGSLコード生成コンテキスト\ninterface WGSLContext extends ConversionContext {\n target: 'webgpu'\n}\n\n// ノードからWGSLコードを生成\nexport const nodeToWGSL = (\n nodeProxy: X,\n context?: Partial<WGSLContext>\n): string => {\n const ctx: WGSLContext = {\n target: 'webgpu',\n nodes: new Map(),\n variables: new Map(),\n functions: new Map(),\n ...context,\n }\n return generateWGSLExpression(nodeProxy as any, ctx)\n}\n\n// WGSL式を生成\nconst generateWGSLExpression = (node: Node, context: WGSLContext): string => {\n if (!node) return '0.0'\n // 値ノード\n if (node.value !== undefined)\n return formatWGSLValue(node.value, node.type)\n // プロパティアクセス(スウィズル)\n if (node.property && node.parent) {\n const parentExpr = generateWGSLExpression(node.parent, context)\n return `${parentExpr}.${node.property}`\n }\n // 演算子ノード\n if (node.operator && node.children && node.children.length >= 2)\n return generateWGSLOperator(node, context)\n // 数学関数ノード\n if (node.mathFunction && node.children && node.children.length >= 1)\n return generateWGSLMathFunction(node, context)\n return '0.0'\n}\n\n// WGSL値をフォーマット\nconst formatWGSLValue = (value: any, type: NodeType): string => {\n if (type === 'float') {\n const num = Number(value)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n }\n if (type === 'int') return `${Math.floor(Number(value))}`\n if (type === 'bool') return Boolean(value) ? 'true' : 'false'\n if (is.arr(value)) {\n const values = value\n .map((v) => {\n const num = Number(v)\n return num % 1 === 0 ? `${num}.0` : `${num}`\n })\n .join(', ')\n if (type === 'vec2') return `vec2<f32>(${values})`\n if (type === 'vec3') return `vec3<f32>(${values})`\n if (type === 'vec4') return `vec4<f32>(${values})`\n if (type === 'color') return `vec3<f32>(${values})`\n }\n\n return '0.0'\n}\n\n// WGSL演算子を生成\nconst generateWGSLOperator = (node: Node, context: WGSLContext): string => {\n if (!node.children || node.children.length < 2) return '0.0'\n const left = generateWGSLExpression(node.children[0], context)\n const right = generateWGSLExpression(node.children[1], context)\n if (node.operator === 'add') return `(${left} + ${right})`\n if (node.operator === 'sub') return `(${left} - ${right})`\n if (node.operator === 'mul') return `(${left} * ${right})`\n if (node.operator === 'div') return `(${left} / ${right})`\n if (node.operator === 'mod') return `(${left} % ${right})`\n if (node.operator === 'equal') return `(${left} == ${right})`\n if (node.operator === 'notEqual') return `(${left} != ${right})`\n if (node.operator === 'lessThan') return `(${left} < ${right})`\n if (node.operator === 'lessThanEqual') return `(${left} <= ${right})`\n if (node.operator === 'greaterThan') return `(${left} > ${right})`\n if (node.operator === 'greaterThanEqual') return `(${left} >= ${right})`\n if (node.operator === 'and') return `(${left} && ${right})`\n if (node.operator === 'or') return `(${left} || ${right})`\n return `(${left} + ${right})`\n}\n\n// WGSL数学関数を生成\nconst generateWGSLMathFunction = (node: Node, context: WGSLContext): string => {\n if (!node.children || node.children.length < 1) return '0.0'\n const fun = node.mathFunction\n const args = node.children.map((child) =>\n generateWGSLExpression(child, context)\n )\n const [x, y, z] = args\n // 単項関数\n if (args.length === 1) {\n if (fun === 'abs') return `abs(${x})`\n if (fun === 'acos') return `acos(${x})`\n if (fun === 'asin') return `asin(${x})`\n if (fun === 'atan') return `atan(${x})`\n if (fun === 'ceil') return `ceil(${x})`\n if (fun === 'cos') return `cos(${x})`\n if (fun === 'floor') return `floor(${x})`\n if (fun === 'fract') return `fract(${x})`\n if (fun === 'length') return `length(${x})`\n if (fun === 'normalize') return `normalize(${x})`\n if (fun === 'sin') return `sin(${x})`\n if (fun === 'sqrt') return `sqrt(${x})`\n if (fun === 'tan') return `tan(${x})`\n }\n // 二項関数\n if (args.length === 2) {\n if (fun === 'atan2') return `atan2(${x}, ${y})`\n if (fun === 'pow') return `pow(${x}, ${y})`\n if (fun === 'min') return `min(${x}, ${y})`\n if (fun === 'max') return `max(${x}, ${y})`\n if (fun === 'dot') return `dot(${x}, ${y})`\n if (fun === 'cross') return `cross(${x}, ${y})`\n if (fun === 'distance') return `distance(${x}, ${y})`\n if (fun === 'reflect') return `reflect(${x}, ${y})`\n }\n // 三項関数\n if (args.length === 3) {\n if (fun === 'mix') return `mix(${x}, ${y}, ${z})`\n if (fun === 'clamp') return `clamp(${x}, ${y}, ${z})`\n if (fun === 'smoothstep') return `smoothstep(${x}, ${y}, ${z})`\n return x\n }\n return x || '0.0'\n}\n\n// 完全なWGSLシェーダーを生成\nexport const wgsl = (\n fragmentNode: X,\n options?: {\n uniforms?: Record<string, any>\n }\n) => {\n let shader = ''\n // ユニフォーム変数の追加\n if (options?.uniforms) {\n Object.entries(options.uniforms).forEach(([name, value]) => {\n const type = inferWGSLType(value)\n shader += `@group(0) @binding(0) var<uniform> ${name}: ${type};\\n`\n })\n shader += '\\n'\n }\n shader += '@fragment\\n'\n shader += 'fn main() -> @location(0) vec4<f32> {\\n'\n const fragmentExpr = nodeToWGSL(fragmentNode)\n shader += ` return ${fragmentExpr};\\n`\n shader += '}\\n'\n\n return shader\n}\n\n// 値からWGSL型を推定\nconst inferWGSLType = (value: any): string => {\n if (is.num(value)) return 'f32'\n if (is.bol(value)) return 'bool'\n if (is.arr(value)) {\n const len = value.length\n if (len === 2) return 'vec2<f32>'\n if (len === 3) return 'vec3<f32>'\n if (len === 4) return 'vec4<f32>'\n }\n return 'f32'\n}\n","import { is } from '../utils'\n\n// WebGPUバッファー管理\nexport const createBuffer = (\n device: any,\n data: Float32Array | Uint32Array | number[],\n usage: number\n) => {\n const array = is.arr(data) ? new Float32Array(data) : data\n const buffer = device.createBuffer({\n size: array.byteLength,\n usage,\n mappedAtCreation: true,\n })\n if (array instanceof Float32Array)\n new Float32Array(buffer.getMappedRange()).set(array)\n else if (array instanceof Uint32Array)\n new Uint32Array(buffer.getMappedRange()).set(array)\n buffer.unmap()\n return buffer\n}\n\n// 頂点バッファー作成\nexport const createVertexBuffer = (device: any, data: number[]) => {\n return createBuffer(device, data, 0x20) // GPUBufferUsage.VERTEX\n}\n\n// インデックスバッファー作成\nexport const createIndexBuffer = (device: any, data: number[]) => {\n return createBuffer(device, new Uint32Array(data), 0x40) // GPUBufferUsage.INDEX\n}\n\n// ユニフォームバッファー作成\nexport const createUniformBuffer = (device: any, size: number) => {\n return device.createBuffer({\n size,\n usage: 0x40 | 0x4, // GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n mappedAtCreation: false,\n })\n}\n\n// ストレージバッファー作成\nexport const createStorageBuffer = (device: any, size: number) => {\n return device.createBuffer({\n size,\n usage: 0x80 | 0x4, // GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST\n mappedAtCreation: false,\n })\n}\n\n// バッファーデータ更新\nexport const updateBuffer = (\n device: any,\n buffer: any,\n data: Float32Array | Uint32Array | number[],\n offset = 0\n) => {\n const array = is.arr(data) ? new Float32Array(data) : data\n device.queue.writeBuffer(buffer, offset, array)\n}\n\n// バッファーの削除\nexport const destroyBuffer = (buffer: any) => buffer.destroy()\n\n// バッファーサイズの計算\nexport const calculateBufferSize = (data: number[]) => data.length * 4 // 4 bytes per float\n\n// アライメント調整\nexport const alignBufferSize = (size: number, alignment = 256) => {\n return Math.ceil(size / alignment) * alignment\n}\n\n// 複数のバッファーを作成\nexport const createBuffers = (\n device: any,\n bufferConfigs: Array<{\n data: number[]\n usage: number\n }>\n): any[] => {\n return bufferConfigs.map((config) => {\n return createBuffer(device, config.data, config.usage)\n })\n}\n\n// バッファー使用量の定数\nexport const BufferUsage = {\n VERTEX: 0x20,\n INDEX: 0x40,\n UNIFORM: 0x40,\n STORAGE: 0x80,\n COPY_SRC: 0x4,\n COPY_DST: 0x8,\n MAP_READ: 0x1,\n MAP_WRITE: 0x2,\n} as const\n","// WebGPUテクスチャ管理\nconst createTexture = (\n device: any,\n w = 1280,\n h = 800,\n format = 'rgba8unorm',\n usage = 0x14 // GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n) => {\n return device.createTexture({\n size: { width: w, height: h, depthOrArrayLayers: 1 },\n format,\n usage,\n })\n}\n\n// 画像からテクスチャ作成\nexport const createTextureFromImage = (\n device: any,\n image: HTMLImageElement | ImageBitmap,\n format = 'rgba8unorm'\n) => {\n const texture = createTexture(\n device,\n image.width,\n image.height,\n format,\n 0x14 | 0x4 // TEXTURE_BINDING | COPY_DST\n )\n\n device.queue.copyExternalImageToTexture(\n { source: image },\n { texture },\n { width: image.width, height: image.height }\n )\n\n return texture\n}\n\n// キューブマップテクスチャ作成\nconst createCubeTexture = (\n device: any,\n size: number,\n format = 'rgba8unorm'\n) => {\n return device.createTexture({\n size: { width: size, height: size, depthOrArrayLayers: 6 },\n format,\n usage: 0x14, // GPUTextureUsage.TEXTURE_BINDING\n dimension: '2d',\n })\n}\n\n// 深度テクスチャ作成\nexport const createDepthTexture = (\n device: any,\n w = 1280,\n h = 800,\n format = 'depth24plus'\n) => {\n return device.createTexture({\n size: { width: w, height: h, depthOrArrayLayers: 1 },\n format,\n usage: 0x10, // GPUTextureUsage.RENDER_ATTACHMENT\n })\n}\n\n// サンプラー作成\nexport const createSampler = (\n device: any,\n options: {\n magFilter?: string\n minFilter?: string\n addressModeU?: string\n addressModeV?: string\n addressModeW?: string\n } = {}\n) => {\n return device.createSampler({\n magFilter: options.magFilter || 'linear',\n minFilter: options.minFilter || 'linear',\n addressModeU: options.addressModeU || 'repeat',\n addressModeV: options.addressModeV || 'repeat',\n addressModeW: options.addressModeW || 'repeat',\n })\n}\n\n// テクスチャビュー作成\nexport const createTextureView = (\n texture: any,\n options: {\n format?: string\n dimension?: string\n aspect?: string\n baseMipLevel?: number\n mipLevelCount?: number\n baseArrayLayer?: number\n arrayLayerCount?: number\n } = {}\n) => {\n return texture.createView(options)\n}\n\n// テクスチャデータ更新\nexport const updateTexture = (\n device: any,\n texture: any,\n data: Uint8Array | Uint8ClampedArray,\n w = 1280,\n h = 800\n) => {\n device.queue.writeTexture(\n { texture },\n data,\n { bytesPerRow: w * 4 },\n { width: w, height: h }\n )\n}\n\n// テクスチャの削除\nexport const destroyTexture = (texture: any) => texture.destroy()\n\n// テクスチャ使用量の定数\nexport const TextureUsage = {\n COPY_SRC: 0x1,\n COPY_DST: 0x2,\n TEXTURE_BINDING: 0x4,\n STORAGE_BINDING: 0x8,\n RENDER_ATTACHMENT: 0x10,\n} as const\n\n// テクスチャフォーマットの定数\nexport const TextureFormat = {\n RGBA8_UNORM: 'rgba8unorm',\n RGBA8_SRGB: 'rgba8unorm-srgb',\n BGRA8_UNORM: 'bgra8unorm',\n BGRA8_SRGB: 'bgra8unorm-srgb',\n DEPTH24_PLUS: 'depth24plus',\n DEPTH32_FLOAT: 'depth32float',\n} as const\n","import { requestWebGPUDevice } from './device'\nimport { createCommandEncoder, createRenderPass, createRenderPipeline } from './pipeline'\nimport { wgsl } from '../code/wgsl'\nimport { is } from '../utils'\nimport type { X } from '../node'\nimport type { GL } from '../types'\nexport * from './buffer'\nexport * from './device'\nexport * from './pipeline'\nexport * from './texture'\n\nexport const webgpu = (gl: GL) => {\n const init = async () => {\n const { device } = await requestWebGPUDevice()\n gl.gl = { device }\n let vs = gl.vs || gl.vert || gl.vertex\n let fs = gl.fs || gl.frag || gl.fragment\n if (is.obj(vs)) vs = wgsl(fs as X)\n if (is.obj(fs)) fs = wgsl(fs as X)\n gl.gl.pipeline = createRenderPipeline(device, vs, fs)\n }\n\n const loop = () => {\n const { device, context, pipeline } = gl.gl\n const encoder = createCommandEncoder(device)\n const pass = createRenderPass(encoder, {\n view: context.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear',\n storeOp: 'store',\n })\n pass.setPipeline(pipeline)\n pass.draw(gl.count)\n pass.end()\n device.queue.submit([encoder.finish()])\n }\n\n // @TODO add uniform and attribute\n return gl({ init, loop })\n}\n","// 基本型定数\nexport const TYPES = [\n 'float',\n 'int',\n 'uint',\n 'bool',\n 'color',\n 'vec2',\n 'vec3',\n 'vec4',\n 'mat2',\n 'mat3',\n 'mat4',\n 'ivec2',\n 'ivec3',\n 'ivec4',\n 'uvec2',\n 'uvec3',\n 'uvec4',\n 'bvec2',\n 'bvec3',\n 'bvec4',\n] as const\n\nexport type NodeType = (typeof TYPES)[number]\n\n// スウィズル定数\nexport const SWIZZLES = [\n 'x',\n 'y',\n 'z',\n 'w',\n 'r',\n 'g',\n 'b',\n 'a',\n 's',\n 't',\n 'p',\n 'q',\n] as const\n\ntype AllSwizzles<T extends string> =\n | T\n | `${T}${T}`\n | `${T}${T}${T}`\n | `${T}${T}${T}${T}`\n\nexport type Swillzes =\n | AllSwizzles<'x' | 'y' | 'z' | 'w'>\n | AllSwizzles<'r' | 'g' | 'b' | 'a'>\n | AllSwizzles<'p' | 'q'>\n | AllSwizzles<'s' | 't'>\n\n// 演算子定数\nexport const OPERATORS = [\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 'not',\n 'assign',\n 'xor',\n 'bitAnd',\n 'bitNot',\n 'bitOr',\n 'bitXor',\n 'shiftLeft',\n 'shiftRight',\n] as const\n\nexport type Operator = (typeof OPERATORS)[number]\n\n// 数学関数定数\nexport const FUNCTIONS = [\n 'abs',\n 'acos',\n 'asin',\n 'atan',\n 'atan2',\n 'ceil',\n 'clamp',\n 'cos',\n 'cross',\n 'degrees',\n 'distance',\n 'dot',\n 'exp',\n 'exp2',\n 'faceforward',\n 'floor',\n 'fract',\n 'length',\n 'all',\n 'any',\n 'bitcast',\n 'cbrt',\n 'dFdx',\n 'dFdy',\n 'difference',\n 'equals',\n 'fwidth',\n 'inverseSqrt',\n 'lengthSq',\n 'log',\n 'log2',\n 'max',\n 'min',\n 'mix',\n 'negate',\n 'normalize',\n 'oneMinus',\n 'pow',\n 'pow2',\n 'pow3',\n 'pow4',\n 'radians',\n 'reciprocal',\n 'reflect',\n 'refract',\n 'round',\n 'saturate',\n 'sign',\n 'sin',\n 'smoothstep',\n 'sqrt',\n 'step',\n 'tan',\n 'transformDirection',\n 'trunc',\n] as const\n\nexport type MathFunction = (typeof FUNCTIONS)[number]\n\n// キャッシュ用定数\nexport const CACHE_BOOLS = [true, false] as const\nexport const CACHE_INTS = [0, 1, 2, 3, 4, 5] as const\nexport const CACHE_FLOATS = [0.0, 1.0, 0.5, 2.0] as const\n","import { OPERATORS, FUNCTIONS, SWIZZLES, NodeType } from './const'\nimport { is } from '../utils'\nimport type { Node, ProxyCallback, X } from './types'\n\nlet nodeIdCounter = 0\n\n// ノードIDを生成\nconst generateNodeId = () => `node_${++nodeIdCounter}`\n\n// ノードを作成\nexport const createNode = (\n type: NodeType,\n value?: any,\n options?: Partial<Node>\n): Node => {\n return {\n id: generateNodeId(),\n type,\n value,\n children: [],\n ...options,\n }\n}\n\nconst isSwizzleProperty = (key = '') => SWIZZLES.includes(key as any)\nconst isOperatorMethod = (key = '') => OPERATORS.includes(key as any)\nconst isMathMethod = (key = '') => FUNCTIONS.includes(key as any)\n\n// Proxyハンドラーを作成\nconst createNodeProxy = (node: Node, callback?: (info: ProxyCallback) => X) => {\n const get = (_target: unknown, key: unknown) => {\n if (!is.str(key) || key === 'then') return void 0\n\n if (key === 'id') return node.id\n if (key === 'type') return node.type\n if (key === 'value') return node.value\n if (key === 'property') return node.property\n\n // swizzle prooerty\n if (isSwizzleProperty(key))\n return createNodeProxy(\n createNode(getSwizzleType(key), undefined, {\n parent: node,\n property: key,\n }),\n callback\n )\n\n // 演算子メソッド\n if (isOperatorMethod(key))\n return (...args: any[]) => {\n return createNodeProxy(\n createNode(node.type, undefined, {\n operator: key as any,\n children: [node, ...args],\n }),\n callback\n )\n }\n\n // 数学関数メソッド\n if (isMathMethod(key))\n return (...args: any[]) => {\n return createNodeProxy(\n createNode(\n getMathReturnType(\n key,\n node.type\n ),\n undefined,\n {\n mathFunction:\n key as any,\n children: [\n node,\n ...args,\n ],\n }\n ),\n callback\n )\n }\n\n return callback?.({ path: [key], args: [] })\n }\n const apply = (_target: unknown, _thisArg: unknown, args: any) => {\n return callback?.({ path: [], args })\n }\n\n return new Proxy(() => {}, { get, apply }) as X\n}\n\n// スウィズルの戻り値型を取得\nconst getSwizzleType = (swizzle: string): NodeType => {\n if (swizzle.length === 1) return 'float'\n if (swizzle.length === 2) return 'vec2'\n if (swizzle.length === 3) return 'vec3'\n if (swizzle.length === 4) return 'vec4'\n return 'float'\n}\n\n// 数学関数の戻り値型を取得\nconst getMathReturnType = (func: string, inputType: NodeType): NodeType => {\n if (func === 'length') return 'float'\n if (func === 'normalize') return inputType\n if (func === 'toVar') return inputType\n return inputType\n}\n\n// 公開API\nexport const node = (type: NodeType, value?: any, options?: Partial<Node>) => {\n const nodeInstance = createNode(type, value, options)\n return createNodeProxy(nodeInstance)\n}\n","import { node } from './node'\nimport { is } from '../utils'\nimport type { UniformNode } from './types'\nimport type { NodeType } from './const'\n\n// ユニフォーム更新コンテキスト\ninterface UpdateContext {\n object?: any\n camera?: any\n renderer?: any\n scene?: any\n time?: number\n}\n\n// ユニフォーム値の型を推定\nconst inferUniformType = (value: any): NodeType => {\n if (is.num(value)) return 'float'\n if (is.bol(value)) return 'bool'\n if (is.arr(value)) {\n const len = value.length\n if (len === 2) return 'vec2'\n if (len === 3) return 'vec3'\n if (len === 4) return 'vec4'\n if (len === 9) return 'mat3'\n if (len === 16) return 'mat4'\n }\n if (is.obj(value) && 'r' in value && 'g' in value && 'b' in value)\n return 'color'\n return 'float'\n}\n\n// ユニフォーム変数を作成\nexport const uniform = (initialValue: any): UniformNode => {\n const type = inferUniformType(initialValue)\n let currentValue = initialValue\n let objectUpdateCallback: ((context: UpdateContext) => any) | null =\n null\n let renderUpdateCallback: ((context: UpdateContext) => any) | null =\n null\n\n const baseNode = node(type, currentValue) as any\n\n // 値を設定\n const set = (value: any) => {\n currentValue = value\n baseNode.value = value\n }\n // オブジェクト更新時のコールバックを設定\n const onObjectUpdate = (\n callback: (context: UpdateContext) => any\n ): UniformNode => {\n objectUpdateCallback = callback\n return uniformNode\n }\n // レンダー更新時のコールバックを設定\n const onRenderUpdate = (\n callback: (context: UpdateContext) => any\n ): UniformNode => {\n renderUpdateCallback = callback\n return uniformNode\n }\n // 内部更新関数(外部から呼び出される)\n const _updateFromContext = (context: UpdateContext) => {\n if (objectUpdateCallback) {\n const newValue = objectUpdateCallback(context)\n if (newValue !== undefined) set(newValue)\n }\n if (renderUpdateCallback) {\n const newValue = renderUpdateCallback(context)\n if (newValue !== undefined) set(newValue)\n }\n }\n // UniformNodeインターフェースを実装\n const uniformNode = Object.create(baseNode)\n uniformNode.set = set\n uniformNode.onObjectUpdate = onObjectUpdate\n uniformNode.onRenderUpdate = onRenderUpdate\n uniformNode._updateFromContext = _updateFromContext\n uniformNode.isUniform = true\n return uniformNode as UniformNode\n}\n\n// 組み込みユニフォーム変数\nexport const iTime = uniform(0.0)\nexport const iPrevTime = uniform(0.0)\nexport const iDeltaTime = uniform(0.0)\nexport const iResolution = uniform([1920, 1080])\nexport const iMouse = uniform([0, 0])\n\n// ユニフォーム変数の更新(レンダーループで呼び出される)\nexport const updateUniforms = (context: UpdateContext) => {\n // 時間の更新\n if (context.time !== undefined) {\n const prevTime = iTime.value || 0\n iTime.set(context.time)\n iPrevTime.set(prevTime)\n iDeltaTime.set(context.time - prevTime)\n }\n}\n","import { CACHE_BOOLS, CACHE_INTS, CACHE_FLOATS } from './const'\nimport { node } from '.'\nimport type { X } from './types'\n\nconst boolCache = new Map<boolean, X>()\nconst intCache = new Map<number, X>()\nconst floatCache = new Map<number, X>()\n\nconst initializeCache = () => {\n CACHE_BOOLS.forEach((value) => {\n boolCache.set(value, node('bool', value))\n })\n CACHE_INTS.forEach((value) => {\n intCache.set(value, node('int', value))\n })\n CACHE_FLOATS.forEach((value) => {\n floatCache.set(value, node('float', value))\n })\n}\n\nexport const getCachedBool = (x: boolean): X => {\n if (!boolCache.has(x)) initializeCache()\n return boolCache.get(x) || node('bool', x)\n}\n\n// キャッシュされたintノードを取得\nexport const getCachedInt = (x: number): X => {\n if (intCache.has(x)) return intCache.get(x)!\n return node('int', x)\n}\n\n// キャッシュされたfloatノードを取得\nexport const getCachedFloat = (x: number): X => {\n if (floatCache.has(x)) return floatCache.get(x)!\n return node('float', x)\n}\n\n// ノードの重複を検出\nexport const findDuplicateNodes = (nodes: X[]): Map<string, X[]> => {\n const duplicates = new Map<string, X[]>()\n const signatures = new Map<string, X>()\n\n nodes.forEach((nodeProxy) => {\n const signature = generateNodeSignature(nodeProxy)\n if (signatures.has(signature)) {\n if (!duplicates.has(signature))\n duplicates.set(signature, [\n signatures.get(signature)!,\n ])\n duplicates.get(signature)!.push(nodeProxy)\n } else signatures.set(signature, nodeProxy)\n })\n return duplicates\n}\n\n// ノードのシグネチャを生成\nconst generateNodeSignature = (nodeProxy: X): string => {\n const parts = [\n nodeProxy.type,\n `${nodeProxy.value}`,\n nodeProxy.property || '',\n ]\n return parts.join('|')\n}\n\n// 初期化を実行\ninitializeCache()\n","import { node } from '.'\nimport { getCachedBool, getCachedInt, getCachedFloat } from './cache'\nimport { is } from '../utils'\nimport type { X } from './types'\n\n// JavaScript値をノードに変換\nexport const convertToNode = (x: unknown): X => {\n if (is.bol(x)) return getCachedBool(x)\n if (is.num(x)) {\n if (is.int(x)) return getCachedInt(x)\n return getCachedFloat(x)\n }\n if (is.arr(x)) return convertArrayToNode(x)\n if (is.obj(x)) return convertObjectToNode(x)\n return node('float', 0)\n}\n\n// 配列をベクトル/行列ノードに変換\nconst convertArrayToNode = (array: number[]): X => {\n const len = array.length\n if (len === 2) return node('vec2', array)\n if (len === 3) return node('vec3', array)\n if (len === 4) return node('vec4', array)\n if (len === 9) return node('mat3', array)\n if (len === 16) return node('mat4', array)\n return node('float', array[0])\n}\n\n// オブジェクトをノードに変換\nconst convertObjectToNode = (obj: any): X => {\n // カラーオブジェクトの検出\n if ('r' in obj && 'g' in obj && 'b' in obj) {\n const arr = [obj.r, obj.g, obj.b]\n if ('a' in obj) arr.push(obj.a)\n return node('color', arr)\n }\n // ベクトルライクオブジェクトの検出\n if ('x' in obj && 'y' in obj) {\n const arr = [obj.x, obj.y]\n if ('z' in obj) arr.push(obj.z)\n if ('w' in obj) arr.push(obj.w)\n return convertArrayToNode(arr)\n }\n return node('float', 0)\n}\n\n// 型変換関数\nexport const float = (x: unknown): X => {\n if (is.num(x)) return getCachedFloat(x)\n return node('float', Number(x))\n}\n\nexport const int = (x: unknown): X => {\n if (is.num(x) && Number.isInteger(x)) return getCachedInt(x)\n return node('int', Math.floor(Number(x)))\n}\n\nexport const bool = (x: unknown): X => {\n return getCachedBool(Boolean(x))\n}\n\nexport const vec2 = (x?: any, y?: any): X => {\n if (is.und(x)) return node('vec2', [0, 0])\n if (is.und(y)) {\n if (is.arr(x)) return node('vec2', x.slice(0, 2))\n if (is.obj(x) && 'x' in x && 'y' in x)\n return node('vec2', [x.x, x.y])\n return node('vec2', [Number(x), Number(x)])\n }\n return node('vec2', [Number(x), Number(y)])\n}\n\nexport const vec3 = (x?: any, y?: any, z?: any): X => {\n if (is.und(x)) return node('vec3', [0, 0, 0])\n if (is.und(y)) {\n if (is.arr(x)) return node('vec3', x.slice(0, 3))\n if (is.obj(x) && 'x' in x && 'y' in x && 'z' in x)\n return node('vec3', [x.x, x.y, x.z])\n return node('vec3', [Number(x), Number(x), Number(x)])\n }\n if (z === undefined) {\n return node('vec3', [Number(x), Number(y), 0])\n }\n return node('vec3', [Number(x), Number(y), Number(z)])\n}\n\nexport const vec4 = (x?: any, y?: any, z?: any, w?: any): X => {\n if (is.und(x)) return node('vec4', [0, 0, 0, 1])\n if (is.und(y)) {\n if (is.arr(x)) return node('vec4', x.slice(0, 4))\n if (is.obj(x) && 'x' in x && 'y' in x && 'z' in x && 'w' in x)\n return node('vec4', [x.x, x.y, x.z, x.w])\n return node('vec4', [Number(x), Number(x), Number(x), 1])\n }\n return node('vec4', [Number(x), Number(y), Number(z), Number(w)])\n}\n\nexport const color = (r?: any, g?: any, b?: any): X => {\n if (r === undefined) return node('color', [1, 1, 1])\n\n // 16進数カラーの処理\n if (is.str(r) && r.startsWith('#')) {\n const hex = r.slice(1)\n const num = parseInt(hex, 16)\n return node('color', [\n ((num >> 16) & 255) / 255,\n ((num >> 8) & 255) / 255,\n (num & 255) / 255,\n ])\n }\n\n // 数値カラーの処理\n if (is.num(r) && g === undefined && b === undefined) {\n return node('color', [\n ((r >> 16) & 255) / 255,\n ((r >> 8) & 255) / 255,\n (r & 255) / 255,\n ])\n }\n\n return vec3(r, g, b)\n}\n","import { node } from './node'\nimport { uniform } from './uniform'\nimport { float } from './conv'\nimport { is } from '../utils'\nimport type { X, FunctionNode, ConditionalNode } from './types'\nexport type { X, FunctionNode, ConditionalNode }\nexport * from './cache'\nexport * from './const'\nexport * from './conv'\nexport * from './node'\nexport * from './types'\nexport * from './uniform'\n\n// 関数定義\nexport const Fn = (jsFunc: Function): FunctionNode => {\n const functionNode = (...args: any[]) => {\n const inputs = args.map((arg) => {\n if (is.obj(arg) && 'type' in arg && arg.type) return arg\n return float(arg)\n })\n const result = jsFunc(inputs)\n return result || float(0)\n }\n functionNode.call = (inputs: X[]) => jsFunc(inputs)\n return functionNode as FunctionNode\n}\n\n// 条件分岐\nexport const If = (condition: X, callback: () => void): ConditionalNode => {\n callback()\n\n const conditionalNode = {\n ElseIf(\n newCondition: X,\n newCallback: () => void\n ): ConditionalNode {\n newCallback()\n return conditionalNode\n },\n Else(elseCallback: () => void) {\n elseCallback()\n },\n }\n\n return conditionalNode\n}\n\n// 組み込み変数\nexport const gl_FragCoord = node('vec4', undefined)\nexport const gl_Position = node('vec4', undefined)\nexport const iTime = uniform(0.0)\nexport const iResolution = uniform([1920, 1080])\nexport const iMouse = uniform([0, 0])\n\n// 数学関数\nexport const abs = (x: X) => x.abs()\nexport const sin = (x: X) => x.sin()\nexport const cos = (x: X) => x.cos()\nexport const tan = (x: X) => x.tan()\nexport const sqrt = (x: X) => x.sqrt()\nexport const floor = (x: X) => x.floor()\nexport const ceil = (x: X) => x.ceil()\nexport const fract = (x: X) => x.fract()\nexport const normalize = (x: X) => x.normalize()\nexport const length = (x: X) => x.length()\n\n/**\n * @TODO FIX\nexport const min = (a: X, b: X) => {\n return node('float', undefined, {\n mathFunction: 'min',\n children: [a as any, b as any],\n })\n}\n\nexport const max = (a: X, b: X) => {\n return node('float', undefined, {\n mathFunction: 'max',\n children: [a as any, b as any],\n })\n}\n\nexport const mix = (a: X, b: X, t: X) => {\n return node('float', undefined, {\n mathFunction: 'mix',\n children: [a as any, b as any, t as any],\n })\n}\n\nexport const clamp = (x: X, min: X, max: X) => {\n return node('float', undefined, {\n mathFunction: 'clamp',\n children: [x as any, min as any, max as any],\n })\n}\n*/\n"],"mappings":"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AMA,EAAG,MAAQA,EAAG,OAC5BI,EAAKJ,EAAG,IAAMA,EAAG,MAAQA,EAAG,SAC5BK,EAAG,IAAIF,CAAE,IAAGA,EAAKG,EAAKF,CAAO,GAC7BC,EAAG,IAAID,CAAE,IAAGA,EAAKE,EAAKF,CAAO,GACjCJ,EAAG,GAAG,SAAWO,EAAqBN,EAAQE,EAAIC,CAAE,CAC5D,EAkBkB,KAhBL,IAAM,CACX,GAAM,CAAE,OAAAH,EAAQ,QAAAO,EAAS,SAAAC,CAAS,EAAIT,EAAG,GACnCU,EAAUC,EAAqBV,CAAM,EACrCW,EAAOC,EAAiBH,EAAS,CAC/B,KAAMF,EAAQ,kBAAkB,EAAE,WAAW,EAC7C,WAAY,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACrC,OAAQ,QACR,QAAS,OACjB,CAAC,EACDI,EAAK,YAAYH,CAAQ,EACzBG,EAAK,KAAKZ,EAAG,KAAK,EAClBY,EAAK,IAAI,EACTX,EAAO,MAAM,OAAO,CAACS,EAAQ,OAAO,CAAC,CAAC,CAC9C,CAGuB,CAAC,ECrCzB,IAAMI,GAAQ,CACb,QACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACR,EAKaC,EAAW,CAChB,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACR,EAeaC,EAAY,CACjB,MACA,MACA,MACA,MACA,MACA,QACA,WACA,WACA,gBACA,cACA,mBACA,MACA,KACA,MACA,SACA,MACA,SACA,SACA,QACA,SACA,YACA,YACR,EAKaC,EAAY,CACjB,MACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,QACA,UACA,WACA,MACA,MACA,OACA,cACA,QACA,QACA,SACA,MACA,MACA,UACA,OACA,OACA,OACA,aACA,SACA,SACA,cACA,WACA,MACA,OACA,MACA,MACA,MACA,SACA,YACA,WACA,MACA,OACA,OACA,OACA,UACA,aACA,UACA,UACA,QACA,WACA,OACA,MACA,aACA,OACA,OACA,MACA,qBAC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","names":["src_exports","__export","BufferUsage","CACHE_BOOLS","CACHE_FLOATS","CACHE_INTS","FUNCTIONS","Fn","If","OPERATORS","SWIZZLES","TYPES","TextureFormat","TextureUsage","abs","activeTexture","alignBufferSize","bool","calculateBufferSize","ceil","checkWebGPUSupport","color","configureCanvasContext","convertToNode","cos","createAttribute","createBindGroup","createBindGroupLayout","createBuffer","createBuffers","createCommandEncoder","createComputePipeline","createCubeTexture","createDepthTexture","createEmptyTexture","createFragmentShader","createGL","createIbo","createIndexBuffer","createNode","createProgram","createRenderPass","createRenderPipeline","createSampler","createShaderModule","createStorageBuffer","createTexture","createTextureFromImage","createTextureView","createUniformBuffer","createVbo","createVertexBuffer","createVertexShader","src_default","deleteBuffer","deleteProgram","deleteShader","deleteTexture","destroyBuffer","destroyTexture","dig","each","ext","fig","findDuplicateNodes","float","floor","flush","fract","getAttribLocation","getCachedBool","getCachedFloat","getCachedInt","getDeviceLimits","getProgramInfo","getShaderInfo","getUniformLocation","getUniformType","gl_FragCoord","gl_Position","glsl","iDeltaTime","iMouse","iPrevTime","iResolution","iTime","int","is","isGL","isServer","isWebGPUSupported","length","node","nodeToGLSL","nodeToWGSL","normalize","replace","requestWebGPUDevice","setupDeviceErrorHandling","sig","sin","sqrt","tan","uniform","updateBuffer","updateIbo","updateTexture","updateUniforms","updateVbo","vec2","vec3","vec4","vertexStride","webgl","webgpu","wgsl","__toCommonJS","import_reev","import_refr","import_reev","createVbo","c","data","buffer","createIbo","createAttribute","stride","location","vbo","ibo","deleteBuffer","vertexStride","count","value","iboValue","updateVbo","usage","updateIbo","createProgram","c","vs","fs","pg","error","deleteProgram","getProgramInfo","getUniformType","value","isMatrix","length","getUniformLocation","name","getAttribLocation","defaultVertexShader","defaultFragmentShader","deleteShader","c","shader","createShader","source","type","error","createVertexShader","createFragmentShader","getShaderInfo","createTexture","c","img","texture","activeTexture","location","unit","deleteTexture","createEmptyTexture","w","h","format","type","createCubeTexture","imgs","face","index","is","a","isServer","isWebGPUSupported","each","obj","fn","flush","args","f","replace","x","from","to","ext","src","fig","dig","sig","value","digit","nodeToGLSL","nodeProxy","context","ctx","generateGLSLExpression","node","is","generateGLSLOperator","generateGLSLMathFunction","formatGLSLValue","value","type","num","values","v","left","right","fun","args","child","x","y","z","inferGLSLType","len","glsl","fragmentNode","options","precision","is300ES","fragment","shader","name","a_position","webgl","gl","c","vs","fs","is","glsl","createProgram","createVertexShader","createFragmentShader","key","isAttribute","deleteProgram","value","iboValue","n","loc","vbo","createVbo","ibo","createIbo","stride","vertexStride","createAttribute","isMatrix","type","getUniformType","_loadFn","image","unit","tex","createTexture","activeTexture","alt","src","_activeUnit","requestWebGPUDevice","adapter","device","checkWebGPUSupport","getDeviceLimits","setupDeviceErrorHandling","event","configureCanvasContext","canvas","format","context","defaultVertexShader","defaultFragmentShader","createRenderPipeline","device","vertexShader","fragmentShader","format","v","f","createComputePipeline","computeShader","computeModule","createShaderModule","code","createBindGroupLayout","entries","createBindGroup","layout","createRenderPass","encoder","colorAttachment","depthStencilAttachment","descriptor","createCommandEncoder","nodeToWGSL","nodeProxy","context","ctx","generateWGSLExpression","node","formatWGSLValue","generateWGSLOperator","generateWGSLMathFunction","value","type","num","is","values","v","left","right","fun","args","child","x","y","z","wgsl","fragmentNode","options","shader","name","inferWGSLType","fragmentExpr","len","createBuffer","device","data","usage","array","is","buffer","createVertexBuffer","createIndexBuffer","createUniformBuffer","size","createStorageBuffer","updateBuffer","offset","destroyBuffer","calculateBufferSize","alignBufferSize","alignment","createBuffers","bufferConfigs","config","BufferUsage","createTexture","device","w","h","format","usage","createTextureFromImage","image","texture","createDepthTexture","device","w","h","format","createSampler","options","createTextureView","texture","updateTexture","data","destroyTexture","TextureUsage","TextureFormat","webgpu","gl","device","requestWebGPUDevice","vs","fs","is","wgsl","createRenderPipeline","context","pipeline","encoder","createCommandEncoder","pass","createRenderPass","TYPES","SWIZZLES","OPERATORS","FUNCTIONS","CACHE_BOOLS","CACHE_INTS","CACHE_FLOATS","nodeIdCounter","generateNodeId","createNode","type","value","options","isSwizzleProperty","key","SWIZZLES","isOperatorMethod","OPERATORS","isMathMethod","FUNCTIONS","createNodeProxy","node","callback","get","_target","is","getSwizzleType","args","getMathReturnType","apply","_thisArg","swizzle","func","inputType","nodeInstance","inferUniformType","value","is","len","uniform","initialValue","type","currentValue","objectUpdateCallback","renderUpdateCallback","baseNode","node","set","onObjectUpdate","callback","uniformNode","onRenderUpdate","_updateFromContext","context","newValue","iTime","iPrevTime","iDeltaTime","iResolution","iMouse","updateUniforms","prevTime","boolCache","intCache","floatCache","initializeCache","CACHE_BOOLS","value","node","CACHE_INTS","CACHE_FLOATS","getCachedBool","x","getCachedInt","getCachedFloat","findDuplicateNodes","nodes","duplicates","signatures","nodeProxy","signature","generateNodeSignature","convertToNode","x","is","getCachedBool","getCachedInt","getCachedFloat","convertArrayToNode","convertObjectToNode","node","array","len","obj","arr","float","int","bool","vec2","y","vec3","z","vec4","w","color","r","g","b","hex","num","Fn","jsFunc","functionNode","args","inputs","arg","is","float","If","condition","callback","conditionalNode","newCondition","newCallback","elseCallback","gl_FragCoord","node","gl_Position","iTime","uniform","iResolution","iMouse","abs","x","sin","cos","tan","sqrt","floor","ceil","fract","normalize","length","iTime","iPrevTime","iDeltaTime","isGL","a","is","createGL","props","gl","isWebGPUSupported","webgl","webgpu","w","h","_e","x","y","top","left","key","value","iboValue","isMatrix","src_default"]}