glre 0.26.0 → 0.28.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 +10 -9
- package/dist/index.cjs +66 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +547 -0
- package/dist/index.js +39 -21
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +66 -0
- package/dist/native.cjs.map +1 -0
- package/dist/native.d.cts +53 -0
- package/dist/native.js +39 -21
- package/dist/native.js.map +1 -1
- package/dist/react.cjs +66 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +8 -0
- package/dist/react.js +40 -22
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +66 -0
- package/dist/solid.cjs.map +1 -0
- package/dist/solid.d.cts +8 -0
- package/dist/solid.js +40 -22
- package/dist/solid.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +0 -2
- package/src/native.ts +2 -2
- package/src/node/code.ts +103 -0
- package/src/node/const.ts +158 -98
- package/src/node/index.ts +109 -82
- package/src/node/infer.ts +93 -0
- package/src/node/node.ts +43 -92
- package/src/node/scope.ts +121 -0
- package/src/node/types.ts +120 -86
- package/src/node/utils.ts +95 -0
- package/src/utils/pipeline.ts +4 -5
- package/src/utils/program.ts +13 -9
- package/src/webgl.ts +1 -1
- package/src/webgpu.ts +2 -2
- package/dist/index.d.ts +0 -399
- package/dist/index.mjs +0 -48
- package/dist/index.mjs.map +0 -1
- package/dist/native.d.ts +0 -53
- package/dist/native.mjs +0 -48
- package/dist/native.mjs.map +0 -1
- package/dist/react.d.ts +0 -8
- package/dist/react.mjs +0 -48
- package/dist/react.mjs.map +0 -1
- package/dist/solid.d.ts +0 -8
- package/dist/solid.mjs +0 -48
- package/dist/solid.mjs.map +0 -1
- package/src/code/glsl.ts +0 -148
- package/src/code/wgsl.ts +0 -134
- package/src/node/cache.ts +0 -60
- package/src/node/conv.ts +0 -111
- package/src/node/uniform.ts +0 -92
package/dist/react.mjs
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import{useState as Je}from"react";import{durable as z,event as He}from"reev";import{createFrame as Ye,createQueue as Ke}from"refr";import{nested as R}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)},he=(e,t)=>e.forEach(t),et=(e,...t)=>{he(e,r=>r(...t))},tt=(e="",t="_",r="/")=>e.split(t).join(r),rt=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",nt=(e=0)=>`${e}`.split(".")[1]?.length??0,ot=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),it=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var be=(e,t)=>{let r={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...t};return L(e,r)},L=(e,t)=>e?i.und(e.value)?e.property&&e.parent?`${L(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?ye(e,t):e.mathFunction&&e.children&&e.children.length>=1?Te(e,t):"0.0":xe(e.value,e.type):"0.0",xe=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2(${r})`;if(t==="vec3")return`vec3(${r})`;if(t==="vec4")return`vec4(${r})`;if(t==="color")return`vec3(${r})`}return"0.0"},ye=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=L(e.children[0],t),n=L(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`mod(${r}, ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},Te=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(p=>L(p,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},ve=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4"}return"float"},G=(e,t)=>{let r=t?.precision||"mediump",o=(t?.version||"300 es")==="300 es",a=be(e),u="";return o&&(u+=`#version 300 es
|
|
2
|
-
`),u+=`precision ${r} float;
|
|
3
|
-
|
|
4
|
-
`,t?.uniforms&&(Object.entries(t.uniforms).forEach(([p,y])=>{let E=ve(y);u+=`uniform ${E} ${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 Ee=`
|
|
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
|
-
`,$e=`
|
|
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
|
-
`,W=(e,t,r)=>{let n=e.createShader(r);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,t.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}`)},D=(e,t=Ee,r=$e)=>{i.obj(r)&&(r=G(r)),i.obj(t)&&(t=G(t));let n=e.createProgram();if(e.attachShader(n,W(e,t,e.VERTEX_SHADER)),e.attachShader(n,W(e,r,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}`)},q=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r},V=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r},j=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},k=(e,t,r,n,o)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o)},H=(e,t,r,n)=>{let o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,o)};var Y=async e=>{let t=e.el.getContext("webgl2"),r=D(t,e.vs,e.fs),n={context:t,program:r};t.useProgram(r);let o=0,a=R(h=>t.getUniformLocation(r,h)),u=R(h=>t.getAttribLocation(r,h)),p=R(()=>o++);return{webgl:n,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(h="",b,x)=>{let T=u(h,!0),l=q(t,b),f=V(t,x),c=j(e.count,b,x);k(t,c,T,l,f)},_uniform:(h,b)=>{let x=a(h);if(i.num(b))return t.uniform1f(x,b);let T=b.length;if(T<=4)return t[`uniform${T}fv`](x,b);T=Math.sqrt(T)<<0,t[`uniformMatrix${T}fv`](x,!1,b)},_texture:(h,b)=>{let x=new Image;Object.assign(x,{src:b,crossOrigin:"anonymous"}),x.decode().then(()=>{let T=a(h),l=p(h);H(t,x,T,l)})}}};import{nested as U}from"reev";var Le=(e,t)=>{let r={target:"webgpu",nodes:new Map,variables:new Map,functions:new Map,...t};return w(e,r)},w=(e,t)=>e?e.value!==void 0?we(e.value,e.type):e.property&&e.parent?`${w(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?Ne(e,t):e.mathFunction&&e.children&&e.children.length>=1?Se(e,t):"0.0":"0.0",we=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2<f32>(${r})`;if(t==="vec3")return`vec3<f32>(${r})`;if(t==="vec4")return`vec4<f32>(${r})`;if(t==="color")return`vec3<f32>(${r})`}return"0.0"},Ne=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=w(e.children[0],t),n=w(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`(${r} % ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},Se=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(p=>w(p,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},_=(e,t)=>{let r="";t?.uniforms&&(Object.entries(t.uniforms).forEach(([o,a])=>{let u=Ce(a);r+=`@group(0) @binding(0) var<uniform> ${o}: ${u};
|
|
28
|
-
`}),r+=`
|
|
29
|
-
`),r+=`@fragment
|
|
30
|
-
`,r+=`fn main() -> @location(0) vec4<f32> {
|
|
31
|
-
`;let n=Le(e);return r+=` return ${n};
|
|
32
|
-
`,r+=`}
|
|
33
|
-
`,r},Ce=e=>{if(i.num(e))return"f32";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2<f32>";if(t===3)return"vec3<f32>";if(t===4)return"vec4<f32>"}return"f32"};var Ge=`
|
|
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
|
-
`,Re=`
|
|
41
|
-
@group(0) @binding(0) var<uniform> iResolution: vec2f;
|
|
42
|
-
|
|
43
|
-
@fragment
|
|
44
|
-
fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
|
|
45
|
-
return vec4f(position.xy / iResolution, 0.0, 1.0);
|
|
46
|
-
}
|
|
47
|
-
`,K=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),o=await(await t.requestAdapter()).requestDevice();return e.configure({device:o,format:r,alphaMode:"opaque"}),{device:o,format:r}},Z=(e,t,r,n,o=Ge,a=Re)=>{i.obj(a)&&(a=_(a)),i.obj(o)&&(o=_(o));let u=e.createPipelineLayout({bindGroupLayouts:n});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:o.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:a.trim()}),entryPoint:"main",targets:[{format:t}]},layout:u,primitive:{topology:"triangle-list"}})},Q=(e,t)=>{let r=[],n=[];t.forEach((u,p)=>{if(!u)return;let y="buffer"in u,E=u instanceof GPUTextureView,d=u instanceof GPUSampler;if(y)r.push({binding:p,visibility:3,buffer:{type:"uniform"}});else if(E)r.push({binding:p,visibility:2,texture:{}});else if(d)r.push({binding:p,visibility:2,sampler:{}});else return;n.push({binding:p,resource:u})});let o=e.createBindGroupLayout({entries:r}),a=e.createBindGroup({layout:o,entries:n});return{layout:o,bindGroup:a}},J=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),_e=e=>Math.ceil(e/256)*256,ee=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:n}},te=(e,t)=>{let r=new Float32Array(t),n=_e(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},re=(e,t=1280,r=800)=>{let n=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:n,sampler:o}},Ue=(e,t)=>e/t,Xe=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",ne=(e,t,r=6)=>{let n=Ue(t,r);return{arrayStride:n*4,attributes:[{shaderLocation:e,offset:0,format:Xe(n)}]}};var oe=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await K(t),o={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},a=[],u=[],p=[],y=U((l,f)=>{let{array:c,buffer:m}=ee(r,f);return u.push(m),p.push(ne(p.length,c.length,e.count)),o.needsUpdate=!0,{array:c,buffer:m}}),E=U((l,f)=>{let{array:c,buffer:m}=te(r,f);return o.resources[0].push({buffer:m}),o.needsUpdate=!0,{array:c,buffer:m}}),d=U((l,{width:f,height:c})=>{let{texture:m,sampler:C}=re(r,f,c);return o.resources[1].push(C,m.createView()),o.needsUpdate=!0,{texture:m,width:f,height:c}}),g=()=>{let l=[];a.length=0,o.resources.forEach(f=>{if(!f.length)return;let{layout:c,bindGroup:m}=Q(r,f);l.push(c),a.push(m)}),o.pipeline=Z(r,n,p,l,e.vs,e.fs)};return{webgpu:o,render:()=>{if(o.loadingImg)return;o.needsUpdate&&g(),o.needsUpdate=!1;let l=r.createCommandEncoder(),f=l.beginRenderPass(J(t));f.setPipeline(o.pipeline),a.forEach((c,m)=>f.setBindGroup(m,c)),u.forEach((c,m)=>f.setVertexBuffer(m,c)),f.draw(e.count,1,0,0),f.end(),r.queue.submit([l.finish()])},clean:()=>{},_attribute:(l="",f)=>{let{array:c,buffer:m}=y(l,f);r.queue.writeBuffer(m,0,c)},_uniform:(l,f)=>{i.num(f)&&(f=[f]);let{array:c,buffer:m}=E(l,f);c.set(f),r.queue.writeBuffer(m,0,c)},_texture:(l,f)=>{o.loadingImg++;let c=Object.assign(new Image,{src:f,crossOrigin:"anonymous"});c.decode().then(()=>{let{texture:m,width:C,height:ge}=d(l,c);r.queue.copyExternalImageToTexture({source:c},{texture:m},{width:C,height:ge}),o.loadingImg--})}}};var wt=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],ie=["x","y","z","w","r","g","b","a","s","t","p","q"],ae=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],se=["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"],ue=[!0,!1],fe=[0,1,2,3,4,5],ce=[0,1,.5,2];var X=new Map,A=new Map,P=new Map,Ae=()=>{ue.forEach(e=>{X.set(e,s("bool",e))}),fe.forEach(e=>{A.set(e,s("int",e))}),ce.forEach(e=>{P.set(e,s("float",e))})},F=e=>(X.has(e)||Ae(),X.get(e)||s("bool",e)),M=e=>A.has(e)?A.get(e):s("int",e),B=e=>P.has(e)?P.get(e):s("float",e),Gt=e=>{let t=new Map,r=new Map;return e.forEach(n=>{let o=Pe(n);r.has(o)?(t.has(o)||t.set(o,[r.get(o)]),t.get(o).push(n)):r.set(o,n)}),t},Pe=e=>[e.type,`${e.value}`,e.property||""].join("|");var At=e=>i.bol(e)?F(e):i.num(e)?i.int(e)?M(e):B(e):i.arr(e)?pe(e):i.obj(e)?Fe(e):s("float",0),pe=e=>{let t=e.length;return t===2?s("vec2",e):t===3?s("vec3",e):t===4?s("vec4",e):t===9?s("mat3",e):t===16?s("mat4",e):s("float",e[0])},Fe=e=>{if("r"in e&&"g"in e&&"b"in e){let t=[e.r,e.g,e.b];return"a"in e&&t.push(e.a),s("color",t)}if("x"in e&&"y"in e){let t=[e.x,e.y];return"z"in e&&t.push(e.z),"w"in e&&t.push(e.w),pe(t)}return s("float",0)},I=e=>i.num(e)?B(e):s("float",Number(e)),Pt=e=>i.num(e)&&Number.isInteger(e)?M(e):s("int",Math.floor(Number(e))),Ft=e=>F(!!e),Mt=(e,t)=>i.und(e)?s("vec2",[0,0]):i.und(t)?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(t)]),Me=(e,t,r)=>i.und(e)?s("vec3",[0,0,0]):i.und(t)?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)]):r===void 0?s("vec3",[Number(e),Number(t),0]):s("vec3",[Number(e),Number(t),Number(r)]),Bt=(e,t,r,n)=>i.und(e)?s("vec4",[0,0,0,1]):i.und(t)?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(t),Number(r),Number(n)]),It=(e,t,r)=>{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)&&t===void 0&&r===void 0?s("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):Me(e,t,r)};var Be=0,Ie=()=>`node_${++Be}`,N=(e,t,r)=>({id:Ie(),type:e,value:t,children:[],...r}),ze=(e="")=>ie.includes(e),Oe=(e="")=>ae.includes(e),We=(e="")=>se.includes(e),S=(e,t)=>{let r=(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:ze(a)?S(N(De(a),void 0,{parent:e,property:a}),t):Oe(a)?(...u)=>S(N(e.type,void 0,{operator:a,children:[e,...u]}),t):We(a)?(...u)=>S(N(qe(a,e.type),void 0,{mathFunction:a,children:[e,...u]}),t):t?.({path:[a],args:[]})},n=(o,a,u)=>t?.({path:[],args:u});return new Proxy(()=>{},{get:r,apply:n})},De=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",qe=(e,t)=>e==="length"?"float":t,s=(e,t,r)=>{let n=N(e,t,r);return S(n)};var Ve=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4";if(t===9)return"mat3";if(t===16)return"mat4"}return i.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},v=e=>{let t=Ve(e),r=e,n=null,o=null,a=s(t,r),u=g=>{r=g,a.value=g},p=g=>(n=g,d),y=g=>(o=g,d),E=g=>{if(n){let $=n(g);$!==void 0&&u($)}if(o){let $=o(g);$!==void 0&&u($)}},d=Object.create(a);return d.set=u,d.onObjectUpdate=p,d.onRenderUpdate=y,d._updateFromContext=E,d.isUniform=!0,d},me=v(0),je=v(0),ke=v(0),jt=v([1920,1080]),kt=v([0,0]),Ht=e=>{if(e.time!==void 0){let t=me.value||0;me.set(e.time),je.set(t),ke.set(e.time-t)}};var er=e=>{let t=(...r)=>{let n=r.map(a=>i.obj(a)&&"type"in a&&a.type?a:I(a));return e(n)||I(0)};return t.call=r=>e(r),t},tr=(e,t)=>{t();let r={ElseIf(n,o){return o(),r},Else(n){n()}};return r},rr=s("vec4",void 0),nr=s("vec4",void 0),or=v(0),ir=v([1920,1080]),ar=v([0,0]),sr=e=>e.abs(),ur=e=>e.sin(),fr=e=>e.cos(),cr=e=>e.tan(),pr=e=>e.sqrt(),mr=e=>e.floor(),lr=e=>e.ceil(),dr=e=>e.fract(),gr=e=>e.normalize(),hr=e=>e.length();var le=e=>i.obj(e)?"isGL"in e:!1,Ze=()=>typeof window>"u",Qe=()=>Ze()?!1:"gpu"in navigator,O=performance.now(),de=e=>{let t=He({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=Ke(),t.frame=Ye(),t.attribute=z((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=z((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=z((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:O}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Qe()||(t.isWebGL=!0),t.isWebGL?t(await Y(t)):t(await oe(t)),t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.render(),t.isLoop)),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove))}),t("clean",()=>{t.frame.stop(),t.frame.clean(t.render),!t.isNative&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("resize",()=>{let r=t.width||window.innerWidth,n=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=n,t.uniform("iResolution",t.size)}),t("mousemove",(r,n=r.clientX,o=r.clientY)=>{let[a,u]=t.size,{top:p,left:y}=t.el.getBoundingClientRect();t.mouse[0]=(n-p-a/2)/(a/2),t.mouse[1]=-(o-y-u/2)/(u/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{O=performance.now()/1e3,t.uniform("iTime",O)}),t(e)};var Or=(e={})=>Je(()=>{let t=le(e)?e:de(e);return t.ref=r=>{r?(t.el=r,t.mount()):t.clean()},t})[0];export{ue as CACHE_BOOLS,ce as CACHE_FLOATS,fe as CACHE_INTS,se as FUNCTIONS,er as Fn,tr as If,ae as OPERATORS,ie as SWIZZLES,wt as TYPES,sr as abs,_e as alignTo256,Ft as bool,lr as ceil,It as color,At as convertToNode,fr as cos,k as createAttrib,Q as createBindGroup,ne as createBufferLayout,J as createDescriptor,K as createDevive,de as createGL,V as createIbo,N as createNode,Z as createPipeline,D as createProgram,H as createTexture,re as createTextureSampler,te as createUniformBuffer,q as createVbo,ee as createVertexBuffer,$e as defaultFragmentGLSL,Ee as defaultVertexGLSL,ot as dig,he as each,rt as ext,nt as fig,Gt as findDuplicateNodes,I as float,mr as floor,et as flush,dr as fract,rr as fragCoord,F as getCachedBool,B as getCachedFloat,M as getCachedInt,j as getStride,G as glsl,ke as iDeltaTime,ar as iMouse,je as iPrevTime,ir as iResolution,or as iTime,Pt as int,i as is,le as isGL,Ze as isServer,Qe as isWebGPUSupported,hr as length,s as node,be as nodeToGLSL,Le as nodeToWGSL,gr as normalize,nr as position,tt as replace,it as sig,ur as sin,pr as sqrt,cr as tan,v as uniform,Ht as updateUniforms,Or as useGL,Mt as vec2,Me as vec3,Bt as vec4,Y as webgl,oe as webgpu,_ as wgsl};
|
|
48
|
-
//# sourceMappingURL=react.mjs.map
|
package/dist/react.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react.ts","../src/index.ts","../src/webgl.ts","../src/utils/helpers.ts","../src/code/glsl.ts","../src/utils/program.ts","../src/webgpu.ts","../src/code/wgsl.ts","../src/utils/pipeline.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 { useState } from 'react'\nimport { createGL, isGL } from './index'\nimport type { GL } from './types'\nexport * from './index'\n\nexport const useGL = (props: Partial<GL> = {}) => {\n return useState(() => {\n const gl = isGL(props) ? props : createGL(props)\n gl.ref = (el: HTMLCanvasElement | null) => {\n if (el) {\n gl.el = el\n gl.mount()\n } else gl.clean()\n }\n return gl\n })[0]\n}\n","import { durable, event } from 'reev'\nimport { createFrame, createQueue } from 'refr'\nimport { webgl } from './webgl'\nimport { webgpu } from './webgpu'\nimport { is } from './utils/helpers'\nimport type { EventState } from 'reev'\nimport type { GL } from './types'\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}\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\nexport const createGL = (props?: Partial<GL>) => {\n const gl = event<Partial<GL>>({\n isNative: false,\n isWebGL: true,\n isLoop: true,\n isGL: true,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n 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.texture = durable((k, v) => gl.queue(() => gl._texture?.(k, v)))\n gl.uniform = durable((k, v, i) => gl.queue(() => gl._uniform?.(k, v, i)))\n gl.uniform({ iResolution: gl.size, iMouse: [0, 0], iTime })\n\n gl('mount', async () => {\n gl.vs = gl.vs || gl.vert || gl.vertex\n gl.fs = gl.fs || gl.frag || gl.fragment\n if (!isWebGPUSupported()) gl.isWebGL = true\n if (gl.isWebGL) {\n gl((await webgl(gl)) as GL)\n } else gl((await webgpu(gl)) as GL)\n gl.resize()\n gl.frame(() => {\n gl.loop()\n gl.queue.flush()\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('resize', () => {\n const w = gl.width || window.innerWidth\n const h = gl.height || window.innerHeight\n gl.size[0] = gl.el.width = w\n gl.size[1] = gl.el.height = h\n gl.uniform('iResolution', gl.size)\n })\n\n gl('mousemove', (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = gl.size\n const { top, left } = gl.el.getBoundingClientRect()\n gl.mouse[0] = (x - top - w / 2) / (w / 2)\n gl.mouse[1] = -(y - left - h / 2) / (h / 2)\n gl.uniform('iMouse', gl.mouse)\n })\n\n gl('loop', () => {\n iTime = performance.now() / 1000\n gl.uniform('iTime', iTime)\n })\n\n return gl(props)\n}\n\nexport default createGL\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport { createAttrib, createIbo, createProgram, createTexture, createVbo, getStride } from './utils/program'\nimport type { GL, WebGLState } from './types'\n\nexport const webgl = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgl2')!\n const pg = createProgram(c, gl.vs, gl.fs)\n const state = { context: c, program: pg } as WebGLState\n c.useProgram(pg)\n\n let _activeUnit = 0\n const uniforms = cached((key) => c.getUniformLocation(pg, key))\n const attribs = cached((key) => c.getAttribLocation(pg, key))\n const units = cached(() => _activeUnit++)\n\n const clean = () => c.deleteProgram(pg)\n\n const render = () => {\n c.clear(c.COLOR_BUFFER_BIT)\n c.viewport(0, 0, ...gl.size!)\n c.drawArrays(c.TRIANGLES, 0, 3)\n }\n\n const _attribute = (key = '', value: number[], iboValue: number[]) => {\n const loc = attribs(key, true)\n const vbo = createVbo(c, value)\n const ibo = createIbo(c, iboValue)\n const str = getStride(gl.count!, value, iboValue)\n createAttrib(c, str, loc, vbo, ibo)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n const loc = uniforms(key)\n if (is.num(value)) return c.uniform1f(loc, value)\n let l = value.length\n if (l <= 4) return c[`uniform${l as 2}fv`](loc, value)\n l = Math.sqrt(l) << 0\n c[`uniformMatrix${l as 2}fv`](loc, false, value)\n }\n\n const _texture = (key: string, src: string) => {\n const image = new Image()\n Object.assign(image, { src, crossOrigin: 'anonymous' })\n image.decode().then(() => {\n const loc = uniforms(key)\n const unit = units(key)\n createTexture(c, image, loc, unit)\n })\n }\n\n return { webgl: state, render, clean, _attribute, _uniform, _texture }\n}\n","export const is = {\n arr: Array.isArray,\n bol: (a: unknown): a is boolean => typeof a === 'boolean',\n str: (a: unknown): a is string => typeof a === 'string',\n num: (a: unknown): a is number => typeof a === 'number',\n int: (a: unknown): a is number => Number.isInteger(a),\n fun: (a: unknown): a is Function => typeof a === 'function',\n und: (a: unknown): a is undefined => typeof a === 'undefined',\n nul: (a: unknown): a is null => a === null,\n set: (a: unknown): a is Set<unknown> => a instanceof Set,\n map: (a: unknown): a is Map<unknown, unknown> => a instanceof Map,\n obj: (a: unknown): a is object => !!a && a.constructor.name === 'Object',\n nan: (a: unknown): a is number => typeof a === 'number' && Number.isNaN(a),\n}\n\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","import { glsl } from '../code/glsl'\nimport { X } from '../node'\nimport { is } from './helpers'\n\nexport 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\nconst 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 = (\n c: WebGLRenderingContext,\n vs: string | X = defaultVertexGLSL,\n fs: string | X = defaultFragmentGLSL\n) => {\n if (is.obj(fs)) fs = glsl(fs as X)\n if (is.obj(vs)) vs = glsl(vs as X)\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 getStride = (count: number, value: number[], iboValue?: number[]) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n return Math.floor(stride)\n}\n\nexport const createAttrib = (\n c: WebGLRenderingContext,\n stride: number,\n loc: any,\n vbo: WebGLBuffer,\n ibo?: WebGLBuffer\n) => {\n c.bindBuffer(c.ARRAY_BUFFER, vbo)\n c.enableVertexAttribArray(loc)\n c.vertexAttribPointer(loc, 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, loc: any, unit: number) => {\n const texture = c.createTexture()\n c.bindTexture(c.TEXTURE_2D, texture)\n c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, img)\n c.generateMipmap(c.TEXTURE_2D)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, c.LINEAR)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE)\n c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)\n c.bindTexture(c.TEXTURE_2D, null)\n c.uniform1i(loc, unit)\n c.activeTexture(c.TEXTURE0 + unit)\n c.bindTexture(c.TEXTURE_2D, texture)\n}\n","import { nested as cached } from 'reev'\nimport { is } from './utils/helpers'\nimport {\n createDevive,\n createPipeline,\n createDescriptor,\n createUniformBuffer,\n createBindGroup,\n createTextureSampler,\n createVertexBuffer,\n createBufferLayout,\n} from './utils/pipeline'\nimport type { GL, WebGPUState } from './types'\n\nexport const webgpu = async (gl: Partial<GL>) => {\n const c = gl.el!.getContext('webgpu') as any\n const { device, format } = await createDevive(c)\n const state = {\n device,\n context: c,\n resources: [[], []],\n loadingImg: 0,\n needsUpdate: true,\n } as WebGPUState\n\n const bindGroups = [] as any[]\n const vertexBuffers = [] as any[]\n const bufferLayouts = [] as any[]\n\n const attributes = cached((_, value: number[]) => {\n const { array, buffer } = createVertexBuffer(device, value)\n vertexBuffers.push(buffer)\n bufferLayouts.push(createBufferLayout(bufferLayouts.length, array.length, gl.count))\n state.needsUpdate = true\n return { array, buffer }\n })\n\n const uniforms = cached((_, value: number[]) => {\n const { array, buffer } = createUniformBuffer(device, value)\n state.resources[0].push({ buffer })\n state.needsUpdate = true\n return { array, buffer }\n })\n\n const textures = cached((_, { width, height }: HTMLImageElement) => {\n const { texture, sampler } = createTextureSampler(device, width, height)\n state.resources[1].push(sampler, texture.createView())\n state.needsUpdate = true\n return { texture, width, height }\n })\n\n const update = () => {\n const bindGroupLayouts = [] as any\n bindGroups.length = 0\n state.resources.forEach((resource) => {\n if (!resource.length) return\n const { layout, bindGroup } = createBindGroup(device, resource)\n bindGroupLayouts.push(layout)\n bindGroups.push(bindGroup)\n })\n state.pipeline = createPipeline(device, format, bufferLayouts, bindGroupLayouts, gl.vs, gl.fs)\n }\n\n const render = () => {\n if (state.loadingImg) return // ignore if loading img\n if (state.needsUpdate) update() // first rendering\n state.needsUpdate = false\n const encoder = device.createCommandEncoder()\n const pass = encoder.beginRenderPass(createDescriptor(c))\n pass.setPipeline(state.pipeline)\n bindGroups.forEach((v, i) => pass.setBindGroup(i, v))\n vertexBuffers.forEach((v, i) => pass.setVertexBuffer(i, v))\n pass.draw(gl.count, 1, 0, 0)\n pass.end()\n device.queue.submit([encoder.finish()])\n }\n\n const clean = () => {}\n\n const _attribute = (key = '', value: number[]) => {\n const { array, buffer } = attributes(key, value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _uniform = (key: string, value: number | number[]) => {\n if (is.num(value)) value = [value]\n const { array, buffer } = uniforms(key, value)\n array.set(value)\n device.queue.writeBuffer(buffer, 0, array)\n }\n\n const _texture = (key: string, src: string) => {\n state.loadingImg++\n const source = Object.assign(new Image(), { src, crossOrigin: 'anonymous' })\n source.decode().then(() => {\n const { texture, width, height } = textures(key, source)\n device.queue.copyExternalImageToTexture({ source }, { texture }, { width, height })\n state.loadingImg--\n })\n }\n\n return { webgpu: state, render, clean, _attribute, _uniform, _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 { wgsl } from '../code/wgsl'\nimport { X } from '../node'\nimport { is } from './helpers'\nimport type { GPUContext, GPUDevice, GPUPipeline } from '../types'\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@group(0) @binding(0) var<uniform> iResolution: vec2f;\n\n@fragment\nfn main(@builtin(position) position: vec4f) -> @location(0) vec4f {\n return vec4f(position.xy / iResolution, 0.0, 1.0);\n}\n`\n\nexport const createDevive = async (c: GPUContext) => {\n const gpu = (navigator as any).gpu\n const format = gpu.getPreferredCanvasFormat()\n const adapter = await gpu.requestAdapter()\n const device = await adapter.requestDevice()\n c.configure({ device, format, alphaMode: 'opaque' })\n return { device, format }\n}\n\nexport const createPipeline = (\n device: GPUDevice,\n format: string,\n bufferLayouts: any[],\n bindGroupLayouts: any[],\n vs: string | X = defaultVertexWGSL,\n fs: string | X = defaultFragmentWGSL\n) => {\n if (is.obj(fs)) fs = wgsl(fs)\n if (is.obj(vs)) vs = wgsl(vs)\n const layout = device.createPipelineLayout({ bindGroupLayouts })\n return device.createRenderPipeline({\n vertex: {\n module: device.createShaderModule({ code: vs.trim() }),\n entryPoint: 'main',\n buffers: bufferLayouts,\n },\n fragment: {\n module: device.createShaderModule({ code: fs.trim() }),\n entryPoint: 'main',\n targets: [{ format }],\n },\n layout,\n primitive: { topology: 'triangle-list' },\n }) as GPUPipeline\n}\n\nexport const createBindGroup = (device: GPUDevice, resources: any[]) => {\n const entries0 = [] as any[]\n const entries1 = [] as any[]\n resources.forEach((resource, binding) => {\n if (!resource) return\n const isUniform = 'buffer' in resource // @ts-ignore\n const isTexture = resource instanceof GPUTextureView // @ts-ignore\n const isSampler = resource instanceof GPUSampler // @ts-ignore\n if (isUniform) entries0.push({ binding, visibility: 3, buffer: { type: 'uniform' } })\n else if (isTexture) entries0.push({ binding, visibility: 2, texture: {} })\n else if (isSampler) entries0.push({ binding, visibility: 2, sampler: {} })\n else return\n entries1.push({ binding, resource })\n })\n const layout = device.createBindGroupLayout({ entries: entries0 })\n const bindGroup = device.createBindGroup({ layout, entries: entries1 })\n return { layout, bindGroup }\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}\n\nexport const alignTo256 = (size: number) => Math.ceil(size / 256) * 256\n\nexport const createVertexBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const buffer = device.createBuffer({ size: array.byteLength, usage: 40 }) // 40 === // GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n return { array, buffer }\n}\n\nexport const createUniformBuffer = (device: GPUDevice, value: number[]) => {\n const array = new Float32Array(value)\n const size = alignTo256(array.byteLength)\n const buffer = device.createBuffer({ size, usage: 72 }) as Buffer // 72 === GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n return { array, buffer }\n}\n\nexport const createTextureSampler = (device: GPUDevice, width = 1280, height = 800) => {\n const texture = device.createTexture({ size: [width, height], format: 'rgba8unorm', usage: 22 })\n const sampler = device.createSampler({ magFilter: 'linear', minFilter: 'linear' })\n return { texture, sampler }\n}\n\nconst getVertexStride = (dataLength: number, vertexCount: number) => {\n return dataLength / vertexCount\n}\n\nconst getVertexFormat = (stride: number) => {\n if (stride === 2) return 'float32x2'\n if (stride === 3) return 'float32x3'\n if (stride === 4) return 'float32x4'\n return 'float32'\n}\n\nexport const createBufferLayout = (shaderLocation: number, dataLength: number, count = 6) => {\n const stride = getVertexStride(dataLength, count)\n return {\n arrayStride: stride * 4,\n attributes: [\n {\n shaderLocation,\n offset: 0,\n format: getVertexFormat(stride),\n },\n ],\n }\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 fragCoord = node('vec4', undefined)\nexport const 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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ACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACR,EAKaC,GAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAWtEC,GAAY,CACjB,MACA,MACA,MACA,MACA,MACA,QACA,WACA,WACA,gBACA,cACA,mBACA,MACA,KACA,MACA,SACA,MACA,SACA,SACA,QACA,SACA,YACA,YACR,EAKaC,GAAY,CACjB,MACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,QACA,UACA,WACA,MACA,MACA,OACA,cACA,QACA,QACA,SACA,MACA,MACA,UACA,OACA,OACA,OACA,aACA,SACA,SACA,cACA,WACA,MACA,OACA,MACA,MACA,MACA,SACA,YACA,WACA,MACA,OACA,OACA,OACA,UACA,aACA,UACA,UACA,QACA,WACA,OACA,MACA,aACA,OACA,OACA,MACA,qBACA,OACR,EAKaC,GAAc,CAAC,GAAM,EAAK,EAC1BC,GAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC9BC,GAAe,CAAC,EAAK,EAAK,GAAK,CAAG,EC7H/C,IAAMC,EAAY,IAAI,IAChBC,EAAW,IAAI,IACfC,EAAa,IAAI,IAEjBC,GAAkB,IAAM,CACtBC,GAAY,QAASC,GAAU,CACvBL,EAAU,IAAIK,EAAOC,EAAK,OAAQD,CAAK,CAAC,CAChD,CAAC,EACDE,GAAW,QAASF,GAAU,CACtBJ,EAAS,IAAII,EAAOC,EAAK,MAAOD,CAAK,CAAC,CAC9C,CAAC,EACDG,GAAa,QAASH,GAAU,CACxBH,EAAW,IAAIG,EAAOC,EAAK,QAASD,CAAK,CAAC,CAClD,CAAC,CACT,EAEaI,EAAiBC,IACjBV,EAAU,IAAIU,CAAC,GAAGP,GAAgB,EAChCH,EAAU,IAAIU,CAAC,GAAKJ,EAAK,OAAQI,CAAC,GAIpCC,EAAgBD,GACjBT,EAAS,IAAIS,CAAC,EAAUT,EAAS,IAAIS,CAAC,EACnCJ,EAAK,MAAOI,CAAC,EAIfE,EAAkBF,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","names":["useState","durable","event","createFrame","createQueue","cached","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","is","glsl","pg","createVbo","data","buffer","createIbo","getStride","count","value","iboValue","stride","createAttrib","loc","vbo","ibo","createTexture","img","unit","texture","webgl","gl","c","pg","createProgram","state","_activeUnit","uniforms","cached","key","attribs","units","value","iboValue","loc","vbo","createVbo","ibo","createIbo","str","getStride","createAttrib","is","l","src","image","unit","createTexture","cached","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","defaultVertexWGSL","defaultFragmentWGSL","createDevive","c","gpu","format","device","createPipeline","bufferLayouts","bindGroupLayouts","vs","fs","is","wgsl","layout","createBindGroup","resources","entries0","entries1","resource","binding","isUniform","isTexture","isSampler","bindGroup","createDescriptor","alignTo256","size","createVertexBuffer","value","array","buffer","createUniformBuffer","createTextureSampler","width","height","texture","sampler","getVertexStride","dataLength","vertexCount","getVertexFormat","stride","createBufferLayout","shaderLocation","count","webgpu","gl","c","device","format","createDevive","state","bindGroups","vertexBuffers","bufferLayouts","attributes","cached","_","value","array","buffer","createVertexBuffer","createBufferLayout","uniforms","createUniformBuffer","textures","width","height","texture","sampler","createTextureSampler","update","bindGroupLayouts","resource","layout","bindGroup","createBindGroup","createPipeline","encoder","pass","createDescriptor","v","i","key","is","src","source","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","fragCoord","node","position","iTime","uniform","iResolution","iMouse","abs","x","sin","cos","tan","sqrt","floor","ceil","fract","normalize","length","isGL","a","is","isServer","isWebGPUSupported","iTime","createGL","props","gl","event","createQueue","createFrame","durable","k","v","i","webgl","webgpu","w","h","_e","x","y","top","left","useGL","props","useState","gl","isGL","createGL","el"]}
|
package/dist/solid.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as reev from 'reev';
|
|
2
|
-
import { GL } from './index.js';
|
|
3
|
-
export { Attribute, Attributes, CACHE_BOOLS, CACHE_FLOATS, CACHE_INTS, ConditionalNode, ConversionContext, FUNCTIONS, Fn, FunctionNode, GLClearMode, GLDrawMode, GLDrawType, GPUBindGroup, GPUBuffer, GPUContext, GPUDevice, GPUPipeline, If, MathFunction, MathMethods, Node, NodeCreator, NodeType, OPERATORS, Operator, OperatorMethods, PrecisionMode, ProxyCallback, SWIZZLES, Swillzes, SwizzleProperties, TYPES, Uniform, UniformNode, Uniforms, WebGLState, WebGPUState, X, abs, alignTo256, bool, ceil, color, convertToNode, cos, createAttrib, createBindGroup, createBufferLayout, createDescriptor, createDevive, default as createGL, createIbo, createNode, createPipeline, createProgram, createTexture, createTextureSampler, createUniformBuffer, createVbo, createVertexBuffer, defaultFragmentGLSL, defaultVertexGLSL, dig, each, ext, fig, findDuplicateNodes, float, floor, flush, fract, fragCoord, getCachedBool, getCachedFloat, getCachedInt, getStride, glsl, iDeltaTime, iMouse, iPrevTime, iResolution, iTime, int, is, isGL, isServer, isWebGPUSupported, length, node, nodeToGLSL, nodeToWGSL, normalize, position, replace, sig, sin, sqrt, tan, uniform, updateUniforms, vec2, vec3, vec4, webgl, webgpu, wgsl } from './index.js';
|
|
4
|
-
export { Frame, Fun, Queue } from 'refr';
|
|
5
|
-
|
|
6
|
-
declare const onGL: (props?: Partial<GL>) => reev.EventState<GL>;
|
|
7
|
-
|
|
8
|
-
export { GL, onGL };
|
package/dist/solid.mjs
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import{durable as z,event as He}from"reev";import{createFrame as Ye,createQueue as Ke}from"refr";import{nested as R}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)},he=(e,t)=>e.forEach(t),Je=(e,...t)=>{he(e,r=>r(...t))},et=(e="",t="_",r="/")=>e.split(t).join(r),tt=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",rt=(e=0)=>`${e}`.split(".")[1]?.length??0,nt=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),ot=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var be=(e,t)=>{let r={target:"webgl",precision:"mediump",version:"300 es",nodes:new Map,variables:new Map,functions:new Map,...t};return L(e,r)},L=(e,t)=>e?i.und(e.value)?e.property&&e.parent?`${L(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?ye(e,t):e.mathFunction&&e.children&&e.children.length>=1?Te(e,t):"0.0":xe(e.value,e.type):"0.0",xe=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2(${r})`;if(t==="vec3")return`vec3(${r})`;if(t==="vec4")return`vec4(${r})`;if(t==="color")return`vec3(${r})`}return"0.0"},ye=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=L(e.children[0],t),n=L(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`mod(${r}, ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},Te=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(p=>L(p,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},ve=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4"}return"float"},G=(e,t)=>{let r=t?.precision||"mediump",o=(t?.version||"300 es")==="300 es",a=be(e),u="";return o&&(u+=`#version 300 es
|
|
2
|
-
`),u+=`precision ${r} float;
|
|
3
|
-
|
|
4
|
-
`,t?.uniforms&&(Object.entries(t.uniforms).forEach(([p,y])=>{let E=ve(y);u+=`uniform ${E} ${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 Ee=`
|
|
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
|
-
`,$e=`
|
|
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
|
-
`,W=(e,t,r)=>{let n=e.createShader(r);if(!n)throw new Error("Failed to create shader");if(e.shaderSource(n,t.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}`)},D=(e,t=Ee,r=$e)=>{i.obj(r)&&(r=G(r)),i.obj(t)&&(t=G(t));let n=e.createProgram();if(e.attachShader(n,W(e,t,e.VERTEX_SHADER)),e.attachShader(n,W(e,r,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}`)},q=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r},V=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r},j=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},k=(e,t,r,n,o)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o)},H=(e,t,r,n)=>{let o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,o)};var Y=async e=>{let t=e.el.getContext("webgl2"),r=D(t,e.vs,e.fs),n={context:t,program:r};t.useProgram(r);let o=0,a=R(h=>t.getUniformLocation(r,h)),u=R(h=>t.getAttribLocation(r,h)),p=R(()=>o++);return{webgl:n,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(h="",b,x)=>{let T=u(h,!0),l=q(t,b),f=V(t,x),c=j(e.count,b,x);k(t,c,T,l,f)},_uniform:(h,b)=>{let x=a(h);if(i.num(b))return t.uniform1f(x,b);let T=b.length;if(T<=4)return t[`uniform${T}fv`](x,b);T=Math.sqrt(T)<<0,t[`uniformMatrix${T}fv`](x,!1,b)},_texture:(h,b)=>{let x=new Image;Object.assign(x,{src:b,crossOrigin:"anonymous"}),x.decode().then(()=>{let T=a(h),l=p(h);H(t,x,T,l)})}}};import{nested as U}from"reev";var Le=(e,t)=>{let r={target:"webgpu",nodes:new Map,variables:new Map,functions:new Map,...t};return w(e,r)},w=(e,t)=>e?e.value!==void 0?we(e.value,e.type):e.property&&e.parent?`${w(e.parent,t)}.${e.property}`:e.operator&&e.children&&e.children.length>=2?Ne(e,t):e.mathFunction&&e.children&&e.children.length>=1?Se(e,t):"0.0":"0.0",we=(e,t)=>{if(t==="float"){let r=Number(e);return r%1===0?`${r}.0`:`${r}`}if(t==="int")return`${Math.floor(Number(e))}`;if(t==="bool")return e?"true":"false";if(i.arr(e)){let r=e.map(n=>{let o=Number(n);return o%1===0?`${o}.0`:`${o}`}).join(", ");if(t==="vec2")return`vec2<f32>(${r})`;if(t==="vec3")return`vec3<f32>(${r})`;if(t==="vec4")return`vec4<f32>(${r})`;if(t==="color")return`vec3<f32>(${r})`}return"0.0"},Ne=(e,t)=>{if(!e.children||e.children.length<2)return"0.0";let r=w(e.children[0],t),n=w(e.children[1],t);return e.operator==="add"?`(${r} + ${n})`:e.operator==="sub"?`(${r} - ${n})`:e.operator==="mul"?`(${r} * ${n})`:e.operator==="div"?`(${r} / ${n})`:e.operator==="mod"?`(${r} % ${n})`:e.operator==="equal"?`(${r} == ${n})`:e.operator==="notEqual"?`(${r} != ${n})`:e.operator==="lessThan"?`(${r} < ${n})`:e.operator==="lessThanEqual"?`(${r} <= ${n})`:e.operator==="greaterThan"?`(${r} > ${n})`:e.operator==="greaterThanEqual"?`(${r} >= ${n})`:e.operator==="and"?`(${r} && ${n})`:e.operator==="or"?`(${r} || ${n})`:`(${r} + ${n})`},Se=(e,t)=>{if(!e.children||e.children.length<1)return"0.0";let r=e.mathFunction,n=e.children.map(p=>w(p,t)),[o,a,u]=n;return n.length===1?`${r}(${o})`:n.length===2?`${r}(${o}, ${a})`:n.length===3?`${r}(${o}, ${a}, ${u})`:o||"0.0"},_=(e,t)=>{let r="";t?.uniforms&&(Object.entries(t.uniforms).forEach(([o,a])=>{let u=Ce(a);r+=`@group(0) @binding(0) var<uniform> ${o}: ${u};
|
|
28
|
-
`}),r+=`
|
|
29
|
-
`),r+=`@fragment
|
|
30
|
-
`,r+=`fn main() -> @location(0) vec4<f32> {
|
|
31
|
-
`;let n=Le(e);return r+=` return ${n};
|
|
32
|
-
`,r+=`}
|
|
33
|
-
`,r},Ce=e=>{if(i.num(e))return"f32";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2<f32>";if(t===3)return"vec3<f32>";if(t===4)return"vec4<f32>"}return"f32"};var Ge=`
|
|
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
|
-
`,Re=`
|
|
41
|
-
@group(0) @binding(0) var<uniform> iResolution: vec2f;
|
|
42
|
-
|
|
43
|
-
@fragment
|
|
44
|
-
fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
|
|
45
|
-
return vec4f(position.xy / iResolution, 0.0, 1.0);
|
|
46
|
-
}
|
|
47
|
-
`,K=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),o=await(await t.requestAdapter()).requestDevice();return e.configure({device:o,format:r,alphaMode:"opaque"}),{device:o,format:r}},Z=(e,t,r,n,o=Ge,a=Re)=>{i.obj(a)&&(a=_(a)),i.obj(o)&&(o=_(o));let u=e.createPipelineLayout({bindGroupLayouts:n});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:o.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:a.trim()}),entryPoint:"main",targets:[{format:t}]},layout:u,primitive:{topology:"triangle-list"}})},Q=(e,t)=>{let r=[],n=[];t.forEach((u,p)=>{if(!u)return;let y="buffer"in u,E=u instanceof GPUTextureView,d=u instanceof GPUSampler;if(y)r.push({binding:p,visibility:3,buffer:{type:"uniform"}});else if(E)r.push({binding:p,visibility:2,texture:{}});else if(d)r.push({binding:p,visibility:2,sampler:{}});else return;n.push({binding:p,resource:u})});let o=e.createBindGroupLayout({entries:r}),a=e.createBindGroup({layout:o,entries:n});return{layout:o,bindGroup:a}},J=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),_e=e=>Math.ceil(e/256)*256,ee=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:n}},te=(e,t)=>{let r=new Float32Array(t),n=_e(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},re=(e,t=1280,r=800)=>{let n=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:n,sampler:o}},Ue=(e,t)=>e/t,Xe=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",ne=(e,t,r=6)=>{let n=Ue(t,r);return{arrayStride:n*4,attributes:[{shaderLocation:e,offset:0,format:Xe(n)}]}};var oe=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await K(t),o={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},a=[],u=[],p=[],y=U((l,f)=>{let{array:c,buffer:m}=ee(r,f);return u.push(m),p.push(ne(p.length,c.length,e.count)),o.needsUpdate=!0,{array:c,buffer:m}}),E=U((l,f)=>{let{array:c,buffer:m}=te(r,f);return o.resources[0].push({buffer:m}),o.needsUpdate=!0,{array:c,buffer:m}}),d=U((l,{width:f,height:c})=>{let{texture:m,sampler:C}=re(r,f,c);return o.resources[1].push(C,m.createView()),o.needsUpdate=!0,{texture:m,width:f,height:c}}),g=()=>{let l=[];a.length=0,o.resources.forEach(f=>{if(!f.length)return;let{layout:c,bindGroup:m}=Q(r,f);l.push(c),a.push(m)}),o.pipeline=Z(r,n,p,l,e.vs,e.fs)};return{webgpu:o,render:()=>{if(o.loadingImg)return;o.needsUpdate&&g(),o.needsUpdate=!1;let l=r.createCommandEncoder(),f=l.beginRenderPass(J(t));f.setPipeline(o.pipeline),a.forEach((c,m)=>f.setBindGroup(m,c)),u.forEach((c,m)=>f.setVertexBuffer(m,c)),f.draw(e.count,1,0,0),f.end(),r.queue.submit([l.finish()])},clean:()=>{},_attribute:(l="",f)=>{let{array:c,buffer:m}=y(l,f);r.queue.writeBuffer(m,0,c)},_uniform:(l,f)=>{i.num(f)&&(f=[f]);let{array:c,buffer:m}=E(l,f);c.set(f),r.queue.writeBuffer(m,0,c)},_texture:(l,f)=>{o.loadingImg++;let c=Object.assign(new Image,{src:f,crossOrigin:"anonymous"});c.decode().then(()=>{let{texture:m,width:C,height:ge}=d(l,c);r.queue.copyExternalImageToTexture({source:c},{texture:m},{width:C,height:ge}),o.loadingImg--})}}};var Lt=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],ie=["x","y","z","w","r","g","b","a","s","t","p","q"],ae=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],se=["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"],ue=[!0,!1],fe=[0,1,2,3,4,5],ce=[0,1,.5,2];var X=new Map,A=new Map,P=new Map,Ae=()=>{ue.forEach(e=>{X.set(e,s("bool",e))}),fe.forEach(e=>{A.set(e,s("int",e))}),ce.forEach(e=>{P.set(e,s("float",e))})},F=e=>(X.has(e)||Ae(),X.get(e)||s("bool",e)),M=e=>A.has(e)?A.get(e):s("int",e),B=e=>P.has(e)?P.get(e):s("float",e),Ct=e=>{let t=new Map,r=new Map;return e.forEach(n=>{let o=Pe(n);r.has(o)?(t.has(o)||t.set(o,[r.get(o)]),t.get(o).push(n)):r.set(o,n)}),t},Pe=e=>[e.type,`${e.value}`,e.property||""].join("|");var Xt=e=>i.bol(e)?F(e):i.num(e)?i.int(e)?M(e):B(e):i.arr(e)?pe(e):i.obj(e)?Fe(e):s("float",0),pe=e=>{let t=e.length;return t===2?s("vec2",e):t===3?s("vec3",e):t===4?s("vec4",e):t===9?s("mat3",e):t===16?s("mat4",e):s("float",e[0])},Fe=e=>{if("r"in e&&"g"in e&&"b"in e){let t=[e.r,e.g,e.b];return"a"in e&&t.push(e.a),s("color",t)}if("x"in e&&"y"in e){let t=[e.x,e.y];return"z"in e&&t.push(e.z),"w"in e&&t.push(e.w),pe(t)}return s("float",0)},I=e=>i.num(e)?B(e):s("float",Number(e)),At=e=>i.num(e)&&Number.isInteger(e)?M(e):s("int",Math.floor(Number(e))),Pt=e=>F(!!e),Ft=(e,t)=>i.und(e)?s("vec2",[0,0]):i.und(t)?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(t)]),Me=(e,t,r)=>i.und(e)?s("vec3",[0,0,0]):i.und(t)?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)]):r===void 0?s("vec3",[Number(e),Number(t),0]):s("vec3",[Number(e),Number(t),Number(r)]),Mt=(e,t,r,n)=>i.und(e)?s("vec4",[0,0,0,1]):i.und(t)?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(t),Number(r),Number(n)]),Bt=(e,t,r)=>{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)&&t===void 0&&r===void 0?s("color",[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]):Me(e,t,r)};var Be=0,Ie=()=>`node_${++Be}`,N=(e,t,r)=>({id:Ie(),type:e,value:t,children:[],...r}),ze=(e="")=>ie.includes(e),Oe=(e="")=>ae.includes(e),We=(e="")=>se.includes(e),S=(e,t)=>{let r=(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:ze(a)?S(N(De(a),void 0,{parent:e,property:a}),t):Oe(a)?(...u)=>S(N(e.type,void 0,{operator:a,children:[e,...u]}),t):We(a)?(...u)=>S(N(qe(a,e.type),void 0,{mathFunction:a,children:[e,...u]}),t):t?.({path:[a],args:[]})},n=(o,a,u)=>t?.({path:[],args:u});return new Proxy(()=>{},{get:r,apply:n})},De=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",qe=(e,t)=>e==="length"?"float":t,s=(e,t,r)=>{let n=N(e,t,r);return S(n)};var Ve=e=>{if(i.num(e))return"float";if(i.bol(e))return"bool";if(i.arr(e)){let t=e.length;if(t===2)return"vec2";if(t===3)return"vec3";if(t===4)return"vec4";if(t===9)return"mat3";if(t===16)return"mat4"}return i.obj(e)&&"r"in e&&"g"in e&&"b"in e?"color":"float"},v=e=>{let t=Ve(e),r=e,n=null,o=null,a=s(t,r),u=g=>{r=g,a.value=g},p=g=>(n=g,d),y=g=>(o=g,d),E=g=>{if(n){let $=n(g);$!==void 0&&u($)}if(o){let $=o(g);$!==void 0&&u($)}},d=Object.create(a);return d.set=u,d.onObjectUpdate=p,d.onRenderUpdate=y,d._updateFromContext=E,d.isUniform=!0,d},me=v(0),je=v(0),ke=v(0),Vt=v([1920,1080]),jt=v([0,0]),kt=e=>{if(e.time!==void 0){let t=me.value||0;me.set(e.time),je.set(t),ke.set(e.time-t)}};var Jt=e=>{let t=(...r)=>{let n=r.map(a=>i.obj(a)&&"type"in a&&a.type?a:I(a));return e(n)||I(0)};return t.call=r=>e(r),t},er=(e,t)=>{t();let r={ElseIf(n,o){return o(),r},Else(n){n()}};return r},tr=s("vec4",void 0),rr=s("vec4",void 0),nr=v(0),or=v([1920,1080]),ir=v([0,0]),ar=e=>e.abs(),sr=e=>e.sin(),ur=e=>e.cos(),fr=e=>e.tan(),cr=e=>e.sqrt(),pr=e=>e.floor(),mr=e=>e.ceil(),lr=e=>e.fract(),dr=e=>e.normalize(),gr=e=>e.length();var le=e=>i.obj(e)?"isGL"in e:!1,Ze=()=>typeof window>"u",Qe=()=>Ze()?!1:"gpu"in navigator,O=performance.now(),de=e=>{let t=He({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=Ke(),t.frame=Ye(),t.attribute=z((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=z((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=z((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:O}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Qe()||(t.isWebGL=!0),t.isWebGL?t(await Y(t)):t(await oe(t)),t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.render(),t.isLoop)),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove))}),t("clean",()=>{t.frame.stop(),t.frame.clean(t.render),!t.isNative&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("resize",()=>{let r=t.width||window.innerWidth,n=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=n,t.uniform("iResolution",t.size)}),t("mousemove",(r,n=r.clientX,o=r.clientY)=>{let[a,u]=t.size,{top:p,left:y}=t.el.getBoundingClientRect();t.mouse[0]=(n-p-a/2)/(a/2),t.mouse[1]=-(o-y-u/2)/(u/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{O=performance.now()/1e3,t.uniform("iTime",O)}),t(e)};var Ir=e=>{let t=le(e)?e:de(e);return t.ref=r=>{r?(t.el=r,t.mount()):t.clean()},t};export{ue as CACHE_BOOLS,ce as CACHE_FLOATS,fe as CACHE_INTS,se as FUNCTIONS,Jt as Fn,er as If,ae as OPERATORS,ie as SWIZZLES,Lt as TYPES,ar as abs,_e as alignTo256,Pt as bool,mr as ceil,Bt as color,Xt as convertToNode,ur as cos,k as createAttrib,Q as createBindGroup,ne as createBufferLayout,J as createDescriptor,K as createDevive,de as createGL,V as createIbo,N as createNode,Z as createPipeline,D as createProgram,H as createTexture,re as createTextureSampler,te as createUniformBuffer,q as createVbo,ee as createVertexBuffer,$e as defaultFragmentGLSL,Ee as defaultVertexGLSL,nt as dig,he as each,tt as ext,rt as fig,Ct as findDuplicateNodes,I as float,pr as floor,Je as flush,lr as fract,tr as fragCoord,F as getCachedBool,B as getCachedFloat,M as getCachedInt,j as getStride,G as glsl,ke as iDeltaTime,ir as iMouse,je as iPrevTime,or as iResolution,nr as iTime,At as int,i as is,le as isGL,Ze as isServer,Qe as isWebGPUSupported,gr as length,s as node,be as nodeToGLSL,Le as nodeToWGSL,dr as normalize,Ir as onGL,rr as position,et as replace,ot as sig,sr as sin,cr as sqrt,fr as tan,v as uniform,kt as updateUniforms,Ft as vec2,Me as vec3,Mt as vec4,Y as webgl,oe as webgpu,_ as wgsl};
|
|
48
|
-
//# sourceMappingURL=solid.mjs.map
|