glre 0.38.0 → 0.40.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 +8 -4
- package/dist/addons.cjs +2 -0
- package/dist/addons.cjs.map +1 -0
- package/dist/addons.d.ts +1287 -0
- package/dist/addons.js +2 -0
- package/dist/addons.js.map +1 -0
- package/dist/index.cjs +31 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +187 -323
- package/dist/index.js +31 -43
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +1 -48
- package/dist/native.cjs.map +1 -1
- package/dist/native.d.ts +536 -10
- package/dist/native.js +1 -48
- package/dist/native.js.map +1 -1
- package/dist/node.cjs +69 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.ts +626 -0
- package/dist/node.js +69 -0
- package/dist/node.js.map +1 -0
- package/dist/react.cjs +1 -48
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.ts +524 -4
- package/dist/react.js +1 -48
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +1 -48
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.ts +524 -4
- package/dist/solid.js +1 -48
- package/dist/solid.js.map +1 -1
- package/package.json +64 -11
- package/src/addons/animation/easing/backIn.ts +10 -0
- package/src/addons/animation/easing/backInOut.ts +12 -0
- package/src/addons/animation/easing/backOut.ts +10 -0
- package/src/addons/animation/easing/bounceIn.ts +10 -0
- package/src/addons/animation/easing/bounceInOut.ts +13 -0
- package/src/addons/animation/easing/bounceOut.ts +30 -0
- package/src/addons/animation/easing/circularIn.ts +9 -0
- package/src/addons/animation/easing/circularInOut.ts +11 -0
- package/src/addons/animation/easing/circularOut.ts +9 -0
- package/src/addons/animation/easing/cubicIn.ts +9 -0
- package/src/addons/animation/easing/cubicInOut.ts +11 -0
- package/src/addons/animation/easing/cubicOut.ts +10 -0
- package/src/addons/animation/easing/elasticIn.ts +10 -0
- package/src/addons/animation/easing/elasticInOut.ts +21 -0
- package/src/addons/animation/easing/elasticOut.ts +12 -0
- package/src/addons/animation/easing/exponentialIn.ts +9 -0
- package/src/addons/animation/easing/exponentialInOut.ts +13 -0
- package/src/addons/animation/easing/exponentialOut.ts +9 -0
- package/src/addons/animation/easing/index.ts +33 -0
- package/src/addons/animation/easing/linearIn.ts +9 -0
- package/src/addons/animation/easing/linearInOut.ts +9 -0
- package/src/addons/animation/easing/linearOut.ts +9 -0
- package/src/addons/animation/easing/quadraticIn.ts +9 -0
- package/src/addons/animation/easing/quadraticInOut.ts +10 -0
- package/src/addons/animation/easing/quadraticOut.ts +9 -0
- package/src/addons/animation/easing/quarticIn.ts +9 -0
- package/src/addons/animation/easing/quarticInOut.ts +11 -0
- package/src/addons/animation/easing/quarticOut.ts +10 -0
- package/src/addons/animation/easing/quinticIn.ts +9 -0
- package/src/addons/animation/easing/quinticInOut.ts +11 -0
- package/src/addons/animation/easing/quinticOut.ts +9 -0
- package/src/addons/animation/easing/sineIn.ts +10 -0
- package/src/addons/animation/easing/sineInOut.ts +10 -0
- package/src/addons/animation/easing/sineOut.ts +10 -0
- package/src/addons/color/palette/macbeth.ts +42 -0
- package/src/addons/color/space/cmyk2rgb.ts +12 -0
- package/src/addons/color/space/gamma2linear.ts +19 -0
- package/src/addons/color/space/hsl2rgb.ts +20 -0
- package/src/addons/color/space/hsv2rgb.ts +18 -0
- package/src/addons/color/space/hue2rgb.ts +12 -0
- package/src/addons/color/space/index.ts +29 -0
- package/src/addons/color/space/lab2lch.ts +22 -0
- package/src/addons/color/space/lab2rgb.ts +19 -0
- package/src/addons/color/space/lab2xyz.ts +32 -0
- package/src/addons/color/space/lch2lab.ts +21 -0
- package/src/addons/color/space/lch2rgb.ts +22 -0
- package/src/addons/color/space/linear2gamma.ts +19 -0
- package/src/addons/color/space/oklab2rgb.ts +35 -0
- package/src/addons/color/space/rgb2cmyk.ts +13 -0
- package/src/addons/color/space/rgb2hcv.ts +29 -0
- package/src/addons/color/space/rgb2hsl.ts +23 -0
- package/src/addons/color/space/rgb2hsv.ts +36 -0
- package/src/addons/color/space/rgb2hue.ts +29 -0
- package/src/addons/color/space/rgb2lab.ts +19 -0
- package/src/addons/color/space/rgb2lch.ts +22 -0
- package/src/addons/color/space/rgb2oklab.ts +45 -0
- package/src/addons/color/space/rgb2srgb.ts +34 -0
- package/src/addons/color/space/rgb2xyz.ts +20 -0
- package/src/addons/color/space/rgb2yiq.ts +22 -0
- package/src/addons/color/space/rgb2yuv.ts +32 -0
- package/src/addons/color/space/srgb2rgb.ts +34 -0
- package/src/addons/color/space/xyz2lab.ts +27 -0
- package/src/addons/color/space/xyz2rgb.ts +30 -0
- package/src/addons/color/space/yiq2rgb.ts +22 -0
- package/src/addons/color/space/yuv2rgb.ts +32 -0
- package/src/addons/draw/arrows.ts +75 -0
- package/src/addons/draw/axis.ts +57 -0
- package/src/addons/draw/bridge.ts +81 -0
- package/src/addons/draw/char.ts +30 -0
- package/src/addons/draw/circle.ts +29 -0
- package/src/addons/draw/fill.ts +25 -0
- package/src/addons/draw/flip.ts +45 -0
- package/src/addons/draw/hex.ts +29 -0
- package/src/addons/draw/index.ts +13 -0
- package/src/addons/draw/line.ts +16 -0
- package/src/addons/draw/point.ts +30 -0
- package/src/addons/draw/rect.ts +52 -0
- package/src/addons/draw/stroke.ts +31 -0
- package/src/addons/draw/tri.ts +29 -0
- package/src/addons/generative/cnoise.ts +239 -0
- package/src/addons/generative/curl.ts +64 -0
- package/src/addons/generative/fbm.ts +69 -0
- package/src/addons/generative/gerstnerWave.ts +21 -0
- package/src/addons/generative/gnoise.ts +113 -0
- package/src/addons/generative/index.ts +15 -0
- package/src/addons/generative/noised.ts +139 -0
- package/src/addons/generative/pnoise.ts +249 -0
- package/src/addons/generative/psrdnoise.ts +277 -0
- package/src/addons/generative/random.ts +136 -0
- package/src/addons/generative/snoise.ts +199 -0
- package/src/addons/generative/srandom.ts +90 -0
- package/src/addons/generative/voronoi.ts +134 -0
- package/src/addons/generative/voronoise.ts +69 -0
- package/src/addons/generative/wavelet.ts +77 -0
- package/src/addons/generative/worley.ts +99 -0
- package/src/addons/geometry/aabb/aabb.ts +8 -0
- package/src/addons/geometry/aabb/centroid.ts +10 -0
- package/src/addons/geometry/aabb/contain.ts +19 -0
- package/src/addons/geometry/aabb/diagonal.ts +10 -0
- package/src/addons/geometry/aabb/expand.ts +16 -0
- package/src/addons/geometry/aabb/index.ts +7 -0
- package/src/addons/geometry/aabb/intersect.ts +20 -0
- package/src/addons/geometry/aabb/square.ts +17 -0
- package/src/addons/geometry/index.ts +2 -0
- package/src/addons/geometry/triangle/area.ts +10 -0
- package/src/addons/geometry/triangle/barycentric.ts +50 -0
- package/src/addons/geometry/triangle/centroid.ts +10 -0
- package/src/addons/geometry/triangle/closestPoint.ts +85 -0
- package/src/addons/geometry/triangle/contain.ts +19 -0
- package/src/addons/geometry/triangle/distanceSq.ts +38 -0
- package/src/addons/geometry/triangle/index.ts +10 -0
- package/src/addons/geometry/triangle/intersect.ts +49 -0
- package/src/addons/geometry/triangle/normal.ts +12 -0
- package/src/addons/geometry/triangle/signedDistance.ts +31 -0
- package/src/addons/geometry/triangle/triangle.ts +9 -0
- package/src/addons/index.ts +8 -0
- package/src/addons/lighting/ray.ts +8 -0
- package/src/addons/math/aafloor.ts +13 -0
- package/src/addons/math/aafract.ts +38 -0
- package/src/addons/math/aamirror.ts +12 -0
- package/src/addons/math/aastep.ts +14 -0
- package/src/addons/math/absi.ts +9 -0
- package/src/addons/math/adaptiveThreshold.ts +24 -0
- package/src/addons/math/bump.ts +20 -0
- package/src/addons/math/const.ts +19 -0
- package/src/addons/math/cubic.ts +101 -0
- package/src/addons/math/cubicMix.ts +49 -0
- package/src/addons/math/decimate.ts +12 -0
- package/src/addons/math/dist.ts +143 -0
- package/src/addons/math/fcos.ts +11 -0
- package/src/addons/math/frac.ts +9 -0
- package/src/addons/math/gain.ts +14 -0
- package/src/addons/math/gaussian.ts +14 -0
- package/src/addons/math/grad4.ts +19 -0
- package/src/addons/math/hammersley.ts +54 -0
- package/src/addons/math/highPass.ts +12 -0
- package/src/addons/math/index.ts +63 -0
- package/src/addons/math/inside.ts +68 -0
- package/src/addons/math/invCubic.ts +9 -0
- package/src/addons/math/invQuartic.ts +9 -0
- package/src/addons/math/inverse.ts +9 -0
- package/src/addons/math/lengthSq.ts +10 -0
- package/src/addons/math/map.ts +27 -0
- package/src/addons/math/mirror.ts +12 -0
- package/src/addons/math/mmax.ts +27 -0
- package/src/addons/math/mmin.ts +28 -0
- package/src/addons/math/mmix.ts +47 -0
- package/src/addons/math/mod2.ts +44 -0
- package/src/addons/math/mod289.ts +46 -0
- package/src/addons/math/modi.ts +15 -0
- package/src/addons/math/nyquist.ts +15 -0
- package/src/addons/math/pack.ts +15 -0
- package/src/addons/math/parabola.ts +12 -0
- package/src/addons/math/permute.ts +42 -0
- package/src/addons/math/pow2.ts +10 -0
- package/src/addons/math/pow3.ts +9 -0
- package/src/addons/math/pow5.ts +10 -0
- package/src/addons/math/pow7.ts +12 -0
- package/src/addons/math/powFast.ts +18 -0
- package/src/addons/math/quartic.ts +15 -0
- package/src/addons/math/quat/index.ts +14 -0
- package/src/addons/math/quat/quat2mat3.ts +28 -0
- package/src/addons/math/quat/quat2mat4.ts +16 -0
- package/src/addons/math/quat/quatAdd.ts +18 -0
- package/src/addons/math/quat/quatConj.ts +14 -0
- package/src/addons/math/quat/quatDiv.ts +18 -0
- package/src/addons/math/quat/quatIdentity.ts +9 -0
- package/src/addons/math/quat/quatInverse.ts +17 -0
- package/src/addons/math/quat/quatLength.ts +15 -0
- package/src/addons/math/quat/quatLengthSq.ts +14 -0
- package/src/addons/math/quat/quatLerp.ts +40 -0
- package/src/addons/math/quat/quatMul.ts +38 -0
- package/src/addons/math/quat/quatNeg.ts +14 -0
- package/src/addons/math/quat/quatNorm.ts +16 -0
- package/src/addons/math/quat/quatSub.ts +18 -0
- package/src/addons/math/quintic.ts +16 -0
- package/src/addons/math/rotate2d.ts +16 -0
- package/src/addons/math/rotate3d.ts +37 -0
- package/src/addons/math/rotate3dX.ts +20 -0
- package/src/addons/math/rotate3dY.ts +20 -0
- package/src/addons/math/rotate3dZ.ts +20 -0
- package/src/addons/math/rotate4d.ts +41 -0
- package/src/addons/math/rotate4dX.ts +21 -0
- package/src/addons/math/rotate4dY.ts +16 -0
- package/src/addons/math/rotate4dZ.ts +21 -0
- package/src/addons/math/saturateMediump.ts +11 -0
- package/src/addons/math/scale2d.ts +44 -0
- package/src/addons/math/scale3d.ts +17 -0
- package/src/addons/math/scale4d.ts +50 -0
- package/src/addons/math/smootherstep.ts +16 -0
- package/src/addons/math/taylorInvSqrt.ts +9 -0
- package/src/addons/math/toMat3.ts +14 -0
- package/src/addons/math/toMat4.ts +14 -0
- package/src/addons/math/translate4d.ts +31 -0
- package/src/addons/math/unpack.ts +88 -0
- package/src/addons/sdf/boxSDF.ts +24 -0
- package/src/addons/sdf/circleSDF.ts +20 -0
- package/src/addons/sdf/crossSDF.ts +17 -0
- package/src/addons/sdf/hexSDF.ts +18 -0
- package/src/addons/sdf/index.ts +7 -0
- package/src/addons/sdf/lineSDF.ts +33 -0
- package/src/addons/sdf/rectSDF.ts +46 -0
- package/src/addons/sdf/sphereSDF.ts +20 -0
- package/src/addons/sdf/triSDF.ts +14 -0
- package/src/addons/space/aspect.ts +14 -0
- package/src/addons/space/bracketing.ts +44 -0
- package/src/addons/space/brickTile.ts +44 -0
- package/src/addons/space/cart2polar.ts +20 -0
- package/src/addons/space/center.ts +32 -0
- package/src/addons/space/checkerTile.ts +41 -0
- package/src/addons/space/depth2viewZ.ts +43 -0
- package/src/addons/space/displace.ts +55 -0
- package/src/addons/space/equirect2xyz.ts +17 -0
- package/src/addons/space/eulerView.ts +19 -0
- package/src/addons/space/fisheye2xyz.ts +18 -0
- package/src/addons/space/flipY.ts +25 -0
- package/src/addons/space/hexTile.ts +18 -0
- package/src/addons/space/index.ts +38 -0
- package/src/addons/space/kaleidoscope.ts +48 -0
- package/src/addons/space/linearizeDepth.ts +17 -0
- package/src/addons/space/lookAt.ts +49 -0
- package/src/addons/space/lookAtView.ts +40 -0
- package/src/addons/space/mirrorTile.ts +73 -0
- package/src/addons/space/nearest.ts +13 -0
- package/src/addons/space/orthographic.ts +25 -0
- package/src/addons/space/parallaxMapping.ts +149 -0
- package/src/addons/space/perspective.ts +24 -0
- package/src/addons/space/polar2cart.ts +24 -0
- package/src/addons/space/ratio.ts +14 -0
- package/src/addons/space/rotate.ts +37 -0
- package/src/addons/space/rotateX.ts +54 -0
- package/src/addons/space/rotateY.ts +54 -0
- package/src/addons/space/rotateZ.ts +54 -0
- package/src/addons/space/scale.ts +13 -0
- package/src/addons/space/sprite.ts +16 -0
- package/src/addons/space/sqTile.ts +20 -0
- package/src/addons/space/tbn.ts +26 -0
- package/src/addons/space/translate.ts +12 -0
- package/src/addons/space/triTile.ts +32 -0
- package/src/addons/space/uncenter.ts +32 -0
- package/src/addons/space/unratio.ts +12 -0
- package/src/addons/space/viewZ2depth.ts +25 -0
- package/src/addons/space/windmillTile.ts +58 -0
- package/src/addons/space/xyz2equirect.ts +10 -0
- package/src/index.ts +10 -23
- package/src/node/build.ts +127 -0
- package/src/node/create.ts +76 -0
- package/src/node/index.ts +64 -49
- package/src/node/scope.ts +66 -62
- package/src/node/types.ts +221 -187
- package/src/node/utils/const.ts +74 -13
- package/src/node/utils/index.ts +19 -14
- package/src/node/utils/infer.ts +32 -34
- package/src/node/utils/parse.ts +48 -24
- package/src/node/utils/utils.ts +52 -29
- package/src/types.ts +11 -6
- package/src/utils/helpers.ts +56 -0
- package/src/utils/pipeline.ts +24 -8
- package/src/utils/program.ts +62 -38
- package/src/{webgl.ts → utils/webgl.ts} +46 -30
- package/src/{webgpu.ts → utils/webgpu.ts} +22 -17
- package/src/node/core.ts +0 -121
- package/src/node/node.ts +0 -65
package/src/node/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CONSTANTS, CONVERSIONS, FUNCTIONS, OPERATOR_KEYS } from './utils/const'
|
|
1
|
+
import { CONSTANTS, CONVERSIONS, FUNCTIONS, OPERATOR_KEYS, OPERATOR_TYPE_RULES } from './utils/const'
|
|
2
2
|
import type { GL } from '../types'
|
|
3
3
|
|
|
4
4
|
export type Constants = (typeof CONSTANTS)[number] | 'void'
|
|
@@ -11,24 +11,32 @@ export type Operators = (typeof OPERATOR_KEYS)[number]
|
|
|
11
11
|
*/
|
|
12
12
|
export interface FnLayout {
|
|
13
13
|
name: string
|
|
14
|
-
type:
|
|
14
|
+
type: C | 'auto'
|
|
15
15
|
inputs?: Array<{
|
|
16
16
|
name: string
|
|
17
|
-
type:
|
|
17
|
+
type: C | 'auto'
|
|
18
18
|
}>
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export interface FnType<T extends
|
|
21
|
+
export interface FnType<T extends X | Struct | void, Args extends any[]> {
|
|
22
22
|
(...args: Args): T extends void ? Void : T
|
|
23
|
+
getLayout(): FnLayout
|
|
23
24
|
setLayout(layout: FnLayout): FnType<T, Args>
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
export type StructFields = Record<string, X>
|
|
28
|
+
|
|
29
|
+
export interface StructFactory<T extends StructFields> {
|
|
30
|
+
(initialValues?: StructFields, instanceId?: string): Struct<T>
|
|
31
|
+
}
|
|
32
|
+
|
|
26
33
|
/**
|
|
27
34
|
* node
|
|
28
35
|
*/
|
|
29
36
|
export type NodeTypes =
|
|
30
37
|
// headers
|
|
31
38
|
| 'attribute'
|
|
39
|
+
| 'instance'
|
|
32
40
|
| 'storage'
|
|
33
41
|
| 'uniform'
|
|
34
42
|
| 'constant'
|
|
@@ -55,6 +63,8 @@ export type NodeTypes =
|
|
|
55
63
|
| 'switch'
|
|
56
64
|
| 'declare'
|
|
57
65
|
| 'return'
|
|
66
|
+
| 'break'
|
|
67
|
+
| 'continue'
|
|
58
68
|
|
|
59
69
|
export interface NodeProps {
|
|
60
70
|
id?: string
|
|
@@ -73,7 +83,7 @@ export interface NodeContext {
|
|
|
73
83
|
label?: 'vert' | 'frag' | 'compute'
|
|
74
84
|
isWebGL?: boolean
|
|
75
85
|
units?: any // @TODO FIX
|
|
76
|
-
infers?: WeakMap<
|
|
86
|
+
infers?: WeakMap<X, C>
|
|
77
87
|
onMount?: (name: string) => void
|
|
78
88
|
code?: {
|
|
79
89
|
headers: Map<string, string>
|
|
@@ -83,30 +93,24 @@ export interface NodeContext {
|
|
|
83
93
|
vertVaryings: Map<string, string>
|
|
84
94
|
computeInputs: Map<string, string>
|
|
85
95
|
dependencies: Map<string, Set<string>>
|
|
86
|
-
|
|
96
|
+
structStructFields: Map<string, StructFields>
|
|
87
97
|
}
|
|
88
98
|
}
|
|
89
99
|
|
|
90
100
|
/**
|
|
91
101
|
* infer
|
|
92
102
|
*/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
? Rest3 extends ''
|
|
101
|
-
? 3
|
|
102
|
-
: 4
|
|
103
|
-
: never
|
|
104
|
-
: never
|
|
105
|
-
: 0
|
|
103
|
+
// Optimized string length using direct pattern matching
|
|
104
|
+
// prettier-ignore
|
|
105
|
+
type _StringLength<A extends string> =
|
|
106
|
+
A extends `${infer _}${infer A}` ? A extends '' ? 1 :
|
|
107
|
+
A extends `${infer _}${infer B}` ? B extends '' ? 2 :
|
|
108
|
+
B extends `${infer _}${infer C}` ? C extends '' ? 3 :
|
|
109
|
+
4 : never : never : never
|
|
106
110
|
|
|
107
111
|
// Unified logic with infer.ts inferOperator function
|
|
108
112
|
// prettier-ignore
|
|
109
|
-
type InferOperator<L extends
|
|
113
|
+
type InferOperator<L extends C, R extends C> =
|
|
110
114
|
L extends R ? L :
|
|
111
115
|
// broadcast
|
|
112
116
|
L extends 'float' | 'int' ? R :
|
|
@@ -122,19 +126,23 @@ type InferOperator<L extends Constants, R extends Constants> =
|
|
|
122
126
|
|
|
123
127
|
// Unified logic with infer.ts inferArrayElement function
|
|
124
128
|
// prettier-ignore
|
|
125
|
-
type InferArrayElement<T extends
|
|
129
|
+
type InferArrayElement<T extends C> =
|
|
126
130
|
T extends 'mat4' ? 'vec4' :
|
|
127
131
|
T extends 'mat3' ? 'vec3' :
|
|
128
132
|
T extends 'mat2' ? 'vec2' :
|
|
129
133
|
'float'
|
|
130
134
|
|
|
131
|
-
type
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
type ExtractPairs<T> = T extends readonly [infer L, infer R, string] ? [L, R] | [R, L] : never
|
|
136
|
+
type OperatorTypeRules = ExtractPairs<(typeof OPERATOR_TYPE_RULES)[number]>
|
|
137
|
+
type IsInRules<L extends C, R extends C> = [L, R] extends OperatorTypeRules ? 1 : 0
|
|
138
|
+
type ValidateOperator<L extends C, R extends C> = L extends R ? 1 : IsInRules<L, R>
|
|
139
|
+
|
|
140
|
+
// prettier-ignore
|
|
141
|
+
type InferSwizzleType<S extends string> =
|
|
142
|
+
_StringLength<S> extends 4 ? 'vec4' :
|
|
143
|
+
_StringLength<S> extends 3 ? 'vec3' :
|
|
144
|
+
_StringLength<S> extends 2 ? 'vec2' :
|
|
145
|
+
'float'
|
|
138
146
|
|
|
139
147
|
/**
|
|
140
148
|
* Swizzles
|
|
@@ -147,63 +155,34 @@ export type Swizzles =
|
|
|
147
155
|
| _Swizzles<'p' | 'q'>
|
|
148
156
|
| _Swizzles<'s' | 't'>
|
|
149
157
|
|
|
150
|
-
type
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
type
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
type
|
|
173
|
-
|
|
174
|
-
export type
|
|
175
|
-
|
|
176
|
-
export type UInt = NodeProxyImpl<'uint'>
|
|
177
|
-
export type Int = NodeProxyImpl<'int'>
|
|
178
|
-
export type Float = NodeProxyImpl<'float'>
|
|
179
|
-
export type BVec2 = NodeProxyImpl<'bvec2'>
|
|
180
|
-
export type IVec2 = NodeProxyImpl<'ivec2'>
|
|
181
|
-
export type UVec2 = NodeProxyImpl<'uvec2'>
|
|
182
|
-
export type Vec2 = NodeProxyImpl<'vec2'>
|
|
183
|
-
export type BVec3 = NodeProxyImpl<'bvec3'>
|
|
184
|
-
export type IVec3 = NodeProxyImpl<'ivec3'>
|
|
185
|
-
export type UVec3 = NodeProxyImpl<'uvec3'>
|
|
186
|
-
export type Vec3 = NodeProxyImpl<'vec3'>
|
|
187
|
-
export type BVec4 = NodeProxyImpl<'bvec4'>
|
|
188
|
-
export type IVec4 = NodeProxyImpl<'ivec4'>
|
|
189
|
-
export type UVec4 = NodeProxyImpl<'uvec4'>
|
|
190
|
-
export type Vec4 = NodeProxyImpl<'vec4'>
|
|
191
|
-
export type Color = NodeProxyImpl<'color'>
|
|
192
|
-
export type Mat2 = NodeProxyImpl<'mat2'>
|
|
193
|
-
export type Mat3 = NodeProxyImpl<'mat3'>
|
|
194
|
-
export type Mat4 = NodeProxyImpl<'mat4'>
|
|
195
|
-
export type Texture = NodeProxyImpl<'texture'>
|
|
196
|
-
export type Sampler2D = NodeProxyImpl<'sampler2D'>
|
|
197
|
-
export type Struct = NodeProxyImpl<'struct'>
|
|
198
|
-
export type StructFields = Record<string, NodeProxy>
|
|
199
|
-
export type StructNode<T extends StructFields = any> = Omit<Struct, keyof T> & {
|
|
200
|
-
[K in keyof T]: T[K] extends NodeProxy<infer U> ? NodeProxy<U> : never
|
|
158
|
+
export type Void = XImpl<'void'>
|
|
159
|
+
export type Bool = XImpl<'bool'>
|
|
160
|
+
export type UInt = XImpl<'uint'>
|
|
161
|
+
export type Int = XImpl<'int'>
|
|
162
|
+
export type Float = XImpl<'float'>
|
|
163
|
+
export type BVec2 = XImpl<'bvec2'>
|
|
164
|
+
export type IVec2 = XImpl<'ivec2'>
|
|
165
|
+
export type UVec2 = XImpl<'uvec2'>
|
|
166
|
+
export type Vec2 = XImpl<'vec2'>
|
|
167
|
+
export type BVec3 = XImpl<'bvec3'>
|
|
168
|
+
export type IVec3 = XImpl<'ivec3'>
|
|
169
|
+
export type UVec3 = XImpl<'uvec3'>
|
|
170
|
+
export type Vec3 = XImpl<'vec3'>
|
|
171
|
+
export type BVec4 = XImpl<'bvec4'>
|
|
172
|
+
export type IVec4 = XImpl<'ivec4'>
|
|
173
|
+
export type UVec4 = XImpl<'uvec4'>
|
|
174
|
+
export type Vec4 = XImpl<'vec4'>
|
|
175
|
+
export type Color = XImpl<'color'>
|
|
176
|
+
export type Mat2 = XImpl<'mat2'>
|
|
177
|
+
export type Mat3 = XImpl<'mat3'>
|
|
178
|
+
export type Mat4 = XImpl<'mat4'>
|
|
179
|
+
export type Texture = XImpl<'texture'>
|
|
180
|
+
export type Sampler2D = XImpl<'sampler2D'>
|
|
181
|
+
export type StructBase = XImpl<'struct'>
|
|
182
|
+
export type Struct<T extends StructFields = any> = Omit<StructBase, keyof T> & {
|
|
183
|
+
[K in keyof T]: T[K] extends X<infer U> ? X<U> : never
|
|
201
184
|
} & {
|
|
202
|
-
toVar(id?: string):
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
export interface StructFactory<T extends StructFields> {
|
|
206
|
-
(initialValues?: StructFields, instanceId?: string): StructNode<T>
|
|
185
|
+
toVar(id?: string): Struct<T>
|
|
207
186
|
}
|
|
208
187
|
|
|
209
188
|
export interface ConstantsToType {
|
|
@@ -230,74 +209,113 @@ export interface ConstantsToType {
|
|
|
230
209
|
mat4: Mat4
|
|
231
210
|
texture: Texture
|
|
232
211
|
sampler2D: Sampler2D
|
|
233
|
-
struct:
|
|
212
|
+
struct: StructBase
|
|
234
213
|
}
|
|
235
214
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
215
|
+
/**
|
|
216
|
+
* X and Y
|
|
217
|
+
*/
|
|
218
|
+
type XImpl<T extends C> = _X<T> & {
|
|
219
|
+
[K in string as K extends Methods ? never : K]: any
|
|
220
|
+
} & {
|
|
221
|
+
[K in Swizzles]: X<InferSwizzleType<K>>
|
|
222
|
+
}
|
|
239
223
|
|
|
240
|
-
|
|
224
|
+
type C = Constants
|
|
225
|
+
|
|
226
|
+
export type X<T extends C = C> = T extends keyof ConstantsToType ? ConstantsToType[T] : _X<T>
|
|
227
|
+
export type Y<T extends C = C> = number | number[] | string | boolean | undefined | X<T>
|
|
228
|
+
|
|
229
|
+
type Methods =
|
|
230
|
+
| Functions
|
|
231
|
+
| Operators
|
|
232
|
+
| Conversions
|
|
233
|
+
| Swizzles
|
|
234
|
+
// system property
|
|
235
|
+
| '__nodeType'
|
|
236
|
+
| 'type'
|
|
237
|
+
| 'props'
|
|
238
|
+
| 'isProxy'
|
|
239
|
+
| 'assign'
|
|
240
|
+
| 'toVar'
|
|
241
|
+
| 'toString'
|
|
242
|
+
| 'element'
|
|
243
|
+
| 'select'
|
|
241
244
|
|
|
242
|
-
|
|
245
|
+
interface _X<T extends C> {
|
|
243
246
|
// System properties
|
|
244
247
|
readonly __nodeType?: T
|
|
245
|
-
assign(x: any):
|
|
246
|
-
|
|
248
|
+
assign(x: any): X<T>
|
|
249
|
+
select(x: number | X<T>, y: X<'bool'>): X<T>
|
|
250
|
+
fragment(c: NodeContext): string
|
|
251
|
+
toVar(name?: string): X<T>
|
|
247
252
|
toString(c?: NodeContext): string
|
|
253
|
+
fragment(c?: NodeContext): string
|
|
254
|
+
compute(c?: NodeContext): string
|
|
255
|
+
vertex(c?: NodeContext): string
|
|
248
256
|
type: NodeTypes
|
|
249
257
|
props: NodeProps
|
|
250
258
|
isProxy: true
|
|
251
259
|
listeners: Set<(value: any) => void>
|
|
252
260
|
|
|
253
261
|
// Element access for array/matrix types
|
|
254
|
-
element<Index extends X>(index: Index):
|
|
262
|
+
element<Index extends X>(index: Index): X<InferArrayElement<T>>
|
|
255
263
|
|
|
256
264
|
// Enhanced member access with type preservation
|
|
257
|
-
member<K extends string>(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
and(x: X<'bool'>): Bool
|
|
274
|
-
or(x: X<'bool'>): Bool
|
|
265
|
+
member<K extends string>(key: K): K extends keyof T ? (T[K] extends X<infer U> ? X<U> : never) : never
|
|
266
|
+
|
|
267
|
+
// Operators methods with unified type validation
|
|
268
|
+
add<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<InferOperator<T, U>>
|
|
269
|
+
sub<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<InferOperator<T, U>>
|
|
270
|
+
mul<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<InferOperator<T, U>>
|
|
271
|
+
div<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<InferOperator<T, U>>
|
|
272
|
+
mod<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<InferOperator<T, U>>
|
|
273
|
+
equal<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): Bool
|
|
274
|
+
notEqual<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): Bool
|
|
275
|
+
lessThan<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): Bool
|
|
276
|
+
lessThanEqual<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): Bool
|
|
277
|
+
greaterThan<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): Bool
|
|
278
|
+
greaterThanEqual<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): Bool
|
|
279
|
+
and(x: Bool): Bool
|
|
280
|
+
or(x: Bool): Bool
|
|
275
281
|
not(): Bool
|
|
276
282
|
|
|
277
283
|
// Bitwise operators
|
|
278
|
-
bitAnd(x: X<T>):
|
|
279
|
-
bitOr(x: X<T>):
|
|
280
|
-
bitXor(x: X<T>):
|
|
281
|
-
bitNot():
|
|
282
|
-
shiftLeft<U extends
|
|
283
|
-
shiftRight<U extends
|
|
284
|
+
bitAnd(x: X<T>): X<T>
|
|
285
|
+
bitOr(x: X<T>): X<T>
|
|
286
|
+
bitXor(x: X<T>): X<T>
|
|
287
|
+
bitNot(): X<T>
|
|
288
|
+
shiftLeft<U extends C>(x: X<U>): X<InferOperator<T, U>>
|
|
289
|
+
shiftRight<U extends C>(x: X<U>): X<InferOperator<T, U>>
|
|
290
|
+
|
|
291
|
+
// Assignment operators
|
|
292
|
+
addAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
293
|
+
subAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
294
|
+
mulAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
295
|
+
divAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
296
|
+
modAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
297
|
+
bitAndAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
298
|
+
bitOrAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
299
|
+
bitXorAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
300
|
+
shiftLeftAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
301
|
+
shiftRightAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>
|
|
284
302
|
|
|
285
303
|
// Conversion methods
|
|
286
304
|
toBool(): Bool
|
|
287
|
-
|
|
305
|
+
toUInt(): UInt
|
|
288
306
|
toInt(): Int
|
|
289
307
|
toFloat(): Float
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
308
|
+
toBVec2(): BVec2
|
|
309
|
+
toIVec2(): IVec2
|
|
310
|
+
toUVec2(): UVec2
|
|
293
311
|
toVec2(): Vec2
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
312
|
+
toBVec3(): BVec3
|
|
313
|
+
toIVec3(): IVec3
|
|
314
|
+
toUVec3(): UVec3
|
|
297
315
|
toVec3(): Vec3
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
316
|
+
toBVec4(): BVec4
|
|
317
|
+
toIVec4(): IVec4
|
|
318
|
+
toUVec4(): UVec4
|
|
301
319
|
toVec4(): Vec4
|
|
302
320
|
toColor(): Color
|
|
303
321
|
toMat2(): Mat2
|
|
@@ -312,15 +330,26 @@ export interface BaseNodeProxy<T extends Constants> {
|
|
|
312
330
|
// 0. Always return bool
|
|
313
331
|
all(): Bool
|
|
314
332
|
any(): Bool
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
333
|
+
|
|
334
|
+
// 2. WGSL-compliant return types with individual function constraints
|
|
335
|
+
determinant(): T extends 'mat2' | 'mat3' | 'mat4' ? Float : never
|
|
336
|
+
distance<U extends C>(
|
|
337
|
+
y: T extends 'vec2' | 'vec3' | 'vec4' ? (U extends T ? number | X<U> : never) : never
|
|
338
|
+
): Float
|
|
339
|
+
dot<U extends C>(
|
|
340
|
+
y: T extends 'vec2' | 'vec3' | 'vec4' | 'ivec2' | 'ivec3' | 'ivec4'
|
|
341
|
+
? U extends T
|
|
342
|
+
? number | X<U>
|
|
343
|
+
: never
|
|
344
|
+
: never
|
|
345
|
+
): T extends `ivec${string}` ? Int : Float
|
|
346
|
+
length(): T extends 'vec2' | 'vec3' | 'vec4' ? Float : never
|
|
320
347
|
lengthSq(): Float
|
|
321
348
|
luminance(): Float
|
|
322
|
-
|
|
323
|
-
|
|
349
|
+
|
|
350
|
+
// 3. Always return vec3 with vector constraint
|
|
351
|
+
cross<U extends C = 'vec3'>(y: T extends 'vec3' ? (U extends 'vec3' ? number | X<U> : never) : never): Vec3
|
|
352
|
+
|
|
324
353
|
// 4. Always return vec4
|
|
325
354
|
cubeTexture(...args: X[]): Vec4
|
|
326
355
|
texture(...args: X[]): Vec4
|
|
@@ -328,59 +357,64 @@ export interface BaseNodeProxy<T extends Constants> {
|
|
|
328
357
|
textureLod(...args: X[]): Vec4
|
|
329
358
|
|
|
330
359
|
/**
|
|
331
|
-
* 3.
|
|
332
|
-
* 1.
|
|
333
|
-
* 2.
|
|
360
|
+
* 3.2. unified with:
|
|
361
|
+
* 1.2. index.ts functions and
|
|
362
|
+
* 2.2. const.ts FUNCTIONS
|
|
334
363
|
*/
|
|
335
|
-
// 0. Component-wise functions
|
|
336
|
-
abs():
|
|
337
|
-
acos():
|
|
338
|
-
acosh():
|
|
339
|
-
asin():
|
|
340
|
-
asinh():
|
|
341
|
-
atan():
|
|
342
|
-
atanh():
|
|
343
|
-
ceil():
|
|
344
|
-
cos():
|
|
345
|
-
cosh():
|
|
346
|
-
degrees():
|
|
347
|
-
dFdx():
|
|
348
|
-
dFdy():
|
|
349
|
-
exp():
|
|
350
|
-
exp2():
|
|
351
|
-
floor():
|
|
352
|
-
fract():
|
|
353
|
-
fwidth():
|
|
354
|
-
inverseSqrt():
|
|
355
|
-
log():
|
|
356
|
-
log2():
|
|
357
|
-
negate():
|
|
358
|
-
normalize():
|
|
359
|
-
oneMinus():
|
|
360
|
-
radians():
|
|
361
|
-
reciprocal():
|
|
362
|
-
round():
|
|
363
|
-
saturate():
|
|
364
|
-
sign():
|
|
365
|
-
sin():
|
|
366
|
-
sinh():
|
|
367
|
-
sqrt():
|
|
368
|
-
tan():
|
|
369
|
-
tanh():
|
|
370
|
-
trunc():
|
|
371
|
-
|
|
372
|
-
// 1. Functions where first argument determines return type
|
|
373
|
-
atan2<U extends
|
|
374
|
-
clamp<U extends
|
|
375
|
-
max<U extends
|
|
376
|
-
min<U extends
|
|
377
|
-
mix<U extends
|
|
378
|
-
pow<U extends
|
|
379
|
-
reflect<U extends
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
364
|
+
// 0. Component-wise functions with type validation
|
|
365
|
+
abs(): X<T>
|
|
366
|
+
acos(): X<T>
|
|
367
|
+
acosh(): X<T>
|
|
368
|
+
asin(): X<T>
|
|
369
|
+
asinh(): X<T>
|
|
370
|
+
atan(): X<T>
|
|
371
|
+
atanh(): X<T>
|
|
372
|
+
ceil(): X<T>
|
|
373
|
+
cos(): X<T>
|
|
374
|
+
cosh(): X<T>
|
|
375
|
+
degrees(): X<T>
|
|
376
|
+
dFdx(): X<T>
|
|
377
|
+
dFdy(): X<T>
|
|
378
|
+
exp(): X<T>
|
|
379
|
+
exp2(): X<T>
|
|
380
|
+
floor(): X<T>
|
|
381
|
+
fract(): X<T>
|
|
382
|
+
fwidth(): X<T>
|
|
383
|
+
inverseSqrt(): X<T>
|
|
384
|
+
log(): X<T>
|
|
385
|
+
log2(): X<T>
|
|
386
|
+
negate(): X<T>
|
|
387
|
+
normalize(): T extends 'vec2' | 'vec3' | 'vec4' ? X<T> : never
|
|
388
|
+
oneMinus(): X<T>
|
|
389
|
+
radians(): X<T>
|
|
390
|
+
reciprocal(): X<T>
|
|
391
|
+
round(): X<T>
|
|
392
|
+
saturate(): X<T>
|
|
393
|
+
sign(): X<T>
|
|
394
|
+
sin(): X<T>
|
|
395
|
+
sinh(): X<T>
|
|
396
|
+
sqrt(): X<T>
|
|
397
|
+
tan(): X<T>
|
|
398
|
+
tanh(): X<T>
|
|
399
|
+
trunc(): X<T>
|
|
400
|
+
|
|
401
|
+
// 1. Functions where first argument determines return type with unified parameter types
|
|
402
|
+
atan2<U extends C>(x: number | X<U>): X<T>
|
|
403
|
+
clamp<U extends C>(min: number | X<U>, max: number | X<U>): X<InferOperator<T, U>>
|
|
404
|
+
max<U extends C>(y: number | X<U>): X<InferOperator<T, U>>
|
|
405
|
+
min<U extends C>(y: number | X<U>): X<InferOperator<T, U>>
|
|
406
|
+
mix<U extends C>(y: number | X<U>, a: number | Float | X<U>): X<InferOperator<T, U>>
|
|
407
|
+
pow<U extends C>(y: number | X<U>): X<T>
|
|
408
|
+
reflect<U extends C>(
|
|
409
|
+
N: T extends 'vec2' | 'vec3' | 'vec4' ? (U extends T ? number | X<U> : never) : never
|
|
410
|
+
): X<T>
|
|
411
|
+
refract<U extends C>(
|
|
412
|
+
N: T extends 'vec2' | 'vec3' | 'vec4' ? (U extends T ? number | X<U> : never) : never,
|
|
413
|
+
eta: number | Float
|
|
414
|
+
): T extends 'vec2' | 'vec3' | 'vec4' ? X<T> : never
|
|
415
|
+
|
|
416
|
+
// 2. Functions where not first argument determines return type with unified parameter types
|
|
417
|
+
smoothstep<U extends C>(edge0: number | X<U>, edge1: number | X<U>): X<InferOperator<T, U>>
|
|
418
|
+
step<U extends C>(edge: number | X<U>): X<InferOperator<T, U>>
|
|
385
419
|
// @NOTE: mod is operator
|
|
386
420
|
}
|