typegpu 0.0.0-alpha.3 → 0.0.0-alpha.5
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +29 -0
- package/chunk-337KOXP7.js +2 -0
- package/chunk-337KOXP7.js.map +1 -0
- package/chunk-6WFXH2OR.js +8 -0
- package/chunk-6WFXH2OR.js.map +1 -0
- package/chunk-G6QA55EY.cjs +8 -0
- package/chunk-G6QA55EY.cjs.map +1 -0
- package/chunk-S55XYV7U.cjs +2 -0
- package/chunk-S55XYV7U.cjs.map +1 -0
- package/data/index.cjs +1 -9
- package/data/index.cjs.map +1 -1
- package/data/index.d.cts +41 -46
- package/data/index.d.ts +41 -46
- package/data/index.js +1 -9
- package/data/index.js.map +1 -1
- package/index.cjs +1 -28
- package/index.cjs.map +1 -1
- package/index.d.cts +54 -250
- package/index.d.ts +54 -250
- package/index.js +1 -28
- package/index.js.map +1 -1
- package/macro/index.cjs +3 -3
- package/macro/index.cjs.map +1 -1
- package/macro/index.d.cts +1 -1
- package/macro/index.d.ts +1 -1
- package/macro/index.js +2 -2
- package/macro/index.js.map +1 -1
- package/package.json +15 -14
- package/types-DU0c7BuW.d.cts +207 -0
- package/types-DU0c7BuW.d.ts +207 -0
- package/.DS_Store +0 -0
- package/chunk-G3WAZR24.cjs +0 -4
- package/chunk-G3WAZR24.cjs.map +0 -1
- package/chunk-JYXJ5NFX.cjs +0 -2
- package/chunk-JYXJ5NFX.cjs.map +0 -1
- package/chunk-K6N2A55L.js +0 -4
- package/chunk-K6N2A55L.js.map +0 -1
- package/chunk-NTGWE7PR.js +0 -2
- package/chunk-NTGWE7PR.js.map +0 -1
- package/struct-ER9XI7ad.d.cts +0 -9
- package/struct-udnQvwHG.d.ts +0 -9
- package/types-DeF6xFAt.d.cts +0 -148
- package/types-DeF6xFAt.d.ts +0 -148
package/data/index.d.cts
CHANGED
@@ -1,84 +1,79 @@
|
|
1
1
|
import * as TB from 'typed-binary';
|
2
|
-
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer } from 'typed-binary';
|
2
|
+
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord, Parsed } from 'typed-binary';
|
3
3
|
export { Parsed, Unwrap } from 'typed-binary';
|
4
|
-
import {
|
5
|
-
export {
|
4
|
+
import { g as TgpuData, R as ResolutionCtx, A as AnyTgpuData, b as TgpuNamable, i as TgpuPointer } from '../types-DU0c7BuW.cjs';
|
5
|
+
export { p as Vec2f, q as Vec2i, r as Vec2u, s as Vec3f, t as Vec3i, u as Vec3u, w as Vec4f, x as Vec4i, y as Vec4u, V as VecKind, j as vec2f, k as vec2i, l as vec2u, d as vec3f, e as vec3i, f as vec3u, m as vec4f, n as vec4i, o as vec4u, v as vecBase } from '../types-DU0c7BuW.cjs';
|
6
6
|
|
7
|
-
declare class
|
7
|
+
declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
|
8
8
|
readonly size: number;
|
9
9
|
readonly byteAlignment: number;
|
10
|
+
readonly expressionCode: string;
|
10
11
|
private readonly _innerSchema;
|
11
|
-
private readonly _expressionCode;
|
12
12
|
/**
|
13
13
|
* byteAlignment has to be a power of 2
|
14
14
|
*/
|
15
15
|
constructor({ schema, byteAlignment, code, }: {
|
16
16
|
schema: TSchema;
|
17
17
|
byteAlignment: number;
|
18
|
-
code:
|
18
|
+
code: string;
|
19
19
|
});
|
20
20
|
resolveReferences(): void;
|
21
21
|
write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void;
|
22
22
|
read(input: ISerialInput): ParseUnwrapped<TSchema>;
|
23
23
|
measure(value: ParseUnwrapped<TSchema> | MaxValue, measurer?: IMeasurer): IMeasurer;
|
24
|
+
getUnderlyingTypeString(): string;
|
25
|
+
getUnderlyingType(): SimpleTgpuData<AnySchema>;
|
24
26
|
resolve(ctx: ResolutionCtx): string;
|
25
27
|
}
|
26
28
|
|
27
|
-
type Bool =
|
29
|
+
type Bool = TgpuData<boolean>;
|
28
30
|
declare const bool: Bool;
|
29
|
-
type U32 =
|
31
|
+
type U32 = TgpuData<number>;
|
30
32
|
declare const u32: U32;
|
31
|
-
type I32 =
|
33
|
+
type I32 = TgpuData<number>;
|
32
34
|
declare const i32: I32;
|
33
|
-
type F32 =
|
35
|
+
type F32 = TgpuData<number>;
|
34
36
|
declare const f32: F32;
|
35
|
-
type Vec2u = WgslData<[number, number]>;
|
36
|
-
declare const vec2u: Vec2u;
|
37
|
-
type Vec2i = WgslData<[number, number]>;
|
38
|
-
declare const vec2i: Vec2i;
|
39
|
-
type Vec2f = WgslData<[number, number]>;
|
40
|
-
declare const vec2f: Vec2f;
|
41
|
-
type Vec3u = WgslData<[number, number, number]>;
|
42
|
-
declare const vec3u: Vec3u;
|
43
|
-
type Vec3i = WgslData<[number, number, number]>;
|
44
|
-
declare const vec3i: Vec3i;
|
45
|
-
type Vec3f = WgslData<[number, number, number]>;
|
46
|
-
declare const vec3f: Vec3f;
|
47
|
-
type Vec4u = WgslData<[number, number, number, number]>;
|
48
|
-
declare const vec4u: Vec4u;
|
49
|
-
type Vec4i = WgslData<[number, number, number, number]>;
|
50
|
-
declare const vec4i: Vec4i;
|
51
|
-
type Vec4f = WgslData<[number, number, number, number]>;
|
52
|
-
declare const vec4f: Vec4f;
|
53
37
|
/**
|
54
38
|
* Array of column vectors
|
55
39
|
*/
|
56
|
-
type Mat4f =
|
40
|
+
type Mat4f = TgpuData<number[]>;
|
57
41
|
declare const mat4f: Mat4f;
|
58
42
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
43
|
+
interface TgpuStruct<TProps extends Record<string, AnyTgpuData>> extends ISchema<UnwrapRecord<TProps>>, TgpuData<UnwrapRecord<TProps>>, TgpuNamable {
|
44
|
+
}
|
45
|
+
declare const struct: <TProps extends Record<string, AnyTgpuData>>(properties: TProps) => TgpuStruct<TProps>;
|
46
|
+
|
47
|
+
interface TgpuArray<TElement extends AnyTgpuData> extends TgpuData<Unwrap<TElement>[]> {
|
48
|
+
readonly elementType: TElement;
|
49
|
+
readonly elementCount: number;
|
50
|
+
}
|
51
|
+
declare class TgpuArrayImpl<TElement extends AnyTgpuData> extends Schema<Unwrap<TElement>[]> implements TgpuArray<TElement> {
|
52
|
+
readonly elementType: TElement;
|
53
|
+
readonly elementCount: number;
|
63
54
|
readonly byteAlignment: number;
|
64
55
|
readonly size: number;
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
measure(_values: ParseUnwrapped<TElement>[] | typeof MaxValue, measurer?: IMeasurer): IMeasurer;
|
56
|
+
readonly stride: number;
|
57
|
+
constructor(elementType: TElement, count: number);
|
58
|
+
write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]): void;
|
59
|
+
read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[];
|
60
|
+
measure(value: MaxValue | Parsed<Unwrap<TElement>>[], measurer?: IMeasurer): IMeasurer;
|
71
61
|
resolve(ctx: ResolutionCtx): string;
|
72
62
|
}
|
73
|
-
declare const
|
74
|
-
|
75
|
-
type WgslArray<TElement extends AnyWgslData> = WgslData<TB.Unwrap<TElement>[]>;
|
76
|
-
declare const arrayOf: <TElement extends AnyWgslData>(elementType: TElement, size: number) => WgslArray<TElement>;
|
63
|
+
declare const arrayOf: <TElement extends AnyTgpuData>(elementType: TElement, count: number) => TgpuArray<TElement>;
|
77
64
|
|
78
|
-
declare function ptr<TDataType extends
|
65
|
+
declare function ptr<TDataType extends AnyTgpuData>(pointsTo: TDataType): TgpuPointer<'function', TDataType>;
|
79
66
|
|
80
67
|
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
81
|
-
interface Atomic<TSchema extends U32 | I32> extends
|
68
|
+
interface Atomic<TSchema extends U32 | I32> extends TgpuData<Unwrap<TSchema>> {
|
69
|
+
}
|
70
|
+
|
71
|
+
declare function align<TAlign extends number, TData extends AnyTgpuData>(byteAlignment: TAlign, data: TData): TgpuAligned<TAlign, TData>;
|
72
|
+
interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
73
|
+
}
|
74
|
+
|
75
|
+
declare function size<TSize extends number, TData extends AnyTgpuData>(size: TSize, data: TData): TgpuSized<TSize, TData>;
|
76
|
+
interface TgpuSized<TSize extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
82
77
|
}
|
83
78
|
|
84
|
-
export { type Bool, type F32, type I32, type Mat4f,
|
79
|
+
export { type Bool, type F32, type I32, type Mat4f, SimpleTgpuData, type TgpuAligned, type TgpuArray, TgpuArrayImpl, type TgpuSized, type TgpuStruct, type U32, align, arrayOf, atomic, bool, f32, i32, mat4f, ptr, size, struct, u32 };
|
package/data/index.d.ts
CHANGED
@@ -1,84 +1,79 @@
|
|
1
1
|
import * as TB from 'typed-binary';
|
2
|
-
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer } from 'typed-binary';
|
2
|
+
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord, Parsed } from 'typed-binary';
|
3
3
|
export { Parsed, Unwrap } from 'typed-binary';
|
4
|
-
import {
|
5
|
-
export {
|
4
|
+
import { g as TgpuData, R as ResolutionCtx, A as AnyTgpuData, b as TgpuNamable, i as TgpuPointer } from '../types-DU0c7BuW.js';
|
5
|
+
export { p as Vec2f, q as Vec2i, r as Vec2u, s as Vec3f, t as Vec3i, u as Vec3u, w as Vec4f, x as Vec4i, y as Vec4u, V as VecKind, j as vec2f, k as vec2i, l as vec2u, d as vec3f, e as vec3i, f as vec3u, m as vec4f, n as vec4i, o as vec4u, v as vecBase } from '../types-DU0c7BuW.js';
|
6
6
|
|
7
|
-
declare class
|
7
|
+
declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
|
8
8
|
readonly size: number;
|
9
9
|
readonly byteAlignment: number;
|
10
|
+
readonly expressionCode: string;
|
10
11
|
private readonly _innerSchema;
|
11
|
-
private readonly _expressionCode;
|
12
12
|
/**
|
13
13
|
* byteAlignment has to be a power of 2
|
14
14
|
*/
|
15
15
|
constructor({ schema, byteAlignment, code, }: {
|
16
16
|
schema: TSchema;
|
17
17
|
byteAlignment: number;
|
18
|
-
code:
|
18
|
+
code: string;
|
19
19
|
});
|
20
20
|
resolveReferences(): void;
|
21
21
|
write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void;
|
22
22
|
read(input: ISerialInput): ParseUnwrapped<TSchema>;
|
23
23
|
measure(value: ParseUnwrapped<TSchema> | MaxValue, measurer?: IMeasurer): IMeasurer;
|
24
|
+
getUnderlyingTypeString(): string;
|
25
|
+
getUnderlyingType(): SimpleTgpuData<AnySchema>;
|
24
26
|
resolve(ctx: ResolutionCtx): string;
|
25
27
|
}
|
26
28
|
|
27
|
-
type Bool =
|
29
|
+
type Bool = TgpuData<boolean>;
|
28
30
|
declare const bool: Bool;
|
29
|
-
type U32 =
|
31
|
+
type U32 = TgpuData<number>;
|
30
32
|
declare const u32: U32;
|
31
|
-
type I32 =
|
33
|
+
type I32 = TgpuData<number>;
|
32
34
|
declare const i32: I32;
|
33
|
-
type F32 =
|
35
|
+
type F32 = TgpuData<number>;
|
34
36
|
declare const f32: F32;
|
35
|
-
type Vec2u = WgslData<[number, number]>;
|
36
|
-
declare const vec2u: Vec2u;
|
37
|
-
type Vec2i = WgslData<[number, number]>;
|
38
|
-
declare const vec2i: Vec2i;
|
39
|
-
type Vec2f = WgslData<[number, number]>;
|
40
|
-
declare const vec2f: Vec2f;
|
41
|
-
type Vec3u = WgslData<[number, number, number]>;
|
42
|
-
declare const vec3u: Vec3u;
|
43
|
-
type Vec3i = WgslData<[number, number, number]>;
|
44
|
-
declare const vec3i: Vec3i;
|
45
|
-
type Vec3f = WgslData<[number, number, number]>;
|
46
|
-
declare const vec3f: Vec3f;
|
47
|
-
type Vec4u = WgslData<[number, number, number, number]>;
|
48
|
-
declare const vec4u: Vec4u;
|
49
|
-
type Vec4i = WgslData<[number, number, number, number]>;
|
50
|
-
declare const vec4i: Vec4i;
|
51
|
-
type Vec4f = WgslData<[number, number, number, number]>;
|
52
|
-
declare const vec4f: Vec4f;
|
53
37
|
/**
|
54
38
|
* Array of column vectors
|
55
39
|
*/
|
56
|
-
type Mat4f =
|
40
|
+
type Mat4f = TgpuData<number[]>;
|
57
41
|
declare const mat4f: Mat4f;
|
58
42
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
43
|
+
interface TgpuStruct<TProps extends Record<string, AnyTgpuData>> extends ISchema<UnwrapRecord<TProps>>, TgpuData<UnwrapRecord<TProps>>, TgpuNamable {
|
44
|
+
}
|
45
|
+
declare const struct: <TProps extends Record<string, AnyTgpuData>>(properties: TProps) => TgpuStruct<TProps>;
|
46
|
+
|
47
|
+
interface TgpuArray<TElement extends AnyTgpuData> extends TgpuData<Unwrap<TElement>[]> {
|
48
|
+
readonly elementType: TElement;
|
49
|
+
readonly elementCount: number;
|
50
|
+
}
|
51
|
+
declare class TgpuArrayImpl<TElement extends AnyTgpuData> extends Schema<Unwrap<TElement>[]> implements TgpuArray<TElement> {
|
52
|
+
readonly elementType: TElement;
|
53
|
+
readonly elementCount: number;
|
63
54
|
readonly byteAlignment: number;
|
64
55
|
readonly size: number;
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
measure(_values: ParseUnwrapped<TElement>[] | typeof MaxValue, measurer?: IMeasurer): IMeasurer;
|
56
|
+
readonly stride: number;
|
57
|
+
constructor(elementType: TElement, count: number);
|
58
|
+
write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]): void;
|
59
|
+
read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[];
|
60
|
+
measure(value: MaxValue | Parsed<Unwrap<TElement>>[], measurer?: IMeasurer): IMeasurer;
|
71
61
|
resolve(ctx: ResolutionCtx): string;
|
72
62
|
}
|
73
|
-
declare const
|
74
|
-
|
75
|
-
type WgslArray<TElement extends AnyWgslData> = WgslData<TB.Unwrap<TElement>[]>;
|
76
|
-
declare const arrayOf: <TElement extends AnyWgslData>(elementType: TElement, size: number) => WgslArray<TElement>;
|
63
|
+
declare const arrayOf: <TElement extends AnyTgpuData>(elementType: TElement, count: number) => TgpuArray<TElement>;
|
77
64
|
|
78
|
-
declare function ptr<TDataType extends
|
65
|
+
declare function ptr<TDataType extends AnyTgpuData>(pointsTo: TDataType): TgpuPointer<'function', TDataType>;
|
79
66
|
|
80
67
|
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
81
|
-
interface Atomic<TSchema extends U32 | I32> extends
|
68
|
+
interface Atomic<TSchema extends U32 | I32> extends TgpuData<Unwrap<TSchema>> {
|
69
|
+
}
|
70
|
+
|
71
|
+
declare function align<TAlign extends number, TData extends AnyTgpuData>(byteAlignment: TAlign, data: TData): TgpuAligned<TAlign, TData>;
|
72
|
+
interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
73
|
+
}
|
74
|
+
|
75
|
+
declare function size<TSize extends number, TData extends AnyTgpuData>(size: TSize, data: TData): TgpuSized<TSize, TData>;
|
76
|
+
interface TgpuSized<TSize extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
82
77
|
}
|
83
78
|
|
84
|
-
export { type Bool, type F32, type I32, type Mat4f,
|
79
|
+
export { type Bool, type F32, type I32, type Mat4f, SimpleTgpuData, type TgpuAligned, type TgpuArray, TgpuArrayImpl, type TgpuSized, type TgpuStruct, type U32, align, arrayOf, atomic, bool, f32, i32, mat4f, ptr, size, struct, u32 };
|
package/data/index.js
CHANGED
@@ -1,10 +1,2 @@
|
|
1
|
-
import{c as
|
2
|
-
struct ${r} {
|
3
|
-
count: u32,
|
4
|
-
values: array<${this._elementType}, ${this.capacity}>,
|
5
|
-
}`),e.resolve(r)}},pe=(n,o)=>new d(n,o);import{MaxValue as A,Measurer as W,Schema as U,object as P}from"typed-binary";var he=n=>new h(n),h=class extends U{constructor(e){super();this._properties=e;s(this,"_label");s(this,"_innerSchema");s(this,"byteAlignment");s(this,"size");this._innerSchema=P(e),this.byteAlignment=Object.values(e).map(r=>r.byteAlignment).reduce((r,i)=>r>i?r:i),this.size=this.measure(A).size}$name(e){return this._label=e,this}resolveReferences(){throw new m}write(e,r){this._innerSchema.write(e,r)}read(e){return this._innerSchema.read(e)}measure(e,r=new W){return this._innerSchema.measure(e,r),r}resolve(e){let r=new u().$name(this._label);return e.addDeclaration(l`
|
6
|
-
struct ${r} {
|
7
|
-
${Object.entries(this._properties).map(([i,c])=>l`${i}: ${c},\n`)}
|
8
|
-
}
|
9
|
-
`),e.resolve(r)}};import*as g from"typed-binary";var xe=(n,o)=>new a({schema:g.arrayOf(n,o),byteAlignment:n.byteAlignment,code:l`array<${n}, ${o}>`});function O(n){return{scope:"function",pointsTo:n}}import{Measurer as _,Schema as M}from"typed-binary";function R(n){return new T(n)}var T=class extends M{constructor(e){super();this.innerData=e;s(this,"size");s(this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new m}write(e,r){this.innerData.write(e,r)}read(e){return this.innerData.read(e)}measure(e,r=new _){return this.innerData.measure(e,r)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};export{a as SimpleWgslData,xe as arrayOf,R as atomic,F as bool,pe as dynamicArrayOf,G as f32,q as i32,ee as mat4f,O as ptr,he as struct,y as u32,K as vec2f,J as vec2i,H as vec2u,Q as vec3f,N as vec3i,L as vec3u,Z as vec4f,Y as vec4i,X as vec4u};
|
1
|
+
import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i,l as j,m as k,n as l,o as m,p as n,q as o,r as p,s as q,t as r,u as s,v as t,w as u,x as v}from"../chunk-6WFXH2OR.js";import"../chunk-337KOXP7.js";export{a as SimpleTgpuData,j as TgpuArrayImpl,g as align,k as arrayOf,v as atomic,b as bool,e as f32,d as i32,f as mat4f,u as ptr,h as size,i as struct,c as u32,l as vec2f,m as vec2i,n as vec2u,o as vec3f,p as vec3i,q as vec3u,r as vec4f,s as vec4i,t as vec4u};
|
10
2
|
//# sourceMappingURL=index.js.map
|
package/data/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/data/std140.ts","../../src/data/alignIO.ts","../../src/data/numeric.ts","../../src/data/dynamicArray.ts","../../src/data/struct.ts","../../src/data/array.ts","../../src/data/pointer.ts","../../src/data/atomic.ts"],"sourcesContent":["/*\n * Typed-binary types that adhere to the `std140` layout rules.\n */\n\nimport {\n type AnySchema,\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, Wgsl, WgslData } from '../types';\nimport alignIO from './alignIO';\n\nexport class SimpleWgslData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements WgslData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n private readonly _innerSchema: TSchema;\n private readonly _expressionCode: Wgsl;\n\n /**\n * byteAlignment has to be a power of 2\n */\n constructor({\n schema,\n byteAlignment,\n code,\n }: {\n schema: TSchema;\n byteAlignment: number;\n code: Wgsl;\n }) {\n super();\n\n this._innerSchema = schema;\n this.byteAlignment = byteAlignment;\n this._expressionCode = code;\n this.size = this.measure(MaxValue).size;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n alignIO(output, this.byteAlignment);\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n alignIO(input, this.byteAlignment);\n return this._innerSchema.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n\n this._innerSchema.measure(value, measurer);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._expressionCode);\n }\n}\n","import type { IMeasurer, ISerialInput, ISerialOutput } from 'typed-binary';\n\n/**\n * @param io the IO to align\n * @param baseAlignment must be power of 2\n */\nfunction alignIO(\n io: ISerialInput | ISerialOutput | IMeasurer,\n baseAlignment: number,\n) {\n const currentPos = 'size' in io ? io.size : io.currentByteOffset;\n\n const bitMask = baseAlignment - 1;\n const offset = currentPos & bitMask;\n\n if ('skipBytes' in io) {\n io.skipBytes((baseAlignment - offset) & bitMask);\n } else {\n io.add((baseAlignment - offset) & bitMask);\n }\n}\n\nexport default alignIO;\n","import * as TB from 'typed-binary';\nimport type { WgslData } from '../types';\nimport { SimpleWgslData } from './std140';\n\nexport type Bool = WgslData<boolean>;\nexport const bool: Bool = new SimpleWgslData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\nexport type U32 = WgslData<number>;\nexport const u32: U32 = new SimpleWgslData({\n schema: TB.u32,\n byteAlignment: 4,\n code: 'u32',\n});\nexport type I32 = WgslData<number>;\nexport const i32: I32 = new SimpleWgslData({\n schema: TB.i32,\n byteAlignment: 4,\n code: 'i32',\n});\nexport type F32 = WgslData<number>;\nexport const f32: F32 = new SimpleWgslData({\n schema: TB.f32,\n byteAlignment: 4,\n code: 'f32',\n});\n\nexport type Vec2u = WgslData<[number, number]>;\nexport const vec2u: Vec2u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32]),\n byteAlignment: 8,\n code: 'vec2u',\n});\n\nexport type Vec2i = WgslData<[number, number]>;\nexport const vec2i: Vec2i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32]),\n byteAlignment: 8,\n code: 'vec2i',\n});\nexport type Vec2f = WgslData<[number, number]>;\nexport const vec2f: Vec2f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32]),\n byteAlignment: 8,\n code: 'vec2f',\n});\nexport type Vec3u = WgslData<[number, number, number]>;\nexport const vec3u: Vec3u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec3u',\n});\nexport type Vec3i = WgslData<[number, number, number]>;\nexport const vec3i: Vec3i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec3i',\n});\nexport type Vec3f = WgslData<[number, number, number]>;\nexport const vec3f: Vec3f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec3f',\n});\nexport type Vec4u = WgslData<[number, number, number, number]>;\nexport const vec4u: Vec4u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec4u',\n});\nexport type Vec4i = WgslData<[number, number, number, number]>;\nexport const vec4i: Vec4i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec4i',\n});\nexport type Vec4f = WgslData<[number, number, number, number]>;\nexport const vec4f: Vec4f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec4f',\n});\n\n/**\n * Array of column vectors\n */\nexport type Mat4f = WgslData<number[]>;\nexport const mat4f: Mat4f = new SimpleWgslData({\n schema: TB.arrayOf(TB.f32, 16),\n byteAlignment: 16,\n code: 'mat4x4f',\n});\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n ValidationError,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\nimport alignIO from './alignIO';\nimport { u32 } from './numeric';\n\nclass DynamicArrayDataType<TElement extends WgslData<unknown>>\n extends Schema<Unwrap<TElement>[]>\n implements WgslData<Unwrap<TElement>[]>\n{\n private _label: string | undefined;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(\n private readonly _elementType: TElement,\n public readonly capacity: number,\n ) {\n super();\n\n this.byteAlignment = Math.max(\n 4 /* u32 base alignment */,\n this._elementType.byteAlignment,\n );\n\n this.size = this.measure(MaxValue).size;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, values: ParseUnwrapped<TElement>[]): void {\n if (values.length > this.capacity) {\n throw new ValidationError(\n `Tried to write too many values, ${values.length} > ${this.capacity}`,\n );\n }\n\n alignIO(output, this.byteAlignment); // aligning to the start\n u32.write(output, values.length);\n alignIO(output, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = output.currentByteOffset;\n for (const value of values) {\n this._elementType.write(output, value);\n }\n output.seekTo(startOffset + this.capacity * this._elementType.size);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TElement>[] {\n const array: ParseUnwrapped<TElement>[] = [];\n\n alignIO(input, this.byteAlignment); // aligning to the start\n const len = u32.read(input);\n alignIO(input, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = input.currentByteOffset;\n for (let i = 0; i < len; ++i) {\n array.push(this._elementType.read(input) as ParseUnwrapped<TElement>);\n }\n input.seekTo(startOffset + this.capacity * this._elementType.size);\n\n return array;\n }\n\n measure(\n _values: ParseUnwrapped<TElement>[] | typeof MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment); // aligning to the start\n\n // Length encoding\n u32.measure(MaxValue, measurer);\n\n // Aligning to the start of the array\n alignIO(measurer, this._elementType.byteAlignment);\n\n // Values encoding\n measurer.add(this._elementType.size * this.capacity);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n count: u32,\n values: array<${this._elementType}, ${this.capacity}>,\n }`);\n\n return ctx.resolve(identifier);\n }\n}\n\nexport const dynamicArrayOf = <TSchema extends AnyWgslData>(\n elementType: TSchema,\n capacity: number,\n) => new DynamicArrayDataType(elementType, capacity);\n\nexport default DynamicArrayDataType;\n","import {\n type IMeasurer,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type UnwrapRecord,\n object,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslStruct<TProps extends Record<string, AnyWgslData>>\n extends ISchema<UnwrapRecord<TProps>>,\n WgslData<UnwrapRecord<TProps>> {\n $name(label: string): this;\n}\n\nexport const struct = <TProps extends Record<string, AnyWgslData>>(\n properties: TProps,\n): WgslStruct<TProps> => new WgslStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslStructImpl<TProps extends Record<string, AnyWgslData>>\n extends Schema<UnwrapRecord<TProps>>\n implements WgslData<UnwrapRecord<TProps>>\n{\n private _label: string | undefined;\n private _innerSchema: ISchema<UnwrapRecord<TProps>>;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(private readonly _properties: TProps) {\n super();\n\n this._innerSchema = object(_properties);\n\n this.byteAlignment = Object.values(_properties)\n .map((prop) => prop.byteAlignment)\n .reduce((a, b) => (a > b ? a : b));\n\n this.size = this.measure(MaxValue).size;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<UnwrapRecord<TProps>>): void {\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n ${Object.entries(this._properties).map(([key, field]) => code`${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(identifier);\n }\n}\n","import * as TB from 'typed-binary';\nimport type { AnyWgslData, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { SimpleWgslData } from './std140';\n\nexport type WgslArray<TElement extends AnyWgslData> = WgslData<\n TB.Unwrap<TElement>[]\n>;\n\nexport const arrayOf = <TElement extends AnyWgslData>(\n elementType: TElement,\n size: number,\n): WgslArray<TElement> =>\n new SimpleWgslData({\n schema: TB.arrayOf(elementType, size),\n byteAlignment: elementType.byteAlignment,\n code: code`array<${elementType}, ${size}>`,\n });\n","import type { AnyWgslData, WgslPointer } from '../types';\n\nexport function ptr<TDataType extends AnyWgslData>(\n pointsTo: TDataType,\n): WgslPointer<'function', TDataType> {\n return {\n scope: 'function',\n pointsTo,\n };\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, WgslData } from '../types';\nimport type { I32, U32 } from './numeric';\n\nexport function atomic<TSchema extends U32 | I32>(\n data: TSchema,\n): Atomic<TSchema> {\n return new AtomicImpl(data);\n}\n\nexport interface Atomic<TSchema extends U32 | I32>\n extends WgslData<Unwrap<TSchema>> {}\n\nclass AtomicImpl<TSchema extends U32 | I32>\n extends Schema<Unwrap<TSchema>>\n implements Atomic<TSchema>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this.innerData.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this.innerData.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return this.innerData.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return `atomic<${ctx.resolve(this.innerData)}>`;\n }\n}\n"],"mappings":"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","names":["MaxValue","Measurer","Schema","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","SimpleWgslData","Schema","schema","byteAlignment","code","__publicField","MaxValue","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","TB","bool","SimpleWgslData","u32","i32","f32","vec2u","vec2i","vec2f","vec3u","vec3i","vec3f","vec4u","vec4i","vec4f","mat4f","MaxValue","Measurer","Schema","ValidationError","DynamicArrayDataType","Schema","_elementType","capacity","__publicField","MaxValue","label","RecursiveDataTypeError","output","values","ValidationError","alignIO_default","u32","startOffset","value","input","array","len","i","_values","measurer","Measurer","ctx","identifier","WgslIdentifier","code","dynamicArrayOf","elementType","MaxValue","Measurer","Schema","object","struct","properties","WgslStructImpl","Schema","_properties","__publicField","object","prop","a","b","MaxValue","label","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx","identifier","WgslIdentifier","code","key","field","TB","arrayOf","elementType","size","SimpleWgslData","code","ptr","pointsTo","Measurer","Schema","atomic","data","AtomicImpl","Schema","innerData","__publicField","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx"]}
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/index.cjs
CHANGED
@@ -1,29 +1,2 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
2
|
-
|
3
|
-
`)}${s}`}},F=class n{constructor(e,t,r){this._parent=e;this._shared=t;this._slotValuePairs=r;_chunkJYXJ5NFXcjs.d.call(void 0, this,"usedSlots",new Set)}addDeclaration(e){this._shared.addDeclaration(this.resolve(e))}addBinding(e,t){let{group:r,idx:s}=this._shared.reserveBindingEntry(e);this.addDeclaration(_chunkJYXJ5NFXcjs.i`@group(${r}) @binding(${s}) var<${Pe[e.usage]}> ${t}: ${e.allocatable.dataType};`)}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){let t=this._slotValuePairs.find(([r])=>r===e);return t?(this.usedSlots.add(e),t[1]):(this.usedSlots.add(e),this._parent.readSlot(e))}unwrap(e){let t=e;for(;_chunkJYXJ5NFXcjs.g.call(void 0, t);)t=this.readSlot(t);return t}resolve(e,t=[]){if(!_chunkJYXJ5NFXcjs.e.call(void 0, e))return String(e);let r=new n(this,this._shared,t);return this._shared.getOrInstantiate(e,r)}};var we={uniform:"uniform",mutable_storage:"storage",readonly_storage:"read-only-storage"},b= exports.ProgramBuilder =class{constructor(e,t){this.runtime=e;this.root=t}build(e){var u;let t=new P({names:(u=e.nameRegistry)!=null?u:new x,bindingGroup:e.bindingGroup}),r=t.resolve(this.root),s=Array.from(t.usedBindables),l=this.runtime.device.createBindGroupLayout({entries:s.map((d,g)=>({binding:g,visibility:e.shaderStage,buffer:{type:we[d.usage]}}))}),i=this.runtime.device.createBindGroup({layout:l,entries:s.map((d,g)=>({binding:g,resource:{buffer:this.runtime.bufferFor(d.allocatable)}}))});return{bindGroupLayout:l,bindGroup:i,code:r}}};function w(n,e){return new G(n,e)}var G=class{constructor(e,t){this.buffer=e;this.usage=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}get allocatable(){return this.buffer}$name(e){return this._label=e,this}resolve(e){let t=new _chunkJYXJ5NFXcjs.j;return e.addBinding(this,t),e.resolve(t)}toString(){var e;return`${this.usage}:${(e=this._label)!=null?e:"<unnamed>"}`}};function de(n,e){return new M(n,e)}var M=class{constructor(e,t){this.dataType=e;this.initial=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_allowedUsages",{uniform:null,mutableStorage:null,readonlyStorage:null});_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}$allowUniform(){let e=this;return this.$addFlags(GPUBufferUsage.UNIFORM),this._allowedUsages.uniform||(this._allowedUsages.uniform=w(e,"uniform")),e}$allowReadonlyStorage(){let e=this;return this.$addFlags(GPUBufferUsage.STORAGE),this._allowedUsages.readonlyStorage||(this._allowedUsages.readonlyStorage=w(e,"readonly_storage")),e}$allowMutableStorage(){let e=this;return this.$addFlags(GPUBufferUsage.STORAGE),this._allowedUsages.mutableStorage||(this._allowedUsages.mutableStorage=w(e,"mutable_storage")),e}$addFlags(e){return this.flags|=e,this}asUniform(){return this._allowedUsages.uniform}asMutableStorage(){return this._allowedUsages.mutableStorage}asReadonlyStorage(){return this._allowedUsages.readonlyStorage}toString(){var e;return`buffer:${(e=this._label)!=null?e:"<unnamed>"}`}};function pe(n){return new k(n)}var k=class{constructor(e){this.expr=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunkJYXJ5NFXcjs.j)().$name(this._label);return e.addDeclaration(_chunkJYXJ5NFXcjs.i`const ${t} = ${this.expr};`),e.resolve(t)}};function fe(n,...e){return new L(_chunkJYXJ5NFXcjs.i.call(void 0, n,...e))}var L=class{constructor(e){this._declaration=e}resolve(e){return e.addDeclaration(_chunkJYXJ5NFXcjs.i`${this._declaration}`),""}};function me(n,...e){return new O(_chunkJYXJ5NFXcjs.i.call(void 0, n,...e))}var O=class{constructor(e){this.body=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunkJYXJ5NFXcjs.j)().$name(this._label);return e.addDeclaration(_chunkJYXJ5NFXcjs.i`fn ${t}${this.body}`.$name(this._label)),e.resolve(t)}with(e,t){return new I(this,[e,t])}toString(){var e;return`fn:${(e=this.label)!=null?e:"<unnamed>"}`}},I=class n{constructor(e,t){this._innerFn=e;this._slotValuePair=t}get label(){return this._innerFn.label}with(e,t){return new n(this,[e,t])}resolve(e){return e.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,s;let[e,t]=this._slotValuePair;return`fn:${(r=this.label)!=null?r:"<unnamed>"}[${(s=e.label)!=null?s:"<unnamed>"}=${t}]`}};function ce(n,e){let t=n.map(s=>[new _chunkJYXJ5NFXcjs.j,s]),r=t.map(([s,l])=>s);return s=>{let l=s(...r);return new z(t,e,l)}}var N=class{constructor(e,t){this.usedFn=e;this.args=t}resolve(e){let t=this.args.map((r,s)=>{let l=s<this.args.length-1?", ":"";return _chunkJYXJ5NFXcjs.i`${r}${l}`});return e.resolve(_chunkJYXJ5NFXcjs.i`${this.usedFn}(${t})`.$name("internal"))}toString(){var e;return`fun:${(e=this.usedFn.label)!=null?e:"<unnamed>"}()`}},z=class extends ge{constructor(t,r,s){super();this.argPairs=t;this.returnType=r;this.body=s;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let r=new (0, _chunkJYXJ5NFXcjs.j)().$name(this._label),s=this.argPairs.map(([l,i],u)=>{let d=u<this.argPairs.length-1?", ":"";return _chunkJYXJ5NFXcjs.h.call(void 0, i)?_chunkJYXJ5NFXcjs.i`${l}: ptr<${i.scope}, ${i.pointsTo}>${d}`:_chunkJYXJ5NFXcjs.i`${l}: ${i}${d}`});return this.returnType!==void 0?t.addDeclaration(_chunkJYXJ5NFXcjs.i`fn ${r}(${s}) -> ${this.returnType} {
|
4
|
-
${this.body}
|
5
|
-
}`):t.addDeclaration(_chunkJYXJ5NFXcjs.i`fn ${r}(${s}) {
|
6
|
-
${this.body}
|
7
|
-
}`),t.resolve(r)}_call(...t){return new N(this,t)}toString(){var t;return`fun:${(t=this._label)!=null?t:"<unnamed>"}`}};var Te=Symbol("This item can be set, owns its value (does not get value from an external source)");var he=Symbol("This plum's value is sourced from outside the runtime.");function S(n){return n[he]===!0}function ye(n){return typeof n=="function"?new j(n):new q(n)}function be(n,e){return new K(n,e)}function We(n){return n.__brand==="WgslPlum"}var Se,q=class{constructor(e){this._initial=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslPlum");_chunkJYXJ5NFXcjs.d.call(void 0, this,Se,!0);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}compute(e){return this._initial}$name(e){return this._label=e,this}get label(){return this._label}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}};Se=Te;var j=class{constructor(e){this._compute=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslPlum");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}$name(e){return this._label=e,this}get label(){return this._label}compute(e){return this._compute(e)}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}},Re,K=class{constructor(e,t){this._subscribe=e;this._getLatest=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslPlum");_chunkJYXJ5NFXcjs.d.call(void 0, this,Re,!0);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_prev");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_version",0);this._prev=t()}$name(e){return this._label=e,this}get label(){return this._label}get version(){return this._version}subscribe(e){return this._subscribe(e)}compute(){let e=this._getLatest();return Object.is(e,this._prev)||(this._version++,this._prev=e),this._prev}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}};Re=he;function ve(n){return new Q(n)}var Q=class{constructor(e=void 0){this.defaultValue=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslSlot");_chunkJYXJ5NFXcjs.d.call(void 0, this,"label")}$name(e){return this.label=e,this}areEqual(e,t){return Object.is(e,t)}resolve(e){var r;let t=e.unwrap(this);if(!_chunkJYXJ5NFXcjs.f.call(void 0, t))throw new Error(`Cannot inject value of type ${typeof t} of slot '${(r=this.label)!=null?r:"<unnamed>"}' in code.`);return e.resolve(t)}toString(){var e;return`slot:${(e=this.label)!=null?e:"<unnamed>"}`}};var _e=(n,e)=>new Y(n,e,"private"),Y=class{constructor(e,t,r){this._dataType=e;this._initialValue=t;this.scope=r;_chunkJYXJ5NFXcjs.d.call(void 0, this,"identifier",new _chunkJYXJ5NFXcjs.j)}$name(e){return this.identifier.$name(e),this}resolve(e){return this._initialValue?e.addDeclaration(_chunkJYXJ5NFXcjs.i`var<${this.scope}> ${this.identifier}: ${this._dataType} = ${this._initialValue};`):e.addDeclaration(_chunkJYXJ5NFXcjs.i`var<${this.scope}> ${this.identifier}: ${this._dataType};`),e.resolve(this.identifier)}};var Ae=Object.assign(_chunkJYXJ5NFXcjs.i,{code:_chunkJYXJ5NFXcjs.i,fn:me,fun:ce,buffer:de,plum:ye,plumFromEvent:be,slot:ve,constant:pe,declare:fe,var:_e});var _typedbinary = require('typed-binary');var X=(n,e)=>{let t=e-1,r=~t;return n&t?(n&r)+e:n};var R=class{constructor(){_chunkJYXJ5NFXcjs.d.call(void 0, this,"_stateMap",new WeakMap)}inspect(e){return this._stateMap.get(e)}_getState(e){let t=this._stateMap.get(e);if(!t){let{value:r,dependencies:s}=this._computeAndGatherDependencies(e);t={value:r,dependencies:s,version:0},this._stateMap.set(e,t)}return t}_notifyListeners(e){let t=this._getState(e);if(!t.active)return;let r=[...t.active.listeners];for(let s of r)s()}_computeAndGatherDependencies(e){let t=new Map,r=s=>{if(!t.has(s)){let l=this._getState(s);t.set(s,l.version)}return this.get(s)};return{value:e.compute(r),dependencies:t}}_recompute(e){let t=this._getState(e);if(t.active)for(let l of t.active.unsubs)l();let{value:r,dependencies:s}=this._computeAndGatherDependencies(e);if(t.dependencies=s,t.active)for(let[l]of t.dependencies)t.active.unsubs.add(this.subscribe(l,()=>{this._recompute(e)}));return Object.is(t.value,r)||(t.value=r,t.version=S(e)?e.version:t.version+1,this._notifyListeners(e)),t.value}get(e){let t=this._getState(e);if(t.active)return t.value;let r=!1;return S(e)?(e.compute(null),r=t.version!==e.version):t.dependencies.size>0&&(r=[...t.dependencies.entries()].some(([s,l])=>(this.get(s),this._getState(s).version!==l))),r?this._recompute(e):t.value}set(e,t){let r=this._getState(e);Object.is(r.value,t)||(r.value=t,r.version++,this._notifyListeners(e))}subscribe(e,t){let r=this._getState(e),s;if(!r.active){let l=new Set;r.active={listeners:new Set,unsubs:l};for(let[i]of r.dependencies)l.add(this.subscribe(i,()=>{this._recompute(e)}));S(e)&&(s=e.subscribe(()=>{this._recompute(e)}))}return r.active.listeners.add(t),()=>{if(r.active&&(r.active.listeners.delete(t),r.active.listeners.size===0)){for(let l of r.active.unsubs)l();s==null||s(),r.active=void 0}}}};var A=class{constructor(){_chunkJYXJ5NFXcjs.d.call(void 0, this,"_queue",[]);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_pending",!1)}enqueue(e){return new Promise((t,r)=>{this._queue.push(async()=>{try{t(await e())}catch(s){r(s)}}),this._processQueue()})}async _processQueue(){if(!this._pending){for(this._pending=!0;this._queue.length>0;){let e=this._queue.shift();e&&await e()}this._pending=!1}}};var U=class{constructor(e){this.device=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_entryToBufferMap",new Map);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_pipelineExecutors",[]);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_commandEncoder",null);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_readBuffer",null);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_taskQueue",new A);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_plumStore",new R);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_allocSubscriptions",new Map)}get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}dispose(){var e;for(let t of this._allocSubscriptions.values())t();this._allocSubscriptions.clear();for(let t of this._entryToBufferMap.values())t.destroy();this._entryToBufferMap.clear(),(e=this._readBuffer)==null||e.destroy()}bufferFor(e){let t=this._entryToBufferMap.get(e);if(!t){if(t=this.device.createBuffer({usage:e.flags,size:X(e.dataType.size,e.dataType.byteAlignment),mappedAtCreation:e.initial!==void 0}),!t)throw new Error(`Failed to create buffer for ${e}`);if(e.initial!==void 0){let r=new (0, _typedbinary.BufferWriter)(t.getMappedRange());if(We(e.initial)){let s=e.initial;e.dataType.write(r,this._plumStore.get(s)),this._allocSubscriptions.set(e,this._plumStore.subscribe(s,()=>{this.writeBuffer(e,this._plumStore.get(s))}))}else e.dataType.write(r,e.initial);t.unmap()}this._entryToBufferMap.set(e,t)}return t}async readBuffer(e){return this._taskQueue.enqueue(async()=>{var l;this.flush(),(!this._readBuffer||this._readBuffer.size<e.dataType.size)&&((l=this._readBuffer)==null||l.destroy(),this._readBuffer=this.device.createBuffer({usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,size:e.dataType.size}));let t=this.bufferFor(e),r=this.device.createCommandEncoder();r.copyBufferToBuffer(t,0,this._readBuffer,0,e.dataType.size),this.device.queue.submit([r.finish()]),await this.device.queue.onSubmittedWorkDone(),await this._readBuffer.mapAsync(GPUMapMode.READ,0,e.dataType.size);let s=e.dataType.read(new (0, _typedbinary.BufferReader)(this._readBuffer.getMappedRange()));return this._readBuffer.unmap(),s})}writeBuffer(e,t){let r=this.bufferFor(e),s=X(e.dataType.size,e.dataType.byteAlignment),l=new ArrayBuffer(s);e.dataType.write(new (0, _typedbinary.BufferWriter)(l),t),this.device.queue.writeBuffer(r,0,l,0,s)}readPlum(e){return this._plumStore.get(e)}setPlum(e,t){this._plumStore.set(e,t)}onPlumChange(e,t){return this._plumStore.subscribe(e,t)}makeRenderPipeline(e){var g,c,T,h,y,p,f,_,v,Z,ee,te,re;let t=new b(this,_chunkJYXJ5NFXcjs.i`
|
8
|
-
@vertex fn main_vertex(${e.vertex.args.flatMap(W=>[W,", "])}) -> ${e.vertex.output} {
|
9
|
-
${e.vertex.code}
|
10
|
-
}
|
11
|
-
|
12
|
-
${(c=(g=e.externalDeclarations)==null?void 0:g.flatMap(W=>[W,`
|
13
|
-
`]))!=null?c:""}
|
14
|
-
`).build({bindingGroup:((T=e.externalLayouts)!=null?T:[]).length,shaderStage:GPUShaderStage.VERTEX}),r=new b(this,_chunkJYXJ5NFXcjs.i`
|
15
|
-
@fragment fn main_frag(${e.fragment.args.flatMap(W=>[W,", "])}) -> ${e.fragment.output} {
|
16
|
-
${e.fragment.code}
|
17
|
-
}
|
18
|
-
|
19
|
-
${(y=(h=e.externalDeclarations)==null?void 0:h.flatMap(W=>[W,`
|
20
|
-
`]))!=null?y:""}
|
21
|
-
`).build({bindingGroup:((p=e.externalLayouts)!=null?p:[]).length+1,shaderStage:GPUShaderStage.FRAGMENT}),s=this.device.createShaderModule({code:t.code}),l=this.device.createShaderModule({code:r.code}),i=this.device.createPipelineLayout({label:(f=e.label)!=null?f:"",bindGroupLayouts:[...(_=e.externalLayouts)!=null?_:[],t.bindGroupLayout,r.bindGroupLayout]}),u=this.device.createRenderPipeline({label:(v=e.label)!=null?v:"",layout:i,vertex:{module:s,buffers:(Z=e.vertex.buffersLayouts)!=null?Z:[]},fragment:{module:l,targets:(ee=e.fragment.target)!=null?ee:[]},primitive:e.primitive}),d=new H(this,u,[t,r],(re=(te=e.externalLayouts)==null?void 0:te.length)!=null?re:0);return this._pipelineExecutors.push(d),d}makeComputePipeline(e){var g,c,T,h,y,p,f,_;let{args:t=[],workgroupSize:r=[1,1]}=e,s=new b(this,_chunkJYXJ5NFXcjs.i`
|
22
|
-
@compute @workgroup_size(${r.join(", ")}) fn main_compute(${t.flatMap(v=>[v,", "])}) {
|
23
|
-
${e.code}
|
24
|
-
}
|
25
|
-
|
26
|
-
${(c=(g=e.externalDeclarations)==null?void 0:g.flatMap(v=>[v,`
|
27
|
-
`]))!=null?c:""}
|
28
|
-
`).build({bindingGroup:((T=e.externalLayouts)!=null?T:[]).length,shaderStage:GPUShaderStage.COMPUTE}),l=this.device.createShaderModule({code:s.code}),i=this.device.createPipelineLayout({label:(h=e.label)!=null?h:"",bindGroupLayouts:[...(y=e.externalLayouts)!=null?y:[],s.bindGroupLayout]}),u=this.device.createComputePipeline({label:(p=e.label)!=null?p:"",layout:i,compute:{module:l}}),d=new J(this,u,[s],(_=(f=e.externalLayouts)==null?void 0:f.length)!=null?_:0);return this._pipelineExecutors.push(d),d}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}},B=class{constructor(e,t,r,s,l){this._runtime=e;this.pipeline=t;this.programs=r;this.externalLayoutCount=s;this.label=l}},H=class extends B{execute(e){var T,h,y;let c=e,{vertexCount:t,instanceCount:r,firstVertex:s,firstInstance:l,externalBindGroups:i,externalVertexBuffers:u}=c,d=_chunkJYXJ5NFXcjs.c.call(void 0, c,["vertexCount","instanceCount","firstVertex","firstInstance","externalBindGroups","externalVertexBuffers"]);if(((T=i==null?void 0:i.length)!=null?T:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(h=i==null?void 0:i.length)!=null?h:0}`);let g=this._runtime.commandEncoder.beginRenderPass(_chunkJYXJ5NFXcjs.b.call(void 0, _chunkJYXJ5NFXcjs.a.call(void 0, {},d),{label:(y=this.label)!=null?y:""}));g.setPipeline(this.pipeline),(i!=null?i:[]).forEach((p,f)=>g.setBindGroup(f,p)),(u!=null?u:[]).forEach((p,f)=>g.setVertexBuffer(f,p)),this.programs.forEach((p,f)=>{g.setBindGroup((i!=null?i:[]).length+f,p.bindGroup)}),g.draw(t,r,s,l),g.end()}},J=class extends B{execute(e){var l,i,u;let{workgroups:t=[1,1],externalBindGroups:r}=e!=null?e:{};if(((l=r==null?void 0:r.length)!=null?l:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(i=r==null?void 0:r.length)!=null?i:0}`);let s=this._runtime.commandEncoder.beginComputePass({label:(u=this.label)!=null?u:""});s.setPipeline(this.pipeline),(r!=null?r:[]).forEach((d,g)=>s.setBindGroup(g,d)),this.programs.forEach((d,g)=>s.setBindGroup((r!=null?r:[]).length+g,d.bindGroup)),s.dispatchWorkgroups(...t),s.end()}};async function Be(n){if(n instanceof GPUDevice)return new U(n);if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let e=await navigator.gpu.requestAdapter(n==null?void 0:n.adapter);if(!e)throw new Error("Could not find a compatible GPU");return new U(await e.requestDevice(n==null?void 0:n.device))}exports.MissingSlotValueError = _chunkG3WAZR24cjs.b; exports.ProgramBuilder = b; exports.RandomNameRegistry = x; exports.RecursiveDataTypeError = _chunkG3WAZR24cjs.c; exports.ResolutionError = _chunkG3WAZR24cjs.a; exports.StrictNameRegistry = V; exports.createRuntime = Be; exports.isPointer = _chunkJYXJ5NFXcjs.h; exports.isResolvable = _chunkJYXJ5NFXcjs.e; exports.isSlot = _chunkJYXJ5NFXcjs.g; exports.isWgsl = _chunkJYXJ5NFXcjs.f; exports.wgsl = Ae;
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkG6QA55EYcjs = require('./chunk-G6QA55EY.cjs');var _chunkS55XYV7Ucjs = require('./chunk-S55XYV7U.cjs');var _typedbinary = require('typed-binary');function M(e,t){let a=e.buffer,n=e.device;if(a.mapState==="mapped"){let T=a.getMappedRange();e.dataType.write(new (0, _typedbinary.BufferWriter)(T),t);return}let p=_chunkG6QA55EYcjs.a.call(void 0, e.dataType.size,e.dataType.byteAlignment),U=new ArrayBuffer(p);e.dataType.write(new (0, _typedbinary.BufferWriter)(U),t),n.queue.writeBuffer(a,0,U,0,p)}async function V(e){let t=e.buffer,a=e.device;if(t.mapState==="mapped"){let T=t.getMappedRange();return e.dataType.read(new (0, _typedbinary.BufferReader)(T))}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let T=t.getMappedRange(),A=e.dataType.read(new (0, _typedbinary.BufferReader)(T));return t.unmap(),A}let n=a.createBuffer({size:e.dataType.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),p=a.createCommandEncoder();p.copyBufferToBuffer(t,0,n,0,e.dataType.size),a.queue.submit([p.finish()]),await a.queue.onSubmittedWorkDone(),await n.mapAsync(GPUMapMode.READ,0,e.dataType.size);let U=e.dataType.read(new (0, _typedbinary.BufferReader)(n.getMappedRange()));return n.unmap(),n.destroy(),U}function f(e,t){return new z(e,t)}var z=class{constructor(t,a){this.buffer=t;this.usage=a}get label(){return this.buffer.label}get allocatable(){return this.buffer}resolve(t){let a=new (0, _chunkS55XYV7Ucjs.c)().$name(this.label);return t.addBinding(this,a),t.resolve(a)}toString(){var t;return`${this.usage}:${(t=this.label)!=null?t:"<unnamed>"}`}};function S(e,t){return new h(e,t)}var h=class{constructor(t,a){this.dataType=t;this.initialOrBuffer=a;_chunkS55XYV7Ucjs.a.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkS55XYV7Ucjs.a.call(void 0, this,"_device",null);_chunkS55XYV7Ucjs.a.call(void 0, this,"_buffer",null);_chunkS55XYV7Ucjs.a.call(void 0, this,"_usages",{uniform:null,mutable:null,readonly:null,vertex:null});_chunkS55XYV7Ucjs.a.call(void 0, this,"vertexLayout",null);_chunkS55XYV7Ucjs.a.call(void 0, this,"_label");_chunkS55XYV7Ucjs.a.call(void 0, this,"initial");_chunkS55XYV7Ucjs.b.call(void 0, a)?this._buffer=a:this.initial=a}get label(){return this._label}get buffer(){if(!this._device)throw new Error("To use this property, make the buffer unmanaged by passing a GPUDevice to $device");if(!this._buffer&&(this._buffer=this._device.createBuffer({size:this.dataType.size,usage:this.flags,mappedAtCreation:!!this.initial}),this.initial)){let t=new (0, _typedbinary.BufferWriter)(this._buffer.getMappedRange());this.dataType.write(t,this.initial),this._buffer.unmap()}return this._buffer}get device(){if(!this._device)throw new Error("This buffer is managed by TypeGPU and cannot be used directly");return this._device}$name(t){return this._label=t,this}$allowUniform(){return this.$addFlags(GPUBufferUsage.UNIFORM),this._usages.uniform||(this._usages.uniform=f(this,"uniform")),this}$allowReadonly(){return this.$addFlags(GPUBufferUsage.STORAGE),this._usages.readonly||(this._usages.readonly=f(this,"readonly")),this}$allowMutable(){return this.$addFlags(GPUBufferUsage.STORAGE),this._usages.mutable||(this._usages.mutable=f(this,"mutable")),this}$allowVertex(t="vertex"){if(this.$addFlags(GPUBufferUsage.VERTEX),!this.vertexLayout)if(this.dataType instanceof _chunkG6QA55EYcjs.c)this.vertexLayout={arrayStride:this.dataType.size,stepMode:t},this._usages.vertex=f(this,"vertex");else if(this.dataType instanceof _chunkG6QA55EYcjs.l)this.vertexLayout={arrayStride:this.dataType.elementType.size,stepMode:t},this._usages.vertex=f(this,"vertex");else throw new Error("Only simple data types can be used as vertex buffers");if(this.vertexLayout.stepMode!==t)throw new Error("Cannot change step mode of a vertex buffer");return this}$addFlags(t){return this.flags|=t,this}$device(t){return this._device=t,this}toString(){var t;return`buffer:${(t=this._label)!=null?t:"<unnamed>"}`}};function E(e){return e.charAt(0).toUpperCase()+e.slice(1)}function B(e,t){return a=>{if(a._usages[e]===null)throw new Error(`Cannot pass ${a} to as${E(e)} function, as the buffer does not allow ${e} usage. To allow it, use $allow${E(e)} TgpuBuffer method.`);return a._usages[e]}}var H=B("uniform",{uniformAllowed:!0}),J=B("readonly",{readonlyAllowed:!0}),Q=B("mutable",{mutableAllowed:!0}),Z=B("vertex",{vertexAllowed:!0});var F={createBuffer:S,read:V,write:M};var o=e=>Math.sqrt(e.x**2+e.y**2),l=e=>Math.sqrt(e.x**2+e.y**2+e.z**2),d=e=>Math.sqrt(e.x**2+e.y**2+e.z**2+e.w**2),u={length:{vec2f:o,vec2i:o,vec2u:o,vec3f:l,vec3i:l,vec3u:l,vec4f:d,vec4i:d,vec4u:d},add:{vec2f:(e,t)=>_chunkG6QA55EYcjs.n.call(void 0, e.x+t.x,e.y+t.y),vec2i:(e,t)=>_chunkG6QA55EYcjs.o.call(void 0, e.x+t.x,e.y+t.y),vec2u:(e,t)=>_chunkG6QA55EYcjs.p.call(void 0, e.x+t.x,e.y+t.y),vec3f:(e,t)=>_chunkG6QA55EYcjs.q.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z),vec3i:(e,t)=>_chunkG6QA55EYcjs.r.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z),vec3u:(e,t)=>_chunkG6QA55EYcjs.s.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z),vec4f:(e,t)=>_chunkG6QA55EYcjs.t.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4i:(e,t)=>_chunkG6QA55EYcjs.u.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4u:(e,t)=>_chunkG6QA55EYcjs.v.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w)},sub:{vec2f:(e,t)=>_chunkG6QA55EYcjs.n.call(void 0, e.x-t.x,e.y-t.y),vec2i:(e,t)=>_chunkG6QA55EYcjs.o.call(void 0, e.x-t.x,e.y-t.y),vec2u:(e,t)=>_chunkG6QA55EYcjs.p.call(void 0, e.x-t.x,e.y-t.y),vec3f:(e,t)=>_chunkG6QA55EYcjs.q.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z),vec3i:(e,t)=>_chunkG6QA55EYcjs.r.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z),vec3u:(e,t)=>_chunkG6QA55EYcjs.s.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z),vec4f:(e,t)=>_chunkG6QA55EYcjs.t.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4i:(e,t)=>_chunkG6QA55EYcjs.u.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4u:(e,t)=>_chunkG6QA55EYcjs.v.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w)},mul:{vec2f:(e,t)=>_chunkG6QA55EYcjs.n.call(void 0, e*t.x,e*t.y),vec2i:(e,t)=>_chunkG6QA55EYcjs.o.call(void 0, e*t.x,e*t.y),vec2u:(e,t)=>_chunkG6QA55EYcjs.p.call(void 0, e*t.x,e*t.y),vec3f:(e,t)=>_chunkG6QA55EYcjs.q.call(void 0, e*t.x,e*t.y,e*t.z),vec3i:(e,t)=>_chunkG6QA55EYcjs.r.call(void 0, e*t.x,e*t.y,e*t.z),vec3u:(e,t)=>_chunkG6QA55EYcjs.s.call(void 0, e*t.x,e*t.y,e*t.z),vec4f:(e,t)=>_chunkG6QA55EYcjs.t.call(void 0, e*t.x,e*t.y,e*t.z,e*t.w),vec4i:(e,t)=>_chunkG6QA55EYcjs.u.call(void 0, e*t.x,e*t.y,e*t.z,e*t.w),vec4u:(e,t)=>_chunkG6QA55EYcjs.v.call(void 0, e*t.x,e*t.y,e*t.z,e*t.w)},dot:{vec2f:(e,t)=>e.x*t.x+e.y*t.y,vec2i:(e,t)=>e.x*t.x+e.y*t.y,vec2u:(e,t)=>e.x*t.x+e.y*t.y,vec3f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec4f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},normalize:{vec2f:e=>{let t=o(e);return _chunkG6QA55EYcjs.n.call(void 0, e.x/t,e.y/t)},vec2i:e=>{let t=o(e);return _chunkG6QA55EYcjs.o.call(void 0, e.x/t,e.y/t)},vec2u:e=>{let t=o(e);return _chunkG6QA55EYcjs.p.call(void 0, e.x/t,e.y/t)},vec3f:e=>{let t=l(e);return _chunkG6QA55EYcjs.q.call(void 0, e.x/t,e.y/t,e.z/t)},vec3i:e=>{let t=l(e);return _chunkG6QA55EYcjs.r.call(void 0, e.x/t,e.y/t,e.z/t)},vec3u:e=>{let t=l(e);return _chunkG6QA55EYcjs.s.call(void 0, e.x/t,e.y/t,e.z/t)},vec4f:e=>{let t=d(e);return _chunkG6QA55EYcjs.t.call(void 0, e.x/t,e.y/t,e.z/t,e.w/t)},vec4i:e=>{let t=d(e);return _chunkG6QA55EYcjs.u.call(void 0, e.x/t,e.y/t,e.z/t,e.w/t)},vec4u:e=>{let t=d(e);return _chunkG6QA55EYcjs.v.call(void 0, e.x/t,e.y/t,e.z/t,e.w/t)}},cross:{vec3f:(e,t)=>_chunkG6QA55EYcjs.q.call(void 0, e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3i:(e,t)=>_chunkG6QA55EYcjs.r.call(void 0, e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3u:(e,t)=>_chunkG6QA55EYcjs.s.call(void 0, e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}};var O={add:(e,t)=>u.add[e.kind](e,t),sub:(e,t)=>u.sub[e.kind](e,t),mul:(e,t)=>u.mul[t.kind](e,t),dot:(e,t)=>u.dot[e.kind](e,t),normalize:e=>u.normalize[e.kind](e),cross:(e,t)=>u.cross[e.kind](e,t),fract:e=>e-Math.floor(e),length:e=>u.length[e.kind](e),sin:Math.sin,cos:Math.cos};var oe=F;exports.RecursiveDataTypeError = _chunkG6QA55EYcjs.b; exports.default = oe; exports.std = O;
|
29
2
|
//# sourceMappingURL=index.cjs.map
|