glre 0.41.0 → 0.43.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/dist/addons.cjs +1 -1
- package/dist/addons.cjs.map +1 -1
- package/dist/addons.d.ts +379 -7
- package/dist/addons.js +1 -1
- package/dist/addons.js.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +3 -0
- package/dist/node.cjs +12 -12
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +2 -1
- package/dist/node.js +12 -12
- package/dist/node.js.map +1 -1
- package/dist/react.d.ts +2 -0
- package/dist/solid.d.ts +2 -0
- package/package.json +1 -1
- package/src/addons/color/blend/add.ts +35 -0
- package/src/addons/color/blend/average.ts +35 -0
- package/src/addons/color/blend/color.ts +28 -0
- package/src/addons/color/blend/colorBurn.ts +35 -0
- package/src/addons/color/blend/colorDodge.ts +39 -0
- package/src/addons/color/blend/darken.ts +35 -0
- package/src/addons/color/blend/difference.ts +35 -0
- package/src/addons/color/blend/exclusion.ts +35 -0
- package/src/addons/color/blend/glow.ts +36 -0
- package/src/addons/color/blend/hardLight.ts +36 -0
- package/src/addons/color/blend/hardMix.ts +39 -0
- package/src/addons/color/blend/hue.ts +29 -0
- package/src/addons/color/blend/index.ts +28 -0
- package/src/addons/color/blend/lighten.ts +35 -0
- package/src/addons/color/blend/linearBurn.ts +39 -0
- package/src/addons/color/blend/linearDodge.ts +39 -0
- package/src/addons/color/blend/linearLight.ts +44 -0
- package/src/addons/color/blend/luminosity.ts +28 -0
- package/src/addons/color/blend/multiply.ts +35 -0
- package/src/addons/color/blend/negation.ts +35 -0
- package/src/addons/color/blend/overlay.ts +38 -0
- package/src/addons/color/blend/phoenix.ts +35 -0
- package/src/addons/color/blend/pinLight.ts +40 -0
- package/src/addons/color/blend/reflect.ts +35 -0
- package/src/addons/color/blend/saturation.ts +28 -0
- package/src/addons/color/blend/screen.ts +39 -0
- package/src/addons/color/blend/softLight.ts +63 -0
- package/src/addons/color/blend/subtract.ts +37 -0
- package/src/addons/color/blend/vividLight.ts +44 -0
- package/src/addons/color/composite/compositeXor.ts +40 -0
- package/src/addons/color/composite/destinationAtop.ts +42 -0
- package/src/addons/color/composite/destinationIn.ts +42 -0
- package/src/addons/color/composite/destinationOut.ts +42 -0
- package/src/addons/color/composite/destinationOver.ts +42 -0
- package/src/addons/color/composite/index.ts +9 -0
- package/src/addons/color/composite/sourceAtop.ts +42 -0
- package/src/addons/color/composite/sourceIn.ts +40 -0
- package/src/addons/color/composite/sourceOut.ts +40 -0
- package/src/addons/color/composite/sourceOver.ts +40 -0
- package/src/addons/color/palette/macbeth.ts +31 -33
- package/src/addons/draw/arrows.ts +34 -48
- package/src/addons/draw/axis.ts +24 -42
- package/src/addons/draw/bridge.ts +4 -4
- package/src/addons/draw/char.ts +235 -18
- package/src/addons/draw/circle.ts +22 -1
- package/src/addons/draw/colorChecker.ts +42 -0
- package/src/addons/draw/colorPicker.ts +66 -0
- package/src/addons/draw/digits.ts +334 -0
- package/src/addons/draw/index.ts +4 -0
- package/src/addons/draw/matrix.ts +26 -0
- package/src/addons/draw/point.ts +24 -11
- package/src/addons/geometry/triangle/closestPoint.ts +7 -7
- package/src/addons/index.ts +3 -0
- package/src/addons/math/const.ts +4 -4
- package/src/addons/math/mod289.ts +1 -6
- package/src/addons/math/powFast.ts +4 -10
- package/src/addons/math/quartic.ts +6 -11
- package/src/addons/math/quat/quatLerp.ts +3 -3
- package/src/addons/math/quintic.ts +7 -12
- package/src/addons/math/rotate2d.ts +1 -6
- package/src/addons/math/rotate3d.ts +4 -10
- package/src/addons/math/rotate3dX.ts +3 -12
- package/src/addons/math/rotate3dY.ts +3 -12
- package/src/addons/math/rotate3dZ.ts +3 -12
- package/src/addons/math/rotate4d.ts +4 -10
- package/src/addons/math/rotate4dX.ts +3 -13
- package/src/addons/math/rotate4dY.ts +1 -6
- package/src/addons/math/rotate4dZ.ts +3 -13
- package/src/addons/math/scale2d.ts +16 -32
- package/src/addons/math/toMat3.ts +1 -6
- package/src/addons/math/toMat4.ts +1 -6
- package/src/addons/sdf/arrowSDF.ts +61 -0
- package/src/addons/sdf/boxFrameSDF.ts +31 -0
- package/src/addons/sdf/boxSDF.ts +4 -6
- package/src/addons/sdf/capsuleSDF.ts +17 -0
- package/src/addons/sdf/coneSDF.ts +60 -0
- package/src/addons/sdf/crossSDF.ts +4 -7
- package/src/addons/sdf/cubeSDF.ts +13 -0
- package/src/addons/sdf/cylinderSDF.ts +65 -0
- package/src/addons/sdf/dodecahedronSDF.ts +32 -0
- package/src/addons/sdf/ellipsoidSDF.ts +14 -0
- package/src/addons/sdf/flowerSDF.ts +16 -0
- package/src/addons/sdf/gearSDF.ts +22 -0
- package/src/addons/sdf/heartSDF.ts +17 -0
- package/src/addons/sdf/hexPrismSDF.ts +15 -0
- package/src/addons/sdf/hexSDF.ts +8 -15
- package/src/addons/sdf/icosahedronSDF.ts +23 -0
- package/src/addons/sdf/index.ts +41 -0
- package/src/addons/sdf/juliaSDF.ts +39 -0
- package/src/addons/sdf/kochSDF.ts +49 -0
- package/src/addons/sdf/linkSDF.ts +15 -0
- package/src/addons/sdf/mandelbulbSDF.ts +41 -0
- package/src/addons/sdf/octahedronSDF.ts +30 -0
- package/src/addons/sdf/octogonPrismSDF.ts +19 -0
- package/src/addons/sdf/opElongate.ts +35 -0
- package/src/addons/sdf/opExtrude.ts +14 -0
- package/src/addons/sdf/opIntersection.ts +25 -0
- package/src/addons/sdf/opOnion.ts +12 -0
- package/src/addons/sdf/opRepeat.ts +49 -0
- package/src/addons/sdf/opRevolve.ts +12 -0
- package/src/addons/sdf/opRound.ts +12 -0
- package/src/addons/sdf/opSubtraction.ts +50 -0
- package/src/addons/sdf/opUnion.ts +39 -0
- package/src/addons/sdf/planeSDF.ts +21 -0
- package/src/addons/sdf/polySDF.ts +32 -0
- package/src/addons/sdf/pyramidSDF.ts +29 -0
- package/src/addons/sdf/raysSDF.ts +14 -0
- package/src/addons/sdf/rhombSDF.ts +10 -0
- package/src/addons/sdf/spiralSDF.ts +15 -0
- package/src/addons/sdf/starSDF.ts +47 -0
- package/src/addons/sdf/superShapeSDF.ts +73 -0
- package/src/addons/sdf/tetrahedronSDF.ts +21 -0
- package/src/addons/sdf/torusSDF.ts +27 -0
- package/src/addons/sdf/triPrismSDF.ts +13 -0
- package/src/addons/sdf/triSDF.ts +19 -11
- package/src/addons/sdf/vesicaSDF.ts +23 -0
- package/src/addons/space/bracketing.ts +1 -2
- package/src/addons/space/kaleidoscope.ts +1 -2
- package/src/addons/space/scale.ts +42 -7
- package/src/addons/space/windmillTile.ts +2 -1
- package/src/index.ts +1 -0
- package/src/node/create.ts +2 -3
- package/src/node/utils/index.ts +2 -2
- package/src/types.ts +1 -0
- package/src/utils/webgl.ts +7 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Fn, Vec2, Int, Float, vec2, atan2, step, float } from '../../node'
|
|
2
|
+
import { TAU } from '../math/const'
|
|
3
|
+
import { scale2dWithCenter } from '../space/scale'
|
|
4
|
+
|
|
5
|
+
export function starSDF(st: Vec2, V: Int, s: Float): Float
|
|
6
|
+
export function starSDF(st: Vec2, V: Int): Float
|
|
7
|
+
export function starSDF(st: Vec2, V: any, s?: any): any {
|
|
8
|
+
if (s !== undefined) {
|
|
9
|
+
return starSDFWithScale(st, V, s)
|
|
10
|
+
} else {
|
|
11
|
+
return starSDFSimple(st, V)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const starSDFWithScale = Fn(([st, V, s]: [Vec2, Int, Float]): Float => {
|
|
16
|
+
const centeredSt = st.sub(0.5).mul(2).toVar('centeredSt')
|
|
17
|
+
const a = atan2(centeredSt.y, centeredSt.x).div(TAU).toVar('a')
|
|
18
|
+
const seg = a.mul(V.toFloat()).toVar('seg')
|
|
19
|
+
const finalA = seg
|
|
20
|
+
.floor()
|
|
21
|
+
.add(0.5)
|
|
22
|
+
.div(V.toFloat())
|
|
23
|
+
.add(s.mix(s.negate(), step(0.5, seg.fract())))
|
|
24
|
+
.mul(TAU)
|
|
25
|
+
.toVar('finalA')
|
|
26
|
+
return vec2(finalA.cos(), finalA.sin()).dot(centeredSt).abs()
|
|
27
|
+
}).setLayout({
|
|
28
|
+
name: 'starSDFWithScale',
|
|
29
|
+
type: 'float',
|
|
30
|
+
inputs: [
|
|
31
|
+
{ name: 'st', type: 'vec2' },
|
|
32
|
+
{ name: 'V', type: 'int' },
|
|
33
|
+
{ name: 's', type: 'float' },
|
|
34
|
+
],
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export const starSDFSimple = Fn(([st, V]: [Vec2, Int]): Float => {
|
|
38
|
+
const scaledSt = scale2dWithCenter(st, V.toFloat().reciprocal().mul(12), vec2(0.5))
|
|
39
|
+
return starSDFWithScale(scaledSt as any, V, float(0.1))
|
|
40
|
+
}).setLayout({
|
|
41
|
+
name: 'starSDFSimple',
|
|
42
|
+
type: 'float',
|
|
43
|
+
inputs: [
|
|
44
|
+
{ name: 'st', type: 'vec2' },
|
|
45
|
+
{ name: 'V', type: 'int' },
|
|
46
|
+
],
|
|
47
|
+
})
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Fn, Vec2, Float, vec2, cos, sin, pow, abs, float } from '../../node'
|
|
2
|
+
import { cart2polar } from '../space/cart2polar'
|
|
3
|
+
|
|
4
|
+
export const superShapeSDFCenter = Fn(
|
|
5
|
+
([st, center, s, a, b, n1, n2, n3, m]: [
|
|
6
|
+
Vec2,
|
|
7
|
+
Vec2,
|
|
8
|
+
Float,
|
|
9
|
+
Float,
|
|
10
|
+
Float,
|
|
11
|
+
Float,
|
|
12
|
+
Float,
|
|
13
|
+
Float,
|
|
14
|
+
Float
|
|
15
|
+
]): Float => {
|
|
16
|
+
st.assign(st.sub(center))
|
|
17
|
+
const polar = cart2polar(st).toVar('polar')
|
|
18
|
+
const d = polar.y.mul(5).toVar('d')
|
|
19
|
+
const theta = polar.x.toVar('theta')
|
|
20
|
+
const t1 = abs(
|
|
21
|
+
float(1)
|
|
22
|
+
.div(a)
|
|
23
|
+
.mul(cos(m.mul(theta).mul(0.25)))
|
|
24
|
+
).toVar('t1')
|
|
25
|
+
t1.assign(pow(t1, n2))
|
|
26
|
+
const t2 = abs(
|
|
27
|
+
float(1)
|
|
28
|
+
.div(b)
|
|
29
|
+
.mul(sin(m.mul(theta).mul(0.25)))
|
|
30
|
+
).toVar('t2')
|
|
31
|
+
t2.assign(pow(t2, n3))
|
|
32
|
+
const t3 = t1.add(t2).toVar('t3')
|
|
33
|
+
const r = pow(t3, float(-1).div(n1)).toVar('r')
|
|
34
|
+
const q = s
|
|
35
|
+
.mul(r)
|
|
36
|
+
.mul(vec2(cos(theta), sin(theta)))
|
|
37
|
+
.toVar('q')
|
|
38
|
+
return d.sub(q.length())
|
|
39
|
+
}
|
|
40
|
+
).setLayout({
|
|
41
|
+
name: 'superShapeSDFCenter',
|
|
42
|
+
type: 'float',
|
|
43
|
+
inputs: [
|
|
44
|
+
{ name: 'st', type: 'vec2' },
|
|
45
|
+
{ name: 'center', type: 'vec2' },
|
|
46
|
+
{ name: 's', type: 'float' },
|
|
47
|
+
{ name: 'a', type: 'float' },
|
|
48
|
+
{ name: 'b', type: 'float' },
|
|
49
|
+
{ name: 'n1', type: 'float' },
|
|
50
|
+
{ name: 'n2', type: 'float' },
|
|
51
|
+
{ name: 'n3', type: 'float' },
|
|
52
|
+
{ name: 'm', type: 'float' },
|
|
53
|
+
],
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
export const superShapeSDF = Fn(
|
|
57
|
+
([st, s, a, b, n1, n2, n3, m]: [Vec2, Float, Float, Float, Float, Float, Float, Float]): Float => {
|
|
58
|
+
return superShapeSDFCenter(st, vec2(0.5), s, a, b, n1, n2, n3, m)
|
|
59
|
+
}
|
|
60
|
+
).setLayout({
|
|
61
|
+
name: 'superShapeSDF',
|
|
62
|
+
type: 'float',
|
|
63
|
+
inputs: [
|
|
64
|
+
{ name: 'st', type: 'vec2' },
|
|
65
|
+
{ name: 's', type: 'float' },
|
|
66
|
+
{ name: 'a', type: 'float' },
|
|
67
|
+
{ name: 'b', type: 'float' },
|
|
68
|
+
{ name: 'n1', type: 'float' },
|
|
69
|
+
{ name: 'n2', type: 'float' },
|
|
70
|
+
{ name: 'n3', type: 'float' },
|
|
71
|
+
{ name: 'm', type: 'float' },
|
|
72
|
+
],
|
|
73
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Fn, Vec3, Float, vec2 } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const tetrahedronSDF = Fn(([p, h]: [Vec3, Float]): Float => {
|
|
4
|
+
const q = p.abs().toVar('q')
|
|
5
|
+
const y = p.y.toVar('y')
|
|
6
|
+
const d1 = q.z.sub(y.max(0)).toVar('d1')
|
|
7
|
+
const d2 = q.x
|
|
8
|
+
.mul(0.5)
|
|
9
|
+
.add(y.mul(0.5))
|
|
10
|
+
.max(0)
|
|
11
|
+
.sub(h.min(h.add(y)))
|
|
12
|
+
.toVar('d2')
|
|
13
|
+
return vec2(d1, d2).max(0.005).length().add(d1.max(d2).min(0))
|
|
14
|
+
}).setLayout({
|
|
15
|
+
name: 'tetrahedronSDF',
|
|
16
|
+
type: 'float',
|
|
17
|
+
inputs: [
|
|
18
|
+
{ name: 'p', type: 'vec3' },
|
|
19
|
+
{ name: 'h', type: 'float' },
|
|
20
|
+
],
|
|
21
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Fn, Vec3, Vec2, Float, vec2, select } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const torusSDF = Fn(([p, t]: [Vec3, Vec2]): Float => {
|
|
4
|
+
return vec2(vec2(p.x, p.z).length().sub(t.x), p.y).length().sub(t.y)
|
|
5
|
+
}).setLayout({
|
|
6
|
+
name: 'torusSDF',
|
|
7
|
+
type: 'float',
|
|
8
|
+
inputs: [
|
|
9
|
+
{ name: 'p', type: 'vec3' },
|
|
10
|
+
{ name: 't', type: 'vec2' },
|
|
11
|
+
],
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
export const torusSDFSector = Fn(([p, sc, ra, rb]: [Vec3, Vec2, Float, Float]): Float => {
|
|
15
|
+
const px = p.x.abs().toVar('px')
|
|
16
|
+
const k = select(vec2(px, p.y).length(), vec2(px, p.y).dot(sc), sc.y.mul(px).greaterThan(sc.x.mul(p.y)))
|
|
17
|
+
return p.dot(p).add(ra.mul(ra)).sub(ra.mul(k).mul(2)).sqrt().sub(rb)
|
|
18
|
+
}).setLayout({
|
|
19
|
+
name: 'torusSDFSector',
|
|
20
|
+
type: 'float',
|
|
21
|
+
inputs: [
|
|
22
|
+
{ name: 'p', type: 'vec3' },
|
|
23
|
+
{ name: 'sc', type: 'vec2' },
|
|
24
|
+
{ name: 'ra', type: 'float' },
|
|
25
|
+
{ name: 'rb', type: 'float' },
|
|
26
|
+
],
|
|
27
|
+
})
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Fn, Vec3, Vec2, Float } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const triPrismSDF = Fn(([p, h]: [Vec3, Vec2]): Float => {
|
|
4
|
+
const q = p.abs().toVar('q')
|
|
5
|
+
return q.z.sub(h.y).max(q.x.mul(0.866025).add(p.y.mul(0.5)).max(p.y.negate()).sub(h.x.mul(0.5)))
|
|
6
|
+
}).setLayout({
|
|
7
|
+
name: 'triPrismSDF',
|
|
8
|
+
type: 'float',
|
|
9
|
+
inputs: [
|
|
10
|
+
{ name: 'p', type: 'vec3' },
|
|
11
|
+
{ name: 'h', type: 'vec2' },
|
|
12
|
+
],
|
|
13
|
+
})
|
package/src/addons/sdf/triSDF.ts
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import { Fn, Vec2, Float
|
|
1
|
+
import { Fn, Vec2, Float } from '../../node'
|
|
2
2
|
|
|
3
3
|
export const triSDF = Fn(([st]: [Vec2]): Float => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return max(
|
|
7
|
-
abs(normalized.x).mul(sqrt3_2).add(normalized.y.div(2)),
|
|
8
|
-
normalized.y.div(-2)
|
|
9
|
-
)
|
|
4
|
+
const centered = st.sub(0.5).mul(5).toVar('centered')
|
|
5
|
+
return centered.x.abs().mul(0.866025).add(centered.y.mul(0.5)).max(centered.y.negate().mul(0.5))
|
|
10
6
|
}).setLayout({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
})
|
|
7
|
+
name: 'triSDF',
|
|
8
|
+
type: 'float',
|
|
9
|
+
inputs: [{ name: 'st', type: 'vec2' }],
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
export const triSDFCenter = Fn(([st, center]: [Vec2, Vec2]): Float => {
|
|
13
|
+
const centered = st.sub(center).mul(5).toVar('centered')
|
|
14
|
+
return centered.x.abs().mul(0.866025).add(centered.y.mul(0.5)).max(centered.y.negate().mul(0.5))
|
|
15
|
+
}).setLayout({
|
|
16
|
+
name: 'triSDFCenter',
|
|
17
|
+
type: 'float',
|
|
18
|
+
inputs: [
|
|
19
|
+
{ name: 'st', type: 'vec2' },
|
|
20
|
+
{ name: 'center', type: 'vec2' },
|
|
21
|
+
],
|
|
22
|
+
})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Fn, Vec2, Float, vec2, float } from '../../node'
|
|
2
|
+
|
|
3
|
+
export const vesicaSDF = Fn(([st, w]: [Vec2, Float]): Float => {
|
|
4
|
+
const offset = vec2(w.mul(0.5), 0)
|
|
5
|
+
const circle1 = st.sub(offset).length().sub(0.5)
|
|
6
|
+
const circle2 = st.add(offset).length().sub(0.5)
|
|
7
|
+
return circle1.max(circle2)
|
|
8
|
+
}).setLayout({
|
|
9
|
+
name: 'vesicaSDF',
|
|
10
|
+
type: 'float',
|
|
11
|
+
inputs: [
|
|
12
|
+
{ name: 'st', type: 'vec2' },
|
|
13
|
+
{ name: 'w', type: 'float' },
|
|
14
|
+
],
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export const vesicaSDFDefault = Fn(([st]: [Vec2]): Float => {
|
|
18
|
+
return vesicaSDF(st, float(0.5))
|
|
19
|
+
}).setLayout({
|
|
20
|
+
name: 'vesicaSDFDefault',
|
|
21
|
+
type: 'float',
|
|
22
|
+
inputs: [{ name: 'st', type: 'vec2' }],
|
|
23
|
+
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Fn, Vec2, Float, mat2, atan2, cos, sin, mod, vec2, float } from '../../node'
|
|
2
|
+
import { PI, TWO_PI } from '../math/const'
|
|
2
3
|
|
|
3
|
-
const PI = float(3.1415926535897932384626433832795)
|
|
4
|
-
const TWO_PI = float(6.283185307179586476925286766559)
|
|
5
4
|
const BRACKETING_ANGLE_DELTA = PI.div(20.0)
|
|
6
5
|
|
|
7
6
|
export const bracketingAxis0 = Fn(([dir]: [Vec2]): Vec2 => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Fn, Vec2, Float, vec2, float, length, atan2, floor, min, max, cos, sin } from '../../node'
|
|
2
|
-
|
|
3
|
-
const TWO_PI = 6.283185307179586
|
|
2
|
+
import { TWO_PI } from '../math/const'
|
|
4
3
|
|
|
5
4
|
const kaleidoscopeCore = (coord: Vec2, segmentCount: Float, phase: Float) => {
|
|
6
5
|
const uv = coord.sub(0.5).toVar('uv')
|
|
@@ -1,13 +1,48 @@
|
|
|
1
|
-
import { Fn,
|
|
1
|
+
import { Fn, Vec2, Vec3, Float, vec2, vec3 } from '../../node'
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const scale2d = Fn(([st, s]: [Vec2, Float]): Vec2 => {
|
|
4
|
+
return st.sub(vec2(0.5)).mul(s).add(vec2(0.5))
|
|
5
|
+
}).setLayout({
|
|
6
|
+
name: 'scale2d',
|
|
7
|
+
type: 'vec2',
|
|
8
|
+
inputs: [
|
|
9
|
+
{ name: 'st', type: 'vec2' },
|
|
10
|
+
{ name: 's', type: 'float' },
|
|
11
|
+
],
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
export const scale2dWithCenter = Fn(([st, s, center]: [Vec2, Float, Vec2]): Vec2 => {
|
|
4
15
|
return st.sub(center).mul(s).add(center)
|
|
5
16
|
}).setLayout({
|
|
6
|
-
name: '
|
|
7
|
-
type: '
|
|
17
|
+
name: 'scale2dWithCenter',
|
|
18
|
+
type: 'vec2',
|
|
19
|
+
inputs: [
|
|
20
|
+
{ name: 'st', type: 'vec2' },
|
|
21
|
+
{ name: 's', type: 'float' },
|
|
22
|
+
{ name: 'center', type: 'vec2' },
|
|
23
|
+
],
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export const scale2dVec = Fn(([st, s]: [Vec2, Vec2]): Vec2 => {
|
|
27
|
+
return st.sub(vec2(0.5)).mul(s).add(vec2(0.5))
|
|
28
|
+
}).setLayout({
|
|
29
|
+
name: 'scale2dVec',
|
|
30
|
+
type: 'vec2',
|
|
31
|
+
inputs: [
|
|
32
|
+
{ name: 'st', type: 'vec2' },
|
|
33
|
+
{ name: 's', type: 'vec2' },
|
|
34
|
+
],
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export const scale3d = Fn(([st, s]: [Vec3, Float]): Vec3 => {
|
|
38
|
+
return st.sub(vec3(0.5)).mul(s).add(vec3(0.5))
|
|
39
|
+
}).setLayout({
|
|
40
|
+
name: 'scale3d',
|
|
41
|
+
type: 'vec3',
|
|
8
42
|
inputs: [
|
|
9
|
-
{ name: 'st', type: '
|
|
10
|
-
{ name: 's', type: '
|
|
11
|
-
{ name: 'center', type: 'auto' },
|
|
43
|
+
{ name: 'st', type: 'vec3' },
|
|
44
|
+
{ name: 's', type: 'float' },
|
|
12
45
|
],
|
|
13
46
|
})
|
|
47
|
+
|
|
48
|
+
export const scale = scale2dVec
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Fn, Vec2, Vec4, Float, mod, abs, vec4 } from '../../node'
|
|
2
|
+
import { TWO_PI } from '../math'
|
|
2
3
|
import { rotate2DBasic } from './rotate'
|
|
3
4
|
import { sqTile } from './sqTile'
|
|
4
5
|
|
|
@@ -20,7 +21,7 @@ export const windmillTileDefault = Fn(([t]: [Vec4]): Vec4 => {
|
|
|
20
21
|
const a = abs(mod(t.z, 2).sub(mod(t.w, 2)))
|
|
21
22
|
.add(mod(t.w, 2).mul(2))
|
|
22
23
|
.mul(0.25)
|
|
23
|
-
return vec4(rotate2DBasic(t.xy, a.mul(
|
|
24
|
+
return vec4(rotate2DBasic(t.xy, a.mul(TWO_PI)), t.zw)
|
|
24
25
|
}).setLayout({
|
|
25
26
|
name: 'windmillTileDefault',
|
|
26
27
|
type: 'vec4',
|
package/src/index.ts
CHANGED
package/src/node/create.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { compute, fragment, vertex } from './build'
|
|
|
2
2
|
import { addToScope, assign, toVar } from './scope'
|
|
3
3
|
import { code, getConstant, isConversion, isFunction, isOperator, getId, isArrayAccess } from './utils'
|
|
4
4
|
import { is } from '../utils/helpers'
|
|
5
|
-
import type { Constants as C, Functions, NodeProps, NodeTypes, Operators, X, Y } from './types'
|
|
5
|
+
import type { Bool, Constants as C, Functions, NodeProps, NodeTypes, Operators, X, Y } from './types'
|
|
6
6
|
|
|
7
7
|
const toPrimitive = (x: Y, hint: string) => {
|
|
8
8
|
if (hint === 'string') return code(x as any, null)
|
|
@@ -15,7 +15,6 @@ export const create = <T extends C>(type: NodeTypes, props?: NodeProps | null, .
|
|
|
15
15
|
const get = (_: unknown, key: string | Symbol) => {
|
|
16
16
|
if (key === 'type') return type
|
|
17
17
|
if (key === 'props') return props
|
|
18
|
-
if (key === '__nodeType') return undefined // Will be inferred by TypeScript
|
|
19
18
|
if (key === 'toVar') return toVar.bind(null, x)
|
|
20
19
|
if (key === 'isProxy') return true
|
|
21
20
|
if (key === 'toString') return code.bind(null, x)
|
|
@@ -70,7 +69,7 @@ export const member = <T extends C>(x: X, index: Y) => create<T>('member', null,
|
|
|
70
69
|
export const element = <T extends C>(x: X, index: Y) => create<T>('element', null, x, index)
|
|
71
70
|
export const gather = <T extends C>(x: X, index: Y) => create<T>('gather', null, x, index)
|
|
72
71
|
export const scatter = <T extends C>(x: X, index: Y) => create<T>('scatter', null, x, index)
|
|
73
|
-
export const select = <T extends C>(x: Y
|
|
72
|
+
export const select = <T extends C>(x: Y<T>, y: Y<T>, z: Bool) => create<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE
|
|
74
73
|
export const operator = <T extends C>(key: Operators, ...x: Y[]) => create<T>('operator', null, key, ...x)
|
|
75
74
|
export const function_ = <T extends C>(key: Functions, ...x: Y[]) => create<T>('function', null, key, ...x)
|
|
76
75
|
export const conversion = <T extends C>(key: T, ...x: Y[]) => create<T>('conversion', null, key, ...x)
|
package/src/node/utils/index.ts
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
parseUniformHead,
|
|
18
18
|
parseVaryingHead,
|
|
19
19
|
} from './parse'
|
|
20
|
-
import { getBluiltin, getConversions, getOperator, initNodeContext, isElement, setupEvent } from './utils'
|
|
20
|
+
import { getBluiltin, getConversions, getOperator, initNodeContext, isElement, isX, setupEvent } from './utils'
|
|
21
21
|
import { is } from '../../utils/helpers'
|
|
22
22
|
import { mod } from '..'
|
|
23
23
|
import type { Constants as C, NodeContext, Y } from '../types'
|
|
@@ -37,8 +37,8 @@ export const code = <T extends C>(target: Y<T>, c?: NodeContext | null): string
|
|
|
37
37
|
return ret + '.0'
|
|
38
38
|
}
|
|
39
39
|
if (is.bol(target)) return target ? 'true' : 'false'
|
|
40
|
-
if (isElement(target)) throw `` // IGNORE
|
|
41
40
|
if (!target) return ''
|
|
41
|
+
if (!isX(target)) return ''
|
|
42
42
|
const { type, props = {} } = target
|
|
43
43
|
const { id = 'i', children = [], fields, initialValues } = props
|
|
44
44
|
const [x, y, z, w] = children
|
package/src/types.ts
CHANGED
package/src/utils/webgl.ts
CHANGED
|
@@ -132,8 +132,15 @@ export const webgl = async (gl: GL) => {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
if (gl.isDepth) {
|
|
135
|
+
c.enable(c.DEPTH_TEST)
|
|
135
136
|
c.depthFunc(c.LEQUAL)
|
|
136
137
|
c.enable(c.CULL_FACE)
|
|
138
|
+
c.cullFace(c.BACK)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (gl.wireframe) {
|
|
142
|
+
const ext = c.getExtension('WEBGL_polygon_mode')
|
|
143
|
+
ext.polygonModeWEBGL(c.FRONT_AND_BACK, ext.LINE_WEBGL)
|
|
137
144
|
}
|
|
138
145
|
|
|
139
146
|
const webgl: WebGLState = { context: c, program: pg, storages: cp?.storages }
|