glre 0.26.0 → 0.27.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 +7 -6
- package/dist/index.d.ts +186 -148
- package/dist/index.js +35 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +35 -22
- package/dist/index.mjs.map +1 -1
- package/dist/native.d.ts +1 -1
- package/dist/native.js +35 -22
- package/dist/native.js.map +1 -1
- package/dist/native.mjs +33 -20
- package/dist/native.mjs.map +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +35 -22
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +34 -21
- package/dist/react.mjs.map +1 -1
- package/dist/solid.d.ts +1 -1
- package/dist/solid.js +35 -22
- package/dist/solid.js.map +1 -1
- package/dist/solid.mjs +34 -21
- package/dist/solid.mjs.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +0 -2
- package/src/native.ts +2 -2
- package/src/node/code.ts +74 -0
- package/src/node/const.ts +45 -48
- package/src/node/index.ts +85 -87
- package/src/node/node.ts +40 -94
- package/src/node/scope.ts +68 -0
- package/src/node/types.ts +53 -88
- package/src/node/utils.ts +102 -0
- package/src/utils/pipeline.ts +4 -5
- package/src/utils/program.ts +10 -8
- package/src/webgl.ts +1 -1
- package/src/webgpu.ts +2 -2
- 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/README.md
CHANGED
|
@@ -115,7 +115,7 @@ npm install glre
|
|
|
115
115
|
```ts
|
|
116
116
|
import { createRoot } from 'react-dom/client'
|
|
117
117
|
import { useGL, vec4, fract, fragCoord, iResolution } from 'glre/react'
|
|
118
|
-
const frag = vec4(fract(fragCoord.xy
|
|
118
|
+
const frag = vec4(fract(fragCoord.xy.div(iResolution)), 0, 1)
|
|
119
119
|
|
|
120
120
|
const App = () => {
|
|
121
121
|
const gl = useGL({ frag })
|
|
@@ -136,7 +136,7 @@ react-native supported ([codesandbox demo](https://codesandbox.io/p/sandbox/glre
|
|
|
136
136
|
import { GLView } from 'expo-gl'
|
|
137
137
|
import { registerRootComponent } from 'expo'
|
|
138
138
|
import { useGL, vec4, fract, fragCoord, iResolution } from 'glre/native'
|
|
139
|
-
const frag = vec4(fract(fragCoord.xy
|
|
139
|
+
const frag = vec4(fract(fragCoord.xy.div(iResolution)), 0, 1)
|
|
140
140
|
|
|
141
141
|
const App = () => {
|
|
142
142
|
const gl = useGL({ frag })
|
|
@@ -157,7 +157,7 @@ solid js supported ([codesandbox demo](https://codesandbox.io/p/sandbox/glre-sol
|
|
|
157
157
|
```ts
|
|
158
158
|
import { render } from 'solid-js/web'
|
|
159
159
|
import { onGL, vec4, fract, fragCoord, iResolution } from 'glre/solid'
|
|
160
|
-
const frag =
|
|
160
|
+
const frag = c4(fract(fragCoord.xy.div(iResolution)), 0, 1)
|
|
161
161
|
|
|
162
162
|
const App = () => {
|
|
163
163
|
const gl = onGL({ frag })
|
|
@@ -177,8 +177,9 @@ esm supported ([codesandbox demo](https://codesandbox.io/s/glre-basic-demo3-3bhr
|
|
|
177
177
|
|
|
178
178
|
```html
|
|
179
179
|
<script type="module">
|
|
180
|
-
import
|
|
181
|
-
|
|
180
|
+
import createGL from 'https://esm.sh/glre'
|
|
181
|
+
import { vec4, fract, fragCoord, iResolution } from 'https://esm.sh/glre'
|
|
182
|
+
const frag = vec4(fract(fragCoord.xy.div(iResolution)), 0, 1)
|
|
182
183
|
function App() {
|
|
183
184
|
const el = document.createElement('canvas')
|
|
184
185
|
createGL({ el, frag }).mount()
|
|
@@ -207,7 +208,7 @@ The node system provides various types and functions that mirror GLSL functional
|
|
|
207
208
|
import { float, int, vec2, vec3, vec4, mat3, mat4 } from 'glre'
|
|
208
209
|
|
|
209
210
|
// Built-in variables
|
|
210
|
-
import { fragCoord,
|
|
211
|
+
import { fragCoord, position, iResolution, iTime } from 'glre'
|
|
211
212
|
|
|
212
213
|
// Math functions
|
|
213
214
|
import { sin, cos, abs, pow, mix, clamp, normalize } from 'glre'
|
package/dist/index.d.ts
CHANGED
|
@@ -3,142 +3,200 @@ import { Queue, Frame } from 'refr';
|
|
|
3
3
|
export { Frame, Fun, Queue } from 'refr';
|
|
4
4
|
import { EventState } from 'reev';
|
|
5
5
|
|
|
6
|
-
declare const TYPES: readonly ["float", "int", "uint", "bool", "color", "vec2", "vec3", "vec4", "mat2", "mat3", "mat4", "ivec2", "ivec3", "ivec4", "uvec2", "uvec3", "uvec4", "bvec2", "bvec3", "bvec4"];
|
|
7
|
-
type NodeType = (typeof TYPES)[number];
|
|
8
6
|
declare const SWIZZLES: readonly ["x", "y", "z", "w", "r", "g", "b", "a", "s", "t", "p", "q"];
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
declare const NODE_TYPES: readonly ["float", "int", "uint", "bool", "color", "vec2", "vec3", "vec4", "mat2", "mat3", "mat4", "ivec2", "ivec3", "ivec4", "uvec2", "uvec3", "uvec4", "bvec2", "bvec3", "bvec4"];
|
|
8
|
+
declare const OPERATORS: {
|
|
9
|
+
readonly add: "+";
|
|
10
|
+
readonly sub: "-";
|
|
11
|
+
readonly mul: "*";
|
|
12
|
+
readonly div: "/";
|
|
13
|
+
readonly mod: "%";
|
|
14
|
+
readonly equal: "==";
|
|
15
|
+
readonly notEqual: "!=";
|
|
16
|
+
readonly lessThan: "<";
|
|
17
|
+
readonly lessThanEqual: "<=";
|
|
18
|
+
readonly greaterThan: ">";
|
|
19
|
+
readonly greaterThanEqual: ">=";
|
|
20
|
+
readonly and: "&&";
|
|
21
|
+
readonly or: "||";
|
|
22
|
+
readonly bitAnd: "&";
|
|
23
|
+
readonly bitOr: "|";
|
|
24
|
+
readonly bitXor: "^";
|
|
25
|
+
readonly shiftLeft: "<<";
|
|
26
|
+
readonly shiftRight: ">>";
|
|
27
|
+
};
|
|
28
|
+
declare const OPERATOR_KEYS: (keyof typeof OPERATORS)[];
|
|
13
29
|
declare const FUNCTIONS: readonly ["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"];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
interface OperatorMethods {
|
|
35
|
-
add(x: X | number): X;
|
|
36
|
-
sub(x: X | number): X;
|
|
37
|
-
mul(x: X | number): X;
|
|
38
|
-
div(x: X | number): X;
|
|
39
|
-
mod(x: X | number): X;
|
|
40
|
-
equal(x: X | number): X;
|
|
41
|
-
notEqual(x: X | number): X;
|
|
42
|
-
lessThan(x: X | number): X;
|
|
43
|
-
lessThanEqual(x: X | number): X;
|
|
44
|
-
greaterThan(x: X | number): X;
|
|
45
|
-
greaterThanEqual(x: X | number): X;
|
|
46
|
-
and(x: X): X;
|
|
47
|
-
or(x: X): X;
|
|
48
|
-
not(): X;
|
|
49
|
-
}
|
|
50
|
-
interface MathMethods {
|
|
51
|
-
abs(): X;
|
|
52
|
-
acos(): X;
|
|
53
|
-
asin(): X;
|
|
54
|
-
atan(): X;
|
|
55
|
-
ceil(): X;
|
|
56
|
-
cos(): X;
|
|
57
|
-
floor(): X;
|
|
58
|
-
fract(): X;
|
|
59
|
-
length(): X;
|
|
60
|
-
normalize(): X;
|
|
61
|
-
sin(): X;
|
|
62
|
-
sqrt(): X;
|
|
63
|
-
tan(): X;
|
|
64
|
-
toVar(): X;
|
|
65
|
-
}
|
|
66
|
-
type SwizzleProperties = {
|
|
67
|
-
[k in Swillzes]: X;
|
|
30
|
+
declare const TYPE_MAPPING: {
|
|
31
|
+
readonly float: "f32";
|
|
32
|
+
readonly int: "i32";
|
|
33
|
+
readonly uint: "u32";
|
|
34
|
+
readonly bool: "bool";
|
|
35
|
+
readonly vec2: "vec2f";
|
|
36
|
+
readonly vec3: "vec3f";
|
|
37
|
+
readonly vec4: "vec4f";
|
|
38
|
+
readonly mat2: "mat2x2f";
|
|
39
|
+
readonly mat3: "mat3x3f";
|
|
40
|
+
readonly mat4: "mat4x4f";
|
|
41
|
+
readonly ivec2: "vec2i";
|
|
42
|
+
readonly ivec3: "vec3i";
|
|
43
|
+
readonly ivec4: "vec4i";
|
|
44
|
+
readonly uvec2: "vec2u";
|
|
45
|
+
readonly uvec3: "vec3u";
|
|
46
|
+
readonly uvec4: "vec4u";
|
|
47
|
+
readonly bvec2: "vec2<bool>";
|
|
48
|
+
readonly bvec3: "vec3<bool>";
|
|
49
|
+
readonly bvec4: "vec4<bool>";
|
|
68
50
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
set(value: any): void;
|
|
78
|
-
onObjectUpdate(callback: (context: any) => any): UniformNode;
|
|
79
|
-
onRenderUpdate(callback: (context: any) => any): UniformNode;
|
|
80
|
-
}
|
|
81
|
-
interface FunctionNode {
|
|
82
|
-
(...args: any[]): X;
|
|
83
|
-
call(x: X[]): X;
|
|
51
|
+
|
|
52
|
+
type NodeType = (typeof NODE_TYPES)[number];
|
|
53
|
+
type Functions = (typeof FUNCTIONS)[number];
|
|
54
|
+
type Operators = (typeof OPERATOR_KEYS)[number];
|
|
55
|
+
interface NodeProps {
|
|
56
|
+
id?: string;
|
|
57
|
+
children?: X[];
|
|
58
|
+
defaultValue?: number | number[];
|
|
84
59
|
}
|
|
85
|
-
interface
|
|
86
|
-
|
|
87
|
-
|
|
60
|
+
interface NodeConfig {
|
|
61
|
+
isWebGL?: boolean;
|
|
62
|
+
uniforms?: Set<string>;
|
|
63
|
+
onUniform?: (name: string, value: any) => void;
|
|
88
64
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
65
|
+
type _Swizzles<T extends string> = T | `${T}${T}` | `${T}${T}${T}` | `${T}${T}${T}${T}`;
|
|
66
|
+
type Swizzles = _Swizzles<'x' | 'y' | 'z' | 'w'> | _Swizzles<'r' | 'g' | 'b' | 'a'> | _Swizzles<'p' | 'q'> | _Swizzles<'s' | 't'>;
|
|
67
|
+
type NodeTypes = 'uniform' | 'variable' | 'swizzle' | 'operator' | 'node_type' | 'math_fun' | 'declare' | 'assign' | 'fn' | 'if' | 'loop' | 'scope';
|
|
68
|
+
interface NodeProxy extends Record<Swizzles, NodeProxy> {
|
|
69
|
+
add(n: X): NodeProxy;
|
|
70
|
+
sub(n: X): NodeProxy;
|
|
71
|
+
mul(n: X): NodeProxy;
|
|
72
|
+
div(n: X): NodeProxy;
|
|
73
|
+
mod(n: X): NodeProxy;
|
|
74
|
+
equal(n: X): NodeProxy;
|
|
75
|
+
notEqual(n: X): NodeProxy;
|
|
76
|
+
lessThan(n: X): NodeProxy;
|
|
77
|
+
lessThanEqual(n: X): NodeProxy;
|
|
78
|
+
greaterThan(n: X): NodeProxy;
|
|
79
|
+
greaterThanEqual(n: X): NodeProxy;
|
|
80
|
+
and(n: X): NodeProxy;
|
|
81
|
+
or(n: X): NodeProxy;
|
|
82
|
+
not(): NodeProxy;
|
|
83
|
+
assign(n: X): NodeProxy;
|
|
84
|
+
toVar(name?: string): NodeProxy;
|
|
85
|
+
toString(c?: NodeConfig): string;
|
|
86
|
+
type: NodeTypes;
|
|
87
|
+
props: NodeProps;
|
|
88
|
+
isProxy: true;
|
|
94
89
|
}
|
|
90
|
+
type X = NodeProxy | number | string | null | undefined;
|
|
95
91
|
|
|
96
|
-
declare const
|
|
97
|
-
declare const getCachedInt: (x: number) => X;
|
|
98
|
-
declare const getCachedFloat: (x: number) => X;
|
|
99
|
-
declare const findDuplicateNodes: (nodes: X[]) => Map<string, X[]>;
|
|
92
|
+
declare const code: (target: X, c?: NodeConfig | null) => string;
|
|
100
93
|
|
|
101
|
-
declare const
|
|
102
|
-
declare const
|
|
103
|
-
declare const
|
|
104
|
-
declare const
|
|
105
|
-
declare const
|
|
106
|
-
declare const
|
|
107
|
-
declare const
|
|
108
|
-
declare const color: (r?: any, g?: any, b?: any) => X;
|
|
94
|
+
declare const node: (type: NodeTypes, props?: NodeProps | null, ...args: X[]) => NodeProxy;
|
|
95
|
+
declare const v: (...args: X[]) => NodeProxy;
|
|
96
|
+
declare const u: (key: string, defaultValue?: number | number[]) => NodeProxy;
|
|
97
|
+
declare const s: (key: Swizzles, arg: X) => NodeProxy;
|
|
98
|
+
declare const n: (key: string, ...args: X[]) => NodeProxy;
|
|
99
|
+
declare const o: (key: Operators, ...args: X[]) => NodeProxy;
|
|
100
|
+
declare const f: (key: Functions, ...args: X[]) => NodeProxy;
|
|
109
101
|
|
|
110
|
-
declare const
|
|
111
|
-
|
|
102
|
+
declare const If: (x: X, callback: () => void) => {
|
|
103
|
+
ElseIf: (y: X, elseCallback: () => void) => void;
|
|
104
|
+
Else: (elseCallback: () => void) => void;
|
|
105
|
+
};
|
|
106
|
+
declare const Loop: (x: X, callback?: (params: {
|
|
107
|
+
i: NodeProxy;
|
|
108
|
+
}) => void) => NodeProxy;
|
|
109
|
+
declare const Fn: (callback: (args: X[]) => NodeProxy) => (...args: X[]) => NodeProxy;
|
|
110
|
+
declare const toVar: (x: X) => (id: string) => NodeProxy;
|
|
111
|
+
declare const assign: (x: X) => (y: X) => X;
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
declare const
|
|
121
|
-
declare const
|
|
122
|
-
declare const iDeltaTime: UniformNode;
|
|
123
|
-
declare const updateUniforms: (context: UpdateContext) => void;
|
|
113
|
+
declare const isSwizzle: (key: unknown) => key is Swizzles;
|
|
114
|
+
declare const isOperator: (key: unknown) => key is Operators;
|
|
115
|
+
declare const isNodeType: (key: unknown) => key is NodeType;
|
|
116
|
+
declare const isFunction: (key: unknown) => key is Functions;
|
|
117
|
+
declare const getId: () => string;
|
|
118
|
+
declare const joins: (children: X[], c: NodeConfig) => string;
|
|
119
|
+
declare const inferType: (target: X, c: NodeConfig) => string;
|
|
120
|
+
declare const fragment: (x: X, c: NodeConfig) => string;
|
|
121
|
+
declare const vertex: (x: X, c: NodeConfig) => string;
|
|
124
122
|
|
|
125
|
-
declare const
|
|
126
|
-
declare const
|
|
127
|
-
declare const
|
|
128
|
-
declare const
|
|
129
|
-
declare const
|
|
130
|
-
declare const
|
|
131
|
-
declare const
|
|
132
|
-
declare const
|
|
133
|
-
declare const
|
|
134
|
-
declare const
|
|
135
|
-
declare const
|
|
136
|
-
declare const
|
|
137
|
-
declare const
|
|
138
|
-
declare const
|
|
139
|
-
declare const
|
|
140
|
-
declare const
|
|
141
|
-
declare const
|
|
123
|
+
declare const iResolution: NodeProxy;
|
|
124
|
+
declare const iMouse: NodeProxy;
|
|
125
|
+
declare const iTime: NodeProxy;
|
|
126
|
+
declare const fragCoord: NodeProxy;
|
|
127
|
+
declare const float: (x: X) => NodeProxy;
|
|
128
|
+
declare const int: (x: X) => NodeProxy;
|
|
129
|
+
declare const uint: (x: X) => NodeProxy;
|
|
130
|
+
declare const bool: (x: X) => NodeProxy;
|
|
131
|
+
declare const vec2: (x?: X, y?: X) => NodeProxy;
|
|
132
|
+
declare const vec3: (x?: X, y?: X, z?: X) => NodeProxy;
|
|
133
|
+
declare const vec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
|
|
134
|
+
declare const mat2: (...args: X[]) => NodeProxy;
|
|
135
|
+
declare const mat3: (...args: X[]) => NodeProxy;
|
|
136
|
+
declare const mat4: (...args: X[]) => NodeProxy;
|
|
137
|
+
declare const ivec2: (x?: X, y?: X) => NodeProxy;
|
|
138
|
+
declare const ivec3: (x?: X, y?: X, z?: X) => NodeProxy;
|
|
139
|
+
declare const ivec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
|
|
140
|
+
declare const uvec2: (x?: X, y?: X) => NodeProxy;
|
|
141
|
+
declare const uvec3: (x?: X, y?: X, z?: X) => NodeProxy;
|
|
142
|
+
declare const uvec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
|
|
143
|
+
declare const bvec2: (x?: X, y?: X) => NodeProxy;
|
|
144
|
+
declare const bvec3: (x?: X, y?: X, z?: X) => NodeProxy;
|
|
145
|
+
declare const bvec4: (x?: X, y?: X, z?: X, w?: X) => NodeProxy;
|
|
146
|
+
declare const abs: (x: X) => NodeProxy;
|
|
147
|
+
declare const acos: (x: X) => NodeProxy;
|
|
148
|
+
declare const all: (x: X) => NodeProxy;
|
|
149
|
+
declare const any: (x: X) => NodeProxy;
|
|
150
|
+
declare const asin: (x: X) => NodeProxy;
|
|
151
|
+
declare const atan: (y: X, x: X) => NodeProxy;
|
|
152
|
+
declare const bitcast: (x: X, y: X) => NodeProxy;
|
|
153
|
+
declare const cbrt: (x: X) => NodeProxy;
|
|
154
|
+
declare const ceil: (x: X) => NodeProxy;
|
|
155
|
+
declare const clamp: (x: X, min: X, max: X) => NodeProxy;
|
|
156
|
+
declare const cos: (x: X) => NodeProxy;
|
|
157
|
+
declare const cross: (x: X, y: X) => NodeProxy;
|
|
158
|
+
declare const dFdx: (p: X) => NodeProxy;
|
|
159
|
+
declare const dFdy: (p: X) => NodeProxy;
|
|
160
|
+
declare const degrees: (radians: X) => NodeProxy;
|
|
161
|
+
declare const difference: (x: X, y: X) => NodeProxy;
|
|
162
|
+
declare const distance: (x: X, y: X) => NodeProxy;
|
|
163
|
+
declare const dot: (x: X, y: X) => NodeProxy;
|
|
164
|
+
declare const equals: (x: X, y: X) => NodeProxy;
|
|
165
|
+
declare const exp: (x: X) => NodeProxy;
|
|
166
|
+
declare const exp2: (x: X) => NodeProxy;
|
|
167
|
+
declare const faceforward: (N: X, I: X, Nref: X) => NodeProxy;
|
|
168
|
+
declare const floor: (x: X) => NodeProxy;
|
|
169
|
+
declare const fract: (x: X) => NodeProxy;
|
|
170
|
+
declare const fwidth: (x: X) => NodeProxy;
|
|
171
|
+
declare const inverseSqrt: (x: X) => NodeProxy;
|
|
172
|
+
declare const length: (x: X) => NodeProxy;
|
|
173
|
+
declare const lengthSq: (x: X) => NodeProxy;
|
|
174
|
+
declare const log: (x: X) => NodeProxy;
|
|
175
|
+
declare const log2: (x: X) => NodeProxy;
|
|
176
|
+
declare const max: (x: X, y: X) => NodeProxy;
|
|
177
|
+
declare const min: (x: X, y: X) => NodeProxy;
|
|
178
|
+
declare const mix: (x: X, y: X, a: X) => NodeProxy;
|
|
179
|
+
declare const negate: (x: X) => NodeProxy;
|
|
180
|
+
declare const normalize: (x: X) => NodeProxy;
|
|
181
|
+
declare const oneMinus: (x: X) => NodeProxy;
|
|
182
|
+
declare const pow: (x: X, y: X) => NodeProxy;
|
|
183
|
+
declare const pow2: (x: X) => NodeProxy;
|
|
184
|
+
declare const pow3: (x: X) => NodeProxy;
|
|
185
|
+
declare const pow4: (x: X) => NodeProxy;
|
|
186
|
+
declare const radians: (degrees: X) => NodeProxy;
|
|
187
|
+
declare const reciprocal: (x: X) => NodeProxy;
|
|
188
|
+
declare const reflect: (I: X, N: X) => NodeProxy;
|
|
189
|
+
declare const refract: (I: X, N: X, eta: X) => NodeProxy;
|
|
190
|
+
declare const round: (x: X) => NodeProxy;
|
|
191
|
+
declare const saturate: (x: X) => NodeProxy;
|
|
192
|
+
declare const sign: (x: X) => NodeProxy;
|
|
193
|
+
declare const sin: (x: X) => NodeProxy;
|
|
194
|
+
declare const smoothstep: (e0: X, e1: X, x: X) => NodeProxy;
|
|
195
|
+
declare const sqrt: (x: X) => NodeProxy;
|
|
196
|
+
declare const step: (edge: X, x: X) => NodeProxy;
|
|
197
|
+
declare const tan: (x: X) => NodeProxy;
|
|
198
|
+
declare const transformDirection: (dir: X, matrix: X) => NodeProxy;
|
|
199
|
+
declare const trunc: (x: X) => NodeProxy;
|
|
142
200
|
|
|
143
201
|
type GPUContext = any;
|
|
144
202
|
type GPUDevice = any;
|
|
@@ -224,26 +282,6 @@ type GL = EventState<{
|
|
|
224
282
|
}): GL;
|
|
225
283
|
}>;
|
|
226
284
|
|
|
227
|
-
interface GLSLContext extends ConversionContext {
|
|
228
|
-
target: 'webgl';
|
|
229
|
-
precision: 'lowp' | 'mediump' | 'highp';
|
|
230
|
-
version: '100' | '300 es';
|
|
231
|
-
}
|
|
232
|
-
declare const nodeToGLSL: (nodeProxy: X, context?: Partial<GLSLContext>) => string;
|
|
233
|
-
declare const glsl: (fragmentNode: X, options?: {
|
|
234
|
-
precision?: "lowp" | "mediump" | "highp";
|
|
235
|
-
version?: "100" | "300 es";
|
|
236
|
-
uniforms?: Record<string, any>;
|
|
237
|
-
}) => string;
|
|
238
|
-
|
|
239
|
-
interface WGSLContext extends ConversionContext {
|
|
240
|
-
target: 'webgpu';
|
|
241
|
-
}
|
|
242
|
-
declare const nodeToWGSL: (nodeProxy: X, context?: Partial<WGSLContext>) => string;
|
|
243
|
-
declare const wgsl: (fragmentNode: X, options?: {
|
|
244
|
-
uniforms?: Record<string, any>;
|
|
245
|
-
}) => string;
|
|
246
|
-
|
|
247
285
|
declare const is: {
|
|
248
286
|
arr: (arg: any) => arg is any[];
|
|
249
287
|
bol: (a: unknown) => a is boolean;
|
|
@@ -276,7 +314,7 @@ declare const fig: (x?: number) => number;
|
|
|
276
314
|
declare const dig: (x?: number) => number;
|
|
277
315
|
declare const sig: (value?: number, digit?: number) => number;
|
|
278
316
|
|
|
279
|
-
declare const
|
|
317
|
+
declare const createDevice: (c: GPUContext) => Promise<{
|
|
280
318
|
device: any;
|
|
281
319
|
format: any;
|
|
282
320
|
}>;
|
|
@@ -322,7 +360,7 @@ declare const createBufferLayout: (shaderLocation: number, dataLength: number, c
|
|
|
322
360
|
|
|
323
361
|
declare const defaultVertexGLSL = "\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";
|
|
324
362
|
declare const defaultFragmentGLSL = "\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";
|
|
325
|
-
declare const createProgram: (c: WebGLRenderingContext, vs?: string | X, fs?: string | X) => WebGLProgram;
|
|
363
|
+
declare const createProgram: (c: WebGLRenderingContext, vs?: string | X, fs?: string | X) => WebGLProgram | undefined;
|
|
326
364
|
declare const createVbo: (c: WebGLRenderingContext, data: number[]) => WebGLBuffer;
|
|
327
365
|
declare const createIbo: (c: WebGLRenderingContext, data: number[]) => WebGLBuffer;
|
|
328
366
|
declare const getStride: (count: number, value: number[], iboValue?: number[]) => number;
|
|
@@ -396,4 +434,4 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
|
|
|
396
434
|
}): GL;
|
|
397
435
|
}, any[] | unknown[]>;
|
|
398
436
|
|
|
399
|
-
export { Attribute, Attributes,
|
|
437
|
+
export { type Attribute, type Attributes, FUNCTIONS, Fn, type Functions, type GL, type GLClearMode, type GLDrawMode, type GLDrawType, type GPUBindGroup, type GPUBuffer, type GPUContext, type GPUDevice, type GPUPipeline, If, Loop, NODE_TYPES, type NodeConfig, type NodeProps, type NodeProxy, type NodeType, type NodeTypes, OPERATORS, OPERATOR_KEYS, type Operators, type PrecisionMode, SWIZZLES, type Swizzles, TYPE_MAPPING, type Uniform, type Uniforms, type WebGLState, type WebGPUState, type X, abs, acos, alignTo256, all, any, asin, assign, atan, bitcast, bool, bvec2, bvec3, bvec4, cbrt, ceil, clamp, code, cos, createAttrib, createBindGroup, createBufferLayout, createDescriptor, createDevice, createGL, createIbo, createPipeline, createProgram, createTexture, createTextureSampler, createUniformBuffer, createVbo, createVertexBuffer, cross, dFdx, dFdy, createGL as default, defaultFragmentGLSL, defaultVertexGLSL, degrees, difference, dig, distance, dot, each, equals, exp, exp2, ext, f, faceforward, fig, float, floor, flush, fract, fragCoord, fragment, fwidth, getId, getStride, iMouse, iResolution, iTime, inferType, int, inverseSqrt, is, isFunction, isGL, isNodeType, isOperator, isServer, isSwizzle, isWebGPUSupported, ivec2, ivec3, ivec4, joins, length, lengthSq, log, log2, mat2, mat3, mat4, max, min, mix, n, negate, node, normalize, o, oneMinus, pow, pow2, pow3, pow4, radians, reciprocal, reflect, refract, replace, round, s, saturate, sig, sign, sin, smoothstep, sqrt, step, tan, toVar, transformDirection, trunc, u, uint, uvec2, uvec3, uvec4, v, vec2, vec3, vec4, vertex, webgl, webgpu };
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,41 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";var D=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var Se=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},Ae=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pe(t))!Ge.call(e,n)&&n!==r&&D(e,n,{get:()=>t[n],enumerable:!(o=Le(t,n))||o.enumerable});return e};var Fe=e=>Ae(D({},"__esModule",{value:!0}),e);var Tr={};Se(Tr,{FUNCTIONS:()=>V,Fn:()=>qe,If:()=>De,Loop:()=>We,NODE_TYPES:()=>W,OPERATORS:()=>U,OPERATOR_KEYS:()=>q,SWIZZLES:()=>Ce,TYPE_MAPPING:()=>Y,abs:()=>gt,acos:()=>bt,alignTo256:()=>he,all:()=>Xt,any:()=>vt,asin:()=>yt,assign:()=>K,atan:()=>ht,bitcast:()=>Tt,bool:()=>et,bvec2:()=>lt,bvec3:()=>xt,bvec4:()=>dt,cbrt:()=>Et,ceil:()=>wt,clamp:()=>Rt,code:()=>c,cos:()=>_t,createAttrib:()=>te,createBindGroup:()=>ie,createBufferLayout:()=>pe,createDescriptor:()=>ae,createDevice:()=>ne,createGL:()=>we,createIbo:()=>J,createPipeline:()=>se,createProgram:()=>Z,createTexture:()=>re,createTextureSampler:()=>fe,createUniformBuffer:()=>ce,createVbo:()=>Q,createVertexBuffer:()=>ue,cross:()=>Lt,dFdx:()=>Pt,dFdy:()=>Gt,default:()=>hr,defaultFragmentGLSL:()=>ye,defaultVertexGLSL:()=>ve,degrees:()=>St,difference:()=>At,dig:()=>$e,distance:()=>Ft,dot:()=>Ut,each:()=>xe,equals:()=>Nt,exp:()=>zt,exp2:()=>Bt,ext:()=>ze,f:()=>s,faceforward:()=>$t,fig:()=>Be,float:()=>Ze,floor:()=>It,flush:()=>Ue,fract:()=>Ct,fragCoord:()=>He,fragment:()=>G,fwidth:()=>Mt,getId:()=>P,getStride:()=>ee,iMouse:()=>je,iResolution:()=>ke,iTime:()=>Ke,inferType:()=>_,int:()=>Qe,inverseSqrt:()=>Ot,is:()=>x,isFunction:()=>j,isGL:()=>yr,isNodeType:()=>Me,isOperator:()=>k,isServer:()=>Te,isSwizzle:()=>N,isWebGPUSupported:()=>Ee,ivec2:()=>at,ivec3:()=>ut,ivec4:()=>ct,joins:()=>z,length:()=>Dt,lengthSq:()=>Wt,log:()=>qt,log2:()=>Vt,mat2:()=>nt,mat3:()=>st,mat4:()=>it,max:()=>Yt,min:()=>kt,mix:()=>jt,n:()=>d,negate:()=>Kt,node:()=>l,normalize:()=>Ht,o:()=>be,oneMinus:()=>Zt,pow:()=>Qt,pow2:()=>Jt,pow3:()=>er,pow4:()=>tr,radians:()=>rr,reciprocal:()=>or,reflect:()=>nr,refract:()=>sr,replace:()=>Ne,round:()=>ir,s:()=>H,saturate:()=>ar,sig:()=>Ie,sign:()=>ur,sin:()=>cr,smoothstep:()=>fr,sqrt:()=>pr,step:()=>mr,tan:()=>lr,toVar:()=>$,transformDirection:()=>xr,trunc:()=>dr,u:()=>F,uint:()=>Je,uvec2:()=>ft,uvec3:()=>pt,uvec4:()=>mt,v:()=>Ye,vec2:()=>tt,vec3:()=>rt,vec4:()=>ot,vertex:()=>S,webgl:()=>oe,webgpu:()=>me});module.exports=Fe(Tr);var L=require("reev"),M=require("refr");var I=require("reev");var x={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)},xe=(e,t)=>e.forEach(t),Ue=(e,...t)=>{xe(e,r=>r(...t))},Ne=(e="",t="_",r="/")=>e.split(t).join(r),ze=(e=".pdf")=>e.split(".").pop()?.toLowerCase()??"",Be=(e=0)=>`${e}`.split(".")[1]?.length??0,$e=(e=0)=>`${e}`.split(".")[0]?.length-(e<0?1:0),Ie=(e=0,t=-2)=>(t*=-1,t=Math.pow(10,t),e*=t,e=Math.round(e),e/=t,e);var Ce=["x","y","z","w","r","g","b","a","s","t","p","q"],W=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],U={add:"+",sub:"-",mul:"*",div:"/",mod:"%",equal:"==",notEqual:"!=",lessThan:"<",lessThanEqual:"<=",greaterThan:">",greaterThanEqual:">=",and:"&&",or:"||",bitAnd:"&",bitOr:"|",bitXor:"^",shiftLeft:"<<",shiftRight:">>"},q=Object.keys(U),V=["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"],Y={float:"f32",int:"i32",uint:"u32",bool:"bool",vec2:"vec2f",vec3:"vec3f",vec4:"vec4f",mat2:"mat2x2f",mat3:"mat3x3f",mat4:"mat4x4f",ivec2:"vec2i",ivec3:"vec3i",ivec4:"vec4i",uvec2:"vec2u",uvec3:"vec3u",uvec4:"vec4u",bvec2:"vec2<bool>",bvec3:"vec3<bool>",bvec4:"vec4<bool>"};var N=e=>x.str(e)&&/^[xyzwrgbastpq]{1,4}$/.test(e),k=e=>q.includes(e),Me=e=>W.includes(e),j=e=>V.includes(e),Oe=0,P=()=>`i${Oe++}`,z=(e,t)=>e.filter(r=>!x.und(r)&&!x.nul(r)).map(r=>c(r,t)).join(", "),_=(e,t)=>{if(!e||typeof e!="object")return"float";let{type:r,props:o}=e,{children:n=[]}=o,[i,a,f]=n;if(r==="node_type")return i;if(r==="operator"){let v=_(a,t),m=_(f,t);return v===m||v.includes("vec")?v:m.includes("vec")?m:"float"}return r==="math_fun"?["normalize","cross","reflect"].includes(i)?_(n[1],t):(["dot","distance","length"].includes(i),"float"):"float"},de=e=>!e.uniforms||e.uniforms.size===0?"":Array.from(e.uniforms).map((r,o)=>e.isWebGL?`uniform vec2 ${r};`:`@group(0) @binding(${o}) var<uniform> ${r}: vec2f;`).join(`
|
|
2
|
+
`)+`
|
|
3
|
+
`,ge=(e,t,r=!0)=>r?`
|
|
4
|
+
${t}
|
|
5
|
+
#version 300 es
|
|
6
|
+
precision mediump float;
|
|
7
|
+
uniform vec2 iResolution;
|
|
8
|
+
uniform vec2 iMouse;
|
|
9
|
+
uniform float iTime;
|
|
10
|
+
out vec4 fragColor;
|
|
11
|
+
void main() {
|
|
12
|
+
${e}
|
|
13
|
+
}`.trim():`
|
|
14
|
+
@group(0) @binding(0) var<uniform> iResolution: vec2f;
|
|
15
|
+
@group(0) @binding(1) var<uniform> iMouse: vec2f;
|
|
16
|
+
@group(0) @binding(2) var<uniform> iTime: f32;
|
|
17
|
+
${t}
|
|
18
|
+
@fragment
|
|
19
|
+
fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
|
|
20
|
+
${e}
|
|
21
|
+
}`.trim(),G=(e,t)=>{let r=c(e,t),o=de(t);return ge(r,o,t.isWebGL)},S=(e,t)=>{let r=c(e,t),o=de(t);return ge(r,o,t.isWebGL)};var c=(e,t)=>{if(t||(t={}),t.uniforms||(t.uniforms=new Set),x.num(e))return e.toFixed(1);if(x.str(e))return e;if(!e)return"";let{type:r,props:o}=e,{id:n="",children:i=[]}=o,[a,f,v]=i;if(r==="uniform")return t.uniforms.add(n),t.onUniform?.(n,o.defaultValue),n;if(r==="variable")return n;if(r==="swizzle")return`${c(f,t)}.${c(a,t)}`;if(r==="node_type"){if(!x.str(a))return n;let m=!t.isWebGL&&a.startsWith("vec")?`${a}f`:a,X=z(i.slice(1),t);return`${m}(${X})`}if(r==="operator"){if(a==="not"||a==="bitNot")return`!${c(f,t)}`;let m=U[a];return`(${c(f,t)} ${m} ${c(v,t)})`}if(r==="math_fun")return`${a}(${z(i.slice(1),t)})`;if(r==="assign")return`${c(a,t)} = ${c(f,t)};`;if(r==="scope")return i.map(m=>c(m,t)).join(`
|
|
22
|
+
`);if(r==="loop")return`for (int i = 0; i < ${a}; i++) {
|
|
23
|
+
${c(f,t)}
|
|
24
|
+
}`;if(r==="fn"){let m=c(a,t);return f&&(m+=`
|
|
25
|
+
return ${c(f,t)};`),m}if(r==="if"){let m=`if (${c(a,t)}) {
|
|
26
|
+
${c(f,t)}
|
|
27
|
+
}`;for(let X=2;X<i.length;X+=2){let R=X>=i.length-1;m+=R?` else {
|
|
28
|
+
${c(i[X],t)}
|
|
29
|
+
}`:` else if (${c(i[X],t)}) {
|
|
30
|
+
${c(i[X+1],t)}
|
|
31
|
+
}`}return m}if(r==="declare"){let m=_(f,t),X=a?.props?.id;if(t.isWebGL)return`${m} ${X} = ${c(f,t)};`;let R=Y[m];return`var ${X}: ${R} = ${c(f,t)};`}return c(a,t)};var w=null,A=(e,t=()=>{})=>{let r=w;w=e,t(),w=r},B=e=>{w&&(w.props.children||(w.props.children=[]),w.props.children.push(e))},De=(e,t)=>{let r=l("scope");A(r,t);let o=l("if",null,e,r);return B(o),{ElseIf:(n,i)=>{let a=l("scope");A(a,i),o.props.children.push(n,a)},Else:n=>{let i=l("scope");A(i,n),o.props.children.push(i)}}},We=(e,t)=>{let r=l("scope");A(r,()=>t?.({i:l("variable",{id:"i"})}));let o=l("loop",null,e,r);return B(o),o},qe=e=>(...t)=>{let r,o=l("scope");return A(o,()=>r=e(t)),l("fn",null,o,r)},$=e=>t=>{t||(t=P());let r=l("variable",{id:t}),o=l("declare",null,r,e);return B(o),r},K=e=>t=>{let r=l("assign",null,e,t);return B(r),e};var Ve=e=>t=>{if(t==="string")return c(e)},l=(e,t,...r)=>{t||(t={}),r.length&&(t.children=r);let o=new Proxy(()=>{},{get(n,i){return i==="type"?e:i==="props"?t:i==="toVar"?$(o):i==="assign"?K(o):i==="isProxy"?!0:i==="toString"?c.bind(null,o):i===Symbol.toPrimitive?Ve(o):N(i)?H(i,o):k(i)?(...a)=>be(i,o,...a):j(i)?(...a)=>s(i,o,...a):$(o)("")},set(n,i,a){return N(i)?(H(i,o).assign(a),!0):!1}});return o},Ye=(...e)=>l("variable",{id:P()},...e),F=(e,t)=>l("uniform",{defaultValue:t},e),H=(e,t)=>l("swizzle",null,e,t),d=(e,...t)=>l("node_type",null,e,...t),be=(e,...t)=>l("operator",null,e,...t),s=(e,...t)=>l("math_fun",null,e,...t);var ke=F("iResolution",[1280,800]),je=F("iMouse",[0,0]),Ke=F("iTime",0),He=l("variable",{id:"fragCoord"}),Ze=e=>d("float",e),Qe=e=>d("int",e),Je=e=>d("uint",e),et=e=>d("bool",e),tt=(e,t)=>d("vec2",e,t),rt=(e,t,r)=>d("vec3",e,t,r),ot=(e,t,r,o)=>d("vec4",e,t,r,o),nt=(...e)=>d("mat2",...e),st=(...e)=>d("mat3",...e),it=(...e)=>d("mat4",...e),at=(e,t)=>d("ivec2",e,t),ut=(e,t,r)=>d("ivec3",e,t,r),ct=(e,t,r,o)=>d("ivec4",e,t,r,o),ft=(e,t)=>d("uvec2",e,t),pt=(e,t,r)=>d("uvec3",e,t,r),mt=(e,t,r,o)=>d("uvec4",e,t,r,o),lt=(e,t)=>d("bvec2",e,t),xt=(e,t,r)=>d("bvec3",e,t,r),dt=(e,t,r,o)=>d("bvec4",e,t,r,o),gt=e=>s("abs",e),bt=e=>s("acos",e),Xt=e=>s("all",e),vt=e=>s("any",e),yt=e=>s("asin",e),ht=(e,t)=>s("atan",e,t),Tt=(e,t)=>s("bitcast",e,t),Et=e=>s("cbrt",e),wt=e=>s("ceil",e),Rt=(e,t,r)=>s("clamp",e,t,r),_t=e=>s("cos",e),Lt=(e,t)=>s("cross",e,t),Pt=e=>s("dFdx",e),Gt=e=>s("dFdy",e),St=e=>s("degrees",e),At=(e,t)=>s("difference",e,t),Ft=(e,t)=>s("distance",e,t),Ut=(e,t)=>s("dot",e,t),Nt=(e,t)=>s("equals",e,t),zt=e=>s("exp",e),Bt=e=>s("exp2",e),$t=(e,t,r)=>s("faceforward",e,t,r),It=e=>s("floor",e),Ct=e=>s("fract",e),Mt=e=>s("fwidth",e),Ot=e=>s("inverseSqrt",e),Dt=e=>s("length",e),Wt=e=>s("lengthSq",e),qt=e=>s("log",e),Vt=e=>s("log2",e),Yt=(e,t)=>s("max",e,t),kt=(e,t)=>s("min",e,t),jt=(e,t,r)=>s("mix",e,t,r),Kt=e=>s("negate",e),Ht=e=>s("normalize",e),Zt=e=>s("oneMinus",e),Qt=(e,t)=>s("pow",e,t),Jt=e=>s("pow2",e),er=e=>s("pow3",e),tr=e=>s("pow4",e),rr=e=>s("radians",e),or=e=>s("reciprocal",e),nr=(e,t)=>s("reflect",e,t),sr=(e,t,r)=>s("refract",e,t,r),ir=e=>s("round",e),ar=e=>s("saturate",e),ur=e=>s("sign",e),cr=e=>s("sin",e),fr=(e,t,r)=>s("smoothstep",e,t,r),pr=e=>s("sqrt",e),mr=(e,t)=>s("step",e,t),lr=e=>s("tan",e),xr=(e,t)=>s("transformDirection",e,t),dr=e=>s("trunc",e);var ve=`
|
|
13
32
|
#version 300 es
|
|
14
33
|
void main() {
|
|
15
34
|
float x = float(gl_VertexID % 2) * 4.0 - 1.0;
|
|
16
35
|
float y = float(gl_VertexID / 2) * 4.0 - 1.0;
|
|
17
36
|
gl_Position = vec4(x, y, 0.0, 1.0);
|
|
18
37
|
}
|
|
19
|
-
`,
|
|
38
|
+
`,ye=`
|
|
20
39
|
#version 300 es
|
|
21
40
|
precision mediump float;
|
|
22
41
|
uniform vec2 iResolution;
|
|
@@ -24,25 +43,19 @@ out vec4 fragColor;
|
|
|
24
43
|
void main() {
|
|
25
44
|
fragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
|
|
26
45
|
}
|
|
27
|
-
`,
|
|
28
|
-
`}),r+=`
|
|
29
|
-
`),r+=`@fragment
|
|
30
|
-
`,r+=`fn main() -> @location(0) vec4<f32> {
|
|
31
|
-
`;let n=be(e);return r+=` return ${n};
|
|
32
|
-
`,r+=`}
|
|
33
|
-
`,r},ke=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 Ye=`
|
|
46
|
+
`,Xe=(e,t,r)=>{let o=e.createShader(r);if(!o)throw new Error("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let n=e.getShaderInfoLog(o);e.deleteShader(o),console.warn(`Could not compile shader: ${n}`)},Z=(e,t=ve,r=ye)=>{x.str(r)||(r=G(r,{isWebGL:!0})),x.str(t)||(t=S(r,{isWebGL:!0}));let o=e.createProgram(),n=Xe(e,t,e.VERTEX_SHADER),i=Xe(e,r,e.FRAGMENT_SHADER);if(!n||!i)return;if(e.attachShader(o,n),e.attachShader(o,i),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let a=e.getProgramInfoLog(o);e.deleteProgram(o),console.warn(`Could not link pg: ${a}`)},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},J=(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},ee=(e,t,r)=>{r&&(e=Math.max(...r)+1);let o=t.length/e;return Math.floor(o)},te=(e,t,r,o,n)=>{e.bindBuffer(e.ARRAY_BUFFER,o),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,t,e.FLOAT,!1,0,0),n&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)},re=(e,t,r,o)=>{let n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,o),e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,n)};var oe=async e=>{let t=e.el.getContext("webgl2"),r=Z(t,e.vs,e.fs),o={context:t,program:r};t.useProgram(r);let n=0,i=(0,I.nested)(y=>t.getUniformLocation(r,y)),a=(0,I.nested)(y=>t.getAttribLocation(r,y)),f=(0,I.nested)(()=>n++);return{webgl:o,render:()=>{t.clear(t.COLOR_BUFFER_BIT),t.viewport(0,0,...e.size),t.drawArrays(t.TRIANGLES,0,3)},clean:()=>t.deleteProgram(r),_attribute:(y="",h,T)=>{let E=a(y,!0),b=Q(t,h),u=J(t,T),p=ee(e.count,h,T);te(t,p,E,b,u)},_uniform:(y,h)=>{let T=i(y);if(x.num(h))return t.uniform1f(T,h);let E=h.length;if(E<=4)return t[`uniform${E}fv`](T,h);E=Math.sqrt(E)<<0,t[`uniformMatrix${E}fv`](T,!1,h)},_texture:(y,h)=>{let T=new Image;Object.assign(T,{src:h,crossOrigin:"anonymous"}),T.decode().then(()=>{let E=i(y),b=f(y);re(t,T,E,b)})}}};var C=require("reev");var gr=`
|
|
34
47
|
@vertex
|
|
35
48
|
fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
|
|
36
49
|
let x = f32(vertex_index % 2u) * 4.0 - 1.0;
|
|
37
50
|
let y = f32(vertex_index / 2u) * 4.0 - 1.0;
|
|
38
51
|
return vec4f(x, y, 0.0, 1.0);
|
|
39
52
|
}
|
|
40
|
-
`,
|
|
53
|
+
`,br=`
|
|
41
54
|
@group(0) @binding(0) var<uniform> iResolution: vec2f;
|
|
42
55
|
|
|
43
56
|
@fragment
|
|
44
57
|
fn main(@builtin(position) position: vec4f) -> @location(0) vec4f {
|
|
45
58
|
return vec4f(position.xy / iResolution, 0.0, 1.0);
|
|
46
59
|
}
|
|
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}},Y=(e,t,r,n,o=Ye,a=He)=>{i.obj(a)&&(a=R(a)),i.obj(o)&&(o=R(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"}})},H=(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}},K=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),xe=e=>Math.ceil(e/256)*256,Z=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:n}},Q=(e,t)=>{let r=new Float32Array(t),n=xe(r.byteLength),o=e.createBuffer({size:n,usage:72});return{array:r,buffer:o}},J=(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}},Ke=(e,t)=>e/t,Ze=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",ee=(e,t,r=6)=>{let n=Ke(t,r);return{arrayStride:n*4,attributes:[{shaderLocation:e,offset:0,format:Ze(n)}]}};var te=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=(0,_.nested)((l,f)=>{let{array:c,buffer:m}=Z(r,f);return u.push(m),p.push(ee(p.length,c.length,e.count)),o.needsUpdate=!0,{array:c,buffer:m}}),E=(0,_.nested)((l,f)=>{let{array:c,buffer:m}=Q(r,f);return o.resources[0].push({buffer:m}),o.needsUpdate=!0,{array:c,buffer:m}}),d=(0,_.nested)((l,{width:f,height:c})=>{let{texture:m,sampler:B}=J(r,f,c);return o.resources[1].push(B,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}=H(r,f);l.push(c),a.push(m)}),o.pipeline=Y(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(K(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:B,height:Se}=d(l,c);r.queue.copyExternalImageToTexture({source:c},{texture:m},{width:B,height:Se}),o.loadingImg--})}}};var Qe=["float","int","uint","bool","color","vec2","vec3","vec4","mat2","mat3","mat4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","bvec2","bvec3","bvec4"],re=["x","y","z","w","r","g","b","a","s","t","p","q"],ne=["add","sub","mul","div","mod","equal","notEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","and","or","not","assign","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight"],oe=["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"],ie=[!0,!1],ae=[0,1,2,3,4,5],se=[0,1,.5,2];var ue=new Map,fe=new Map,ce=new Map,Je=()=>{ie.forEach(e=>{ue.set(e,s("bool",e))}),ae.forEach(e=>{fe.set(e,s("int",e))}),se.forEach(e=>{ce.set(e,s("float",e))})},U=e=>(ue.has(e)||Je(),ue.get(e)||s("bool",e)),X=e=>fe.has(e)?fe.get(e):s("int",e),A=e=>ce.has(e)?ce.get(e):s("float",e),et=e=>{let t=new Map,r=new Map;return e.forEach(n=>{let o=tt(n);r.has(o)?(t.has(o)||t.set(o,[r.get(o)]),t.get(o).push(n)):r.set(o,n)}),t},tt=e=>[e.type,`${e.value}`,e.property||""].join("|");var rt=e=>i.bol(e)?U(e):i.num(e)?i.int(e)?X(e):A(e):i.arr(e)?ye(e):i.obj(e)?nt(e):s("float",0),ye=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])},nt=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),ye(t)}return s("float",0)},F=e=>i.num(e)?A(e):s("float",Number(e)),ot=e=>i.num(e)&&Number.isInteger(e)?X(e):s("int",Math.floor(Number(e))),it=e=>U(!!e),at=(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)]),Te=(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)]),st=(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)]),ut=(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]):Te(e,t,r)};var ft=0,ct=()=>`node_${++ft}`,S=(e,t,r)=>({id:ct(),type:e,value:t,children:[],...r}),pt=(e="")=>re.includes(e),mt=(e="")=>ne.includes(e),lt=(e="")=>oe.includes(e),P=(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:pt(a)?P(S(dt(a),void 0,{parent:e,property:a}),t):mt(a)?(...u)=>P(S(e.type,void 0,{operator:a,children:[e,...u]}),t):lt(a)?(...u)=>P(S(gt(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})},dt=e=>e.length===1?"float":e.length===2?"vec2":e.length===3?"vec3":e.length===4?"vec4":"float",gt=(e,t)=>e==="length"?"float":t,s=(e,t,r)=>{let n=S(e,t,r);return P(n)};var ht=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=ht(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},ve=v(0),Ee=v(0),$e=v(0),gr=v([1920,1080]),hr=v([0,0]),bt=e=>{if(e.time!==void 0){let t=ve.value||0;ve.set(e.time),Ee.set(t),$e.set(e.time-t)}};var xt=e=>{let t=(...r)=>{let n=r.map(a=>i.obj(a)&&"type"in a&&a.type?a:F(a));return e(n)||F(0)};return t.call=r=>e(r),t},yt=(e,t)=>{t();let r={ElseIf(n,o){return o(),r},Else(n){n()}};return r},Tt=s("vec4",void 0),vt=s("vec4",void 0),Et=v(0),$t=v([1920,1080]),wt=v([0,0]),Lt=e=>e.abs(),Nt=e=>e.sin(),St=e=>e.cos(),Ct=e=>e.tan(),Gt=e=>e.sqrt(),Rt=e=>e.floor(),_t=e=>e.ceil(),Ut=e=>e.fract(),Xt=e=>e.normalize(),At=e=>e.length();var Ft=e=>i.obj(e)?"isGL"in e:!1,we=()=>typeof window>"u",Le=()=>we()?!1:"gpu"in navigator,pe=performance.now(),Ne=e=>{let t=(0,w.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=(0,M.createQueue)(),t.frame=(0,M.createFrame)(),t.attribute=(0,w.durable)((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o))),t.texture=(0,w.durable)((r,n)=>t.queue(()=>t._texture?.(r,n))),t.uniform=(0,w.durable)((r,n,o)=>t.queue(()=>t._uniform?.(r,n,o))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:pe}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Le()||(t.isWebGL=!0),t.isWebGL?t(await j(t)):t(await te(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",()=>{pe=performance.now()/1e3,t.uniform("iTime",pe)}),t(e)},Pt=Ne;0&&(module.exports={CACHE_BOOLS,CACHE_FLOATS,CACHE_INTS,FUNCTIONS,Fn,If,OPERATORS,SWIZZLES,TYPES,abs,alignTo256,bool,ceil,color,convertToNode,cos,createAttrib,createBindGroup,createBufferLayout,createDescriptor,createDevive,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});
|
|
60
|
+
`,ne=async e=>{let t=navigator.gpu,r=t.getPreferredCanvasFormat(),n=await(await t.requestAdapter()).requestDevice();return e.configure({device:n,format:r,alphaMode:"opaque"}),{device:n,format:r}},se=(e,t,r,o,n=gr,i=br)=>{x.str(i)||(i=G(i,{isWebGL:!1})),x.str(n)||(n=S(n,{isWebGL:!1}));let a=e.createPipelineLayout({bindGroupLayouts:o});return e.createRenderPipeline({vertex:{module:e.createShaderModule({code:n.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({code:i.trim()}),entryPoint:"main",targets:[{format:t}]},layout:a,primitive:{topology:"triangle-list"}})},ie=(e,t)=>{let r=[],o=[];t.forEach((a,f)=>{if(!a)return;let v="buffer"in a,m=a instanceof GPUTextureView,X=a instanceof GPUSampler;if(v)r.push({binding:f,visibility:3,buffer:{type:"uniform"}});else if(m)r.push({binding:f,visibility:2,texture:{}});else if(X)r.push({binding:f,visibility:2,sampler:{}});else return;o.push({binding:f,resource:a})});let n=e.createBindGroupLayout({entries:r}),i=e.createBindGroup({layout:n,entries:o});return{layout:n,bindGroup:i}},ae=e=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),he=e=>Math.ceil(e/256)*256,ue=(e,t)=>{let r=new Float32Array(t),o=e.createBuffer({size:r.byteLength,usage:40});return{array:r,buffer:o}},ce=(e,t)=>{let r=new Float32Array(t),o=he(r.byteLength),n=e.createBuffer({size:o,usage:72});return{array:r,buffer:n}},fe=(e,t=1280,r=800)=>{let o=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),n=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:o,sampler:n}},Xr=(e,t)=>e/t,vr=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",pe=(e,t,r=6)=>{let o=Xr(t,r);return{arrayStride:o*4,attributes:[{shaderLocation:e,offset:0,format:vr(o)}]}};var me=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:o}=await ne(t),n={device:r,context:t,resources:[[],[]],loadingImg:0,needsUpdate:!0},i=[],a=[],f=[],v=(0,C.nested)((b,u)=>{let{array:p,buffer:g}=ue(r,u);return a.push(g),f.push(pe(f.length,p.length,e.count)),n.needsUpdate=!0,{array:p,buffer:g}}),m=(0,C.nested)((b,u)=>{let{array:p,buffer:g}=ce(r,u);return n.resources[0].push({buffer:g}),n.needsUpdate=!0,{array:p,buffer:g}}),X=(0,C.nested)((b,{width:u,height:p})=>{let{texture:g,sampler:O}=fe(r,u,p);return n.resources[1].push(O,g.createView()),n.needsUpdate=!0,{texture:g,width:u,height:p}}),R=()=>{let b=[];i.length=0,n.resources.forEach(u=>{if(!u.length)return;let{layout:p,bindGroup:g}=ie(r,u);b.push(p),i.push(g)}),n.pipeline=se(r,o,f,b,e.vs,e.fs)};return{webgpu:n,render:()=>{if(n.loadingImg)return;n.needsUpdate&&R(),n.needsUpdate=!1;let b=r.createCommandEncoder(),u=b.beginRenderPass(ae(t));u.setPipeline(n.pipeline),i.forEach((p,g)=>u.setBindGroup(g,p)),a.forEach((p,g)=>u.setVertexBuffer(g,p)),u.draw(e.count,1,0,0),u.end(),r.queue.submit([b.finish()])},clean:()=>{},_attribute:(b="",u)=>{let{array:p,buffer:g}=v(b,u);r.queue.writeBuffer(g,0,p)},_uniform:(b,u)=>{x.num(u)&&(u=[u]);let{array:p,buffer:g}=m(b,u);p.set(u),r.queue.writeBuffer(g,0,p)},_texture:(b,u)=>{n.loadingImg++;let p=Object.assign(new Image,{src:u,crossOrigin:"anonymous"});p.decode().then(()=>{let{texture:g,width:O,height:_e}=X(b,p);r.queue.copyExternalImageToTexture({source:p},{texture:g},{width:O,height:_e}),n.loadingImg--})}}};var yr=e=>x.obj(e)?"isGL"in e:!1,Te=()=>typeof window>"u",Ee=()=>Te()?!1:"gpu"in navigator,le=performance.now(),we=e=>{let t=(0,L.event)({isNative:!1,isWebGL:!0,isLoop:!0,isGL:!0,size:[0,0],mouse:[0,0],count:6,webgl:{},webgpu:{}});return t.queue=(0,M.createQueue)(),t.frame=(0,M.createFrame)(),t.attribute=(0,L.durable)((r,o,n)=>t.queue(()=>t._attribute?.(r,o,n))),t.texture=(0,L.durable)((r,o)=>t.queue(()=>t._texture?.(r,o))),t.uniform=(0,L.durable)((r,o,n)=>t.queue(()=>t._uniform?.(r,o,n))),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:le}),t("mount",async()=>{t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,Ee()||(t.isWebGL=!0),t.isWebGL?t(await oe(t)):t(await me(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,o=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=o,t.uniform("iResolution",t.size)}),t("mousemove",(r,o=r.clientX,n=r.clientY)=>{let[i,a]=t.size,{top:f,left:v}=t.el.getBoundingClientRect();t.mouse[0]=(o-f-i/2)/(i/2),t.mouse[1]=-(n-v-a/2)/(a/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{le=performance.now()/1e3,t.uniform("iTime",le)}),t(e)},hr=we;0&&(module.exports={FUNCTIONS,Fn,If,Loop,NODE_TYPES,OPERATORS,OPERATOR_KEYS,SWIZZLES,TYPE_MAPPING,abs,acos,alignTo256,all,any,asin,assign,atan,bitcast,bool,bvec2,bvec3,bvec4,cbrt,ceil,clamp,code,cos,createAttrib,createBindGroup,createBufferLayout,createDescriptor,createDevice,createGL,createIbo,createPipeline,createProgram,createTexture,createTextureSampler,createUniformBuffer,createVbo,createVertexBuffer,cross,dFdx,dFdy,defaultFragmentGLSL,defaultVertexGLSL,degrees,difference,dig,distance,dot,each,equals,exp,exp2,ext,f,faceforward,fig,float,floor,flush,fract,fragCoord,fragment,fwidth,getId,getStride,iMouse,iResolution,iTime,inferType,int,inverseSqrt,is,isFunction,isGL,isNodeType,isOperator,isServer,isSwizzle,isWebGPUSupported,ivec2,ivec3,ivec4,joins,length,lengthSq,log,log2,mat2,mat3,mat4,max,min,mix,n,negate,node,normalize,o,oneMinus,pow,pow2,pow3,pow4,radians,reciprocal,reflect,refract,replace,round,s,saturate,sig,sign,sin,smoothstep,sqrt,step,tan,toVar,transformDirection,trunc,u,uint,uvec2,uvec3,uvec4,v,vec2,vec3,vec4,vertex,webgl,webgpu});
|
|
48
61
|
//# sourceMappingURL=index.js.map
|