@thi.ng/shader-ast-js 0.7.67 → 1.0.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/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log
2
2
 
3
- - **Last updated**: 2023-08-12T13:14:08Z
3
+ - **Last updated**: 2023-08-14T13:30:45Z
4
4
  - **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
5
5
 
6
6
  All notable changes to this project will be documented in this file.
@@ -9,6 +9,30 @@ See [Conventional Commits](https://conventionalcommits.org/) for commit guidelin
9
9
  **Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes
10
10
  and/or version bumps of transitive dependencies.
11
11
 
12
+ # [1.0.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/shader-ast-js@1.0.0) (2023-08-14)
13
+
14
+ #### 🛑 Breaking changes
15
+
16
+ - update renderPixels(), renderBuffer() ([5b2fe9d](https://github.com/thi-ng/umbrella/commit/5b2fe9d))
17
+ - BREAKING CHANGES: replace render functions args with options object
18
+ - add RenderPixelOpts
19
+ - update renderPixels()/renderBuffer() to support arbitrary integer pixel formats
20
+ - add/expose color conversion fns:
21
+ - rgbaBgra8888() for 32bit targets
22
+ - rgbaRgb565() for 16bit targets
23
+
24
+ #### 🚀 Features
25
+
26
+ - add vector pools for all vector ops ([31271e7](https://github.com/thi-ng/umbrella/commit/31271e7))
27
+ - add Pool class and impls for [iu]vec2/3/4
28
+ - update all vector ops to re-use memory from pools
29
+ - add CompileResult interface w/ `__reset()` and `__stats()` methods
30
+ - update targetJS() codegens
31
+
32
+ #### ♻️ Refactoring
33
+
34
+ - update/extend vector pool handling ([1c22d0c](https://github.com/thi-ng/umbrella/commit/1c22d0c))
35
+
12
36
  ### [0.7.64](https://github.com/thi-ng/umbrella/tree/@thi.ng/shader-ast-js@0.7.64) (2023-08-04)
13
37
 
14
38
  #### ♻️ Refactoring
package/README.md CHANGED
@@ -76,7 +76,7 @@ For Node.js REPL:
76
76
  const shaderAstJs = await import("@thi.ng/shader-ast-js");
77
77
  ```
78
78
 
79
- Package sizes (brotli'd, pre-treeshake): ESM: 5.46 KB
79
+ Package sizes (brotli'd, pre-treeshake): ESM: 6.27 KB
80
80
 
81
81
  ## Dependencies
82
82
 
@@ -97,14 +97,15 @@ directory are using this package.
97
97
 
98
98
  A selection:
99
99
 
100
- | Screenshot | Description | Live demo | Source |
101
- |:-----------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------|:----------------------------------------------------------|:---------------------------------------------------------------------------------------|
102
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/shader-ast/shader-ast-01.jpg" width="240"/> | 2D canvas shader emulation | [Demo](https://demo.thi.ng/umbrella/shader-ast-canvas2d/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-canvas2d) |
103
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-noise.jpg" width="240"/> | HOF shader procedural noise function composition | [Demo](https://demo.thi.ng/umbrella/shader-ast-noise/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-noise) |
104
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/shader-ast/shader-ast-raymarch.jpg" width="240"/> | WebGL & JS canvas2D raymarch shader cross-compilation | [Demo](https://demo.thi.ng/umbrella/shader-ast-raymarch/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-raymarch) |
105
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-sdf2d.jpg" width="240"/> | WebGL & JS canvas 2D SDF | [Demo](https://demo.thi.ng/umbrella/shader-ast-sdf2d/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-sdf2d) |
106
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-tunnel.jpg" width="240"/> | WebGL & Canvas2D textured tunnel shader | [Demo](https://demo.thi.ng/umbrella/shader-ast-tunnel/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-tunnel) |
107
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-workers.jpg" width="240"/> | Fork-join worker-based raymarch renderer (JS/CPU only) | [Demo](https://demo.thi.ng/umbrella/shader-ast-workers/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-workers) |
100
+ | Screenshot | Description | Live demo | Source |
101
+ |:-----------------------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------|:----------------------------------------------------------|:---------------------------------------------------------------------------------------|
102
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/ascii-raymarch.jpg" width="240"/> | ASCII art raymarching with thi.ng/shader-ast & thi.ng/text-canvas | [Demo](https://demo.thi.ng/umbrella/ascii-raymarch/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/ascii-raymarch) |
103
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/shader-ast/shader-ast-01.jpg" width="240"/> | 2D canvas shader emulation | [Demo](https://demo.thi.ng/umbrella/shader-ast-canvas2d/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-canvas2d) |
104
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-noise.jpg" width="240"/> | HOF shader procedural noise function composition | [Demo](https://demo.thi.ng/umbrella/shader-ast-noise/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-noise) |
105
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/shader-ast/shader-ast-raymarch.jpg" width="240"/> | WebGL & JS canvas2D raymarch shader cross-compilation | [Demo](https://demo.thi.ng/umbrella/shader-ast-raymarch/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-raymarch) |
106
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-sdf2d.jpg" width="240"/> | WebGL & JS canvas 2D SDF | [Demo](https://demo.thi.ng/umbrella/shader-ast-sdf2d/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-sdf2d) |
107
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-tunnel.jpg" width="240"/> | WebGL & Canvas2D textured tunnel shader | [Demo](https://demo.thi.ng/umbrella/shader-ast-tunnel/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-tunnel) |
108
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-workers.jpg" width="240"/> | Fork-join worker-based raymarch renderer (JS/CPU only) | [Demo](https://demo.thi.ng/umbrella/shader-ast-workers/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-workers) |
108
109
 
109
110
  ## API
110
111
 
package/api.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { Fn, Fn2, Fn3, Fn4, Fn5, Fn6 } from "@thi.ng/api";
1
+ import type { Fn, Fn0, Fn2, Fn3, Fn4, Fn5, Fn6, Keys } from "@thi.ng/api";
2
2
  import type { Mat } from "@thi.ng/matrices";
3
3
  import type { Term } from "@thi.ng/shader-ast";
4
4
  import type { BVec, Vec } from "@thi.ng/vectors";
5
+ import type { Pool } from "./pool.js";
5
6
  export interface JSTarget extends Fn<Term<any>, string> {
6
7
  /**
7
8
  * Compiles given AST to JavaScript, using optional `env` as backend for
@@ -31,7 +32,21 @@ export interface JSTarget extends Fn<Term<any>, string> {
31
32
  * @param tree -
32
33
  * @param env -
33
34
  */
34
- compile(tree: Term<any>, env?: JSEnv): any;
35
+ compile(tree: Term<any>, env?: JSEnv): CompileResult;
36
+ }
37
+ export interface CompileResult {
38
+ /**
39
+ * Resets all internal vector pools. Will be called automatically if
40
+ * compiled tree includes a `main()` function, otherwise **MUST** be called
41
+ * manually each time before invoking a compiled entry point function.
42
+ */
43
+ __reset: Fn0<void>;
44
+ /**
45
+ * Returns an object summarizing the number of used objects in each vector
46
+ * pool.
47
+ */
48
+ __stats: Fn0<Record<Keys<JSEnv["pools"]>, number>>;
49
+ [id: string]: any;
35
50
  }
36
51
  export interface JSBuiltinsCommon<T> {
37
52
  abs: Fn<T, T>;
@@ -218,6 +233,17 @@ export interface JSEnv {
218
233
  samplerCube: JSBuiltinsSampler;
219
234
  sampler2DShadow: JSBuiltinsSampler;
220
235
  samplerCubeShadow: JSBuiltinsSampler;
236
+ pools: {
237
+ vec2: Pool;
238
+ vec3: Pool;
239
+ vec4: Pool;
240
+ ivec2: Pool;
241
+ ivec3: Pool;
242
+ ivec4: Pool;
243
+ uvec2: Pool;
244
+ uvec3: Pool;
245
+ uvec4: Pool;
246
+ };
221
247
  }
222
248
  export interface JSTargetOpts {
223
249
  /**
package/env/ivec2.js CHANGED
@@ -10,28 +10,30 @@ import { lshiftI2 } from "@thi.ng/vectors/lshift";
10
10
  import { mulI2, mulNI2 } from "@thi.ng/vectors/muli";
11
11
  import { rshiftI2 } from "@thi.ng/vectors/rshift";
12
12
  import { subI2, subNI2 } from "@thi.ng/vectors/subi";
13
+ import { POOL_IVEC2 } from "../pool.js";
13
14
  import { VEC2 } from "./vec2.js";
15
+ const { next, uniform } = POOL_IVEC2;
14
16
  export const IVEC2 = {
15
- ...VEC2,
16
- add: (a, b) => addI2([], a, b),
17
- addvn: (a, b) => addNI2([], a, b),
18
- addnv: (a, b) => addNI2([], b, a),
19
- div: (a, b) => divI2([], a, b),
20
- divvn: (a, b) => divNI2([], a, b),
21
- divnv: (a, b) => divI2(null, [a, a], b),
22
- modi: (a, b) => fmod2([], a, b),
23
- modivn: (a, b) => fmodN2([], a, b),
24
- modinv: (a, b) => fmod2(null, [a, a], b),
25
- mul: (a, b) => mulI2([], a, b),
26
- mulvn: (a, b) => mulNI2([], a, b),
27
- mulnv: (a, b) => mulNI2([], b, a),
28
- sub: (a, b) => subI2([], a, b),
29
- subvn: (a, b) => subNI2([], a, b),
30
- subnv: (a, b) => subI2(null, [a, a], b),
31
- bitand: (a, b) => bitAndI2([], a, b),
32
- lshift: (a, b) => lshiftI2([], a, b),
33
- bitnot1: (a) => bitNotI2([], a),
34
- bitor: (a, b) => bitOrI2([], a, b),
35
- rshift: (a, b) => rshiftI2([], a, b),
36
- bitxor: (a, b) => bitXorI2([], a, b),
17
+ ...VEC2(POOL_IVEC2),
18
+ add: (a, b) => addI2(next(), a, b),
19
+ addvn: (a, b) => addNI2(next(), a, b),
20
+ addnv: (a, b) => addNI2(next(), b, a),
21
+ div: (a, b) => divI2(next(), a, b),
22
+ divvn: (a, b) => divNI2(next(), a, b),
23
+ divnv: (a, b) => divI2(null, uniform(a), b),
24
+ modi: (a, b) => fmod2(next(), a, b),
25
+ modivn: (a, b) => fmodN2(next(), a, b),
26
+ modinv: (a, b) => fmod2(null, uniform(a), b),
27
+ mul: (a, b) => mulI2(next(), a, b),
28
+ mulvn: (a, b) => mulNI2(next(), a, b),
29
+ mulnv: (a, b) => mulNI2(next(), b, a),
30
+ sub: (a, b) => subI2(next(), a, b),
31
+ subvn: (a, b) => subNI2(next(), a, b),
32
+ subnv: (a, b) => subI2(null, uniform(a), b),
33
+ bitand: (a, b) => bitAndI2(next(), a, b),
34
+ lshift: (a, b) => lshiftI2(next(), a, b),
35
+ bitnot1: (a) => bitNotI2(next(), a),
36
+ bitor: (a, b) => bitOrI2(next(), a, b),
37
+ rshift: (a, b) => rshiftI2(next(), a, b),
38
+ bitxor: (a, b) => bitXorI2(next(), a, b),
37
39
  };
package/env/ivec3.js CHANGED
@@ -10,28 +10,30 @@ import { lshiftI3 } from "@thi.ng/vectors/lshift";
10
10
  import { mulI3, mulNI3 } from "@thi.ng/vectors/muli";
11
11
  import { rshiftI3 } from "@thi.ng/vectors/rshift";
12
12
  import { subI3, subNI3 } from "@thi.ng/vectors/subi";
13
+ import { POOL_IVEC3 } from "../pool.js";
13
14
  import { VEC3 } from "./vec3.js";
15
+ const { next, uniform } = POOL_IVEC3;
14
16
  export const IVEC3 = {
15
- ...VEC3,
16
- add: (a, b) => addI3([], a, b),
17
- addvn: (a, b) => addNI3([], a, b),
18
- addnv: (a, b) => addNI3([], b, a),
19
- div: (a, b) => divI3([], a, b),
20
- divvn: (a, b) => divNI3([], a, b),
21
- divnv: (a, b) => divI3(null, [a, a, a], b),
22
- modi: (a, b) => fmod3([], a, b),
23
- modivn: (a, b) => fmodN3([], a, b),
24
- modinv: (a, b) => fmod3(null, [a, a, a], b),
25
- mul: (a, b) => mulI3([], a, b),
26
- mulvn: (a, b) => mulNI3([], a, b),
27
- mulnv: (a, b) => mulNI3([], b, a),
28
- sub: (a, b) => subI3([], a, b),
29
- subvn: (a, b) => subNI3([], a, b),
30
- subnv: (a, b) => subI3(null, [a, a, a], b),
31
- bitand: (a, b) => bitAndI3([], a, b),
32
- lshift: (a, b) => lshiftI3([], a, b),
33
- bitnot1: (a) => bitNotI3([], a),
34
- bitor: (a, b) => bitOrI3([], a, b),
35
- rshift: (a, b) => rshiftI3([], a, b),
36
- bitxor: (a, b) => bitXorI3([], a, b),
17
+ ...VEC3(POOL_IVEC3),
18
+ add: (a, b) => addI3(next(), a, b),
19
+ addvn: (a, b) => addNI3(next(), a, b),
20
+ addnv: (a, b) => addNI3(next(), b, a),
21
+ div: (a, b) => divI3(next(), a, b),
22
+ divvn: (a, b) => divNI3(next(), a, b),
23
+ divnv: (a, b) => divI3(null, uniform(a), b),
24
+ modi: (a, b) => fmod3(next(), a, b),
25
+ modivn: (a, b) => fmodN3(next(), a, b),
26
+ modinv: (a, b) => fmod3(null, uniform(a), b),
27
+ mul: (a, b) => mulI3(next(), a, b),
28
+ mulvn: (a, b) => mulNI3(next(), a, b),
29
+ mulnv: (a, b) => mulNI3(next(), b, a),
30
+ sub: (a, b) => subI3(next(), a, b),
31
+ subvn: (a, b) => subNI3(next(), a, b),
32
+ subnv: (a, b) => subI3(null, uniform(a), b),
33
+ bitand: (a, b) => bitAndI3(next(), a, b),
34
+ lshift: (a, b) => lshiftI3(next(), a, b),
35
+ bitnot1: (a) => bitNotI3(next(), a),
36
+ bitor: (a, b) => bitOrI3(next(), a, b),
37
+ rshift: (a, b) => rshiftI3(next(), a, b),
38
+ bitxor: (a, b) => bitXorI3(next(), a, b),
37
39
  };
package/env/ivec4.js CHANGED
@@ -10,28 +10,30 @@ import { lshiftI4 } from "@thi.ng/vectors/lshift";
10
10
  import { mulI4, mulNI4 } from "@thi.ng/vectors/muli";
11
11
  import { rshiftI4 } from "@thi.ng/vectors/rshift";
12
12
  import { subI4, subNI4 } from "@thi.ng/vectors/subi";
13
+ import { POOL_IVEC4 } from "../pool.js";
13
14
  import { VEC4 } from "./vec4.js";
15
+ const { next, uniform } = POOL_IVEC4;
14
16
  export const IVEC4 = {
15
- ...VEC4,
16
- add: (a, b) => addI4([], a, b),
17
- addvn: (a, b) => addNI4([], a, b),
18
- addnv: (a, b) => addNI4([], b, a),
19
- div: (a, b) => divI4([], a, b),
20
- divvn: (a, b) => divNI4([], a, b),
21
- divnv: (a, b) => divI4(null, [a, a, a, a], b),
22
- modi: (a, b) => fmod4([], a, b),
23
- modivn: (a, b) => fmodN4([], a, b),
24
- modinv: (a, b) => fmod4(null, [a, a, a, a], b),
25
- mul: (a, b) => mulI4([], a, b),
26
- mulvn: (a, b) => mulNI4([], a, b),
27
- mulnv: (a, b) => mulNI4([], b, a),
28
- sub: (a, b) => subI4([], a, b),
29
- subvn: (a, b) => subNI4([], a, b),
30
- subnv: (a, b) => subI4(null, [a, a, a, a], b),
31
- bitand: (a, b) => bitAndI4([], a, b),
32
- lshift: (a, b) => lshiftI4([], a, b),
33
- bitnot1: (a) => bitNotI4([], a),
34
- bitor: (a, b) => bitOrI4([], a, b),
35
- rshift: (a, b) => rshiftI4([], a, b),
36
- bitxor: (a, b) => bitXorI4([], a, b),
17
+ ...VEC4(POOL_IVEC4),
18
+ add: (a, b) => addI4(next(), a, b),
19
+ addvn: (a, b) => addNI4(next(), a, b),
20
+ addnv: (a, b) => addNI4(next(), b, a),
21
+ div: (a, b) => divI4(next(), a, b),
22
+ divvn: (a, b) => divNI4(next(), a, b),
23
+ divnv: (a, b) => divI4(null, uniform(a), b),
24
+ modi: (a, b) => fmod4(next(), a, b),
25
+ modivn: (a, b) => fmodN4(next(), a, b),
26
+ modinv: (a, b) => fmod4(null, uniform(a), b),
27
+ mul: (a, b) => mulI4(next(), a, b),
28
+ mulvn: (a, b) => mulNI4(next(), a, b),
29
+ mulnv: (a, b) => mulNI4(next(), b, a),
30
+ sub: (a, b) => subI4(next(), a, b),
31
+ subvn: (a, b) => subNI4(next(), a, b),
32
+ subnv: (a, b) => subI4(null, uniform(a), b),
33
+ bitand: (a, b) => bitAndI4(next(), a, b),
34
+ lshift: (a, b) => lshiftI4(next(), a, b),
35
+ bitnot1: (a) => bitNotI4(next(), a),
36
+ bitor: (a, b) => bitOrI4(next(), a, b),
37
+ rshift: (a, b) => rshiftI4(next(), a, b),
38
+ bitxor: (a, b) => bitXorI4(next(), a, b),
37
39
  };
package/env/mat2.js CHANGED
@@ -10,24 +10,26 @@ import { mulVM22 } from "@thi.ng/matrices/mulvm";
10
10
  import { sub22 } from "@thi.ng/matrices/sub";
11
11
  import { subN22 } from "@thi.ng/matrices/subn";
12
12
  import { neg } from "@thi.ng/vectors/neg";
13
+ import { POOL_VEC4 } from "../pool.js";
14
+ const { next, uniform } = POOL_VEC4;
13
15
  export const MAT2 = {
14
- add: (a, b) => add22([], a, b),
15
- addnv: (a, b) => addN22([], b, a),
16
- addvn: (a, b) => addN22([], a, b),
17
- dec: (a) => subN22([], a, 1),
18
- div: (a, b) => div22([], a, b),
19
- divnv: (a, b) => div22(null, [a, a, a, a], b),
20
- divvn: (a, b) => divN22([], a, b),
16
+ add: (a, b) => add22(next(), a, b),
17
+ addnv: (a, b) => addN22(next(), b, a),
18
+ addvn: (a, b) => addN22(next(), a, b),
19
+ dec: (a) => subN22(next(), a, 1),
20
+ div: (a, b) => div22(next(), a, b),
21
+ divnv: (a, b) => div22(null, uniform(a), b),
22
+ divvn: (a, b) => divN22(next(), a, b),
21
23
  idx: (a, b) => [a[b * 2], a[b * 2 + 1]],
22
- inc: (a) => addN22([], a, 1),
23
- mul: (a, b) => mul22([], a, b),
24
- mulm: (a, b) => mulM22([], a, b),
25
- mulmv: (a, b) => mulV22([], a, b),
26
- mulnv: (a, b) => mulN22([], b, a),
27
- mulvm: (a, b) => mulVM22([], a, b),
28
- mulvn: (a, b) => mulN22([], a, b),
29
- sub: (a, b) => sub22([], a, b),
30
- sub1: (a) => neg([], a),
31
- subnv: (a, b) => sub22(null, [a, a, a, a], b),
32
- subvn: (a, b) => subN22([], a, b),
24
+ inc: (a) => addN22(next(), a, 1),
25
+ mul: (a, b) => mul22(next(), a, b),
26
+ mulm: (a, b) => mulM22(next(), a, b),
27
+ mulmv: (a, b) => mulV22(next(), a, b),
28
+ mulnv: (a, b) => mulN22(next(), b, a),
29
+ mulvm: (a, b) => mulVM22(next(), a, b),
30
+ mulvn: (a, b) => mulN22(next(), a, b),
31
+ sub: (a, b) => sub22(next(), a, b),
32
+ sub1: (a) => neg(next(), a),
33
+ subnv: (a, b) => sub22(null, uniform(a), b),
34
+ subvn: (a, b) => subN22(next(), a, b),
33
35
  };
package/env/uvec2.js CHANGED
@@ -10,28 +10,30 @@ import { lshiftU2 } from "@thi.ng/vectors/lshift";
10
10
  import { mulNU2, mulU2 } from "@thi.ng/vectors/muli";
11
11
  import { rshiftU2 } from "@thi.ng/vectors/rshift";
12
12
  import { subNU2, subU2 } from "@thi.ng/vectors/subi";
13
+ import { POOL_UVEC2 } from "../pool.js";
13
14
  import { VEC2 } from "./vec2.js";
15
+ const { next, uniform } = POOL_UVEC2;
14
16
  export const UVEC2 = {
15
- ...VEC2,
16
- add: (a, b) => addU2([], a, b),
17
- addvn: (a, b) => addNU2([], a, b),
18
- addnv: (a, b) => addNU2([], b, a),
19
- div: (a, b) => divU2([], a, b),
20
- divvn: (a, b) => divNU2([], a, b),
21
- divnv: (a, b) => divU2(null, [a, a], b),
22
- modi: (a, b) => fmod2([], a, b),
23
- modivn: (a, b) => fmodN2([], a, b),
24
- modinv: (a, b) => fmod2(null, [a, a], b),
25
- mul: (a, b) => mulU2([], a, b),
26
- mulvn: (a, b) => mulNU2([], a, b),
27
- mulnv: (a, b) => mulNU2([], b, a),
28
- sub: (a, b) => subU2([], a, b),
29
- subvn: (a, b) => subNU2([], a, b),
30
- subnv: (a, b) => subU2(null, [a, a], b),
31
- bitand: (a, b) => bitAndU2([], a, b),
32
- lshift: (a, b) => lshiftU2([], a, b),
33
- bitnot1: (a) => bitNotU2([], a),
34
- bitor: (a, b) => bitOrU2([], a, b),
35
- rshift: (a, b) => rshiftU2([], a, b),
36
- bitxor: (a, b) => bitXorU2([], a, b),
17
+ ...VEC2(POOL_UVEC2),
18
+ add: (a, b) => addU2(next(), a, b),
19
+ addvn: (a, b) => addNU2(next(), a, b),
20
+ addnv: (a, b) => addNU2(next(), b, a),
21
+ div: (a, b) => divU2(next(), a, b),
22
+ divvn: (a, b) => divNU2(next(), a, b),
23
+ divnv: (a, b) => divU2(null, uniform(a), b),
24
+ modi: (a, b) => fmod2(next(), a, b),
25
+ modivn: (a, b) => fmodN2(next(), a, b),
26
+ modinv: (a, b) => fmod2(null, uniform(a), b),
27
+ mul: (a, b) => mulU2(next(), a, b),
28
+ mulvn: (a, b) => mulNU2(next(), a, b),
29
+ mulnv: (a, b) => mulNU2(next(), b, a),
30
+ sub: (a, b) => subU2(next(), a, b),
31
+ subvn: (a, b) => subNU2(next(), a, b),
32
+ subnv: (a, b) => subU2(null, uniform(a), b),
33
+ bitand: (a, b) => bitAndU2(next(), a, b),
34
+ lshift: (a, b) => lshiftU2(next(), a, b),
35
+ bitnot1: (a) => bitNotU2(next(), a),
36
+ bitor: (a, b) => bitOrU2(next(), a, b),
37
+ rshift: (a, b) => rshiftU2(next(), a, b),
38
+ bitxor: (a, b) => bitXorU2(next(), a, b),
37
39
  };
package/env/uvec3.js CHANGED
@@ -10,28 +10,30 @@ import { lshiftU3 } from "@thi.ng/vectors/lshift";
10
10
  import { mulNU3, mulU3 } from "@thi.ng/vectors/muli";
11
11
  import { rshiftU3 } from "@thi.ng/vectors/rshift";
12
12
  import { subNU3, subU3 } from "@thi.ng/vectors/subi";
13
+ import { POOL_UVEC3 } from "../pool.js";
13
14
  import { VEC3 } from "./vec3.js";
15
+ const { next, uniform } = POOL_UVEC3;
14
16
  export const UVEC3 = {
15
- ...VEC3,
16
- add: (a, b) => addU3([], a, b),
17
- addvn: (a, b) => addNU3([], a, b),
18
- addnv: (a, b) => addNU3([], b, a),
19
- div: (a, b) => divU3([], a, b),
20
- divvn: (a, b) => divNU3([], a, b),
21
- divnv: (a, b) => divU3(null, [a, a, a], b),
22
- modi: (a, b) => fmod3([], a, b),
23
- modivn: (a, b) => fmodN3([], a, b),
24
- modinv: (a, b) => fmod3(null, [a, a, a], b),
25
- mul: (a, b) => mulU3([], a, b),
26
- mulvn: (a, b) => mulNU3([], a, b),
27
- mulnv: (a, b) => mulNU3([], b, a),
28
- sub: (a, b) => subU3([], a, b),
29
- subvn: (a, b) => subNU3([], a, b),
30
- subnv: (a, b) => subU3(null, [a, a, a], b),
31
- bitand: (a, b) => bitAndU3([], a, b),
32
- lshift: (a, b) => lshiftU3([], a, b),
33
- bitnot1: (a) => bitNotU3([], a),
34
- bitor: (a, b) => bitOrU3([], a, b),
35
- rshift: (a, b) => rshiftU3([], a, b),
36
- bitxor: (a, b) => bitXorU3([], a, b),
17
+ ...VEC3(POOL_UVEC3),
18
+ add: (a, b) => addU3(next(), a, b),
19
+ addvn: (a, b) => addNU3(next(), a, b),
20
+ addnv: (a, b) => addNU3(next(), b, a),
21
+ div: (a, b) => divU3(next(), a, b),
22
+ divvn: (a, b) => divNU3(next(), a, b),
23
+ divnv: (a, b) => divU3(null, uniform(a), b),
24
+ modi: (a, b) => fmod3(next(), a, b),
25
+ modivn: (a, b) => fmodN3(next(), a, b),
26
+ modinv: (a, b) => fmod3(null, uniform(a), b),
27
+ mul: (a, b) => mulU3(next(), a, b),
28
+ mulvn: (a, b) => mulNU3(next(), a, b),
29
+ mulnv: (a, b) => mulNU3(next(), b, a),
30
+ sub: (a, b) => subU3(next(), a, b),
31
+ subvn: (a, b) => subNU3(next(), a, b),
32
+ subnv: (a, b) => subU3(null, uniform(a), b),
33
+ bitand: (a, b) => bitAndU3(next(), a, b),
34
+ lshift: (a, b) => lshiftU3(next(), a, b),
35
+ bitnot1: (a) => bitNotU3(next(), a),
36
+ bitor: (a, b) => bitOrU3(next(), a, b),
37
+ rshift: (a, b) => rshiftU3(next(), a, b),
38
+ bitxor: (a, b) => bitXorU3(next(), a, b),
37
39
  };
package/env/uvec4.js CHANGED
@@ -10,28 +10,30 @@ import { lshiftU4 } from "@thi.ng/vectors/lshift";
10
10
  import { mulNU4, mulU4 } from "@thi.ng/vectors/muli";
11
11
  import { rshiftU4 } from "@thi.ng/vectors/rshift";
12
12
  import { subNU4, subU4 } from "@thi.ng/vectors/subi";
13
+ import { POOL_UVEC4 } from "../pool.js";
13
14
  import { VEC4 } from "./vec4.js";
15
+ const { next, uniform } = POOL_UVEC4;
14
16
  export const UVEC4 = {
15
- ...VEC4,
16
- add: (a, b) => addU4([], a, b),
17
- addvn: (a, b) => addNU4([], a, b),
18
- addnv: (a, b) => addNU4([], b, a),
19
- div: (a, b) => divU4([], a, b),
20
- divvn: (a, b) => divNU4([], a, b),
21
- divnv: (a, b) => divU4(null, [a, a, a, a], b),
22
- modi: (a, b) => fmod4([], a, b),
23
- modivn: (a, b) => fmodN4([], a, b),
24
- modinv: (a, b) => fmod4(null, [a, a, a, a], b),
25
- mul: (a, b) => mulU4([], a, b),
26
- mulvn: (a, b) => mulNU4([], a, b),
27
- mulnv: (a, b) => mulNU4([], b, a),
28
- sub: (a, b) => subU4([], a, b),
29
- subvn: (a, b) => subNU4([], a, b),
30
- subnv: (a, b) => subU4(null, [a, a, a, a], b),
31
- bitand: (a, b) => bitAndU4([], a, b),
32
- lshift: (a, b) => lshiftU4([], a, b),
33
- bitnot1: (a) => bitNotU4([], a),
34
- bitor: (a, b) => bitOrU4([], a, b),
35
- rshift: (a, b) => rshiftU4([], a, b),
36
- bitxor: (a, b) => bitXorU4([], a, b),
17
+ ...VEC4(POOL_UVEC4),
18
+ add: (a, b) => addU4(next(), a, b),
19
+ addvn: (a, b) => addNU4(next(), a, b),
20
+ addnv: (a, b) => addNU4(next(), b, a),
21
+ div: (a, b) => divU4(next(), a, b),
22
+ divvn: (a, b) => divNU4(next(), a, b),
23
+ divnv: (a, b) => divU4(null, uniform(a), b),
24
+ modi: (a, b) => fmod4(next(), a, b),
25
+ modivn: (a, b) => fmodN4(next(), a, b),
26
+ modinv: (a, b) => fmod4(null, uniform(a), b),
27
+ mul: (a, b) => mulU4(next(), a, b),
28
+ mulvn: (a, b) => mulNU4(next(), a, b),
29
+ mulnv: (a, b) => mulNU4(next(), b, a),
30
+ sub: (a, b) => subU4(next(), a, b),
31
+ subvn: (a, b) => subNU4(next(), a, b),
32
+ subnv: (a, b) => subU4(null, uniform(a), b),
33
+ bitand: (a, b) => bitAndU4(next(), a, b),
34
+ lshift: (a, b) => lshiftU4(next(), a, b),
35
+ bitnot1: (a) => bitNotU4(next(), a),
36
+ bitor: (a, b) => bitOrU4(next(), a, b),
37
+ rshift: (a, b) => rshiftU4(next(), a, b),
38
+ bitxor: (a, b) => bitXorU4(next(), a, b),
37
39
  };
package/env/vec2.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import type { JSBuiltinsVec } from "../api.js";
2
- export declare const VEC2: JSBuiltinsVec;
2
+ import { Pool } from "../pool.js";
3
+ export declare const VEC2: ({ next, uniform }: Pool) => JSBuiltinsVec;
3
4
  //# sourceMappingURL=vec2.d.ts.map
package/env/vec2.js CHANGED
@@ -50,66 +50,67 @@ import { step2 } from "@thi.ng/vectors/step";
50
50
  import { sub2 } from "@thi.ng/vectors/sub";
51
51
  import { subN2 } from "@thi.ng/vectors/subn";
52
52
  import { tan2 } from "@thi.ng/vectors/tan";
53
- export const VEC2 = {
54
- abs: (a) => abs2([], a),
55
- acos: (a) => acos2([], a),
56
- add: (a, b) => add2([], a, b),
57
- addnv: (a, b) => addN2([], b, a),
58
- addvn: (a, b) => addN2([], a, b),
59
- asin: (a) => asin2([], a),
60
- atan: (a) => atan2([], a),
61
- atannn: (a, b) => atan_22([], a, b),
62
- ceil: (a) => ceil2([], a),
63
- clamp: (x, a, b) => clamp2([], x, a, b),
64
- cos: (a) => cos2([], a),
65
- dec: (a) => subN2([], a, 1),
66
- degrees: (a) => degrees2([], a),
53
+ import { Pool } from "../pool.js";
54
+ export const VEC2 = ({ next, uniform }) => ({
55
+ abs: (a) => abs2(next(), a),
56
+ acos: (a) => acos2(next(), a),
57
+ add: (a, b) => add2(next(), a, b),
58
+ addnv: (a, b) => addN2(next(), b, a),
59
+ addvn: (a, b) => addN2(next(), a, b),
60
+ asin: (a) => asin2(next(), a),
61
+ atan: (a) => atan2(next(), a),
62
+ atannn: (a, b) => atan_22(next(), a, b),
63
+ ceil: (a) => ceil2(next(), a),
64
+ clamp: (x, a, b) => clamp2(next(), x, a, b),
65
+ cos: (a) => cos2(next(), a),
66
+ dec: (a) => subN2(next(), a, 1),
67
+ degrees: (a) => degrees2(next(), a),
67
68
  dFdx: () => ZERO2,
68
69
  dFdy: () => ZERO2,
69
70
  distance: dist,
70
- div: (a, b) => div2([], a, b),
71
- divnv: (a, b) => div2(null, [a, a], b),
72
- divvn: (a, b) => divN2([], a, b),
71
+ div: (a, b) => div2(next(), a, b),
72
+ divnv: (a, b) => div2(null, uniform(a), b),
73
+ divvn: (a, b) => divN2(next(), a, b),
73
74
  dot: (a, b) => dot2(a, b),
74
- exp: (a) => exp2([], a),
75
- exp2: (a) => exp_22([], a),
76
- faceForward: (a, b, c) => faceForward([], a, b, c),
77
- floor: (a) => floor2([], a),
78
- fract: (a) => fract2([], a),
75
+ exp: (a) => exp2(next(), a),
76
+ exp2: (a) => exp_22(next(), a),
77
+ faceForward: (a, b, c) => faceForward(next(), a, b, c),
78
+ floor: (a) => floor2(next(), a),
79
+ fract: (a) => fract2(next(), a),
79
80
  fwidth: () => ZERO2,
80
- inc: (a) => addN2([], a, 1),
81
- inversesqrt: (a) => invSqrt2([], a),
81
+ inc: (a) => addN2(next(), a, 1),
82
+ inversesqrt: (a) => invSqrt2(next(), a),
82
83
  length: mag,
83
- log: (a) => log2([], a),
84
- log2: (a) => log_22([], a),
85
- max: (a, b) => max2([], a, b),
86
- min: (a, b) => min2([], a, b),
87
- mix: (a, b, t) => mix2([], a, b, t),
88
- mixn: (a, b, t) => mixN2([], a, b, t),
89
- mod: (a, b) => mod2([], a, b),
90
- modn: (a, b) => modN2([], a, b),
91
- mul: (a, b) => mul2([], a, b),
92
- mulnv: (a, b) => mulN2([], b, a),
93
- mulvn: (a, b) => mulN2([], a, b),
94
- normalize: (a) => normalize2([], a),
95
- pow: (a, b) => pow2([], a, b),
96
- radians: (a) => radians2([], a),
97
- reflect: (a, b) => reflect([], a, b),
98
- refract: (a, b, c) => refract([], a, b, c),
99
- sign: (a) => sign2([], a),
100
- sin: (a) => sin2([], a),
101
- smoothstep: (a, b, t) => smoothStep2([], a, b, t),
102
- sqrt: (a) => sqrt2([], a),
103
- step: (a, b) => step2([], a, b),
104
- sub: (a, b) => sub2([], a, b),
105
- sub1: (a) => neg([], a),
106
- subnv: (a, b) => sub2(null, [a, a], b),
107
- subvn: (a, b) => subN2([], a, b),
108
- tan: (a) => tan2([], a),
84
+ log: (a) => log2(next(), a),
85
+ log2: (a) => log_22(next(), a),
86
+ max: (a, b) => max2(next(), a, b),
87
+ min: (a, b) => min2(next(), a, b),
88
+ mix: (a, b, t) => mix2(next(), a, b, t),
89
+ mixn: (a, b, t) => mixN2(next(), a, b, t),
90
+ mod: (a, b) => mod2(next(), a, b),
91
+ modn: (a, b) => modN2(next(), a, b),
92
+ mul: (a, b) => mul2(next(), a, b),
93
+ mulnv: (a, b) => mulN2(next(), b, a),
94
+ mulvn: (a, b) => mulN2(next(), a, b),
95
+ normalize: (a) => normalize2(next(), a),
96
+ pow: (a, b) => pow2(next(), a, b),
97
+ radians: (a) => radians2(next(), a),
98
+ reflect: (a, b) => reflect(next(), a, b),
99
+ refract: (a, b, c) => refract(next(), a, b, c),
100
+ sign: (a) => sign2(next(), a),
101
+ sin: (a) => sin2(next(), a),
102
+ smoothstep: (a, b, t) => smoothStep2(next(), a, b, t),
103
+ sqrt: (a) => sqrt2(next(), a),
104
+ step: (a, b) => step2(next(), a, b),
105
+ sub: (a, b) => sub2(next(), a, b),
106
+ sub1: (a) => neg(next(), a),
107
+ subnv: (a, b) => sub2(null, uniform(a), b),
108
+ subvn: (a, b) => subN2(next(), a, b),
109
+ tan: (a) => tan2(next(), a),
109
110
  equal: (a, b) => eq2([], a, b),
110
111
  notEqual: (a, b) => neq2([], a, b),
111
112
  greaterThan: (a, b) => gt2([], a, b),
112
113
  lessThan: (a, b) => lt2([], a, b),
113
114
  greaterThanEqual: (a, b) => gte2([], a, b),
114
115
  lessThanEqual: (a, b) => lte2([], a, b),
115
- };
116
+ });