glre 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +148 -85
- package/dist/index.d.ts +364 -7
- package/dist/index.js +44 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -13
- package/dist/index.mjs.map +1 -1
- package/dist/native.d.ts +27 -41
- package/dist/native.js +44 -13
- package/dist/native.js.map +1 -1
- package/dist/native.mjs +44 -13
- package/dist/native.mjs.map +1 -1
- package/dist/react.d.ts +6 -11
- package/dist/react.js +44 -13
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +44 -13
- package/dist/react.mjs.map +1 -1
- package/dist/solid.d.ts +5 -63
- package/dist/solid.js +44 -13
- package/dist/solid.js.map +1 -1
- package/dist/solid.mjs +44 -13
- package/dist/solid.mjs.map +1 -1
- package/package.json +29 -60
- package/src/code/glsl.ts +148 -0
- package/src/code/wgsl.ts +134 -0
- package/src/index.ts +107 -0
- package/src/native.ts +29 -0
- package/src/node/cache.ts +60 -0
- package/src/node/const.ts +130 -0
- package/src/node/conv.ts +111 -0
- package/src/node/index.ts +93 -0
- package/src/node/node.ts +100 -0
- package/src/node/types.ts +101 -0
- package/src/node/uniform.ts +92 -0
- package/src/react.ts +17 -0
- package/src/solid.ts +14 -0
- package/src/types.ts +89 -0
- package/src/utils/helpers.ts +44 -0
- package/src/utils/pipeline.ts +128 -0
- package/src/utils/program.ts +94 -0
- package/src/webgl.ts +78 -0
- package/src/webgpu.ts +70 -0
- package/dist/types-f429c8b1.d.ts +0 -79
package/dist/index.js
CHANGED
|
@@ -1,15 +1,46 @@
|
|
|
1
|
-
var A=Object.defineProperty;var
|
|
1
|
+
"use strict";var A=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var ve=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var Ee=(e,r)=>{for(var t in r)A(e,t,{get:r[t],enumerable:!0})},we=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of ve(r))!Te.call(e,o)&&o!==t&&A(e,o,{get:()=>r[o],enumerable:!(n=ye(r,o))||n.enumerable});return e};var $e=e=>we(A({},"__esModule",{value:!0}),e);var Xr={};Ee(Xr,{CACHE_BOOLS:()=>H,CACHE_FLOATS:()=>K,CACHE_INTS:()=>Y,FUNCTIONS:()=>j,Fn:()=>hr,If:()=>br,OPERATORS:()=>k,SWIZZLES:()=>V,TYPES:()=>Ke,abs:()=>wr,activeTexture:()=>D,alignTo256:()=>ae,bool:()=>nr,ceil:()=>Gr,color:()=>ar,convertToNode:()=>er,cos:()=>Lr,createAttrib:()=>B,createBindGroup:()=>se,createDescriptor:()=>z,createDeviceTexture:()=>ke,createGL:()=>he,createIbo:()=>M,createNode:()=>w,createProgram:()=>X,createRenderPipeline:()=>W,createSampler:()=>je,createShader:()=>P,createTexture:()=>I,createUniform:()=>Ve,createUniformBuffer:()=>We,createVbo:()=>F,createVertexBuffer:()=>ze,default:()=>Pr,defaultFragmentGLSL:()=>oe,defaultVertexGLSL:()=>ne,dig:()=>Ge,each:()=>re,ext:()=>Ce,fig:()=>Se,findDuplicateNodes:()=>Qe,float:()=>G,floor:()=>Sr,flush:()=>Le,fract:()=>Rr,getCachedBool:()=>N,getCachedFloat:()=>S,getCachedInt:()=>C,getDefaultVertices:()=>He,gl_FragCoord:()=>xr,gl_Position:()=>yr,glsl:()=>$,iDeltaTime:()=>le,iMouse:()=>Er,iPrevTime:()=>pe,iResolution:()=>Tr,iTime:()=>vr,initWebGPUDevice:()=>Ie,int:()=>tr,is:()=>i,isGL:()=>Ar,isServer:()=>de,isWebGPUSupported:()=>ge,length:()=>_r,node:()=>s,nodeToGLSL:()=>te,nodeToWGSL:()=>ie,normalize:()=>Ur,replace:()=>Ne,sig:()=>Re,sin:()=>$r,sqrt:()=>Cr,tan:()=>Nr,uniform:()=>x,updateBindGroup:()=>qe,updateUniforms:()=>gr,vec2:()=>or,vec3:()=>fe,vec4:()=>ir,webgl:()=>O,webgpu:()=>q,wgsl:()=>L});module.exports=$e(Xr);var y=require("reev"),_=require("refr");var T=require("reev");var i={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)},re=(e,r)=>e.forEach(r),Le=(e,...r)=>{re(e,t=>t(...r))},Ne=(e="",r="_",t="/")=>e.split(r).join(t),Ce=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",Se=(e=0)=>`${e}`.split(".")[1]?.length??0,Ge=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),Re=(e=0,r=-2)=>(r*=-1,r=Math.pow(10,r),e*=r,e=Math.round(e),e/=r,e);var te=(e,r)=>{let t={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...r};return v(e,t)},v=(e,r)=>e?i.und(e.value)?e.property&&e.parent?`${v(e.parent,r)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?_e(e,r):e.mathFunction&&e.children&&e.children.length>=1?Ae(e,r):"0.0":Ue(e.value,e.type):"0.0",Ue=(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(i.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"},_e=(e,r)=>{if(!e.children||e.children.length<2)return"0.0";let t=v(e.children[0],r),n=v(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})`},Ae=(e,r)=>{if(!e.children||e.children.length<1)return"0.0";let t=e.mathFunction,n=e.children.map(p=>v(p,r)),[o,a,u]=n;return n.length===1?`${t}(${o})`:n.length===2?`${t}(${o}, ${a})`:n.length===3?`${t}(${o}, ${a}, ${u})`:o||"0.0"},Pe=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let r=e.length;if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4"}return"float"},$=(e,r)=>{let t=r?.precision||"mediump",o=(r?.version||"300 es")==="300 es",a=te(e),u="";return o&&(u+=`#version 300 es
|
|
2
|
+
`),u+=`precision ${t} float;
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
`,r?.uniforms&&(Object.entries(r.uniforms).forEach(([p,g])=>{let h=Pe(g);u+=`uniform ${h} ${p};
|
|
5
|
+
`}),u+=`
|
|
6
|
+
`),o&&(u+=`out vec4 fragColor;
|
|
7
|
+
|
|
8
|
+
`),u+=`void main() {
|
|
9
|
+
`,u+=o?` fragColor = ${a};
|
|
10
|
+
`:` gl_FragColor = ${a};
|
|
11
|
+
`,u+=`}
|
|
12
|
+
`,u};var ne=`
|
|
13
|
+
#version 300 es
|
|
14
|
+
void main() {
|
|
15
|
+
float x = float(gl_VertexID % 2) * 4.0 - 1.0;
|
|
16
|
+
float y = float(gl_VertexID / 2) * 4.0 - 1.0;
|
|
17
|
+
gl_Position = vec4(x, y, 0.0, 1.0);
|
|
18
|
+
}
|
|
19
|
+
`,oe=`
|
|
20
|
+
#version 300 es
|
|
21
|
+
precision mediump float;
|
|
22
|
+
uniform vec2 iResolution;
|
|
23
|
+
out vec4 fragColor;
|
|
24
|
+
void main() {
|
|
25
|
+
fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
|
|
26
|
+
}
|
|
27
|
+
`,P=(e,r,t)=>{let n=e.createShader(t);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,r.trim()),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;let o=e.getShaderInfoLog(n);throw e.deleteShader(n),new Error(`Could not compile shader: ${o}`)},X=(e,r=ne,t=oe)=>{let n=e.createProgram();if(e.attachShader(n,P(e,r,e.VERTEX_SHADER)),e.attachShader(n,P(e,t,e.FRAGMENT_SHADER)),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)=>{let t=e.createBuffer();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},M=(e,r)=>{let t=e.createBuffer();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},B=(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)},I=(e,r)=>{let t=e.createTexture();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))};var O=async e=>{let r=e.vs||e.vert||e.vertex,t=e.fs||e.frag||e.fragment;i.obj(t)&&(t=$(t)),i.obj(r)&&(r=$(r));let n=e.el.getContext("webgl2"),o=X(n,r,t),a=0,u=(0,T.nested)(()=>a++),p=(0,T.nested)((f,c=!1)=>c?n.getAttribLocation(o,f):n.getUniformLocation(o,f)),g=(0,T.nested)((f,c,m,d)=>{d&&(c=Math.max(...d)+1);let b=m.length/c;return b!==Math.floor(b)&&console.warn(`Vertex Stride Error: count ${c} is mismatch`),Math.floor(b)}),h=(0,T.nested)((f,c)=>{let m=p(f);if(i.num(c))return b=>n.uniform1f(m,b);let d=c.length;return d<=4?b=>n[`uniform${d}fv`](m,b):(d=Math.sqrt(d)<<0,b=>n[`uniformMatrix${d}fv`](m,!1,b))});e("clean",()=>n.deleteProgram(o)),e("render",()=>{n.useProgram(o),e.queue.flush(),n.clear(n.COLOR_BUFFER_BIT),n.viewport(0,0,...e.size),n.drawArrays(n.TRIANGLES,0,3)}),e("_attribute",(f="",c,m)=>{let d=p(f,!0),b=F(n,c),be=M(n,m),xe=g(f,e.count,c,m);B(n,xe,d,b,be)}),e("_uniform",(f,c)=>{h(f,c)(c)});let l=f=>{let c=p(f.alt),m=u(f.alt),d=I(n,f);D(n,c,m,d)};return e("_texture",(f,c)=>{let m=new Image;m.addEventListener("load",l.bind(null,m),!1),Object.assign(m,{src:c,alt:f,crossOrigin:"anonymous"})}),e.webgl={context:n,program:o},e};var ie=(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?Xe(e.value,e.type):e.property&&e.parent?`${E(e.parent,r)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?Fe(e,r):e.mathFunction&&e.children&&e.children.length>=1?Me(e,r):"0.0":"0.0",Xe=(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(i.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"},Fe=(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})`},Me=(e,r)=>{if(!e.children||e.children.length<1)return"0.0";let t=e.mathFunction,n=e.children.map(p=>E(p,r)),[o,a,u]=n;return n.length===1?`${t}(${o})`:n.length===2?`${t}(${o}, ${a})`:n.length===3?`${t}(${o}, ${a}, ${u})`:o||"0.0"},L=(e,r)=>{let t="";r?.uniforms&&(Object.entries(r.uniforms).forEach(([o,a])=>{let u=Be(a);t+=`@group(0) @binding(0) var<uniform> ${o}: ${u};
|
|
28
|
+
`}),t+=`
|
|
29
|
+
`),t+=`@fragment
|
|
30
|
+
`,t+=`fn main() -> @location(0) vec4<f32> {
|
|
31
|
+
`;let n=ie(e);return t+=` return ${n};
|
|
32
|
+
`,t+=`}
|
|
33
|
+
`,t},Be=e=>{if(i.num(e))return"f32";if(i.bol(e))return"bool";if(i.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 Ie=async e=>{let r=navigator.gpu;if(!r)return null;let t=await r.requestAdapter();if(!t)return null;let n=await t.requestDevice(),o=e.getContext("webgpu");if(!o)return null;let a=r.getPreferredCanvasFormat();return o.configure({device:n,format:a}),{device:n,context:o,format:a}},De=`
|
|
34
|
+
@vertex
|
|
35
|
+
fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
|
|
36
|
+
let x = f32(vertex_index % 2u) * 4.0 - 1.0;
|
|
37
|
+
let y = f32(vertex_index / 2u) * 4.0 - 1.0;
|
|
38
|
+
return vec4f(x, y, 0.0, 1.0);
|
|
39
|
+
}
|
|
40
|
+
`,Oe=`
|
|
41
|
+
@fragment
|
|
42
|
+
fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
|
|
43
|
+
return vec4f(position.xy / vec2f(1280, 800), 0.0, 1.0);
|
|
44
|
+
}
|
|
45
|
+
`,W=(e,r,t=De,n=Oe,o)=>e.createRenderPipeline({vertex:{module:e.createShaderModule({code:t.trim()}),entryPoint:"main",buffers:o},fragment:{module:e.createShaderModule({code:n.trim()}),entryPoint:"main",targets:[{format:r}]},layout:"auto",primitive:{topology:"triangle-list"}}),z=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),ae=e=>Math.ceil(e/256)*256,We=(e,r)=>e.createBuffer({size:ae(r),usage:68}),ze=(e,r)=>{let t=new Float32Array(r),n=e.createBuffer({size:t.byteLength,usage:36});return e.queue.writeBuffer(n,0,t),n},se=(e,r,t)=>{let n=r.getBindGroupLayout(0);return e.createBindGroup({layout:n,entries:t})},qe=(e,r,t,n={},o=null)=>{let a=[{binding:0,resource:{buffer:t}}],u=1;return Object.values(n).forEach(p=>{a.push({binding:u++,resource:p.createView()})}),o&&Object.keys(n).length>0&&a.push({binding:u++,resource:o}),se(e,r,a)},Ve=(e,r,t,n=0)=>{e.queue.writeBuffer(r,n,t)},ke=(e,r)=>{let t=e.createTexture({size:{width:r.width,height:r.height},format:"rgba8unorm",usage:6});return e.queue.copyExternalImageToTexture({source:r},{texture:t},{width:r.width,height:r.height}),t},je=e=>e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),He=()=>new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);var Ye=3,q=async e=>{let r=e.vs||e.vert||e.vertex,t=e.fs||e.frag||e.fragment;i.obj(r)&&(r=L(r)),i.obj(t)&&(t=L(t));let n=e.el.getContext("webgpu"),o=navigator.gpu,u=await(await o.requestAdapter()).requestDevice(),p=o.getPreferredCanvasFormat();n.configure({device:u,format:p,alphaMode:"opaque"}),e("clean",()=>{});let g;return e("render",()=>{g||(g=W(u,p,r,t,[]));let h=u.createCommandEncoder(),l=h.beginRenderPass(z(n));l.setPipeline(g),l.draw(Ye,1,0,0),l.end(),u.queue.submit([h.finish()])}),e("_attribute",(h="",l)=>{}),e("_uniform",(h,l=0)=>{}),e("_texture",(h,l)=>{}),e};var Ke=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],V=["x","y","z","w","r","g","b","a","s","t","p","q"],k=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],j=["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"],H=[!0,!1],Y=[0,1,2,3,4,5],K=[0,1,.5,2];var Z=new Map,Q=new Map,J=new Map,Ze=()=>{H.forEach(e=>{Z.set(e,s("bool",e))}),Y.forEach(e=>{Q.set(e,s("int",e))}),K.forEach(e=>{J.set(e,s("float",e))})},N=e=>(Z.has(e)||Ze(),Z.get(e)||s("bool",e)),C=e=>Q.has(e)?Q.get(e):s("int",e),S=e=>J.has(e)?J.get(e):s("float",e),Qe=e=>{let r=new Map,t=new Map;return e.forEach(n=>{let o=Je(n);t.has(o)?(r.has(o)||r.set(o,[t.get(o)]),r.get(o).push(n)):t.set(o,n)}),r},Je=e=>[e.type,`${e.value}`,e.property||""].join("|");var er=e=>i.bol(e)?N(e):i.num(e)?i.int(e)?C(e):S(e):i.arr(e)?ue(e):i.obj(e)?rr(e):s("float",0),ue=e=>{let r=e.length;return r===2?s("vec2",e):r===3?s("vec3",e):r===4?s("vec4",e):r===9?s("mat3",e):r===16?s("mat4",e):s("float",e[0])},rr=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),s("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),ue(r)}return s("float",0)},G=e=>i.num(e)?S(e):s("float",Number(e)),tr=e=>i.num(e)&&Number.isInteger(e)?C(e):s("int",Math.floor(Number(e))),nr=e=>N(!!e),or=(e,r)=>i.und(e)?s("vec2",[0,0]):i.und(r)?i.arr(e)?s("vec2",e.slice(0,2)):i.obj(e)&&"x"in e&&"y"in e?s("vec2",[e.x,e.y]):s("vec2",[Number(e),Number(e)]):s("vec2",[Number(e),Number(r)]),fe=(e,r,t)=>i.und(e)?s("vec3",[0,0,0]):i.und(r)?i.arr(e)?s("vec3",e.slice(0,3)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e?s("vec3",[e.x,e.y,e.z]):s("vec3",[Number(e),Number(e),Number(e)]):t===void 0?s("vec3",[Number(e),Number(r),0]):s("vec3",[Number(e),Number(r),Number(t)]),ir=(e,r,t,n)=>i.und(e)?s("vec4",[0,0,0,1]):i.und(r)?i.arr(e)?s("vec4",e.slice(0,4)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e&&"w"in e?s("vec4",[e.x,e.y,e.z,e.w]):s("vec4",[Number(e),Number(e),Number(e),1]):s("vec4",[Number(e),Number(r),Number(t),Number(n)]),ar=(e,r,t)=>{if(e===void 0)return s("color",[1,1,1]);if(i.str(e)&&e.startsWith("#")){let n=e.slice(1),o=parseInt(n,16);return s("color",[(o>>16&255)/255,(o>>8&255)/255,(o&255)/255])}return i.num(e)&&r===void 0&&t===void 0?s("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):fe(e,r,t)};var sr=0,ur=()=>`node_${++sr}`,w=(e,r,t)=>({id:ur(),type:e,value:r,children:[],...t}),fr=(e="")=>V.includes(e),cr=(e="")=>k.includes(e),pr=(e="")=>j.includes(e),R=(e,r)=>{let t=(o,a)=>{if(!(!i.str(a)||a==="then"))return a==="id"?e.id:a==="type"?e.type:a==="value"?e.value:a==="property"?e.property:fr(a)?R(w(lr(a),void 0,{parent:e,property:a}),r):cr(a)?(...u)=>R(w(e.type,void 0,{operator:a,children:[e,...u]}),r):pr(a)?(...u)=>R(w(mr(a,e.type),void 0,{mathFunction:a,children:[e,...u]}),r):r?.({path:[a],args:[]})},n=(o,a,u)=>r?.({path:[],args:u});return new Proxy(()=>{},{get:t,apply:n})},lr=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",mr=(e,r)=>e==="length"?"float":r,s=(e,r,t)=>{let n=w(e,r,t);return R(n)};var dr=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.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 i.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},x=e=>{let r=dr(e),t=e,n=null,o=null,a=s(r,t),u=f=>{t=f,a.value=f},p=f=>(n=f,l),g=f=>(o=f,l),h=f=>{if(n){let c=n(f);c!==void 0&&u(c)}if(o){let c=o(f);c!==void 0&&u(c)}},l=Object.create(a);return l.set=u,l.onObjectUpdate=p,l.onRenderUpdate=g,l._updateFromContext=h,l.isUniform=!0,l},ce=x(0),pe=x(0),le=x(0),pt=x([1920,1080]),lt=x([0,0]),gr=e=>{if(e.time!==void 0){let r=ce.value||0;ce.set(e.time),pe.set(r),le.set(e.time-r)}};var hr=e=>{let r=(...t)=>{let n=t.map(a=>i.obj(a)&&"type"in a&&a.type?a:G(a));return e(n)||G(0)};return r.call=t=>e(t),r},br=(e,r)=>{r();let t={ElseIf(n,o){return o(),t},Else(n){n()}};return t},xr=s("vec4",void 0),yr=s("vec4",void 0),vr=x(0),Tr=x([1920,1080]),Er=x([0,0]),wr=e=>e.abs(),$r=e=>e.sin(),Lr=e=>e.cos(),Nr=e=>e.tan(),Cr=e=>e.sqrt(),Sr=e=>e.floor(),Gr=e=>e.ceil(),Rr=e=>e.fract(),Ur=e=>e.normalize(),_r=e=>e.length();var Ar=e=>i.obj(e)?"isGL"in e:!1,de=()=>typeof window>"u",ge=()=>de()?!1:"gpu"in navigator,U=performance.now(),ee=0,me=0,he=e=>{let r=(0,y.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:3,webgl:{},webgpu:{}});return r.queue=(0,_.createQueue)(),r.frame=(0,_.createFrame)(),r.attribute=(0,y.durable)((t,n,o)=>r.queue(()=>r._attribute?.(t,n,o))),r.uniform=(0,y.durable)((t,n,o)=>r.queue(()=>r._uniform?.(t,n,o))),r.texture=(0,y.durable)((t,n)=>r.queue(()=>r._texture?.(t,n))),r("mount",async()=>{ge()||(r.isWebGL=!0),r.isWebGL?await O(r):await q(r),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",()=>{ee=U,U=performance.now()/1e3,me=U-ee,r.uniform({iPrevTime:ee,iTime:U,iDeltaTime:me})}),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[a,u]=r.size,{top:p,left:g}=r.el.getBoundingClientRect();r.mouse[0]=(n-p-a/2)/(a/2),r.mouse[1]=-(o-g-u/2)/(u/2),r.uniform("iMouse",r.mouse)}),r(e)},Pr=he;0&&(module.exports={CACHE_BOOLS,CACHE_FLOATS,CACHE_INTS,FUNCTIONS,Fn,If,OPERATORS,SWIZZLES,TYPES,abs,activeTexture,alignTo256,bool,ceil,color,convertToNode,cos,createAttrib,createBindGroup,createDescriptor,createDeviceTexture,createGL,createIbo,createNode,createProgram,createRenderPipeline,createSampler,createShader,createTexture,createUniform,createUniformBuffer,createVbo,createVertexBuffer,defaultFragmentGLSL,defaultVertexGLSL,dig,each,ext,fig,findDuplicateNodes,float,floor,flush,fract,getCachedBool,getCachedFloat,getCachedInt,getDefaultVertices,gl_FragCoord,gl_Position,glsl,iDeltaTime,iMouse,iPrevTime,iResolution,iTime,initWebGPUDevice,int,is,isGL,isServer,isWebGPUSupported,length,node,nodeToGLSL,nodeToWGSL,normalize,replace,sig,sin,sqrt,tan,uniform,updateBindGroup,updateUniforms,vec2,vec3,vec4,webgl,webgpu,wgsl});
|
|
15
46
|
//# 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 { createQueue, createFrame } 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, Fun } from './types'\n\nexport type { GL, Fun }\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 self.frame(() => void self.render() || true)\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.queue.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.queue(() => {\n const loc = self.location(image.alt)\n const unit = self.activeUnit(image.alt)\n const tex = createTexture(self.gl, image)\n self.queue(() => {\n activeTexture(self.gl, loc, unit, tex)\n return true\n })\n })\n }\n\n const clear = (key = 'COLOR_BUFFER_BIT') => {\n self.gl.clear(self.gl[key])\n }\n\n const viewport = (size: number[] = self.size) => {\n self.gl.viewport(0, 0, ...size)\n }\n\n const drawArrays = (mode = 'TRIANGLES') => {\n self.gl.drawArrays(self.gl[mode], 0, self.count)\n }\n\n const drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') => {\n mode = self.gl[mode]\n type = self.gl[type]\n self.gl.drawElements(mode, self.count, type, 0)\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.queue(() => {\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.queue(() => {\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.queue = createQueue()\n self.frame = createFrame()\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.queue = self.queue\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":"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","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.ts","../src/utils/helpers.ts","../src/code/glsl.ts","../src/utils/program.ts","../src/code/wgsl.ts","../src/utils/pipeline.ts","../src/webgpu.ts","../src/node/const.ts","../src/node/cache.ts","../src/node/conv.ts","../src/node/node.ts","../src/node/uniform.ts","../src/node/index.ts"],"sourcesContent":["import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\nexport * from './code/glsl'\nexport * from './code/wgsl'\nexport * from './node'\nexport * from './types'\nexport * from './utils/helpers'\nexport * from './utils/pipeline'\nexport * from './utils/program'\nexport * from './webgl'\nexport * from './webgpu'\n\nexport const isGL = (a: unknown): a is EventState<GL> => {\n if (!is.obj(a)) return false\n if ('isGL' in a) return true\n return false\n}\nexport const isServer = () => {\n return typeof window === 'undefined'\n}\n\nexport const isWebGPUSupported = () => {\n if (isServer()) return false\n return 'gpu' in navigator\n}\n\nlet iTime = performance.now(),\n iPrevTime = 0,\n iDeltaTime = 0\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: 3,\n webgl: {},\n webgpu: {},\n }) as EventState<GL>\n\n gl.queue = createQueue()\n gl.frame = createFrame()\n\n gl.attribute = durable((k, v, i) => gl.queue(() => gl._attribute?.(k, v, i)))\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)))\n gl.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)))\n\n gl('mount', async () => {\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n await webgl(gl)\n } else await webgpu(gl)\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 return gl(props)\n}\n\nexport default createGL\n","import { nested } from 'reev'\nimport { glsl } from './code/glsl'\nimport { is } from './utils/helpers'\nimport type { X } from './node'\nimport type { GL } from './types'\nimport { activeTexture, createAttrib, createIbo, createProgram, createTexture, createVbo } from './utils/program'\n\nexport const webgl = async (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 const c = gl.el.getContext('webgl2')!\n const pg = createProgram(c, vs, fs)\n\n let _activeUnit = 0\n const activeUnits = nested(() => _activeUnit++)\n\n const locations = nested((key, bool = false) => {\n if (bool) return c.getAttribLocation(pg, key)\n return c.getUniformLocation(pg, key) as WebGLUniformLocation\n })\n\n const strides = nested((_, count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n if (stride !== Math.floor(stride)) console.warn(`Vertex Stride Error: count ${count} is mismatch`)\n return Math.floor(stride)\n })\n\n const uniforms = nested((key, value: number | number[]) => {\n const loc = locations(key)\n if (is.num(value)) return (value: any) => c.uniform1f(loc, value)\n let l = value.length as 3\n if (l <= 4) return (value: any) => c[`uniform${l}fv`](loc, value)\n l = (Math.sqrt(l) << 0) as 3\n return (value: any) => c[`uniformMatrix${l}fv`](loc, false, value)\n })\n\n gl('clean', () => c.deleteProgram(pg))\n\n gl('render', () => {\n c.useProgram(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, 3)\n })\n\n gl('_attribute', (key = '', value: number[], iboValue: number[]) => {\n const loc = locations(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = strides(key, gl.count, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n })\n\n gl('_uniform', (key: string, value: number | number[]) => {\n uniforms(key, value)(value)\n })\n\n const _loadFn = (image: HTMLImageElement) => {\n const loc = locations(image.alt)\n const unit = activeUnits(image.alt)\n const tex = createTexture(c, image)\n activeTexture(c, 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 gl.webgl = { context: c, program: pg }\n\n return gl\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\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/helpers'\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 = (nodeProxy: X, context?: Partial<GLSLContext>): 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) 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 if (args.length === 1) return `${fun}(${x})`\n if (args.length === 2) return `${fun}(${x}, ${y})`\n if (args.length === 3) return `${fun}(${x}, ${y}, ${z})`\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 ? ` fragColor = ${fragment};\\n` : ` gl_FragColor = ${fragment};\\n`\n shader += '}\\n'\n\n return shader\n}\n","export const defaultVertexGLSL = /* cpp */ `\n#version 300 es\nvoid main() {\n float x = float(gl_VertexID % 2) * 4.0 - 1.0;\n float y = float(gl_VertexID / 2) * 4.0 - 1.0;\n gl_Position = vec4(x, y, 0.0, 1.0);\n}\n`\n\nexport const defaultFragmentGLSL = /* cpp */ `\n#version 300 es\nprecision mediump float;\nuniform vec2 iResolution;\nout vec4 fragColor;\nvoid main() {\n fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n}\n`\n\nexport const createShader = (c: WebGLRenderingContext, source: string, type: number) => {\n const shader = c.createShader(type)\n if (!shader) throw new Error('Failed to create shader')\n c.shaderSource(shader, source.trim())\n c.compileShader(shader)\n if (c.getShaderParameter(shader, c.COMPILE_STATUS)) return shader\n const error = c.getShaderInfoLog(shader)\n c.deleteShader(shader)\n throw new Error(`Could not compile shader: ${error}`)\n}\n\nexport const createProgram = (c: WebGLRenderingContext, vs = defaultVertexGLSL, fs = defaultFragmentGLSL) => {\n const pg = c.createProgram()\n c.attachShader(pg, createShader(c, vs, c.VERTEX_SHADER))\n c.attachShader(pg, createShader(c, fs, c.FRAGMENT_SHADER))\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\nexport const createVbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ARRAY_BUFFER, buffer)\n c.bufferData(c.ARRAY_BUFFER, new Float32Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const createIbo = (c: WebGLRenderingContext, data: number[]) => {\n const buffer = c.createBuffer()\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, buffer)\n c.bufferData(c.ELEMENT_ARRAY_BUFFER, new Int16Array(data), c.STATIC_DRAW)\n c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, null)\n return buffer\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n stride: number,\n location: any,\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\nexport const createTexture = (c: WebGLRenderingContext, img: HTMLImageElement) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, img)\n c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n return texture\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","import { is } from '../utils/helpers'\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 = (nodeProxy: X, context?: Partial<WGSLContext>): 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) 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) 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) => generateWGSLExpression(child, context))\n const [x, y, z] = args\n // @TODO FIX\n // if (fun === 'toVar') return x // toVarは変数化のヒントなので、そのまま返す\n if (args.length === 1) return `${fun}(${x})`\n if (args.length === 2) return `${fun}(${x}, ${y})`\n if (args.length === 3) return `${fun}(${x}, ${y}, ${z})`\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 { GPUContext, GPUDevice, GPUPipeline } from '../types'\n\nexport const initWebGPUDevice = async (el: HTMLCanvasElement) => {\n const gpu = (navigator as any).gpu\n if (!gpu) return null\n const adapter = await gpu.requestAdapter()\n if (!adapter) return null\n const device = await adapter.requestDevice()\n const context = el.getContext('webgpu') as GPUContext\n if (!context) return null\n const format = gpu.getPreferredCanvasFormat()\n context.configure({ device, format })\n return { device, context, format }\n}\n\nconst defaultVertexWGSL = `\n@vertex\nfn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {\n let x = f32(vertex_index % 2u) * 4.0 - 1.0;\n let y = f32(vertex_index / 2u) * 4.0 - 1.0;\n return vec4f(x, y, 0.0, 1.0);\n}\n`\n\nconst defaultFragmentWGSL = `\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n return vec4f(position.xy / vec2f(1280, 800), 0.0, 1.0);\n}\n`\n\nexport const createRenderPipeline = (\n device: GPUDevice,\n format: string,\n vs = defaultVertexWGSL,\n fs = defaultFragmentWGSL,\n buffers: any[]\n) => {\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ code: vs.trim() }),\n entryPoint: 'main',\n buffers,\n },\n fragment: {\n module: device.createShaderModule({ code: fs.trim() }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout: 'auto',\n primitive: { topology: 'triangle-list' },\n }) as GPUPipeline\n}\n\nexport const createDescriptor = (c: GPUContext) => {\n return {\n colorAttachments: [\n {\n view: c.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 1 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n }\n}\nexport const alignTo256 = (size: number) => Math.ceil(size / 256) * 256\n\nexport const createUniformBuffer = (device: GPUDevice, size: number) => {\n return device.createBuffer({ size: alignTo256(size), usage: 0x40 | 0x4 }) as Buffer\n}\n\nexport const createVertexBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const buffer = device.createBuffer({ size: array.byteLength, usage: 0x20 | 0x4 })\n device.queue.writeBuffer(buffer, 0, array)\n return buffer as Buffer\n}\n\nexport const createBindGroup = (device: GPUDevice, pipeline: GPUPipeline, entries: any[]) => {\n const layout = pipeline.getBindGroupLayout(0)\n return device.createBindGroup({ layout, entries })\n}\n\nexport const updateBindGroup = (\n device: GPUDevice,\n pipeline: GPUPipeline,\n uniformBuffer: Buffer,\n textures: any = {},\n sampler: any = null\n) => {\n const entries = [{ binding: 0, resource: { buffer: uniformBuffer } }]\n let binding = 1\n Object.values(textures).forEach((texture: any) => {\n entries.push({ binding: binding++, resource: texture.createView() })\n })\n if (sampler && Object.keys(textures).length > 0) entries.push({ binding: binding++, resource: sampler })\n return createBindGroup(device, pipeline, entries)\n}\n\nexport const createUniform = (device: GPUDevice, buffer: any, data: Float32Array, offset = 0) => {\n device.queue.writeBuffer(buffer, offset, data)\n}\n\nexport const createDeviceTexture = (device: GPUDevice, image: HTMLImageElement) => {\n const texture = device.createTexture({\n size: { width: image.width, height: image.height },\n format: 'rgba8unorm',\n usage: 0x4 | 0x2,\n })\n device.queue.copyExternalImageToTexture(\n { source: image },\n { texture },\n { width: image.width, height: image.height }\n )\n return texture\n}\n\nexport const createSampler = (device: GPUDevice) => {\n return device.createSampler({\n magFilter: 'linear',\n minFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n })\n}\n\nexport const getDefaultVertices = () => new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1])\n","import { wgsl } from './code/wgsl'\nimport { is } from './utils/helpers'\nimport {\n createRenderPipeline,\n createDescriptor,\n // createUniformBuffer,\n // updateBindGroup,\n // createVertexBuffer,\n // createUniform,\n // createDeviceTexture,\n // createSampler,\n} from './utils/pipeline'\nimport type { X } from './node'\nimport type { GL, GPUPipeline } from './types'\n\nconst quadVertexCount = 3\n\nexport const webgpu = async (gl: GL) => {\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(vs as X)\n if (is.obj(fs)) fs = wgsl(fs as X)\n const c = gl.el.getContext('webgpu') as any\n const gpu = (navigator as any).gpu\n const adapter = await gpu.requestAdapter()\n const device = await adapter.requestDevice()\n const format = gpu.getPreferredCanvasFormat()\n c.configure({ device, format, alphaMode: 'opaque' })\n\n gl('clean', () => {})\n\n let pipeline: GPUPipeline\n\n gl('render', () => {\n if (!pipeline) pipeline = createRenderPipeline(device, format, vs, fs, [])\n const encoder = device.createCommandEncoder()\n const pass = encoder.beginRenderPass(createDescriptor(c))\n pass.setPipeline(pipeline)\n pass.draw(quadVertexCount, 1, 0, 0)\n pass.end()\n device.queue.submit([encoder.finish()])\n })\n\n gl('_attribute', (key = '', value: number[]) => {\n // @TODO FIX\n // vertexBuffers(key, value)\n })\n\n gl('_uniform', (key: string, value = 0) => {\n // @TODO FIX\n // if (!device || !uniformBuffer) return\n // uniforms[key] = value\n // const uniformData = new Float32Array(Object.values(uniforms))\n // createUniform(device, uniformBuffer, uniformData)\n })\n\n // const _loadFun = (image: HTMLImageElement, gl: GL) => {\n // const texture = createDeviceTexture(device, image)\n // // bindGroup = updateBindGroup(device, pipeline, uniformBuffer, textures, sampler)\n // }\n\n gl('_texture', (alt: string, src: string) => {\n // @TODO FIX\n // const image = new Image()\n // image.addEventListener('load', _loadFun.bind(null, image, gl), false)\n // Object.assign(image, { src, alt, crossOrigin: 'anonymous' })\n })\n\n return gl\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 = ['x', 'y', 'z', 'w', 'r', 'g', 'b', 'a', 's', 't', 'p', 'q'] as const\n\ntype AllSwizzles<T extends string> = T | `${T}${T}` | `${T}${T}${T}` | `${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 { 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)) duplicates.set(signature, [signatures.get(signature)!])\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 = [nodeProxy.type, `${nodeProxy.value}`, nodeProxy.property || '']\n return parts.join('|')\n}\n\n// 初期化を実行\n// initializeCache()\n","import { node } from '.'\nimport { getCachedBool, getCachedInt, getCachedFloat } from './cache'\nimport { is } from '../utils/helpers'\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) 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) 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) 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', [((num >> 16) & 255) / 255, ((num >> 8) & 255) / 255, (num & 255) / 255])\n }\n\n // 数値カラーの処理\n if (is.num(r) && g === undefined && b === undefined) {\n return node('color', [((r >> 16) & 255) / 255, ((r >> 8) & 255) / 255, (r & 255) / 255])\n }\n\n return vec3(r, g, b)\n}\n","import { OPERATORS, FUNCTIONS, SWIZZLES } from './const'\nimport { is } from '../utils/helpers'\nimport type { NodeType } from './const'\nimport type { Node, ProxyCallback, X } from './types'\n\nlet nodeIdCounter = 0\n\n// ノードIDを生成\nconst generateNodeId = () => `node_${++nodeIdCounter}`\n\n// ノードを作成\nexport const createNode = (type: NodeType, value?: any, options?: Partial<Node>): 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(getMathReturnType(key, node.type), undefined, {\n mathFunction: key as any,\n children: [node, ...args],\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/helpers'\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) 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 = null\n let renderUpdateCallback: ((context: UpdateContext) => any) | null = 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 = (callback: (context: UpdateContext) => any): UniformNode => {\n objectUpdateCallback = callback\n return uniformNode\n }\n // レンダー更新時のコールバックを設定\n const onRenderUpdate = (callback: (context: UpdateContext) => any): 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 { float } from './conv'\nimport { node } from './node'\nimport { uniform } from './uniform'\nimport { is } from '../utils/helpers'\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(newCondition: X, newCallback: () => void): 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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","names":["src_exports","__export","CACHE_BOOLS","CACHE_FLOATS","CACHE_INTS","FUNCTIONS","Fn","If","OPERATORS","SWIZZLES","TYPES","abs","activeTexture","alignTo256","bool","ceil","color","convertToNode","cos","createAttrib","createBindGroup","createDescriptor","createDeviceTexture","createGL","createIbo","createNode","createProgram","createRenderPipeline","createSampler","createShader","createTexture","createUniform","createUniformBuffer","createVbo","createVertexBuffer","src_default","defaultFragmentGLSL","defaultVertexGLSL","dig","each","ext","fig","findDuplicateNodes","float","floor","flush","fract","getCachedBool","getCachedFloat","getCachedInt","getDefaultVertices","gl_FragCoord","gl_Position","glsl","iDeltaTime","iMouse","iPrevTime","iResolution","iTime","initWebGPUDevice","int","is","isGL","isServer","isWebGPUSupported","length","node","nodeToGLSL","nodeToWGSL","normalize","replace","sig","sin","sqrt","tan","uniform","updateBindGroup","updateUniforms","vec2","vec3","vec4","webgl","webgpu","wgsl","__toCommonJS","import_reev","import_refr","import_reev","is","a","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","defaultVertexGLSL","defaultFragmentGLSL","createShader","c","source","type","shader","error","createProgram","vs","fs","pg","createVbo","data","buffer","createIbo","createAttrib","stride","location","vbo","ibo","createTexture","img","texture","activeTexture","unit","webgl","gl","vs","fs","is","glsl","c","pg","createProgram","_activeUnit","activeUnits","locations","key","bool","strides","_","count","value","iboValue","stride","uniforms","loc","l","vbo","createVbo","ibo","createIbo","str","createAttrib","_loadFn","image","unit","tex","createTexture","activeTexture","alt","src","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","initWebGPUDevice","el","gpu","adapter","device","context","format","defaultVertexWGSL","defaultFragmentWGSL","createRenderPipeline","vs","fs","buffers","createDescriptor","c","alignTo256","size","createUniformBuffer","createVertexBuffer","value","array","buffer","createBindGroup","pipeline","entries","layout","updateBindGroup","uniformBuffer","textures","sampler","binding","texture","createUniform","data","offset","createDeviceTexture","image","createSampler","getDefaultVertices","quadVertexCount","webgpu","gl","vs","fs","is","wgsl","c","gpu","device","format","pipeline","createRenderPipeline","encoder","pass","createDescriptor","key","value","alt","src","TYPES","SWIZZLES","OPERATORS","FUNCTIONS","CACHE_BOOLS","CACHE_INTS","CACHE_FLOATS","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","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","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","isGL","a","is","isServer","isWebGPUSupported","iTime","iPrevTime","iDeltaTime","createGL","props","gl","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","src_default"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,15 +1,46 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{durable as P,event as Fe}from"reev";import{createFrame as Me,createQueue as Be}from"refr";import{nested as T}from"reev";var i={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)},oe=(e,r)=>e.forEach(r),We=(e,...r)=>{oe(e,t=>t(...r))},ze=(e="",r="_",t="/")=>e.split(r).join(t),qe=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",Ve=(e=0)=>`${e}`.split(".")[1]?.length??0,ke=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),je=(e=0,r=-2)=>(r*=-1,r=Math.pow(10,r),e*=r,e=Math.round(e),e/=r,e);var ie=(e,r)=>{let t={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...r};return y(e,t)},y=(e,r)=>e?i.und(e.value)?e.property&&e.parent?`${y(e.parent,r)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?se(e,r):e.mathFunction&&e.children&&e.children.length>=1?ue(e,r):"0.0":ae(e.value,e.type):"0.0",ae=(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(i.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"},se=(e,r)=>{if(!e.children||e.children.length<2)return"0.0";let t=y(e.children[0],r),n=y(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})`},ue=(e,r)=>{if(!e.children||e.children.length<1)return"0.0";let t=e.mathFunction,n=e.children.map(p=>y(p,r)),[o,a,u]=n;return n.length===1?`${t}(${o})`:n.length===2?`${t}(${o}, ${a})`:n.length===3?`${t}(${o}, ${a}, ${u})`:o||"0.0"},fe=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let r=e.length;if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4"}return"float"},L=(e,r)=>{let t=r?.precision||"mediump",o=(r?.version||"300 es")==="300 es",a=ie(e),u="";return o&&(u+=`#version 300 es
|
|
2
|
+
`),u+=`precision ${t} float;
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
`,r?.uniforms&&(Object.entries(r.uniforms).forEach(([p,g])=>{let h=fe(g);u+=`uniform ${h} ${p};
|
|
5
|
+
`}),u+=`
|
|
6
|
+
`),o&&(u+=`out vec4 fragColor;
|
|
7
|
+
|
|
8
|
+
`),u+=`void main() {
|
|
9
|
+
`,u+=o?` fragColor = ${a};
|
|
10
|
+
`:` gl_FragColor = ${a};
|
|
11
|
+
`,u+=`}
|
|
12
|
+
`,u};var ce=`
|
|
13
|
+
#version 300 es
|
|
14
|
+
void main() {
|
|
15
|
+
float x = float(gl_VertexID % 2) * 4.0 - 1.0;
|
|
16
|
+
float y = float(gl_VertexID / 2) * 4.0 - 1.0;
|
|
17
|
+
gl_Position = vec4(x, y, 0.0, 1.0);
|
|
18
|
+
}
|
|
19
|
+
`,pe=`
|
|
20
|
+
#version 300 es
|
|
21
|
+
precision mediump float;
|
|
22
|
+
uniform vec2 iResolution;
|
|
23
|
+
out vec4 fragColor;
|
|
24
|
+
void main() {
|
|
25
|
+
fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
|
|
26
|
+
}
|
|
27
|
+
`,F=(e,r,t)=>{let n=e.createShader(t);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,r.trim()),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;let o=e.getShaderInfoLog(n);throw e.deleteShader(n),new Error(`Could not compile shader: ${o}`)},M=(e,r=ce,t=pe)=>{let n=e.createProgram();if(e.attachShader(n,F(e,r,e.VERTEX_SHADER)),e.attachShader(n,F(e,t,e.FRAGMENT_SHADER)),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}`)},B=(e,r)=>{let t=e.createBuffer();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},I=(e,r)=>{let t=e.createBuffer();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},D=(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)},O=(e,r)=>{let t=e.createTexture();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},W=(e,r,t,n)=>{r&&(e.uniform1i(r,t),e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,n))};var z=async e=>{let r=e.vs||e.vert||e.vertex,t=e.fs||e.frag||e.fragment;i.obj(t)&&(t=L(t)),i.obj(r)&&(r=L(r));let n=e.el.getContext("webgl2"),o=M(n,r,t),a=0,u=T(()=>a++),p=T((f,c=!1)=>c?n.getAttribLocation(o,f):n.getUniformLocation(o,f)),g=T((f,c,m,d)=>{d&&(c=Math.max(...d)+1);let b=m.length/c;return b!==Math.floor(b)&&console.warn(`Vertex Stride Error: count ${c} is mismatch`),Math.floor(b)}),h=T((f,c)=>{let m=p(f);if(i.num(c))return b=>n.uniform1f(m,b);let d=c.length;return d<=4?b=>n[`uniform${d}fv`](m,b):(d=Math.sqrt(d)<<0,b=>n[`uniformMatrix${d}fv`](m,!1,b))});e("clean",()=>n.deleteProgram(o)),e("render",()=>{n.useProgram(o),e.queue.flush(),n.clear(n.COLOR_BUFFER_BIT),n.viewport(0,0,...e.size),n.drawArrays(n.TRIANGLES,0,3)}),e("_attribute",(f="",c,m)=>{let d=p(f,!0),b=B(n,c),te=I(n,m),ne=g(f,e.count,c,m);D(n,ne,d,b,te)}),e("_uniform",(f,c)=>{h(f,c)(c)});let l=f=>{let c=p(f.alt),m=u(f.alt),d=O(n,f);W(n,c,m,d)};return e("_texture",(f,c)=>{let m=new Image;m.addEventListener("load",l.bind(null,m),!1),Object.assign(m,{src:c,alt:f,crossOrigin:"anonymous"})}),e.webgl={context:n,program:o},e};var le=(e,r)=>{let t={target:"webgpu",nodes:new Map,variables:new Map,functions:new Map,...r};return v(e,t)},v=(e,r)=>e?e.value!==void 0?me(e.value,e.type):e.property&&e.parent?`${v(e.parent,r)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?de(e,r):e.mathFunction&&e.children&&e.children.length>=1?ge(e,r):"0.0":"0.0",me=(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(i.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"},de=(e,r)=>{if(!e.children||e.children.length<2)return"0.0";let t=v(e.children[0],r),n=v(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})`},ge=(e,r)=>{if(!e.children||e.children.length<1)return"0.0";let t=e.mathFunction,n=e.children.map(p=>v(p,r)),[o,a,u]=n;return n.length===1?`${t}(${o})`:n.length===2?`${t}(${o}, ${a})`:n.length===3?`${t}(${o}, ${a}, ${u})`:o||"0.0"},N=(e,r)=>{let t="";r?.uniforms&&(Object.entries(r.uniforms).forEach(([o,a])=>{let u=he(a);t+=`@group(0) @binding(0) var<uniform> ${o}: ${u};
|
|
28
|
+
`}),t+=`
|
|
29
|
+
`),t+=`@fragment
|
|
30
|
+
`,t+=`fn main() -> @location(0) vec4<f32> {
|
|
31
|
+
`;let n=le(e);return t+=` return ${n};
|
|
32
|
+
`,t+=`}
|
|
33
|
+
`,t},he=e=>{if(i.num(e))return"f32";if(i.bol(e))return"bool";if(i.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 ir=async e=>{let r=navigator.gpu;if(!r)return null;let t=await r.requestAdapter();if(!t)return null;let n=await t.requestDevice(),o=e.getContext("webgpu");if(!o)return null;let a=r.getPreferredCanvasFormat();return o.configure({device:n,format:a}),{device:n,context:o,format:a}},be=`
|
|
34
|
+
@vertex
|
|
35
|
+
fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
|
|
36
|
+
let x = f32(vertex_index % 2u) * 4.0 - 1.0;
|
|
37
|
+
let y = f32(vertex_index / 2u) * 4.0 - 1.0;
|
|
38
|
+
return vec4f(x, y, 0.0, 1.0);
|
|
39
|
+
}
|
|
40
|
+
`,xe=`
|
|
41
|
+
@fragment
|
|
42
|
+
fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
|
|
43
|
+
return vec4f(position.xy / vec2f(1280, 800), 0.0, 1.0);
|
|
44
|
+
}
|
|
45
|
+
`,q=(e,r,t=be,n=xe,o)=>e.createRenderPipeline({vertex:{module:e.createShaderModule({code:t.trim()}),entryPoint:"main",buffers:o},fragment:{module:e.createShaderModule({code:n.trim()}),entryPoint:"main",targets:[{format:r}]},layout:"auto",primitive:{topology:"triangle-list"}}),V=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),ye=e=>Math.ceil(e/256)*256,ar=(e,r)=>e.createBuffer({size:ye(r),usage:68}),sr=(e,r)=>{let t=new Float32Array(r),n=e.createBuffer({size:t.byteLength,usage:36});return e.queue.writeBuffer(n,0,t),n},ve=(e,r,t)=>{let n=r.getBindGroupLayout(0);return e.createBindGroup({layout:n,entries:t})},ur=(e,r,t,n={},o=null)=>{let a=[{binding:0,resource:{buffer:t}}],u=1;return Object.values(n).forEach(p=>{a.push({binding:u++,resource:p.createView()})}),o&&Object.keys(n).length>0&&a.push({binding:u++,resource:o}),ve(e,r,a)},fr=(e,r,t,n=0)=>{e.queue.writeBuffer(r,n,t)},cr=(e,r)=>{let t=e.createTexture({size:{width:r.width,height:r.height},format:"rgba8unorm",usage:6});return e.queue.copyExternalImageToTexture({source:r},{texture:t},{width:r.width,height:r.height}),t},pr=e=>e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),lr=()=>new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);var Te=3,k=async e=>{let r=e.vs||e.vert||e.vertex,t=e.fs||e.frag||e.fragment;i.obj(r)&&(r=N(r)),i.obj(t)&&(t=N(t));let n=e.el.getContext("webgpu"),o=navigator.gpu,u=await(await o.requestAdapter()).requestDevice(),p=o.getPreferredCanvasFormat();n.configure({device:u,format:p,alphaMode:"opaque"}),e("clean",()=>{});let g;return e("render",()=>{g||(g=q(u,p,r,t,[]));let h=u.createCommandEncoder(),l=h.beginRenderPass(V(n));l.setPipeline(g),l.draw(Te,1,0,0),l.end(),u.queue.submit([h.finish()])}),e("_attribute",(h="",l)=>{}),e("_uniform",(h,l=0)=>{}),e("_texture",(h,l)=>{}),e};var xr=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],j=["x","y","z","w","r","g","b","a","s","t","p","q"],H=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],Y=["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"],K=[!0,!1],Z=[0,1,2,3,4,5],Q=[0,1,.5,2];var C=new Map,S=new Map,G=new Map,Ee=()=>{K.forEach(e=>{C.set(e,s("bool",e))}),Z.forEach(e=>{S.set(e,s("int",e))}),Q.forEach(e=>{G.set(e,s("float",e))})},R=e=>(C.has(e)||Ee(),C.get(e)||s("bool",e)),U=e=>S.has(e)?S.get(e):s("int",e),_=e=>G.has(e)?G.get(e):s("float",e),Er=e=>{let r=new Map,t=new Map;return e.forEach(n=>{let o=we(n);t.has(o)?(r.has(o)||r.set(o,[t.get(o)]),r.get(o).push(n)):t.set(o,n)}),r},we=e=>[e.type,`${e.value}`,e.property||""].join("|");var Cr=e=>i.bol(e)?R(e):i.num(e)?i.int(e)?U(e):_(e):i.arr(e)?J(e):i.obj(e)?$e(e):s("float",0),J=e=>{let r=e.length;return r===2?s("vec2",e):r===3?s("vec3",e):r===4?s("vec4",e):r===9?s("mat3",e):r===16?s("mat4",e):s("float",e[0])},$e=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),s("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),J(r)}return s("float",0)},A=e=>i.num(e)?_(e):s("float",Number(e)),Sr=e=>i.num(e)&&Number.isInteger(e)?U(e):s("int",Math.floor(Number(e))),Gr=e=>R(!!e),Rr=(e,r)=>i.und(e)?s("vec2",[0,0]):i.und(r)?i.arr(e)?s("vec2",e.slice(0,2)):i.obj(e)&&"x"in e&&"y"in e?s("vec2",[e.x,e.y]):s("vec2",[Number(e),Number(e)]):s("vec2",[Number(e),Number(r)]),Le=(e,r,t)=>i.und(e)?s("vec3",[0,0,0]):i.und(r)?i.arr(e)?s("vec3",e.slice(0,3)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e?s("vec3",[e.x,e.y,e.z]):s("vec3",[Number(e),Number(e),Number(e)]):t===void 0?s("vec3",[Number(e),Number(r),0]):s("vec3",[Number(e),Number(r),Number(t)]),Ur=(e,r,t,n)=>i.und(e)?s("vec4",[0,0,0,1]):i.und(r)?i.arr(e)?s("vec4",e.slice(0,4)):i.obj(e)&&"x"in e&&"y"in e&&"z"in e&&"w"in e?s("vec4",[e.x,e.y,e.z,e.w]):s("vec4",[Number(e),Number(e),Number(e),1]):s("vec4",[Number(e),Number(r),Number(t),Number(n)]),_r=(e,r,t)=>{if(e===void 0)return s("color",[1,1,1]);if(i.str(e)&&e.startsWith("#")){let n=e.slice(1),o=parseInt(n,16);return s("color",[(o>>16&255)/255,(o>>8&255)/255,(o&255)/255])}return i.num(e)&&r===void 0&&t===void 0?s("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):Le(e,r,t)};var Ne=0,Ce=()=>`node_${++Ne}`,E=(e,r,t)=>({id:Ce(),type:e,value:r,children:[],...t}),Se=(e="")=>j.includes(e),Ge=(e="")=>H.includes(e),Re=(e="")=>Y.includes(e),w=(e,r)=>{let t=(o,a)=>{if(!(!i.str(a)||a==="then"))return a==="id"?e.id:a==="type"?e.type:a==="value"?e.value:a==="property"?e.property:Se(a)?w(E(Ue(a),void 0,{parent:e,property:a}),r):Ge(a)?(...u)=>w(E(e.type,void 0,{operator:a,children:[e,...u]}),r):Re(a)?(...u)=>w(E(_e(a,e.type),void 0,{mathFunction:a,children:[e,...u]}),r):r?.({path:[a],args:[]})},n=(o,a,u)=>r?.({path:[],args:u});return new Proxy(()=>{},{get:t,apply:n})},Ue=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",_e=(e,r)=>e==="length"?"float":r,s=(e,r,t)=>{let n=E(e,r,t);return w(n)};var Ae=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.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 i.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},x=e=>{let r=Ae(e),t=e,n=null,o=null,a=s(r,t),u=f=>{t=f,a.value=f},p=f=>(n=f,l),g=f=>(o=f,l),h=f=>{if(n){let c=n(f);c!==void 0&&u(c)}if(o){let c=o(f);c!==void 0&&u(c)}},l=Object.create(a);return l.set=u,l.onObjectUpdate=p,l.onRenderUpdate=g,l._updateFromContext=h,l.isUniform=!0,l},ee=x(0),Pe=x(0),Xe=x(0),Ir=x([1920,1080]),Dr=x([0,0]),Or=e=>{if(e.time!==void 0){let r=ee.value||0;ee.set(e.time),Pe.set(r),Xe.set(e.time-r)}};var jr=e=>{let r=(...t)=>{let n=t.map(a=>i.obj(a)&&"type"in a&&a.type?a:A(a));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},Yr=s("vec4",void 0),Kr=s("vec4",void 0),Zr=x(0),Qr=x([1920,1080]),Jr=x([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 Et=e=>i.obj(e)?"isGL"in e:!1,Ie=()=>typeof window>"u",De=()=>Ie()?!1:"gpu"in navigator,$=performance.now(),X=0,re=0,Oe=e=>{let r=Fe({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:3,webgl:{},webgpu:{}});return r.queue=Be(),r.frame=Me(),r.attribute=P((t,n,o)=>r.queue(()=>r._attribute?.(t,n,o))),r.uniform=P((t,n,o)=>r.queue(()=>r._uniform?.(t,n,o))),r.texture=P((t,n)=>r.queue(()=>r._texture?.(t,n))),r("mount",async()=>{De()||(r.isWebGL=!0),r.isWebGL?await z(r):await k(r),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",()=>{X=$,$=performance.now()/1e3,re=$-X,r.uniform({iPrevTime:X,iTime:$,iDeltaTime:re})}),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[a,u]=r.size,{top:p,left:g}=r.el.getBoundingClientRect();r.mouse[0]=(n-p-a/2)/(a/2),r.mouse[1]=-(o-g-u/2)/(u/2),r.uniform("iMouse",r.mouse)}),r(e)},wt=Oe;export{K as CACHE_BOOLS,Q as CACHE_FLOATS,Z as CACHE_INTS,Y as FUNCTIONS,jr as Fn,Hr as If,H as OPERATORS,j as SWIZZLES,xr as TYPES,et as abs,W as activeTexture,ye as alignTo256,Gr as bool,at as ceil,_r as color,Cr as convertToNode,tt as cos,D as createAttrib,ve as createBindGroup,V as createDescriptor,cr as createDeviceTexture,Oe as createGL,I as createIbo,E as createNode,M as createProgram,q as createRenderPipeline,pr as createSampler,F as createShader,O as createTexture,fr as createUniform,ar as createUniformBuffer,B as createVbo,sr as createVertexBuffer,wt as default,pe as defaultFragmentGLSL,ce as defaultVertexGLSL,ke as dig,oe as each,qe as ext,Ve as fig,Er as findDuplicateNodes,A as float,it as floor,We as flush,st as fract,R as getCachedBool,_ as getCachedFloat,U as getCachedInt,lr as getDefaultVertices,Yr as gl_FragCoord,Kr as gl_Position,L as glsl,Xe as iDeltaTime,Jr as iMouse,Pe as iPrevTime,Qr as iResolution,Zr as iTime,ir as initWebGPUDevice,Sr as int,i as is,Et as isGL,Ie as isServer,De as isWebGPUSupported,ft as length,s as node,ie as nodeToGLSL,le as nodeToWGSL,ut as normalize,ze as replace,je as sig,rt as sin,ot as sqrt,nt as tan,x as uniform,ur as updateBindGroup,Or as updateUniforms,Rr as vec2,Le as vec3,Ur as vec4,z as webgl,k as webgpu,N as wgsl};
|
|
15
46
|
//# sourceMappingURL=index.mjs.map
|