glre 0.48.0 → 0.49.1
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 +18 -18
- package/dist/addons.d.ts +57 -53
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +57 -53
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +57 -53
- package/dist/node.cjs +15 -15
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +60 -56
- package/dist/node.js +15 -15
- package/dist/node.js.map +1 -1
- package/dist/react.d.ts +57 -53
- package/dist/solid.d.ts +57 -53
- package/package.json +1 -1
- package/src/index.ts +4 -1
- package/src/node/create.ts +10 -9
- package/src/node/scope.ts +3 -15
- package/src/node/types.ts +20 -43
- package/src/node/utils/const.ts +27 -10
- package/src/node/utils/index.ts +15 -8
- package/src/node/utils/infer.ts +17 -10
package/README.md
CHANGED
|
@@ -148,7 +148,7 @@ import { useGL } from 'glre/react'
|
|
|
148
148
|
import { vec4, uv } from 'glre/node'
|
|
149
149
|
|
|
150
150
|
const Canvas = () => {
|
|
151
|
-
const gl = useGL({
|
|
151
|
+
const gl = useGL({ fragment: vec4(uv, 0, 1) })
|
|
152
152
|
return <canvas ref={gl.ref} />
|
|
153
153
|
}
|
|
154
154
|
|
|
@@ -176,7 +176,7 @@ import { useGL } from 'glre/native'
|
|
|
176
176
|
import { vec4, uv } from 'glre/node'
|
|
177
177
|
|
|
178
178
|
const Canvas = () => {
|
|
179
|
-
const gl = useGL({
|
|
179
|
+
const gl = useGL({ fragment: vec4(uv, 0, 1) })
|
|
180
180
|
return (
|
|
181
181
|
<GLView
|
|
182
182
|
style={{ flex: 1 }}
|
|
@@ -207,7 +207,7 @@ import { onGL } from 'glre/solid'
|
|
|
207
207
|
import { vec4, uv } from 'glre/node'
|
|
208
208
|
|
|
209
209
|
const Canvas = () => {
|
|
210
|
-
const gl = onGL({
|
|
210
|
+
const gl = onGL({ fragment: vec4(uv, 0, 1) })
|
|
211
211
|
return <canvas ref={gl.ref} />
|
|
212
212
|
}
|
|
213
213
|
|
|
@@ -253,8 +253,8 @@ function Canvas() {
|
|
|
253
253
|
const gl = useGL({
|
|
254
254
|
isWebGL: true,
|
|
255
255
|
triangleCount: 1,
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
vertex: vec4(tri, 0, 1),
|
|
257
|
+
fragment: vec4(vertexStage(col), 1),
|
|
258
258
|
})
|
|
259
259
|
return <canvas ref={gl.ref} />
|
|
260
260
|
}
|
|
@@ -402,7 +402,7 @@ function Canvas() {
|
|
|
402
402
|
function Canvas() {
|
|
403
403
|
const gl = useGL({
|
|
404
404
|
isWebGL: true,
|
|
405
|
-
|
|
405
|
+
fragment: vec4(
|
|
406
406
|
uv.sub(iMouse).fract(),
|
|
407
407
|
iTime.sin().mul(0.5).add(0.5),
|
|
408
408
|
1
|
|
@@ -516,7 +516,7 @@ function Canvas() {
|
|
|
516
516
|
const gl = useGL({
|
|
517
517
|
isWebGL: true,
|
|
518
518
|
triangleCount: 1,
|
|
519
|
-
|
|
519
|
+
vertex: vec4(tri, 0, 1),
|
|
520
520
|
})
|
|
521
521
|
return <canvas ref={gl.ref} />
|
|
522
522
|
}
|
|
@@ -539,7 +539,7 @@ function Canvas() {
|
|
|
539
539
|
const gl = useGL({
|
|
540
540
|
isWebGL: true,
|
|
541
541
|
triangleCount: 1,
|
|
542
|
-
|
|
542
|
+
vertex: `
|
|
543
543
|
#version 300 es
|
|
544
544
|
in vec4 tri;
|
|
545
545
|
void main() {
|
|
@@ -630,11 +630,11 @@ function Canvas() {
|
|
|
630
630
|
{
|
|
631
631
|
isWebGL: true,
|
|
632
632
|
triangleCount: 1,
|
|
633
|
-
|
|
633
|
+
vertex: vec4(vec2(-0.5, 0).add(tri), 0, 1),
|
|
634
634
|
},
|
|
635
635
|
{
|
|
636
636
|
triangleCount: 1,
|
|
637
|
-
|
|
637
|
+
vertex: vec4(vec2(0.5, 0).add(tri), 0, 1),
|
|
638
638
|
}
|
|
639
639
|
)
|
|
640
640
|
return <canvas ref={gl.ref} />
|
|
@@ -659,7 +659,7 @@ function Canvas() {
|
|
|
659
659
|
{
|
|
660
660
|
isWebGL: true,
|
|
661
661
|
triangleCount: 1,
|
|
662
|
-
|
|
662
|
+
vertex: `
|
|
663
663
|
#version 300 es
|
|
664
664
|
in vec2 tri;
|
|
665
665
|
void main() {
|
|
@@ -668,7 +668,7 @@ function Canvas() {
|
|
|
668
668
|
},
|
|
669
669
|
{
|
|
670
670
|
triangleCount: 1,
|
|
671
|
-
|
|
671
|
+
vertex: `
|
|
672
672
|
#version 300 es
|
|
673
673
|
in vec2 tri;
|
|
674
674
|
void main() {
|
|
@@ -704,7 +704,7 @@ function Canvas() {
|
|
|
704
704
|
{
|
|
705
705
|
isWebGL: false,
|
|
706
706
|
triangleCount: 1,
|
|
707
|
-
|
|
707
|
+
vertex: `
|
|
708
708
|
struct In {
|
|
709
709
|
@location(0) tri: vec2f
|
|
710
710
|
}
|
|
@@ -720,7 +720,7 @@ function Canvas() {
|
|
|
720
720
|
},
|
|
721
721
|
{
|
|
722
722
|
triangleCount: 1,
|
|
723
|
-
|
|
723
|
+
vertex: `
|
|
724
724
|
struct In {
|
|
725
725
|
@location(0) tri: vec2f
|
|
726
726
|
}
|
|
@@ -780,7 +780,7 @@ function Canvas() {
|
|
|
780
780
|
const iTexture = uniform('https://...')
|
|
781
781
|
const gl = useGL({
|
|
782
782
|
isWebGL: true,
|
|
783
|
-
|
|
783
|
+
fragment: texture(iTexture, uv),
|
|
784
784
|
})
|
|
785
785
|
return <canvas ref={gl.ref} />
|
|
786
786
|
}
|
|
@@ -897,7 +897,7 @@ function Canvas() {
|
|
|
897
897
|
isWebGL: true,
|
|
898
898
|
instanceCount: 1000,
|
|
899
899
|
triangleCount: 1,
|
|
900
|
-
|
|
900
|
+
vertex: vec4(
|
|
901
901
|
tri.mul(0.05).sub(1).add(pos.mul(2)),
|
|
902
902
|
0,
|
|
903
903
|
1
|
|
@@ -925,7 +925,7 @@ function Canvas() {
|
|
|
925
925
|
isWebGL: true,
|
|
926
926
|
instanceCount: 1000,
|
|
927
927
|
triangleCount: 1,
|
|
928
|
-
|
|
928
|
+
vertex: `
|
|
929
929
|
#version 300 es
|
|
930
930
|
in vec2 tri;
|
|
931
931
|
in vec2 pos;
|
|
@@ -967,7 +967,7 @@ function Canvas() {
|
|
|
967
967
|
isWebGL: false,
|
|
968
968
|
instanceCount: 1000,
|
|
969
969
|
triangleCount: 1,
|
|
970
|
-
|
|
970
|
+
vertex: `
|
|
971
971
|
struct In {
|
|
972
972
|
@location(0) tri: vec2f,
|
|
973
973
|
@location(1) pos: vec2f
|
package/dist/addons.d.ts
CHANGED
|
@@ -29,8 +29,54 @@ declare const TYPE_MAPPING: {
|
|
|
29
29
|
readonly struct: "struct";
|
|
30
30
|
};
|
|
31
31
|
declare const CONSTANTS: (keyof typeof TYPE_MAPPING)[];
|
|
32
|
+
declare const SWIZZLE_BASE_MAP: {
|
|
33
|
+
readonly float: "float";
|
|
34
|
+
readonly vec2: "float";
|
|
35
|
+
readonly vec3: "float";
|
|
36
|
+
readonly vec4: "float";
|
|
37
|
+
readonly int: "int";
|
|
38
|
+
readonly ivec2: "int";
|
|
39
|
+
readonly ivec3: "int";
|
|
40
|
+
readonly ivec4: "int";
|
|
41
|
+
readonly uint: "uint";
|
|
42
|
+
readonly uvec2: "uint";
|
|
43
|
+
readonly uvec3: "uint";
|
|
44
|
+
readonly uvec4: "uint";
|
|
45
|
+
readonly bool: "bool";
|
|
46
|
+
readonly bvec2: "bool";
|
|
47
|
+
readonly bvec3: "bool";
|
|
48
|
+
readonly bvec4: "bool";
|
|
49
|
+
};
|
|
50
|
+
declare const SWIZZLE_RESULT_MAP: {
|
|
51
|
+
float: {
|
|
52
|
+
readonly 1: "float";
|
|
53
|
+
readonly 2: "vec2";
|
|
54
|
+
readonly 3: "vec3";
|
|
55
|
+
readonly 4: "vec4";
|
|
56
|
+
readonly 9: "mat3";
|
|
57
|
+
readonly 16: "mat4";
|
|
58
|
+
};
|
|
59
|
+
int: {
|
|
60
|
+
readonly 1: "int";
|
|
61
|
+
readonly 2: "ivec2";
|
|
62
|
+
readonly 3: "ivec3";
|
|
63
|
+
readonly 4: "ivec4";
|
|
64
|
+
};
|
|
65
|
+
uint: {
|
|
66
|
+
readonly 1: "uint";
|
|
67
|
+
readonly 2: "uvec2";
|
|
68
|
+
readonly 3: "uvec3";
|
|
69
|
+
readonly 4: "uvec4";
|
|
70
|
+
};
|
|
71
|
+
bool: {
|
|
72
|
+
readonly 1: "bool";
|
|
73
|
+
readonly 2: "bvec2";
|
|
74
|
+
readonly 3: "bvec3";
|
|
75
|
+
readonly 4: "bvec4";
|
|
76
|
+
};
|
|
77
|
+
};
|
|
32
78
|
declare const OPERATORS: {
|
|
33
|
-
readonly not: "";
|
|
79
|
+
readonly not: "!";
|
|
34
80
|
readonly add: "+";
|
|
35
81
|
readonly sub: "-";
|
|
36
82
|
readonly mul: "*";
|
|
@@ -190,7 +236,7 @@ type Operators = (typeof OPERATOR_KEYS)[number];
|
|
|
190
236
|
*/
|
|
191
237
|
interface FnLayout {
|
|
192
238
|
name: string;
|
|
193
|
-
type
|
|
239
|
+
type?: C | 'auto';
|
|
194
240
|
inputs?: Array<{
|
|
195
241
|
name: string;
|
|
196
242
|
type: C | 'auto';
|
|
@@ -237,6 +283,15 @@ interface NodeContext {
|
|
|
237
283
|
structStructFields: Map<string, StructFields>;
|
|
238
284
|
};
|
|
239
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* swizzle
|
|
288
|
+
*/
|
|
289
|
+
type _SwizzleLength<A extends string> = A extends `${infer _}${infer A}` ? A extends '' ? 1 : A extends `${infer _}${infer B}` ? B extends '' ? 2 : B extends `${infer _}${infer C}` ? C extends '' ? 3 : 4 : never : never : never;
|
|
290
|
+
type _SwizzleBaseMap = typeof SWIZZLE_BASE_MAP;
|
|
291
|
+
type _SwizzleResultMap = typeof SWIZZLE_RESULT_MAP;
|
|
292
|
+
type _SwizzleBase<T extends C> = T extends keyof _SwizzleBaseMap ? _SwizzleBaseMap[T] : never;
|
|
293
|
+
type _SwizzleResult<T extends C, L extends 1 | 2 | 3 | 4> = _SwizzleResultMap[_SwizzleBase<T>][L];
|
|
294
|
+
type InferSwizzleType<T extends C, S extends string> = _SwizzleLength<S> extends infer L extends 1 | 2 | 3 | 4 ? _SwizzleResult<_SwizzleBase<T>, L> : never;
|
|
240
295
|
/**
|
|
241
296
|
* infer
|
|
242
297
|
*/
|
|
@@ -247,57 +302,6 @@ type ExtractPairs<T> = T extends readonly [infer L, infer R, string] ? [L, R] |
|
|
|
247
302
|
type OperatorTypeRules = ExtractPairs<_OperatorTypeRulesMap[number]>;
|
|
248
303
|
type IsInRules<L extends C, R extends C> = [L, R] extends OperatorTypeRules ? 1 : 0;
|
|
249
304
|
type ValidateOperator<L extends C, R extends C> = L extends R ? 1 : IsInRules<L, R>;
|
|
250
|
-
/**
|
|
251
|
-
* swizzle
|
|
252
|
-
*/
|
|
253
|
-
type _SwizzleLength<A extends string> = A extends `${infer _}${infer A}` ? A extends '' ? 1 : A extends `${infer _}${infer B}` ? B extends '' ? 2 : B extends `${infer _}${infer C}` ? C extends '' ? 3 : 4 : never : never : never;
|
|
254
|
-
type _SwizzleBaseMap = {
|
|
255
|
-
float: 'float';
|
|
256
|
-
vec2: 'float';
|
|
257
|
-
vec3: 'float';
|
|
258
|
-
vec4: 'float';
|
|
259
|
-
int: 'int';
|
|
260
|
-
ivec2: 'int';
|
|
261
|
-
ivec3: 'int';
|
|
262
|
-
ivec4: 'int';
|
|
263
|
-
uint: 'uint';
|
|
264
|
-
uvec2: 'uint';
|
|
265
|
-
uvec3: 'uint';
|
|
266
|
-
uvec4: 'uint';
|
|
267
|
-
bool: 'bool';
|
|
268
|
-
bvec2: 'bool';
|
|
269
|
-
bvec3: 'bool';
|
|
270
|
-
bvec4: 'bool';
|
|
271
|
-
};
|
|
272
|
-
type _SwizzleResultMap = {
|
|
273
|
-
float: {
|
|
274
|
-
1: 'float';
|
|
275
|
-
2: 'vec2';
|
|
276
|
-
3: 'vec3';
|
|
277
|
-
4: 'vec4';
|
|
278
|
-
};
|
|
279
|
-
int: {
|
|
280
|
-
1: 'int';
|
|
281
|
-
2: 'ivec2';
|
|
282
|
-
3: 'ivec3';
|
|
283
|
-
4: 'ivec4';
|
|
284
|
-
};
|
|
285
|
-
uint: {
|
|
286
|
-
1: 'uint';
|
|
287
|
-
2: 'uvec2';
|
|
288
|
-
3: 'uvec3';
|
|
289
|
-
4: 'uvec4';
|
|
290
|
-
};
|
|
291
|
-
bool: {
|
|
292
|
-
1: 'bool';
|
|
293
|
-
2: 'bvec2';
|
|
294
|
-
3: 'bvec3';
|
|
295
|
-
4: 'bvec4';
|
|
296
|
-
};
|
|
297
|
-
};
|
|
298
|
-
type _SwizzleBase<T extends C> = T extends keyof _SwizzleBaseMap ? _SwizzleBaseMap[T] : never;
|
|
299
|
-
type _SwizzleResult<T extends C, L extends 1 | 2 | 3 | 4> = _SwizzleResultMap[_SwizzleBase<T>][L];
|
|
300
|
-
type InferSwizzleType<T extends C, S extends string> = _SwizzleLength<S> extends infer L extends 1 | 2 | 3 | 4 ? _SwizzleResult<_SwizzleBase<T>, L> : never;
|
|
301
305
|
/**
|
|
302
306
|
* Swizzles
|
|
303
307
|
*/
|
package/dist/index.cjs
CHANGED
|
@@ -34,5 +34,5 @@ fn main(out: Out) -> @location(0) vec4f {
|
|
|
34
34
|
`;var A=require("reev");var N=(e,t,n,r=console.warn)=>{let o=e.createShader(n);if(!o)return r("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let s=e.getShaderInfoLog(o);e.deleteShader(o),r(`Could not compile shader: ${s}
|
|
35
35
|
|
|
36
36
|
\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
37
|
-
${t}`)},P=(e,t,n,r)=>{let o=e.createProgram(),s=N(e,t,e.FRAGMENT_SHADER,r.error),i=N(e,n,e.VERTEX_SHADER,r.error);if(!s||!i)return;if(e.attachShader(o,s),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let u=e.getProgramInfoLog(o);e.deleteProgram(o),r.error(`Could not link program: ${u}`)},O=(e,t)=>{let n=new Float32Array(t),r=e.createBuffer();return{array:n,buffer:r}},w=(e,t,n,r)=>{t.set(r),e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null)},z=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0)},H=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0),e.vertexAttribDivisor(t,1)},U=(e,t,n)=>{if(b.nul(t))return;if(b.num(n))return e.uniform1f(t,n);let r=n.length;if(r<=4)return e[`uniform${r}fv`](t,n);r=Math.sqrt(r)<<0,e[`uniformMatrix${r}fv`](t,!1,n)},C=(e,t,n,r,o=!1)=>{let s=e.createTexture();if(e.bindTexture(e.TEXTURE_2D,s),t?(e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),o||e.generateMipmap(e.TEXTURE_2D)):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([0,0,0,0])),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(n,r),e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),o)return()=>{e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t)}},$=(e,t,n,r,o,s,i,u)=>{let m=n*r,d=t.length/m;for(let p=0;p<m;p++)for(let a=0;a<Math.min(d,4);a++)u[4*p+a]=t[p*d+a]||0;e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,s.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)},k=(e,t)=>{for(let{ping:n,pong:r}of t)e.deleteTexture(n.texture),e.deleteTexture(r.texture),e.deleteFramebuffer(n.buffer),e.deleteFramebuffer(r.buffer)},q=(e,t,n,r,o,s)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(r,o),s===0&&e.bindFramebuffer(e.FRAMEBUFFER,n.buffer);let i=e.COLOR_ATTACHMENT0+s;return e.framebufferTexture2D(e.FRAMEBUFFER,i,e.TEXTURE_2D,n.texture,0),i},K=(e=1024)=>{if(b.num(e)){let o=Math.sqrt(e),s=Math.ceil(o);return Number.isInteger(o)||console.warn(`GLRE Storage Warning: particleCount (${e}) is not a square. Using ${s}x${s} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`),{x:s,y:s}}let[t,n,r]=e;if(r!==void 0){let o=n*r;return console.warn(`GLRE Storage Warning: 3D particleCount [${t}, ${n}, ${r}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${n} * depth=${r} = ${o}.`),{x:t,y:o}}return{x:t,y:n}},Y=e=>{let t=e.getExtension("WEBGL_lose_context");t&&t.loseContext()},j=e=>{e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.enable(e.CULL_FACE),e.cullFace(e.BACK)},Q=e=>{let t=e.getExtension("WEBGL_polygon_mode");t&&t.polygonModeWEBGL(e.FRONT_AND_BACK,t.LINE_WEBGL)};var J=e=>{let{cs:t,particleCount:n,gl:r}=e;if(!t)return;r.getExtension("EXT_color_buffer_float");let o=0,s=0,i=(0,A.nested)(()=>o++);t=b.str(t)?t:t.compute({isWebGL:!0,gl:e,units:i});let u=P(r,t,_,e),m=K(n),d=(0,A.nested)(a=>r.getUniformLocation(u,a)),p=(0,A.nested)(a=>{let f=new Float32Array(m.x*m.y*4),c={texture:r.createTexture(),buffer:r.createFramebuffer()},l={texture:r.createTexture(),buffer:r.createFramebuffer()};return{ping:c,pong:l,array:f,loc:d(a),unit:i(a)}});e("_uniform",(a,f)=>{r.useProgram(e.program=u),U(r,d(a),f)}),e("_storage",(a,f)=>{r.useProgram(e.program=u);let{ping:c,pong:l,unit:x,array:E}=p(a);$(r,f,m.x,m.y,c,l,x,E)}),e("clean",()=>{r.deleteProgram(u),k(r,p.map.values())}),e("render",()=>{r.useProgram(e.program=u);let a=p.map.values().map(({ping:f,pong:c,loc:l,unit:x},E)=>{let[L,h]=s%2?[f,c]:[c,f];return q(r,L,h,l,x,E)});r.drawBuffers(a),r.drawArrays(r.TRIANGLES,0,3),r.bindFramebuffer(r.FRAMEBUFFER,null),s++})};var B=require("reev");var Z=e=>{let{fs:t,vs:n,gl:r}=e,o={isWebGL:!0,gl:e};t=e.fs?b.str(e.fs)?e.fs:e.fs.fragment(o):W,n=e.vs?b.str(e.vs)?e.vs:e.vs.vertex(o):_;let s=P(r,t,n,e),i=0,u=(0,B.nested)(()=>i++),m=(0,B.nested)(p=>r.getUniformLocation(s,p)),d=(0,B.nested)((p,a,f=!1)=>({stride:v(a.length,f?e.instanceCount:e.count,e.error,p),location:r.getAttribLocation(s,p),...O(r,a)}));e("_attribute",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a);w(r,f.array,f.buffer,a),z(r,f.location,f.stride,f.buffer)}),e("_instance",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a,!0);w(r,f.array,f.buffer,a),H(r,f.location,f.stride,f.buffer)}),e("_uniform",(p,a)=>{r.useProgram(e.program=s),U(r,m(p),a)}),e("_texture",(p,a)=>{r.useProgram(e.program=s);let f=m(p),c=u(p);C(r,null,f,c,!1),R(a,(l,x)=>{r.useProgram(e.program=s);let E=C(r,l,f,c,x);E&&e({render:E})})}),e("clean",()=>{r.deleteProgram(s)}),e("render",()=>{r.useProgram(e.program=s),e.instanceCount>1?r.drawArraysInstanced(r.TRIANGLES,0,e.count,e.instanceCount):r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)})};var ee=e=>{let t=!e.gl;if(t){let n=e.gl=e.el.getContext("webgl2");e("render",()=>n.viewport(0,0,...e.size))}J(e),Z(e),t&&(e("clean",()=>Y(e.gl)),e.isDepth&&j(e.gl),e.wireframe&&Q(e.gl))};var se=require("reev");var G=require("reev");var te=()=>{let e=0,t=0,n=0,r=0,o=(0,G.nested)(()=>{let m=Math.floor(e/12),d=e%12;return e++,{group:m,binding:d}}),s=(0,G.nested)(()=>{let d=Math.floor(e/12)+1+Math.floor(t/6),p=t%6*2;return t++,{group:d,binding:p}}),i=(0,G.nested)(()=>{let d=Math.floor(e/12)+Math.floor(t/6)+2+Math.floor(n/12),p=n%12;return n++,{group:d,binding:p}}),u=(0,G.nested)(()=>{let m=r;return r++,{location:m}});return{uniform:o,texture:s,storage:i,attrib:u}},re=async(e,t=console.log,n)=>{let r=navigator.gpu,o=r.getPreferredCanvasFormat(),s=await r.requestAdapter();if(n?.aborted)throw new DOMException("Aborted","AbortError");let i=await s.requestDevice();if(n?.aborted&&(i.destroy(),n?.aborted))throw new DOMException("Aborted","AbortError");return i.onuncapturederror=u=>t(u.error.message),e.configure({device:i,format:o,alphaMode:"premultiplied"}),{device:i,format:o}},ve=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",_e=e=>{let t=[],n=[];for(let{buffer:r,location:o,stride:s,isInstance:i}of e){t[o]=r;let u=Math.min(Math.max(Math.floor(s),1),4),m=Math.max(4,Math.ceil(u*4/4)*4);n[o]={arrayStride:m,stepMode:i?"instance":"vertex",attributes:[{shaderLocation:o,offset:0,format:ve(u)}]}}return{vertexBuffers:t,bufferLayouts:n}},Pe=(e,t,n,r=[])=>{let o=new Map,s={bindGroups:[],bindGroupLayouts:[]},i=(u,m,d)=>{o.has(u)||o.set(u,{layouts:[],bindings:[]});let{layouts:p,bindings:a}=o.get(u);p.push(m),a.push(d)};for(let{binding:u,buffer:m,group:d}of t)i(d,{binding:u,visibility:7,buffer:{type:"uniform"}},{binding:u,resource:{buffer:m}});for(let{binding:u,buffer:m,group:d}of r)i(d,{binding:u,visibility:6,buffer:{type:"storage"}},{binding:u,resource:{buffer:m}});for(let{binding:u,group:m,sampler:d,view:p}of n)i(m,{binding:u,visibility:2,sampler:{}},{binding:u,resource:d}),i(m,{binding:u+1,visibility:2,texture:{}},{binding:u+1,resource:p});for(let[u,{layouts:m,bindings:d}]of o)s.bindGroupLayouts[u]=e.createBindGroupLayout({entries:m}),s.bindGroups[u]=e.createBindGroup({layout:s.bindGroupLayouts[u],entries:d});return s},Ue=(e,t,n,r,o,s,i)=>{let u={primitive:{topology:"triangle-list"},layout:e.createPipelineLayout({bindGroupLayouts:r}),vertex:{module:e.createShaderModule({label:"vert",code:o.trim()}),entryPoint:"main",buffers:n},fragment:{module:e.createShaderModule({label:"frag",code:s.trim()}),entryPoint:"main",targets:[{format:t}]}};return i&&(u.depthStencil={depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}),e.createRenderPipeline(u)},Ae=(e,t,n)=>{if(n)return e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:n.trim()}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})})},ne=(e,t,n,r,o,s,i,u,m,d)=>{let{vertexBuffers:p,bufferLayouts:a}=_e(n),{bindGroups:f,bindGroupLayouts:c}=Pe(e,r,o,s),l=Ae(e,c,u),x=Ue(e,t,a,c,m,i,d);return{bindGroups:f,vertexBuffers:p,computePipeline:l,graphicPipeline:x}},Be=e=>e==="uniform"?72:e==="attrib"?40:140,y=(e,t,n)=>{M(t)||(t=new Float32Array(t));let r=Be(n),o=n==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:o,usage:r});return{array:t,buffer:s}},g=(e,t,n,r)=>{n.set(t),e.queue.writeBuffer(r,0,n)},oe=(e,t)=>{let n={colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};return t&&(n.depthStencilAttachment={view:t.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}),n},I=(e,t=1280,n=800)=>{let r=e.createTexture({size:[t,n],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:r,sampler:o,view:r.createView()}},ie=(e,t,n)=>e.createTexture({size:[t,n],format:"depth24plus",usage:16}),ae=(e,t=32)=>{b.num(e)&&(e=[e]);let[n,r=1,o=1]=e;return{x:Math.min(n*r*o/t,65535),y:1,z:1}};var ue=e=>{let{particleCount:t}=e,n,r,o=(0,se.nested)((i,u)=>({...e.binding.storage(i),...y(e.device,u,"storage")}));return e("_storage",(i,u)=>{let{array:m,buffer:d}=o(i,u);g(e.device,u,m,d)}),e("render",()=>{if(!n||!r)return;let i=e.commandEncoder.beginComputePass();i.setPipeline(n),r.forEach((p,a)=>i.setBindGroup(a,p));let{x:u,y:m,z:d}=ae(t);i.dispatchWorkgroups(u,m,d),i.end()}),e("clean",()=>{for(let{buffer:i}of o.map.values())i.destroy()}),{storages:o,set:(i,u)=>{n=i,r=u}}};var D=require("reev");var fe=(e,t=()=>{})=>{let{count:n,instanceCount:r}=e,o,s,i,u=(0,D.nested)((a,f,c=!1,l=v(f.length,c?r:n,e.error,a))=>(t(),{...e.binding.attrib(a),...y(e.device,f,"attrib"),isInstance:c,stride:l})),m=(0,D.nested)((a,f)=>(t(),{...e.binding.uniform(a),...y(e.device,f,"uniform")})),d=(0,D.nested)((a,f=1,c=1)=>(t(),{...e.binding.texture(a),...I(e.device,f,c)}));return e("_attribute",(a,f)=>{let c=u(a,f);g(e.device,f,c.array,c.buffer)}),e("_instance",(a,f)=>{let c=u(a,f,!0);g(e.device,f,c.array,c.buffer)}),e("_uniform",(a,f)=>{b.num(f)&&(f=[f]);let c=m(a,f);g(e.device,f,c.array,c.buffer)}),e("_texture",(a,f)=>{let c=d(a);R(f,(l,x)=>{let[E,L]=x?[l.videoWidth,l.videoHeight]:[l.width,l.height];c.texture.destroy(),Object.assign(c,I(e.device,E,L)),t();let h=()=>void e.device.queue.copyExternalImageToTexture({source:l},{texture:c.texture},{width:E,height:L});x?e({render:h}):h()})}),e("render",()=>{!o||!s||!i||(e.passEncoder.setPipeline(o),s.forEach((a,f)=>e.passEncoder.setBindGroup(f,a)),i.forEach((a,f)=>e.passEncoder.setVertexBuffer(f,a)),e.passEncoder.draw(n,r,0,0))}),e("clean",()=>{for(let{buffer:a}of u.map.values())a.destroy();for(let{texture:a}of d.map.values())a.destroy();for(let{buffer:a}of m.map.values())a.destroy()}),{uniforms:m,textures:d,attributes:u,set:(a,f,c)=>{o=a,s=f,i=c}}};var me=async(e,t=!1)=>{let{vs:n,fs:r,cs:o}=e,s=!0,i=!e.gpu;if(i){let p=e.el.getContext("webgpu"),a=te(),{device:f,format:c}=await re(p,e.error);e({device:f,format:c,binding:a,gpu:p}),e("resize",()=>{e.depthTexture?.destroy(),e.isDepth&&(e.depthTexture=ie(e.device,...e.size))})}e("render",()=>{s&&d()}),i&&e("render",()=>{e.commandEncoder=e.device.createCommandEncoder()});let u=ue(e);i&&e("render",()=>{e.passEncoder=e.commandEncoder.beginRenderPass(oe(e.gpu,e.depthTexture))});let m=fe(e,()=>s=!0),d=()=>{s=!1;let p={isWebGL:!1,gl:e};r=r?b.str(r)?r:r.fragment(p):V,n=n?b.str(n)?n:n.vertex(p):X,o=o?b.str(o)?o:o.compute(p):"";let a=ne(e.device,e.format,m.attributes.map.values(),m.uniforms.map.values(),m.textures.map.values(),u.storages.map.values(),r,o,n,e.isDepth);u.set(a.computePipeline,a.bindGroups),m.set(a.graphicPipeline,a.bindGroups,a.vertexBuffers)};t&&e("render",()=>{e.passEncoder.end(),e.device.queue.submit([e.commandEncoder.finish()])}),e("clean",()=>{e.depthTexture?.destroy(),e.device.destroy()})};var de=()=>typeof window>"u",ce=()=>de()?!1:"gpu"in navigator,pe=e=>e.el||e.elem||e.element,be=(...e)=>{let t=(0,T.event)({isNative:!1,isWebGL:!0,isError:!1,isLoop:!0,isDebug:!1,isDepth:!1,wireframe:!1,size:[0,0],mouse:[0,0],precision:"highp",error(){t.isError=!0,t.isLoop=!1,t.clean(),console.warn("GLRE Error:",...arguments)}}),n=performance.now();return t.queue=(0,S.createQueue)(),t.frame=(0,S.createFrame)(),t.attribute=(0,T.durable)((r,o,s)=>t.queue(()=>t._attribute?.(r,o,s)),t),t.instance=(0,T.durable)((r,o,s)=>t.queue(()=>t._instance?.(r,o,s)),t),t.storage=(0,T.durable)((r,o)=>t.queue(()=>t._storage?.(r,o)),t),t.texture=(0,T.durable)((r,o)=>t.queue(()=>t._texture?.(r,o)),t),t.uniform=(0,T.durable)((r,o)=>t.queue(()=>t._uniform?.(r,o)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:n}),t("mount",async r=>{t.el=pe(t)||r||e.map(pe).find(Boolean);let o=!t.el;o&&!t.isNative&&(t.el=document.createElement("canvas"));for(let s=0;s<e.length;s++){let i=e[s];t.fs=i.fs||i.frag||i.fragment||void 0,t.cs=i.cs||i.comp||i.compute||void 0,t.vs=i.vs||i.vert||i.vertex||void 0,t.triangleCount=i.triangleCount||2,t.instanceCount=i.instanceCount||1,t.particleCount=i.particleCount||1024,t.count=i.count||t.triangleCount*3||6,t(i),b.bol(i.isWebGL)&&(t.isWebGL=i.isWebGL||!ce()),t.isWebGL?ee(t):await me(t,s===e.length-1),i.mount&&i.mount()}!t.el||t.isError||(t.resize(),t.frame(()=>(t.render(),t.isLoop)),!t.isNative&&(o&&document.body.appendChild(t.el),window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove)))}),t("clean",()=>{t.frame.stop(),!(!t.el||t.isNative)&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("ref",r=>{r?(t.el=r,t.mount()):t.clean()}),t("resize",()=>{let r=t.el.parentElement?.getBoundingClientRect();t.size[0]=t.el.width=t.width||r?.width||window.innerWidth,t.size[1]=t.el.height=t.height||r?.height||window.innerHeight,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,s=r.clientY)=>{let i=t.el.getBoundingClientRect();t.mouse[0]=(o-i.left)/i.width,t.mouse[1]=-(s-i.top)/i.height+1,t.uniform("iMouse",t.mouse)}),t("render",()=>{n=performance.now()/1e3,t.uniform("iTime",n),t.queue.flush()}),t},De=be;0&&(module.exports={createGL,isServer,isWebGPUSupported});
|
|
37
|
+
${t}`)},P=(e,t,n,r)=>{let o=e.createProgram(),s=N(e,t,e.FRAGMENT_SHADER,r.error),i=N(e,n,e.VERTEX_SHADER,r.error);if(!s||!i)return;if(e.attachShader(o,s),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let u=e.getProgramInfoLog(o);e.deleteProgram(o),r.error(`Could not link program: ${u}`)},O=(e,t)=>{let n=new Float32Array(t),r=e.createBuffer();return{array:n,buffer:r}},w=(e,t,n,r)=>{t.set(r),e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null)},z=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0)},H=(e,t,n,r)=>{e.bindBuffer(e.ARRAY_BUFFER,r),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,n,e.FLOAT,!1,0,0),e.vertexAttribDivisor(t,1)},U=(e,t,n)=>{if(b.nul(t))return;if(b.num(n))return e.uniform1f(t,n);let r=n.length;if(r<=4)return e[`uniform${r}fv`](t,n);r=Math.sqrt(r)<<0,e[`uniformMatrix${r}fv`](t,!1,n)},C=(e,t,n,r,o=!1)=>{let s=e.createTexture();if(e.bindTexture(e.TEXTURE_2D,s),t?(e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),o||e.generateMipmap(e.TEXTURE_2D)):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([0,0,0,0])),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(n,r),e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),o)return()=>{e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t)}},$=(e,t,n,r,o,s,i,u)=>{let m=n*r,d=t.length/m;for(let p=0;p<m;p++)for(let a=0;a<Math.min(d,4);a++)u[4*p+a]=t[p*d+a]||0;e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,s.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,n,r,0,e.RGBA,e.FLOAT,u),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)},k=(e,t)=>{for(let{ping:n,pong:r}of t)e.deleteTexture(n.texture),e.deleteTexture(r.texture),e.deleteFramebuffer(n.buffer),e.deleteFramebuffer(r.buffer)},q=(e,t,n,r,o,s)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(r,o),s===0&&e.bindFramebuffer(e.FRAMEBUFFER,n.buffer);let i=e.COLOR_ATTACHMENT0+s;return e.framebufferTexture2D(e.FRAMEBUFFER,i,e.TEXTURE_2D,n.texture,0),i},K=(e=1024)=>{if(b.num(e)){let o=Math.sqrt(e),s=Math.ceil(o);return Number.isInteger(o)||console.warn(`GLRE Storage Warning: particleCount (${e}) is not a square. Using ${s}x${s} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`),{x:s,y:s}}let[t,n,r]=e;if(r!==void 0){let o=n*r;return console.warn(`GLRE Storage Warning: 3D particleCount [${t}, ${n}, ${r}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${n} * depth=${r} = ${o}.`),{x:t,y:o}}return{x:t,y:n}},Y=e=>{let t=e.getExtension("WEBGL_lose_context");t&&t.loseContext()},j=e=>{e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.enable(e.CULL_FACE),e.cullFace(e.BACK)},Q=e=>{let t=e.getExtension("WEBGL_polygon_mode");t&&t.polygonModeWEBGL(e.FRONT_AND_BACK,t.LINE_WEBGL)};var J=e=>{let{cs:t,particleCount:n,gl:r}=e;if(!t)return;r.getExtension("EXT_color_buffer_float");let o=0,s=0,i=(0,A.nested)(()=>o++);t=b.str(t)?t:t.compute({isWebGL:!0,gl:e,units:i});let u=P(r,t,_,e),m=K(n),d=(0,A.nested)(a=>r.getUniformLocation(u,a)),p=(0,A.nested)(a=>{let f=new Float32Array(m.x*m.y*4),c={texture:r.createTexture(),buffer:r.createFramebuffer()},l={texture:r.createTexture(),buffer:r.createFramebuffer()};return{ping:c,pong:l,array:f,loc:d(a),unit:i(a)}});e("_uniform",(a,f)=>{r.useProgram(e.program=u),U(r,d(a),f)}),e("_storage",(a,f)=>{r.useProgram(e.program=u);let{ping:c,pong:l,unit:x,array:E}=p(a);$(r,f,m.x,m.y,c,l,x,E)}),e("clean",()=>{r.deleteProgram(u),k(r,p.map.values())}),e("render",()=>{r.useProgram(e.program=u);let a=p.map.values().map(({ping:f,pong:c,loc:l,unit:x},E)=>{let[L,h]=s%2?[f,c]:[c,f];return q(r,L,h,l,x,E)});r.drawBuffers(a),r.drawArrays(r.TRIANGLES,0,3),r.bindFramebuffer(r.FRAMEBUFFER,null),s++})};var B=require("reev");var Z=e=>{let{fs:t,vs:n,gl:r}=e,o={isWebGL:!0,gl:e};t=e.fs?b.str(e.fs)?e.fs:e.fs.fragment(o):W,n=e.vs?b.str(e.vs)?e.vs:e.vs.vertex(o):_;let s=P(r,t,n,e),i=0,u=(0,B.nested)(()=>i++),m=(0,B.nested)(p=>r.getUniformLocation(s,p)),d=(0,B.nested)((p,a,f=!1)=>({stride:v(a.length,f?e.instanceCount:e.count,e.error,p),location:r.getAttribLocation(s,p),...O(r,a)}));e("_attribute",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a);w(r,f.array,f.buffer,a),z(r,f.location,f.stride,f.buffer)}),e("_instance",(p,a)=>{r.useProgram(e.program=s);let f=d(p,a,!0);w(r,f.array,f.buffer,a),H(r,f.location,f.stride,f.buffer)}),e("_uniform",(p,a)=>{r.useProgram(e.program=s),U(r,m(p),a)}),e("_texture",(p,a)=>{r.useProgram(e.program=s);let f=m(p),c=u(p);C(r,null,f,c,!1),R(a,(l,x)=>{r.useProgram(e.program=s);let E=C(r,l,f,c,x);E&&e({render:E})})}),e("clean",()=>{r.deleteProgram(s)}),e("render",()=>{r.useProgram(e.program=s),e.instanceCount>1?r.drawArraysInstanced(r.TRIANGLES,0,e.count,e.instanceCount):r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)})};var ee=e=>{let t=!e.gl;if(t){let n=e.gl=e.el.getContext("webgl2");e("render",()=>n.viewport(0,0,...e.size))}J(e),Z(e),t&&(e("clean",()=>Y(e.gl)),e.isDepth&&j(e.gl),e.wireframe&&Q(e.gl))};var se=require("reev");var G=require("reev");var te=()=>{let e=0,t=0,n=0,r=0,o=(0,G.nested)(()=>{let m=Math.floor(e/12),d=e%12;return e++,{group:m,binding:d}}),s=(0,G.nested)(()=>{let d=Math.floor(e/12)+1+Math.floor(t/6),p=t%6*2;return t++,{group:d,binding:p}}),i=(0,G.nested)(()=>{let d=Math.floor(e/12)+Math.floor(t/6)+2+Math.floor(n/12),p=n%12;return n++,{group:d,binding:p}}),u=(0,G.nested)(()=>{let m=r;return r++,{location:m}});return{uniform:o,texture:s,storage:i,attrib:u}},re=async(e,t=console.log,n)=>{let r=navigator.gpu,o=r.getPreferredCanvasFormat(),s=await r.requestAdapter();if(n?.aborted)throw new DOMException("Aborted","AbortError");let i=await s.requestDevice();if(n?.aborted&&(i.destroy(),n?.aborted))throw new DOMException("Aborted","AbortError");return i.onuncapturederror=u=>t(u.error.message),e.configure({device:i,format:o,alphaMode:"premultiplied"}),{device:i,format:o}},ve=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",_e=e=>{let t=[],n=[];for(let{buffer:r,location:o,stride:s,isInstance:i}of e){t[o]=r;let u=Math.min(Math.max(Math.floor(s),1),4),m=Math.max(4,Math.ceil(u*4/4)*4);n[o]={arrayStride:m,stepMode:i?"instance":"vertex",attributes:[{shaderLocation:o,offset:0,format:ve(u)}]}}return{vertexBuffers:t,bufferLayouts:n}},Pe=(e,t,n,r=[])=>{let o=new Map,s={bindGroups:[],bindGroupLayouts:[]},i=(u,m,d)=>{o.has(u)||o.set(u,{layouts:[],bindings:[]});let{layouts:p,bindings:a}=o.get(u);p.push(m),a.push(d)};for(let{binding:u,buffer:m,group:d}of t)i(d,{binding:u,visibility:7,buffer:{type:"uniform"}},{binding:u,resource:{buffer:m}});for(let{binding:u,buffer:m,group:d}of r)i(d,{binding:u,visibility:6,buffer:{type:"storage"}},{binding:u,resource:{buffer:m}});for(let{binding:u,group:m,sampler:d,view:p}of n)i(m,{binding:u,visibility:2,sampler:{}},{binding:u,resource:d}),i(m,{binding:u+1,visibility:2,texture:{}},{binding:u+1,resource:p});for(let[u,{layouts:m,bindings:d}]of o)s.bindGroupLayouts[u]=e.createBindGroupLayout({entries:m}),s.bindGroups[u]=e.createBindGroup({layout:s.bindGroupLayouts[u],entries:d});return s},Ue=(e,t,n,r,o,s,i)=>{let u={primitive:{topology:"triangle-list"},layout:e.createPipelineLayout({bindGroupLayouts:r}),vertex:{module:e.createShaderModule({label:"vert",code:o.trim()}),entryPoint:"main",buffers:n},fragment:{module:e.createShaderModule({label:"frag",code:s.trim()}),entryPoint:"main",targets:[{format:t}]}};return i&&(u.depthStencil={depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}),e.createRenderPipeline(u)},Ae=(e,t,n)=>{if(n)return e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:n.trim()}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})})},ne=(e,t,n,r,o,s,i,u,m,d)=>{let{vertexBuffers:p,bufferLayouts:a}=_e(n),{bindGroups:f,bindGroupLayouts:c}=Pe(e,r,o,s),l=Ae(e,c,u),x=Ue(e,t,a,c,m,i,d);return{bindGroups:f,vertexBuffers:p,computePipeline:l,graphicPipeline:x}},Be=e=>e==="uniform"?72:e==="attrib"?40:140,y=(e,t,n)=>{M(t)||(t=new Float32Array(t));let r=Be(n),o=n==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,s=e.createBuffer({size:o,usage:r});return{array:t,buffer:s}},g=(e,t,n,r)=>{n.set(t),e.queue.writeBuffer(r,0,n)},oe=(e,t)=>{let n={colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};return t&&(n.depthStencilAttachment={view:t.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}),n},I=(e,t=1280,n=800)=>{let r=e.createTexture({size:[t,n],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:r,sampler:o,view:r.createView()}},ie=(e,t,n)=>e.createTexture({size:[t,n],format:"depth24plus",usage:16}),ae=(e,t=32)=>{b.num(e)&&(e=[e]);let[n,r=1,o=1]=e;return{x:Math.min(n*r*o/t,65535),y:1,z:1}};var ue=e=>{let{particleCount:t}=e,n,r,o=(0,se.nested)((i,u)=>({...e.binding.storage(i),...y(e.device,u,"storage")}));return e("_storage",(i,u)=>{let{array:m,buffer:d}=o(i,u);g(e.device,u,m,d)}),e("render",()=>{if(!n||!r)return;let i=e.commandEncoder.beginComputePass();i.setPipeline(n),r.forEach((p,a)=>i.setBindGroup(a,p));let{x:u,y:m,z:d}=ae(t);i.dispatchWorkgroups(u,m,d),i.end()}),e("clean",()=>{for(let{buffer:i}of o.map.values())i.destroy()}),{storages:o,set:(i,u)=>{n=i,r=u}}};var D=require("reev");var fe=(e,t=()=>{})=>{let{count:n,instanceCount:r}=e,o,s,i,u=(0,D.nested)((a,f,c=!1,l=v(f.length,c?r:n,e.error,a))=>(t(),{...e.binding.attrib(a),...y(e.device,f,"attrib"),isInstance:c,stride:l})),m=(0,D.nested)((a,f)=>(t(),{...e.binding.uniform(a),...y(e.device,f,"uniform")})),d=(0,D.nested)((a,f=1,c=1)=>(t(),{...e.binding.texture(a),...I(e.device,f,c)}));return e("_attribute",(a,f)=>{let c=u(a,f);g(e.device,f,c.array,c.buffer)}),e("_instance",(a,f)=>{let c=u(a,f,!0);g(e.device,f,c.array,c.buffer)}),e("_uniform",(a,f)=>{b.num(f)&&(f=[f]);let c=m(a,f);g(e.device,f,c.array,c.buffer)}),e("_texture",(a,f)=>{let c=d(a);R(f,(l,x)=>{let[E,L]=x?[l.videoWidth,l.videoHeight]:[l.width,l.height];c.texture.destroy(),Object.assign(c,I(e.device,E,L)),t();let h=()=>void e.device.queue.copyExternalImageToTexture({source:l},{texture:c.texture},{width:E,height:L});x?e({render:h}):h()})}),e("render",()=>{!o||!s||!i||(e.passEncoder.setPipeline(o),s.forEach((a,f)=>e.passEncoder.setBindGroup(f,a)),i.forEach((a,f)=>e.passEncoder.setVertexBuffer(f,a)),e.passEncoder.draw(n,r,0,0))}),e("clean",()=>{for(let{buffer:a}of u.map.values())a.destroy();for(let{texture:a}of d.map.values())a.destroy();for(let{buffer:a}of m.map.values())a.destroy()}),{uniforms:m,textures:d,attributes:u,set:(a,f,c)=>{o=a,s=f,i=c}}};var me=async(e,t=!1)=>{let{vs:n,fs:r,cs:o}=e,s=!0,i=!e.gpu;if(i){let p=e.el.getContext("webgpu"),a=te(),{device:f,format:c}=await re(p,e.error);e({device:f,format:c,binding:a,gpu:p}),e("resize",()=>{e.depthTexture?.destroy(),e.isDepth&&(e.depthTexture=ie(e.device,...e.size))})}e("render",()=>{s&&d()}),i&&e("render",()=>{e.commandEncoder=e.device.createCommandEncoder()});let u=ue(e);i&&e("render",()=>{e.passEncoder=e.commandEncoder.beginRenderPass(oe(e.gpu,e.depthTexture))});let m=fe(e,()=>s=!0),d=()=>{s=!1;let p={isWebGL:!1,gl:e};r=r?b.str(r)?r:r.fragment(p):V,n=n?b.str(n)?n:n.vertex(p):X,o=o?b.str(o)?o:o.compute(p):"";let a=ne(e.device,e.format,m.attributes.map.values(),m.uniforms.map.values(),m.textures.map.values(),u.storages.map.values(),r,o,n,e.isDepth);u.set(a.computePipeline,a.bindGroups),m.set(a.graphicPipeline,a.bindGroups,a.vertexBuffers)};t&&e("render",()=>{e.passEncoder.end(),e.device.queue.submit([e.commandEncoder.finish()])}),e("clean",()=>{e.depthTexture?.destroy(),e.device.destroy()})};var de=()=>typeof window>"u",ce=()=>de()?!1:"gpu"in navigator,pe=e=>e.el||e.elem||e.element,be=(...e)=>{let t=(0,T.event)({isNative:!1,isWebGL:!0,isError:!1,isLoop:!0,isDebug:!1,isDepth:!1,wireframe:!1,size:[0,0],mouse:[0,0],precision:"highp",error(){t.isError=!0,t.isLoop=!1,t.clean(),console.warn("GLRE Error:",...arguments)}}),n=performance.now();return t.queue=(0,S.createQueue)(),t.frame=(0,S.createFrame)(),t.attribute=(0,T.durable)((r,o,s)=>t.queue(()=>t._attribute?.(r,o,s)),t),t.instance=(0,T.durable)((r,o,s)=>t.queue(()=>t._instance?.(r,o,s)),t),t.storage=(0,T.durable)((r,o)=>t.queue(()=>t._storage?.(r,o)),t),t.texture=(0,T.durable)((r,o)=>t.queue(()=>t._texture?.(r,o)),t),t.uniform=(0,T.durable)((r,o)=>t.queue(()=>t._uniform?.(r,o)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:n}),t("mount",async r=>{t.el=pe(t)||r||e.map(pe).find(Boolean);let o=!t.el;o&&!t.isNative&&(t.el=document.createElement("canvas"),Object.assign(t.el.style,{top:0,left:0,position:"fixed"}));for(let s=0;s<e.length;s++){let i=e[s];t.fs=i.fs||i.frag||i.fragment||void 0,t.cs=i.cs||i.comp||i.compute||void 0,t.vs=i.vs||i.vert||i.vertex||void 0,t.triangleCount=i.triangleCount||2,t.instanceCount=i.instanceCount||1,t.particleCount=i.particleCount||1024,t.count=i.count||t.triangleCount*3||6,t(i),b.bol(i.isWebGL)&&(t.isWebGL=i.isWebGL||!ce()),t.isWebGL?ee(t):await me(t,s===e.length-1),i.mount&&i.mount()}!t.el||t.isError||(t.resize(),t.frame(()=>(t.render(),t.isLoop)),!t.isNative&&(o&&document.body.appendChild(t.el),window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove)))}),t("clean",()=>{t.frame.stop(),!(!t.el||t.isNative)&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("ref",r=>{r?(t.el=r,t.mount()):t.clean()}),t("resize",()=>{let r=t.el.parentElement?.getBoundingClientRect();t.size[0]=t.el.width=t.width||r?.width||window.innerWidth,t.size[1]=t.el.height=t.height||r?.height||window.innerHeight,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,s=r.clientY)=>{let i=t.el.getBoundingClientRect();t.mouse[0]=(o-i.left)/i.width,t.mouse[1]=-(s-i.top)/i.height+1,t.uniform("iMouse",t.mouse)}),t("render",()=>{n=performance.now()/1e3,t.uniform("iTime",n),t.queue.flush()}),t},De=be;0&&(module.exports={createGL,isServer,isWebGPUSupported});
|
|
38
38
|
//# sourceMappingURL=index.cjs.map
|