typegpu 0.3.3 → 0.4.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/attributes-BQuRnaZ4.d.ts +151 -0
- package/attributes-Bt2NG-9a.d.cts +151 -0
- package/chunk-LF344PKG.cjs +4 -0
- package/chunk-LF344PKG.cjs.map +1 -0
- package/chunk-SDSDWWKW.js +2 -0
- package/chunk-SDSDWWKW.js.map +1 -0
- package/chunk-Y2M5GYRO.cjs +2 -0
- package/chunk-Y2M5GYRO.cjs.map +1 -0
- package/chunk-YLI4IK35.js +4 -0
- package/chunk-YLI4IK35.js.map +1 -0
- package/data/index.cjs +1 -192
- package/data/index.d.cts +209 -2
- package/data/index.d.ts +209 -2
- package/data/index.js +1 -192
- package/index.cjs +18 -4269
- package/index.cjs.map +1 -1
- package/index.d.cts +146 -133
- package/index.d.ts +146 -133
- package/index.js +18 -4269
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/std/index.cjs +1 -490
- package/std/index.cjs.map +1 -1
- package/std/index.d.cts +10 -3
- package/std/index.d.ts +10 -3
- package/std/index.js +1 -490
- package/std/index.js.map +1 -1
- package/vector-CeDeofzh.d.ts +176 -0
- package/vector-UFYwud47.d.cts +176 -0
- package/{vector-CDD2FV2v.d.cts → wgslTypes-BNsjCP--.d.cts} +477 -260
- package/{vector-CDD2FV2v.d.ts → wgslTypes-BNsjCP--.d.ts} +477 -260
- package/chunk-2CMWQRQC.cjs +0 -2
- package/chunk-2CMWQRQC.cjs.map +0 -1
- package/chunk-2ZAQFPSX.js +0 -1266
- package/chunk-2ZAQFPSX.js.map +0 -1
- package/chunk-35UVS2JJ.cjs +0 -591
- package/chunk-35UVS2JJ.cjs.map +0 -1
- package/chunk-A2QB4MSZ.js +0 -4
- package/chunk-A2QB4MSZ.js.map +0 -1
- package/chunk-CMYXKKUP.cjs +0 -1266
- package/chunk-CMYXKKUP.cjs.map +0 -1
- package/chunk-DDEF2Y4S.js +0 -591
- package/chunk-DDEF2Y4S.js.map +0 -1
- package/chunk-KYBPSQX5.js +0 -2
- package/chunk-KYBPSQX5.js.map +0 -1
- package/chunk-VRYGOFCW.cjs +0 -4
- package/chunk-VRYGOFCW.cjs.map +0 -1
- package/index-CuzbyKXg.d.cts +0 -751
- package/index-FHKuURMs.d.ts +0 -751
@@ -0,0 +1,151 @@
|
|
1
|
+
import { D as Decorated, U as U32, aa as Builtin, d as Vec4f, W as WgslArray, F as F32, l as Vec3u, B as BaseData, a9 as Align, a8 as Size, L as Location, ab as Interpolate, bb as InterpolationType, v as AnyData, bc as PerspectiveOrLinearInterpolationType, bd as PerspectiveOrLinearInterpolatableData, be as FlatInterpolationType, bf as FlatInterpolatableData, A as AnyWgslData, am as LooseDecorated, an as AnyLooseData, z as WgslTypeLiteral, bg as LooseTypeLiteral } from './wgslTypes-BNsjCP--.js';
|
2
|
+
|
3
|
+
type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;
|
4
|
+
type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;
|
5
|
+
type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;
|
6
|
+
type BuiltinClipDistances = Decorated<WgslArray<U32>, [
|
7
|
+
Builtin<'clip_distances'>
|
8
|
+
]>;
|
9
|
+
type BuiltinFrontFacing = Decorated<F32, [Builtin<'front_facing'>]>;
|
10
|
+
type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;
|
11
|
+
type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;
|
12
|
+
type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;
|
13
|
+
type BuiltinLocalInvocationId = Decorated<Vec3u, [
|
14
|
+
Builtin<'local_invocation_id'>
|
15
|
+
]>;
|
16
|
+
type BuiltinLocalInvocationIndex = Decorated<U32, [
|
17
|
+
Builtin<'local_invocation_index'>
|
18
|
+
]>;
|
19
|
+
type BuiltinGlobalInvocationId = Decorated<Vec3u, [
|
20
|
+
Builtin<'global_invocation_id'>
|
21
|
+
]>;
|
22
|
+
type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>;
|
23
|
+
type BuiltinNumWorkgroups = Decorated<Vec3u, [
|
24
|
+
Builtin<'num_workgroups'>
|
25
|
+
]>;
|
26
|
+
declare const builtin: {
|
27
|
+
readonly vertexIndex: BuiltinVertexIndex;
|
28
|
+
readonly instanceIndex: BuiltinInstanceIndex;
|
29
|
+
readonly position: BuiltinPosition;
|
30
|
+
readonly clipDistances: BuiltinClipDistances;
|
31
|
+
readonly frontFacing: BuiltinFrontFacing;
|
32
|
+
readonly fragDepth: BuiltinFragDepth;
|
33
|
+
readonly sampleIndex: BuiltinSampleIndex;
|
34
|
+
readonly sampleMask: BuiltinSampleMask;
|
35
|
+
readonly localInvocationId: BuiltinLocalInvocationId;
|
36
|
+
readonly localInvocationIndex: BuiltinLocalInvocationIndex;
|
37
|
+
readonly globalInvocationId: BuiltinGlobalInvocationId;
|
38
|
+
readonly workgroupId: BuiltinWorkgroupId;
|
39
|
+
readonly numWorkgroups: BuiltinNumWorkgroups;
|
40
|
+
};
|
41
|
+
type AnyBuiltin = (typeof builtin)[keyof typeof builtin];
|
42
|
+
type AnyComputeBuiltin = BuiltinLocalInvocationId | BuiltinLocalInvocationIndex | BuiltinGlobalInvocationId | BuiltinWorkgroupId | BuiltinNumWorkgroups;
|
43
|
+
type OmitBuiltins<S> = S extends AnyBuiltin ? never : S extends BaseData ? S : {
|
44
|
+
[Key in keyof S as S[Key] extends AnyBuiltin ? never : Key]: S[Key];
|
45
|
+
};
|
46
|
+
|
47
|
+
declare const builtinNames: readonly ["vertex_index", "instance_index", "position", "clip_distances", "front_facing", "frag_depth", "sample_index", "sample_mask", "fragment", "local_invocation_id", "local_invocation_index", "global_invocation_id", "workgroup_id", "num_workgroups"];
|
48
|
+
type BuiltinName = (typeof builtinNames)[number];
|
49
|
+
type AnyAttribute = Align<number> | Size<number> | Location<number> | Builtin<BuiltinName> | Interpolate<InterpolationType>;
|
50
|
+
type ExtractAttributes<T> = T extends {
|
51
|
+
readonly attribs: unknown[];
|
52
|
+
} ? T['attribs'] : [];
|
53
|
+
type Undecorate<T> = T extends {
|
54
|
+
readonly inner: infer TInner;
|
55
|
+
} ? TInner : T;
|
56
|
+
/**
|
57
|
+
* Decorates a data-type `TData` with an attribute `TAttrib`.
|
58
|
+
*
|
59
|
+
* - if `TData` is loose
|
60
|
+
* - if `TData` is already `LooseDecorated`
|
61
|
+
* - Prepend `TAttrib` to the existing attribute tuple.
|
62
|
+
* - else
|
63
|
+
* - Wrap `TData` with `LooseDecorated` and a single attribute `[TAttrib]`
|
64
|
+
* - else
|
65
|
+
* - if `TData` is already `Decorated`
|
66
|
+
* - Prepend `TAttrib` to the existing attribute tuple.
|
67
|
+
* - else
|
68
|
+
* - Wrap `TData` with `Decorated` and a single attribute `[TAttrib]`
|
69
|
+
*/
|
70
|
+
type Decorate<TData extends BaseData, TAttrib extends AnyAttribute> = TData['type'] extends WgslTypeLiteral ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : TData['type'] extends LooseTypeLiteral ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : never;
|
71
|
+
type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true : false;
|
72
|
+
type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Location<number> ? true : false;
|
73
|
+
/**
|
74
|
+
* Gives the wrapped data-type a custom byte alignment. Useful in order to
|
75
|
+
* fulfill uniform alignment requirements.
|
76
|
+
*
|
77
|
+
* @example
|
78
|
+
* const Data = d.struct({
|
79
|
+
* a: u32, // takes up 4 bytes
|
80
|
+
* // 12 bytes of padding, because `b` is custom aligned to multiples of 16 bytes
|
81
|
+
* b: d.align(16, u32),
|
82
|
+
* });
|
83
|
+
*
|
84
|
+
* @param alignment The multiple of bytes this data should align itself to.
|
85
|
+
* @param data The data-type to align.
|
86
|
+
*/
|
87
|
+
declare function align<TAlign extends number, TData extends AnyData>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>>;
|
88
|
+
/**
|
89
|
+
* Adds padding bytes after the wrapped data-type, until the whole value takes up `size` bytes.
|
90
|
+
*
|
91
|
+
* @example
|
92
|
+
* const Data = d.struct({
|
93
|
+
* a: d.size(16, u32), // takes up 16 bytes, instead of 4
|
94
|
+
* b: u32, // starts at byte 16, because `a` has a custom size
|
95
|
+
* });
|
96
|
+
*
|
97
|
+
* @param size The amount of bytes that should be reserved for this data-type.
|
98
|
+
* @param data The data-type to wrap.
|
99
|
+
*/
|
100
|
+
declare function size<TSize extends number, TData extends AnyData>(size: TSize, data: TData): Decorate<TData, Size<TSize>>;
|
101
|
+
/**
|
102
|
+
* Assigns an explicit numeric location to a struct member or a parameter that has this type.
|
103
|
+
*
|
104
|
+
* @example
|
105
|
+
* const VertexOutput = {
|
106
|
+
* a: d.u32, // has implicit location 0
|
107
|
+
* b: d.location(5, d.u32),
|
108
|
+
* c: d.u32, // has implicit location 6
|
109
|
+
* };
|
110
|
+
*
|
111
|
+
* @param location The explicit numeric location.
|
112
|
+
* @param data The data-type to wrap.
|
113
|
+
*/
|
114
|
+
declare function location<TLocation extends number, TData extends AnyData>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>>;
|
115
|
+
/**
|
116
|
+
* Specifies how user-defined vertex shader output (fragment shader input)
|
117
|
+
* must be interpolated.
|
118
|
+
*
|
119
|
+
* Tip: Integer outputs cannot be interpolated.
|
120
|
+
*
|
121
|
+
* @example
|
122
|
+
* const VertexOutput = {
|
123
|
+
* a: d.f32, // has implicit 'perspective, center' interpolation
|
124
|
+
* b: d.interpolate('linear, sample', d.f32),
|
125
|
+
* };
|
126
|
+
*
|
127
|
+
* @param interpolationType How data should be interpolated.
|
128
|
+
* @param data The data-type to wrap.
|
129
|
+
*/
|
130
|
+
declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpolationType, TData extends PerspectiveOrLinearInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
131
|
+
/**
|
132
|
+
* Specifies how user-defined vertex shader output (fragment shader input)
|
133
|
+
* must be interpolated.
|
134
|
+
*
|
135
|
+
* Tip: Default sampling method of `flat` is `first`. Unless you specifically
|
136
|
+
* need deterministic behavior provided by `'flat, first'`, prefer explicit
|
137
|
+
* `'flat, either'` as it could be slightly faster in hardware.
|
138
|
+
*
|
139
|
+
* @example
|
140
|
+
* const VertexOutput = {
|
141
|
+
* a: d.f32, // has implicit 'perspective, center' interpolation
|
142
|
+
* b: d.interpolate('flat, either', d.u32), // integer outputs cannot interpolate
|
143
|
+
* };
|
144
|
+
*
|
145
|
+
* @param interpolationType How data should be interpolated.
|
146
|
+
* @param data The data-type to wrap.
|
147
|
+
*/
|
148
|
+
declare function interpolate<TInterpolation extends FlatInterpolationType, TData extends FlatInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
149
|
+
declare function isBuiltin<T extends Decorated<AnyWgslData, AnyAttribute[]> | LooseDecorated<AnyLooseData, AnyAttribute[]>>(value: T | unknown): value is T;
|
150
|
+
|
151
|
+
export { type AnyAttribute as A, type BuiltinSampleMask as B, type Decorate as D, type HasCustomLocation as H, type IsBuiltin as I, type OmitBuiltins as O, type AnyComputeBuiltin as a, type BuiltinFragDepth as b, align as c, isBuiltin as d, builtin as e, type BuiltinVertexIndex as f, type BuiltinInstanceIndex as g, type BuiltinPosition as h, interpolate as i, type BuiltinClipDistances as j, type BuiltinFrontFacing as k, location as l, type BuiltinSampleIndex as m, type BuiltinLocalInvocationId as n, type BuiltinLocalInvocationIndex as o, type BuiltinGlobalInvocationId as p, type BuiltinWorkgroupId as q, type BuiltinNumWorkgroups as r, size as s, type AnyBuiltin as t };
|
@@ -0,0 +1,151 @@
|
|
1
|
+
import { D as Decorated, U as U32, aa as Builtin, d as Vec4f, W as WgslArray, F as F32, l as Vec3u, B as BaseData, a9 as Align, a8 as Size, L as Location, ab as Interpolate, bb as InterpolationType, v as AnyData, bc as PerspectiveOrLinearInterpolationType, bd as PerspectiveOrLinearInterpolatableData, be as FlatInterpolationType, bf as FlatInterpolatableData, A as AnyWgslData, am as LooseDecorated, an as AnyLooseData, z as WgslTypeLiteral, bg as LooseTypeLiteral } from './wgslTypes-BNsjCP--.cjs';
|
2
|
+
|
3
|
+
type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;
|
4
|
+
type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;
|
5
|
+
type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;
|
6
|
+
type BuiltinClipDistances = Decorated<WgslArray<U32>, [
|
7
|
+
Builtin<'clip_distances'>
|
8
|
+
]>;
|
9
|
+
type BuiltinFrontFacing = Decorated<F32, [Builtin<'front_facing'>]>;
|
10
|
+
type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;
|
11
|
+
type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;
|
12
|
+
type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;
|
13
|
+
type BuiltinLocalInvocationId = Decorated<Vec3u, [
|
14
|
+
Builtin<'local_invocation_id'>
|
15
|
+
]>;
|
16
|
+
type BuiltinLocalInvocationIndex = Decorated<U32, [
|
17
|
+
Builtin<'local_invocation_index'>
|
18
|
+
]>;
|
19
|
+
type BuiltinGlobalInvocationId = Decorated<Vec3u, [
|
20
|
+
Builtin<'global_invocation_id'>
|
21
|
+
]>;
|
22
|
+
type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>;
|
23
|
+
type BuiltinNumWorkgroups = Decorated<Vec3u, [
|
24
|
+
Builtin<'num_workgroups'>
|
25
|
+
]>;
|
26
|
+
declare const builtin: {
|
27
|
+
readonly vertexIndex: BuiltinVertexIndex;
|
28
|
+
readonly instanceIndex: BuiltinInstanceIndex;
|
29
|
+
readonly position: BuiltinPosition;
|
30
|
+
readonly clipDistances: BuiltinClipDistances;
|
31
|
+
readonly frontFacing: BuiltinFrontFacing;
|
32
|
+
readonly fragDepth: BuiltinFragDepth;
|
33
|
+
readonly sampleIndex: BuiltinSampleIndex;
|
34
|
+
readonly sampleMask: BuiltinSampleMask;
|
35
|
+
readonly localInvocationId: BuiltinLocalInvocationId;
|
36
|
+
readonly localInvocationIndex: BuiltinLocalInvocationIndex;
|
37
|
+
readonly globalInvocationId: BuiltinGlobalInvocationId;
|
38
|
+
readonly workgroupId: BuiltinWorkgroupId;
|
39
|
+
readonly numWorkgroups: BuiltinNumWorkgroups;
|
40
|
+
};
|
41
|
+
type AnyBuiltin = (typeof builtin)[keyof typeof builtin];
|
42
|
+
type AnyComputeBuiltin = BuiltinLocalInvocationId | BuiltinLocalInvocationIndex | BuiltinGlobalInvocationId | BuiltinWorkgroupId | BuiltinNumWorkgroups;
|
43
|
+
type OmitBuiltins<S> = S extends AnyBuiltin ? never : S extends BaseData ? S : {
|
44
|
+
[Key in keyof S as S[Key] extends AnyBuiltin ? never : Key]: S[Key];
|
45
|
+
};
|
46
|
+
|
47
|
+
declare const builtinNames: readonly ["vertex_index", "instance_index", "position", "clip_distances", "front_facing", "frag_depth", "sample_index", "sample_mask", "fragment", "local_invocation_id", "local_invocation_index", "global_invocation_id", "workgroup_id", "num_workgroups"];
|
48
|
+
type BuiltinName = (typeof builtinNames)[number];
|
49
|
+
type AnyAttribute = Align<number> | Size<number> | Location<number> | Builtin<BuiltinName> | Interpolate<InterpolationType>;
|
50
|
+
type ExtractAttributes<T> = T extends {
|
51
|
+
readonly attribs: unknown[];
|
52
|
+
} ? T['attribs'] : [];
|
53
|
+
type Undecorate<T> = T extends {
|
54
|
+
readonly inner: infer TInner;
|
55
|
+
} ? TInner : T;
|
56
|
+
/**
|
57
|
+
* Decorates a data-type `TData` with an attribute `TAttrib`.
|
58
|
+
*
|
59
|
+
* - if `TData` is loose
|
60
|
+
* - if `TData` is already `LooseDecorated`
|
61
|
+
* - Prepend `TAttrib` to the existing attribute tuple.
|
62
|
+
* - else
|
63
|
+
* - Wrap `TData` with `LooseDecorated` and a single attribute `[TAttrib]`
|
64
|
+
* - else
|
65
|
+
* - if `TData` is already `Decorated`
|
66
|
+
* - Prepend `TAttrib` to the existing attribute tuple.
|
67
|
+
* - else
|
68
|
+
* - Wrap `TData` with `Decorated` and a single attribute `[TAttrib]`
|
69
|
+
*/
|
70
|
+
type Decorate<TData extends BaseData, TAttrib extends AnyAttribute> = TData['type'] extends WgslTypeLiteral ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : TData['type'] extends LooseTypeLiteral ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]> : never;
|
71
|
+
type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true : false;
|
72
|
+
type HasCustomLocation<T> = ExtractAttributes<T>[number] extends [] ? false : ExtractAttributes<T>[number] extends Location<number> ? true : false;
|
73
|
+
/**
|
74
|
+
* Gives the wrapped data-type a custom byte alignment. Useful in order to
|
75
|
+
* fulfill uniform alignment requirements.
|
76
|
+
*
|
77
|
+
* @example
|
78
|
+
* const Data = d.struct({
|
79
|
+
* a: u32, // takes up 4 bytes
|
80
|
+
* // 12 bytes of padding, because `b` is custom aligned to multiples of 16 bytes
|
81
|
+
* b: d.align(16, u32),
|
82
|
+
* });
|
83
|
+
*
|
84
|
+
* @param alignment The multiple of bytes this data should align itself to.
|
85
|
+
* @param data The data-type to align.
|
86
|
+
*/
|
87
|
+
declare function align<TAlign extends number, TData extends AnyData>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>>;
|
88
|
+
/**
|
89
|
+
* Adds padding bytes after the wrapped data-type, until the whole value takes up `size` bytes.
|
90
|
+
*
|
91
|
+
* @example
|
92
|
+
* const Data = d.struct({
|
93
|
+
* a: d.size(16, u32), // takes up 16 bytes, instead of 4
|
94
|
+
* b: u32, // starts at byte 16, because `a` has a custom size
|
95
|
+
* });
|
96
|
+
*
|
97
|
+
* @param size The amount of bytes that should be reserved for this data-type.
|
98
|
+
* @param data The data-type to wrap.
|
99
|
+
*/
|
100
|
+
declare function size<TSize extends number, TData extends AnyData>(size: TSize, data: TData): Decorate<TData, Size<TSize>>;
|
101
|
+
/**
|
102
|
+
* Assigns an explicit numeric location to a struct member or a parameter that has this type.
|
103
|
+
*
|
104
|
+
* @example
|
105
|
+
* const VertexOutput = {
|
106
|
+
* a: d.u32, // has implicit location 0
|
107
|
+
* b: d.location(5, d.u32),
|
108
|
+
* c: d.u32, // has implicit location 6
|
109
|
+
* };
|
110
|
+
*
|
111
|
+
* @param location The explicit numeric location.
|
112
|
+
* @param data The data-type to wrap.
|
113
|
+
*/
|
114
|
+
declare function location<TLocation extends number, TData extends AnyData>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>>;
|
115
|
+
/**
|
116
|
+
* Specifies how user-defined vertex shader output (fragment shader input)
|
117
|
+
* must be interpolated.
|
118
|
+
*
|
119
|
+
* Tip: Integer outputs cannot be interpolated.
|
120
|
+
*
|
121
|
+
* @example
|
122
|
+
* const VertexOutput = {
|
123
|
+
* a: d.f32, // has implicit 'perspective, center' interpolation
|
124
|
+
* b: d.interpolate('linear, sample', d.f32),
|
125
|
+
* };
|
126
|
+
*
|
127
|
+
* @param interpolationType How data should be interpolated.
|
128
|
+
* @param data The data-type to wrap.
|
129
|
+
*/
|
130
|
+
declare function interpolate<TInterpolation extends PerspectiveOrLinearInterpolationType, TData extends PerspectiveOrLinearInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
131
|
+
/**
|
132
|
+
* Specifies how user-defined vertex shader output (fragment shader input)
|
133
|
+
* must be interpolated.
|
134
|
+
*
|
135
|
+
* Tip: Default sampling method of `flat` is `first`. Unless you specifically
|
136
|
+
* need deterministic behavior provided by `'flat, first'`, prefer explicit
|
137
|
+
* `'flat, either'` as it could be slightly faster in hardware.
|
138
|
+
*
|
139
|
+
* @example
|
140
|
+
* const VertexOutput = {
|
141
|
+
* a: d.f32, // has implicit 'perspective, center' interpolation
|
142
|
+
* b: d.interpolate('flat, either', d.u32), // integer outputs cannot interpolate
|
143
|
+
* };
|
144
|
+
*
|
145
|
+
* @param interpolationType How data should be interpolated.
|
146
|
+
* @param data The data-type to wrap.
|
147
|
+
*/
|
148
|
+
declare function interpolate<TInterpolation extends FlatInterpolationType, TData extends FlatInterpolatableData>(interpolationType: TInterpolation, data: TData): Decorate<TData, Interpolate<TInterpolation>>;
|
149
|
+
declare function isBuiltin<T extends Decorated<AnyWgslData, AnyAttribute[]> | LooseDecorated<AnyLooseData, AnyAttribute[]>>(value: T | unknown): value is T;
|
150
|
+
|
151
|
+
export { type AnyAttribute as A, type BuiltinSampleMask as B, type Decorate as D, type HasCustomLocation as H, type IsBuiltin as I, type OmitBuiltins as O, type AnyComputeBuiltin as a, type BuiltinFragDepth as b, align as c, isBuiltin as d, builtin as e, type BuiltinVertexIndex as f, type BuiltinInstanceIndex as g, type BuiltinPosition as h, interpolate as i, type BuiltinClipDistances as j, type BuiltinFrontFacing as k, location as l, type BuiltinSampleIndex as m, type BuiltinLocalInvocationId as n, type BuiltinLocalInvocationIndex as o, type BuiltinGlobalInvocationId as p, type BuiltinWorkgroupId as q, type BuiltinNumWorkgroups as r, size as s, type AnyBuiltin as t };
|
@@ -0,0 +1,4 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var J=Object.defineProperty,Q=Object.defineProperties;var X=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var Y=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var P=(n,e,r)=>e in n?J(n,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):n[e]=r,_= exports.a =(n,e)=>{for(var r in e||(e={}))Y.call(e,r)&&P(n,r,e[r]);if(E)for(var r of E(e))Z.call(e,r)&&P(n,r,e[r]);return n},I= exports.b =(n,e)=>Q(n,X(e));var m=(n,e,r)=>(P(n,typeof e!="symbol"?e+"":e,r),r);var S="Invariant failed";function H(n,e){if(n)return;throw new Error(S)}var A=class n extends Error{constructor(r,t){let u=t.map(s=>`- ${s}`);u.length>20&&(u=[...u.slice(0,11),"...",...u.slice(-10)]);super(`Resolution of the following tree failed:
|
2
|
+
${u.join(`
|
3
|
+
`)}`);this.cause=r;this.trace=t;Object.setPrototypeOf(this,n.prototype)}appendToTrace(r){let t=[r,...this.trace];return new n(this.cause,t)}},G= exports.f =class n extends Error{constructor(r){super(`Missing value for '${r}'`);this.slot=r;Object.setPrototypeOf(this,n.prototype)}},D= exports.g =class n extends Error{constructor(e){var r;super(`Buffer '${(r=e.label)!=null?r:"<unnamed>"}' is not bindable as a uniform. Use .$usage('uniform') to allow it.`),Object.setPrototypeOf(this,n.prototype)}},N= exports.h =class n extends Error{constructor(e,r){super(`The function '${e!=null?e:"<unnamed>"}' is missing links to the following external values: ${r}.`),Object.setPrototypeOf(this,n.prototype)}},K= exports.i =class n extends Error{constructor(e){super(`Missing bind groups for layouts: '${[...e].map(r=>{var t;return(t=r.label)!=null?t:"<unnamed>"}).join(", ")}'. Please provide it using pipeline.with(layout, bindGroup).(...)`),Object.setPrototypeOf(this,n.prototype)}},U= exports.j =class n extends Error{constructor(e){super(`Missing vertex buffers for layouts: '${[...e].map(r=>{var t;return(t=r.label)!=null?t:"<unnamed>"}).join(", ")}'. Please provide it using pipeline.with(layout, buffer).(...)`),Object.setPrototypeOf(this,n.prototype)}};var V=null;function te(n,e){H(V===null,"Cannot nest context providers"),V=n;try{return e()}finally{V=null}}function ue(){return V}var C=()=>V!==null;function o(n){let e={"~repr":void 0,type:n.type};return Object.assign((...t)=>{var s;let u=t;if(C())return`${e.type}(${u.join(", ")})`;if(u.length<=1)return n.makeFromScalar((s=u[0])!=null?s:0);if(u.length===n.length)return n.make(...u);throw new Error(`'${n.type}' constructor called with invalid number of arguments.`)},e)}var i=class{constructor(e,r){this.x=e;this.y=r;m(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(e){this.x=e}set 1(e){this.y=e}"~resolve"(){return`${this.kind}(${this.x}, ${this.y})`}toString(){return this["~resolve"]()}},l=class n extends i{constructor(){super(...arguments);m(this,"kind","vec2f")}make2(r,t){return new n(r,t)}make3(r,t,u){return new v(r,t,u)}make4(r,t,u,s){return new d(r,t,u,s)}},c=class n extends i{constructor(){super(...arguments);m(this,"kind","vec2h")}make2(r,t){return new n(r,t)}make3(r,t,u){return new p(r,t,u)}make4(r,t,u,s){return new x(r,t,u,s)}},b=class n extends i{constructor(){super(...arguments);m(this,"kind","vec2i")}make2(r,t){return new n(r,t)}make3(r,t,u){return new f(r,t,u)}make4(r,t,u,s){return new g(r,t,u,s)}},h=class n extends i{constructor(){super(...arguments);m(this,"kind","vec2u")}make2(r,t){return new n(r,t)}make3(r,t,u){return new w(r,t,u)}make4(r,t,u,s){return new T(r,t,u,s)}},y=class{constructor(e,r,t){this.x=e;this.y=r;this.z=t;m(this,"length",3)}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}get 0(){return this.x}get 1(){return this.y}get 2(){return this.z}set 0(e){this.x=e}set 1(e){this.y=e}set 2(e){this.z=e}"~resolve"(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}toString(){return this["~resolve"]()}},v=class n extends y{constructor(){super(...arguments);m(this,"kind","vec3f")}make2(r,t){return new l(r,t)}make3(r,t,u){return new n(r,t,u)}make4(r,t,u,s){return new d(r,t,u,s)}},p=class n extends y{constructor(){super(...arguments);m(this,"kind","vec3h")}make2(r,t){return new c(r,t)}make3(r,t,u){return new n(r,t,u)}make4(r,t,u,s){return new x(r,t,u,s)}},f=class n extends y{constructor(){super(...arguments);m(this,"kind","vec3i")}make2(r,t){return new b(r,t)}make3(r,t,u){return new n(r,t,u)}make4(r,t,u,s){return new g(r,t,u,s)}},w=class n extends y{constructor(){super(...arguments);m(this,"kind","vec3u")}make2(r,t){return new h(r,t)}make3(r,t,u){return new n(r,t,u)}make4(r,t,u,s){return new T(r,t,u,s)}},k=class{constructor(e,r,t,u){this.x=e;this.y=r;this.z=t;this.w=u;m(this,"length",4)}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}get 0(){return this.x}get 1(){return this.y}get 2(){return this.z}get 3(){return this.w}set 0(e){this.x=e}set 1(e){this.y=e}set 2(e){this.z=e}set 3(e){this.w=e}"~resolve"(){return`${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`}toString(){return this["~resolve"]()}},d=class n extends k{constructor(){super(...arguments);m(this,"kind","vec4f")}make2(r,t){return new l(r,t)}make3(r,t,u){return new v(r,t,u)}make4(r,t,u,s){return new n(r,t,u,s)}},x=class n extends k{constructor(){super(...arguments);m(this,"kind","vec4h")}make2(r,t){return new c(r,t)}make3(r,t,u){return new p(r,t,u)}make4(r,t,u,s){return new n(r,t,u,s)}},g=class n extends k{constructor(){super(...arguments);m(this,"kind","vec4i")}make2(r,t){return new b(r,t)}make3(r,t,u){return new f(r,t,u)}make4(r,t,u,s){return new n(r,t,u,s)}},T=class n extends k{constructor(){super(...arguments);m(this,"kind","vec4u")}make2(r,t){return new h(r,t)}make3(r,t,u){return new w(r,t,u)}make4(r,t,u,s){return new n(r,t,u,s)}},a={get:(n,e)=>{if(typeof e=="symbol"||!Number.isNaN(Number.parseInt(e)))return Reflect.get(n,e);let r=n,t=new Array(e.length),u=0;for(let s of e){switch(s){case"x":t[u]=r.x;break;case"y":t[u]=r.y;break;case"z":t[u]=r.z;break;case"w":t[u]=r.w;break;default:return Reflect.get(r,e)}u++}return e.length===4?new Proxy(r.make4(t[0],t[1],t[2],t[3]),a):e.length===3?new Proxy(r.make3(t[0],t[1],t[2]),a):e.length===2?new Proxy(r.make2(t[0],t[1]),a):Reflect.get(n,e)}},L= exports.n =o({type:"vec2f",length:2,make:(n,e)=>new Proxy(new l(n,e),a),makeFromScalar:n=>new Proxy(new l(n,n),a)}),me= exports.o =o({type:"vec2h",length:2,make:(n,e)=>new Proxy(new c(n,e),a),makeFromScalar:n=>new Proxy(new c(n,n),a)}),oe= exports.p =o({type:"vec2i",length:2,make:(n,e)=>new Proxy(new b(n,e),a),makeFromScalar:n=>new Proxy(new b(n,n),a)}),ie= exports.q =o({type:"vec2u",length:2,make:(n,e)=>new Proxy(new h(n,e),a),makeFromScalar:n=>new Proxy(new h(n,n),a)}),W= exports.r =o({type:"vec3f",length:3,make:(n,e,r)=>new Proxy(new v(n,e,r),a),makeFromScalar:n=>new Proxy(new v(n,n,n),a)}),le= exports.s =o({type:"vec3h",length:3,make:(n,e,r)=>new Proxy(new p(n,e,r),a),makeFromScalar:n=>new Proxy(new p(n,n,n),a)}),ce= exports.t =o({type:"vec3i",length:3,make:(n,e,r)=>new Proxy(new f(n,e,r),a),makeFromScalar:n=>new Proxy(new f(n,n,n),a)}),be= exports.u =o({type:"vec3u",length:3,make:(n,e,r)=>new Proxy(new w(n,e,r),a),makeFromScalar:n=>new Proxy(new w(n,n,n),a)}),q= exports.v =o({type:"vec4f",length:4,make:(n,e,r,t)=>new Proxy(new d(n,e,r,t),a),makeFromScalar:n=>new Proxy(new d(n,n,n,n),a)}),he= exports.w =o({type:"vec4h",length:4,make:(n,e,r,t)=>new Proxy(new x(n,e,r,t),a),makeFromScalar:n=>new Proxy(new x(n,n,n,n),a)}),ye= exports.x =o({type:"vec4i",length:4,make:(n,e,r,t)=>new Proxy(new g(n,e,r,t),a),makeFromScalar:n=>new Proxy(new g(n,n,n,n),a)}),ve= exports.y =o({length:4,type:"vec4u",make:(n,e,r,t)=>new Proxy(new T(n,e,r,t),a),makeFromScalar:n=>new Proxy(new T(n,n,n,n),a)});function B(n){let e={"~repr":void 0,type:n.type,label:n.type};return Object.assign((...t)=>{if(C())return`${e.type}(${t.join(", ")})`;let u=[];for(let s of t)if(typeof s=="number")u.push(s);else for(let $=0;$<s.length;++$)u.push(s[$]);for(let s=u.length;s<n.columns*n.rows;++s)u.push(0);return n.makeFromElements(...u)},e)}var z=class{constructor(...e){m(this,"columns");m(this,"length",4);this.columns=[this.makeColumn(e[0],e[1]),this.makeColumn(e[2],e[3])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[1].x}get 3(){return this.columns[1].y}set 0(e){this.columns[0].x=e}set 1(e){this.columns[0].y=e}set 2(e){this.columns[1].x=e}set 3(e){this.columns[1].y=e}"~resolve"(){return`${this.kind}(${Array.from({length:this.length}).map((e,r)=>this[r]).join(", ")})`}},F=class extends z{constructor(){super(...arguments);m(this,"kind","mat2x2f")}makeColumn(r,t){return L(r,t)}},O=class{constructor(...e){m(this,"columns");m(this,"length",12);this.columns=[this.makeColumn(e[0],e[1],e[2]),this.makeColumn(e[3],e[4],e[5]),this.makeColumn(e[6],e[7],e[8])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[0].z}get 3(){return 0}get 4(){return this.columns[1].x}get 5(){return this.columns[1].y}get 6(){return this.columns[1].z}get 7(){return 0}get 8(){return this.columns[2].x}get 9(){return this.columns[2].y}get 10(){return this.columns[2].z}get 11(){return 0}set 0(e){this.columns[0].x=e}set 1(e){this.columns[0].y=e}set 2(e){this.columns[0].z=e}set 3(e){}set 4(e){this.columns[1].x=e}set 5(e){this.columns[1].y=e}set 6(e){this.columns[1].z=e}set 7(e){}set 8(e){this.columns[2].x=e}set 9(e){this.columns[2].y=e}set 10(e){this.columns[2].z=e}set 11(e){}"~resolve"(){return`${this.kind}(${this[0]}, ${this[1]}, ${this[2]}, ${this[4]}, ${this[5]}, ${this[6]}, ${this[8]}, ${this[9]}, ${this[10]})`}},R=class extends O{constructor(){super(...arguments);m(this,"kind","mat3x3f")}makeColumn(r,t,u){return W(r,t,u)}},j=class{constructor(...e){m(this,"columns");m(this,"length",16);this.columns=[this.makeColumn(e[0],e[1],e[2],e[3]),this.makeColumn(e[4],e[5],e[6],e[7]),this.makeColumn(e[8],e[9],e[10],e[11]),this.makeColumn(e[12],e[13],e[14],e[15])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[0].z}get 3(){return this.columns[0].w}get 4(){return this.columns[1].x}get 5(){return this.columns[1].y}get 6(){return this.columns[1].z}get 7(){return this.columns[1].w}get 8(){return this.columns[2].x}get 9(){return this.columns[2].y}get 10(){return this.columns[2].z}get 11(){return this.columns[2].w}get 12(){return this.columns[3].x}get 13(){return this.columns[3].y}get 14(){return this.columns[3].z}get 15(){return this.columns[3].w}set 0(e){this.columns[0].x=e}set 1(e){this.columns[0].y=e}set 2(e){this.columns[0].z=e}set 3(e){this.columns[0].w=e}set 4(e){this.columns[1].x=e}set 5(e){this.columns[1].y=e}set 6(e){this.columns[1].z=e}set 7(e){this.columns[1].w=e}set 8(e){this.columns[2].x=e}set 9(e){this.columns[2].y=e}set 10(e){this.columns[2].z=e}set 11(e){this.columns[2].w=e}set 12(e){this.columns[3].x=e}set 13(e){this.columns[3].y=e}set 14(e){this.columns[3].z=e}set 15(e){this.columns[3].w=e}"~resolve"(){return`${this.kind}(${Array.from({length:this.length}).map((e,r)=>this[r]).join(", ")})`}},M=class extends j{constructor(){super(...arguments);m(this,"kind","mat4x4f")}makeColumn(r,t,u,s){return q(r,t,u,s)}},de= exports.z =B({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...n)=>new F(...n)}),xe= exports.A =B({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...n)=>new R(...n)}),ge= exports.B =B({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...n)=>new M(...n)});function Te(n){return n.kind==="mat3x3f"?[n[0],n[1],n[2],n[4],n[5],n[6],n[8],n[9],n[10]]:Array.from({length:n.length}).map((e,r)=>n[r])}exports.a = _; exports.b = I; exports.c = m; exports.d = H; exports.e = A; exports.f = G; exports.g = D; exports.h = N; exports.i = K; exports.j = U; exports.k = te; exports.l = ue; exports.m = C; exports.n = L; exports.o = me; exports.p = oe; exports.q = ie; exports.r = W; exports.s = le; exports.t = ce; exports.u = be; exports.v = q; exports.w = he; exports.x = ye; exports.y = ve; exports.z = de; exports.A = xe; exports.B = ge; exports.C = Te;
|
4
|
+
//# sourceMappingURL=chunk-LF344PKG.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/gpuMode.ts","../src/data/vector.ts","../src/data/matrix.ts"],"names":["prefix","invariant","condition","message","ResolutionError","_ResolutionError","cause","trace","entries","ancestor","newTrace","MissingSlotValueError","_MissingSlotValueError","slot","NotUniformError","_NotUniformError","value","_a","MissingLinksError","_MissingLinksError","fnLabel","externalNames","MissingBindGroupsError","_MissingBindGroupsError","layouts","layout","MissingVertexBuffersError","_MissingVertexBuffersError","resolutionCtx","provideCtx","ctx","callback","getResolutionCtx","inGPUMode","makeVecSchema","options","VecSchema","args","values","vec2Impl","x","y","__publicField","vec2fImpl","_vec2fImpl","z","vec3fImpl","w","vec4fImpl","vec2hImpl","_vec2hImpl","vec3hImpl","vec4hImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3hImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4hImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","prop","targetAsVec4","idx","char","vec2f","vec2h","vec2i","vec2u","vec3f","vec3h","vec3i","vec3u","vec4f","vec4h","vec4i","vec4u","createMatSchema","MatSchema","elements","arg","i","mat2x2Impl","_","mat2x2fImpl","e0","e1","mat3x3Impl","mat3x3fImpl","mat4x4Impl","mat4x4fImpl","mat2x2f","mat3x3f","mat4x4f","matToArray","mat"],"mappings":"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","sourcesContent":["import type { TgpuBuffer } from './core/buffer/buffer';\nimport type { TgpuSlot } from './core/slot/slotTypes';\nimport type { TgpuVertexLayout } from './core/vertexLayout/vertexLayout';\nimport type { AnyData, Disarray } from './data/dataTypes';\nimport type { WgslArray } from './data/wgslTypes';\nimport type { TgpuBindGroupLayout } from './tgpuBindGroupLayout';\n\nconst prefix = 'Invariant failed';\n\n/**\n * Inspired by: https://github.com/alexreardon/tiny-invariant/blob/master/src/tiny-invariant.ts\n */\nexport function invariant(\n condition: unknown,\n message?: string | (() => string),\n): asserts condition {\n if (condition) {\n // Condition passed\n return;\n }\n\n // In production we strip the message but still throw\n if (process.env.NODE_ENV === 'production') {\n throw new Error(prefix);\n }\n\n // When not in production we allow the message to pass through\n // *This block will be removed in production builds*\n\n const provided = typeof message === 'function' ? message() : message;\n\n // Options:\n // 1. message provided: `${prefix}: ${provided}`\n // 2. message not provided: prefix\n const value = provided ? `${prefix}: ${provided}` : prefix;\n throw new Error(value);\n}\n\n/**\n * An error that happens during resolution of WGSL code.\n * Contains a trace of all ancestor resolvables in\n * which this error originated.\n *\n * @category Errors\n */\nexport class ResolutionError extends Error {\n constructor(\n public readonly cause: unknown,\n public readonly trace: unknown[],\n ) {\n let entries = trace.map((ancestor) => `- ${ancestor}`);\n\n // Showing only the root and leaf nodes.\n if (entries.length > 20) {\n entries = [...entries.slice(0, 11), '...', ...entries.slice(-10)];\n }\n\n super(`Resolution of the following tree failed: \\n${entries.join('\\n')}`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ResolutionError.prototype);\n }\n\n appendToTrace(ancestor: unknown): ResolutionError {\n const newTrace = [ancestor, ...this.trace];\n\n return new ResolutionError(this.cause, newTrace);\n }\n}\n\n/**\n * @category Errors\n */\nexport class MissingSlotValueError extends Error {\n constructor(public readonly slot: TgpuSlot<unknown>) {\n super(`Missing value for '${slot}'`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingSlotValueError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class NotUniformError extends Error {\n constructor(value: TgpuBuffer<AnyData>) {\n super(\n `Buffer '${value.label ?? '<unnamed>'}' is not bindable as a uniform. Use .$usage('uniform') to allow it.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, NotUniformError.prototype);\n }\n}\n\nexport class MissingLinksError extends Error {\n constructor(fnLabel: string | undefined, externalNames: string[]) {\n super(\n `The function '${fnLabel ?? '<unnamed>'}' is missing links to the following external values: ${externalNames}.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingLinksError.prototype);\n }\n}\n\nexport class MissingBindGroupsError extends Error {\n constructor(layouts: Iterable<TgpuBindGroupLayout>) {\n super(\n `Missing bind groups for layouts: '${[...layouts].map((layout) => layout.label ?? '<unnamed>').join(', ')}'. Please provide it using pipeline.with(layout, bindGroup).(...)`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingBindGroupsError.prototype);\n }\n}\n\nexport class MissingVertexBuffersError extends Error {\n constructor(layouts: Iterable<TgpuVertexLayout<WgslArray | Disarray>>) {\n super(\n `Missing vertex buffers for layouts: '${[...layouts].map((layout) => layout.label ?? '<unnamed>').join(', ')}'. Please provide it using pipeline.with(layout, buffer).(...)`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingVertexBuffersError.prototype);\n }\n}\n","import { invariant } from './errors';\nimport type { ResolutionCtx } from './types';\n\nlet resolutionCtx: ResolutionCtx | null = null;\n\nexport function provideCtx<T>(ctx: ResolutionCtx, callback: () => T): T {\n invariant(resolutionCtx === null, 'Cannot nest context providers');\n\n resolutionCtx = ctx;\n try {\n return callback();\n } finally {\n resolutionCtx = null;\n }\n}\n\nexport function getResolutionCtx(): ResolutionCtx | null {\n return resolutionCtx;\n}\n\nexport const inGPUMode = () => resolutionCtx !== null;\n","import { inGPUMode } from '../gpuMode';\nimport type { SelfResolvable } from '../types';\nimport type {\n Vec2f,\n Vec2h,\n Vec2i,\n Vec2u,\n Vec3f,\n Vec3h,\n Vec3i,\n Vec3u,\n Vec4f,\n Vec4h,\n Vec4i,\n Vec4u,\n v2f,\n v2h,\n v2i,\n v2u,\n v3f,\n v3h,\n v3i,\n v3u,\n v4f,\n v4h,\n v4i,\n v4u,\n} from './wgslTypes';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<TType extends string, TValue> {\n type: TType;\n length: number;\n make: (...args: number[]) => TValue;\n makeFromScalar: (value: number) => TValue;\n}\n\ntype VecSchemaBase<TValue> = {\n readonly type: string;\n readonly '~repr': TValue;\n};\n\nfunction makeVecSchema<TType extends string, TValue>(\n options: VecSchemaOptions<TType, TValue>,\n): VecSchemaBase<TValue> & ((...args: number[]) => TValue) {\n const VecSchema: VecSchemaBase<TValue> = {\n /** Type-token, not available at runtime */\n '~repr': undefined as unknown as TValue,\n type: options.type,\n };\n\n const construct = (...args: number[]): TValue => {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\n\n if (inGPUMode()) {\n return `${VecSchema.type}(${values.join(', ')})` as unknown as TValue;\n }\n\n if (values.length <= 1) {\n return options.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === options.length) {\n return options.make(...values);\n }\n\n throw new Error(\n `'${options.type}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl implements SelfResolvable {\n public readonly length = 2;\n abstract readonly kind: `vec2${'f' | 'u' | 'i' | 'h'}`;\n\n [n: number]: number;\n\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n\n get [0]() {\n return this.x;\n }\n\n get [1]() {\n return this.y;\n }\n\n set [0](value: number) {\n this.x = value;\n }\n\n set [1](value: number) {\n this.y = value;\n }\n\n '~resolve'(): string {\n return `${this.kind}(${this.x}, ${this.y})`;\n }\n\n toString() {\n return this['~resolve']();\n }\n}\n\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): v2f {\n return new vec2fImpl(x, y) as unknown as v2f;\n }\n\n make3(x: number, y: number, z: number): v3f {\n return new vec3fImpl(x, y, z) as unknown as v3f;\n }\n\n make4(x: number, y: number, z: number, w: number): v4f {\n return new vec4fImpl(x, y, z, w) as unknown as v4f;\n }\n}\n\nclass vec2hImpl extends vec2Impl {\n readonly kind = 'vec2h';\n\n make2(x: number, y: number): v2h {\n return new vec2hImpl(x, y) as unknown as v2h;\n }\n\n make3(x: number, y: number, z: number): v3h {\n return new vec3hImpl(x, y, z) as unknown as v3h;\n }\n\n make4(x: number, y: number, z: number, w: number): v4h {\n return new vec4hImpl(x, y, z, w) as unknown as v4h;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): v2i {\n return new vec2iImpl(x, y) as unknown as v2i;\n }\n\n make3(x: number, y: number, z: number): v3i {\n return new vec3iImpl(x, y, z) as unknown as v3i;\n }\n\n make4(x: number, y: number, z: number, w: number): v4i {\n return new vec4iImpl(x, y, z, w) as unknown as v4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): v2u {\n return new vec2uImpl(x, y) as unknown as v2u;\n }\n\n make3(x: number, y: number, z: number): v3u {\n return new vec3uImpl(x, y, z) as unknown as v3u;\n }\n\n make4(x: number, y: number, z: number, w: number): v4u {\n return new vec4uImpl(x, y, z, w) as unknown as v4u;\n }\n}\n\nabstract class vec3Impl implements SelfResolvable {\n public readonly length = 3;\n abstract readonly kind: `vec3${'f' | 'u' | 'i' | 'h'}`;\n [n: number]: number;\n\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n\n get [0]() {\n return this.x;\n }\n\n get [1]() {\n return this.y;\n }\n\n get [2]() {\n return this.z;\n }\n\n set [0](value: number) {\n this.x = value;\n }\n\n set [1](value: number) {\n this.y = value;\n }\n\n set [2](value: number) {\n this.z = value;\n }\n\n '~resolve'(): string {\n return `${this.kind}(${this.x}, ${this.y}, ${this.z})`;\n }\n\n toString() {\n return this['~resolve']();\n }\n}\n\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): v2f {\n return new vec2fImpl(x, y) as unknown as v2f;\n }\n\n make3(x: number, y: number, z: number): v3f {\n return new vec3fImpl(x, y, z) as unknown as v3f;\n }\n\n make4(x: number, y: number, z: number, w: number): v4f {\n return new vec4fImpl(x, y, z, w) as unknown as v4f;\n }\n}\n\nclass vec3hImpl extends vec3Impl {\n readonly kind = 'vec3h';\n\n make2(x: number, y: number): v2h {\n return new vec2hImpl(x, y) as unknown as v2h;\n }\n\n make3(x: number, y: number, z: number): v3h {\n return new vec3hImpl(x, y, z) as unknown as v3h;\n }\n\n make4(x: number, y: number, z: number, w: number): v4h {\n return new vec4hImpl(x, y, z, w) as unknown as v4h;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): v2i {\n return new vec2iImpl(x, y) as unknown as v2i;\n }\n\n make3(x: number, y: number, z: number): v3i {\n return new vec3iImpl(x, y, z) as unknown as v3i;\n }\n\n make4(x: number, y: number, z: number, w: number): v4i {\n return new vec4iImpl(x, y, z, w) as unknown as v4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): v2u {\n return new vec2uImpl(x, y) as unknown as v2u;\n }\n\n make3(x: number, y: number, z: number): v3u {\n return new vec3uImpl(x, y, z) as unknown as v3u;\n }\n\n make4(x: number, y: number, z: number, w: number): v4u {\n return new vec4uImpl(x, y, z, w) as unknown as v4u;\n }\n}\n\nabstract class vec4Impl implements SelfResolvable {\n public readonly length = 4;\n abstract readonly kind: `vec4${'f' | 'u' | 'i' | 'h'}`;\n [n: number]: number;\n\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n yield this.w;\n }\n\n get [0]() {\n return this.x;\n }\n\n get [1]() {\n return this.y;\n }\n\n get [2]() {\n return this.z;\n }\n\n get [3]() {\n return this.w;\n }\n\n set [0](value: number) {\n this.x = value;\n }\n\n set [1](value: number) {\n this.y = value;\n }\n\n set [2](value: number) {\n this.z = value;\n }\n\n set [3](value: number) {\n this.w = value;\n }\n\n '~resolve'(): string {\n return `${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\n }\n\n toString() {\n return this['~resolve']();\n }\n}\n\nclass vec4fImpl extends vec4Impl {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): v2f {\n return new vec2fImpl(x, y) as unknown as v2f;\n }\n\n make3(x: number, y: number, z: number): v3f {\n return new vec3fImpl(x, y, z) as unknown as v3f;\n }\n\n make4(x: number, y: number, z: number, w: number): v4f {\n return new vec4fImpl(x, y, z, w) as unknown as v4f;\n }\n}\n\nclass vec4hImpl extends vec4Impl {\n readonly kind = 'vec4h';\n\n make2(x: number, y: number): v2h {\n return new vec2hImpl(x, y) as unknown as v2h;\n }\n\n make3(x: number, y: number, z: number): v3h {\n return new vec3hImpl(x, y, z) as unknown as v3h;\n }\n\n make4(x: number, y: number, z: number, w: number): v4h {\n return new vec4hImpl(x, y, z, w) as unknown as v4h;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): v2i {\n return new vec2iImpl(x, y) as unknown as v2i;\n }\n\n make3(x: number, y: number, z: number): v3i {\n return new vec3iImpl(x, y, z) as unknown as v3i;\n }\n\n make4(x: number, y: number, z: number, w: number): v4i {\n return new vec4iImpl(x, y, z, w) as unknown as v4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): v2u {\n return new vec2uImpl(x, y) as unknown as v2u;\n }\n\n make3(x: number, y: number, z: number): v3u {\n return new vec3uImpl(x, y, z) as unknown as v3u;\n }\n\n make4(x: number, y: number, z: number, w: number): v4u {\n return new vec4uImpl(x, y, z, w) as unknown as v4u;\n }\n}\n\nconst vecProxyHandler: ProxyHandler<{ kind: VecKind }> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol' || !Number.isNaN(Number.parseInt(prop))) {\n return Reflect.get(target, prop);\n }\n\n const targetAsVec4 = target as unknown as vec4uImpl;\n const values = new Array(prop.length) as number[];\n\n let idx = 0;\n for (const char of prop as string) {\n switch (char) {\n case 'x':\n values[idx] = targetAsVec4.x;\n break;\n case 'y':\n values[idx] = targetAsVec4.y;\n break;\n case 'z':\n values[idx] = targetAsVec4.z;\n break;\n case 'w':\n values[idx] = targetAsVec4.w;\n break;\n default:\n return Reflect.get(targetAsVec4, prop);\n }\n idx++;\n }\n\n if (prop.length === 4) {\n return new Proxy(\n targetAsVec4.make4(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n values[3] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 3) {\n return new Proxy(\n targetAsVec4.make3(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 2) {\n return new Proxy(\n targetAsVec4.make2(values[0] as number, values[1] as number),\n vecProxyHandler,\n );\n }\n\n return Reflect.get(target, prop);\n },\n};\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Type encompassing all available kinds of vector.\n */\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec2h'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec3h'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u'\n | 'vec4h';\n\n/**\n *\n * Schema representing vec2f - a vector with 2 elements of type f32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2f(); // (0.0, 0.0)\n * const vector = d.vec2f(1); // (1.0, 1.0)\n * const vector = d.vec2f(0.5, 0.1); // (0.5, 0.1)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2f, d.vec2f(0, 1)); // buffer holding a d.vec2f value, with an initial value of vec2f(0, 1);\n */\nexport const vec2f = makeVecSchema({\n type: 'vec2f',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as v2f,\n makeFromScalar: (x) => new Proxy(new vec2fImpl(x, x), vecProxyHandler) as v2f,\n}) as Vec2f;\n\n/**\n *\n * Schema representing vec2h - a vector with 2 elements of type f16.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2h(); // (0.0, 0.0)\n * const vector = d.vec2h(1); // (1.0, 1.0)\n * const vector = d.vec2h(0.5, 0.1); // (0.5, 0.1)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2h, d.vec2h(0, 1)); // buffer holding a d.vec2h value, with an initial value of vec2h(0, 1);\n */\nexport const vec2h = makeVecSchema({\n type: 'vec2h',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2hImpl(x, y), vecProxyHandler) as v2h,\n makeFromScalar: (x) => new Proxy(new vec2hImpl(x, x), vecProxyHandler) as v2h,\n}) as Vec2h;\n\n/**\n *\n * Schema representing vec2i - a vector with 2 elements of type i32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2i(); // (0, 0)\n * const vector = d.vec2i(1); // (1, 1)\n * const vector = d.vec2i(-1, 1); // (-1, 1)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2i, d.vec2i(0, 1)); // buffer holding a d.vec2i value, with an initial value of vec2i(0, 1);\n */\nexport const vec2i = makeVecSchema({\n type: 'vec2i',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as v2i,\n makeFromScalar: (x) => new Proxy(new vec2iImpl(x, x), vecProxyHandler) as v2i,\n}) as Vec2i;\n\n/**\n *\n * Schema representing vec2u - a vector with 2 elements of type u32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2u(); // (0, 0)\n * const vector = d.vec2u(1); // (1, 1)\n * const vector = d.vec2u(1, 2); // (1, 2)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2u, d.vec2u(0, 1)); // buffer holding a d.vec2u value, with an initial value of vec2u(0, 1);\n */\nexport const vec2u = makeVecSchema({\n type: 'vec2u',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as v2u,\n makeFromScalar: (x) => new Proxy(new vec2uImpl(x, x), vecProxyHandler) as v2u,\n}) as Vec2u;\n\n/**\n *\n * Schema representing vec3f - a vector with 3 elements of type f32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3f(); // (0.0, 0.0, 0.0)\n * const vector = d.vec3f(1); // (1.0, 1.0, 1.0)\n * const vector = d.vec3f(1, 2, 3.5); // (1.0, 2.0, 3.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3f, d.vec3f(0, 1, 2)); // buffer holding a d.vec3f value, with an initial value of vec3f(0, 1, 2);\n */\nexport const vec3f = makeVecSchema({\n type: 'vec3f',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as v3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as v3f,\n}) as Vec3f;\n\n/**\n *\n * Schema representing vec3h - a vector with 3 elements of type f16.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3h(); // (0.0, 0.0, 0.0)\n * const vector = d.vec3h(1); // (1.0, 1.0, 1.0)\n * const vector = d.vec3h(1, 2, 3.5); // (1.0, 2.0, 3.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3h, d.vec3h(0, 1, 2)); // buffer holding a d.vec3h value, with an initial value of vec3h(0, 1, 2);\n */\nexport const vec3h = makeVecSchema({\n type: 'vec3h',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3hImpl(x, y, z), vecProxyHandler) as v3h,\n makeFromScalar: (x) =>\n new Proxy(new vec3hImpl(x, x, x), vecProxyHandler) as v3h,\n}) as Vec3h;\n\n/**\n *\n * Schema representing vec3i - a vector with 3 elements of type i32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3i(); // (0, 0, 0)\n * const vector = d.vec3i(1); // (1, 1, 1)\n * const vector = d.vec3i(1, 2, -3); // (1, 2, -3)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3i, d.vec3i(0, 1, 2)); // buffer holding a d.vec3i value, with an initial value of vec3i(0, 1, 2);\n */\nexport const vec3i = makeVecSchema({\n type: 'vec3i',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as v3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as v3i,\n}) as Vec3i;\n\n/**\n *\n * Schema representing vec3u - a vector with 3 elements of type u32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3u(); // (0, 0, 0)\n * const vector = d.vec3u(1); // (1, 1, 1)\n * const vector = d.vec3u(1, 2, 3); // (1, 2, 3)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3u, d.vec3u(0, 1, 2)); // buffer holding a d.vec3u value, with an initial value of vec3u(0, 1, 2);\n */\nexport const vec3u = makeVecSchema({\n type: 'vec3u',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as v3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as v3u,\n}) as Vec3u;\n\n/**\n *\n * Schema representing vec4f - a vector with 4 elements of type f32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4f(); // (0.0, 0.0, 0.0, 0.0)\n * const vector = d.vec4f(1); // (1.0, 1.0, 1.0, 1.0)\n * const vector = d.vec4f(1, 2, 3, 4.5); // (1.0, 2.0, 3.0, 4.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4f, d.vec4f(0, 1, 2, 3)); // buffer holding a d.vec4f value, with an initial value of vec4f(0, 1, 2, 3);\n */\nexport const vec4f = makeVecSchema({\n type: 'vec4f',\n length: 4,\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as v4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as v4f,\n}) as Vec4f;\n\n/**\n *\n * Schema representing vec4h - a vector with 4 elements of type f16.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4h(); // (0.0, 0.0, 0.0, 0.0)\n * const vector = d.vec4h(1); // (1.0, 1.0, 1.0, 1.0)\n * const vector = d.vec4h(1, 2, 3, 4.5); // (1.0, 2.0, 3.0, 4.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4h, d.vec4h(0, 1, 2, 3)); // buffer holding a d.vec4h value, with an initial value of vec4h(0, 1, 2, 3);\n */\nexport const vec4h = makeVecSchema({\n type: 'vec4h',\n length: 4,\n make: (x, y, z, w) =>\n new Proxy(new vec4hImpl(x, y, z, w), vecProxyHandler) as v4h,\n makeFromScalar: (x) =>\n new Proxy(new vec4hImpl(x, x, x, x), vecProxyHandler) as v4h,\n}) as Vec4h;\n\n/**\n *\n * Schema representing vec4i - a vector with 4 elements of type i32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4i(); // (0, 0, 0, 0)\n * const vector = d.vec4i(1); // (1, 1, 1, 1)\n * const vector = d.vec4i(1, 2, 3, -4); // (1, 2, 3, -4)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4i, d.vec4i(0, 1, 2, 3)); // buffer holding a d.vec4i value, with an initial value of vec4i(0, 1, 2, 3);\n */\nexport const vec4i = makeVecSchema({\n type: 'vec4i',\n length: 4,\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as v4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as v4i,\n}) as Vec4i;\n\n/**\n *\n * Schema representing vec4u - a vector with 4 elements of type u32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4u(); // (0, 0, 0, 0)\n * const vector = d.vec4u(1); // (1, 1, 1, 1)\n * const vector = d.vec4u(1, 2, 3, 4); // (1, 2, 3, 4)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4u, d.vec4u(0, 1, 2, 3)); // buffer holding a d.vec4u value, with an initial value of vec4u(0, 1, 2, 3);\n */\nexport const vec4u = makeVecSchema({\n length: 4,\n type: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as v4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as v4u,\n}) as Vec4u;\n","import { inGPUMode } from '../gpuMode';\nimport type { SelfResolvable } from '../types';\nimport { type VecKind, vec2f, vec3f, vec4f } from './vector';\nimport type {\n Mat2x2f,\n Mat3x3f,\n Mat4x4f,\n m2x2f,\n m3x3f,\n m4x4f,\n mat2x2,\n mat3x3,\n mat4x4,\n matBase,\n v2f,\n v3f,\n v4f,\n} from './wgslTypes';\n\n// --------------\n// Implementation\n// --------------\n\ntype vBase = {\n kind: VecKind;\n length: number;\n [n: number]: number;\n};\n\ninterface MatSchemaOptions<TType extends string, ValueType> {\n type: TType;\n rows: number;\n columns: number;\n makeFromElements(...elements: number[]): ValueType;\n}\n\ntype MatConstructor<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vBase,\n> = (...args: (number | ColumnType)[]) => ValueType;\n\nfunction createMatSchema<\n TType extends string,\n ValueType extends matBase<ColumnType>,\n ColumnType extends vBase,\n>(\n options: MatSchemaOptions<TType, ValueType>,\n): { type: TType; '~repr': ValueType } & MatConstructor<ValueType, ColumnType> {\n const MatSchema = {\n /** Type-token, not available at runtime */\n '~repr': undefined as unknown as ValueType,\n type: options.type,\n label: options.type,\n };\n\n const construct = (...args: (number | ColumnType)[]): ValueType => {\n if (inGPUMode()) {\n return `${MatSchema.type}(${args.join(', ')})` as unknown as ValueType;\n }\n\n const elements: number[] = [];\n\n for (const arg of args) {\n if (typeof arg === 'number') {\n elements.push(arg);\n } else {\n for (let i = 0; i < arg.length; ++i) {\n elements.push(arg[i] as number);\n }\n }\n }\n\n // Fill the rest with zeros\n for (let i = elements.length; i < options.columns * options.rows; ++i) {\n elements.push(0);\n }\n\n return options.makeFromElements(...elements);\n };\n\n return Object.assign(construct, MatSchema) as unknown as {\n type: TType;\n '~repr': ValueType;\n } & MatConstructor<ValueType, ColumnType>;\n}\n\nabstract class mat2x2Impl<TColumn extends v2f>\n implements mat2x2<TColumn>, SelfResolvable\n{\n public readonly columns: readonly [TColumn, TColumn];\n public readonly length = 4;\n public abstract readonly kind: string;\n [n: number]: number;\n\n constructor(...elements: number[]) {\n this.columns = [\n this.makeColumn(elements[0] as number, elements[1] as number),\n this.makeColumn(elements[2] as number, elements[3] as number),\n ];\n }\n\n abstract makeColumn(e0: number, e1: number): TColumn;\n\n get [0]() {\n return this.columns[0].x;\n }\n\n get [1]() {\n return this.columns[0].y;\n }\n\n get [2]() {\n return this.columns[1].x;\n }\n\n get [3]() {\n return this.columns[1].y;\n }\n\n set [0](value: number) {\n this.columns[0].x = value;\n }\n\n set [1](value: number) {\n this.columns[0].y = value;\n }\n\n set [2](value: number) {\n this.columns[1].x = value;\n }\n\n set [3](value: number) {\n this.columns[1].y = value;\n }\n\n '~resolve'(): string {\n return `${this.kind}(${Array.from({ length: this.length })\n .map((_, i) => this[i])\n .join(', ')})`;\n }\n}\n\nclass mat2x2fImpl extends mat2x2Impl<v2f> implements m2x2f {\n public readonly kind = 'mat2x2f';\n\n makeColumn(e0: number, e1: number): v2f {\n return vec2f(e0, e1);\n }\n}\n\nabstract class mat3x3Impl<TColumn extends v3f>\n implements mat3x3<TColumn>, SelfResolvable\n{\n public readonly columns: readonly [TColumn, TColumn, TColumn];\n public readonly length = 12;\n public abstract readonly kind: string;\n [n: number]: number;\n\n constructor(...elements: number[]) {\n this.columns = [\n this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n ),\n this.makeColumn(\n elements[3] as number,\n elements[4] as number,\n elements[5] as number,\n ),\n this.makeColumn(\n elements[6] as number,\n elements[7] as number,\n elements[8] as number,\n ),\n ];\n }\n\n abstract makeColumn(x: number, y: number, z: number): TColumn;\n\n get [0]() {\n return this.columns[0].x;\n }\n\n get [1]() {\n return this.columns[0].y;\n }\n\n get [2]() {\n return this.columns[0].z;\n }\n\n get [3]() {\n return 0;\n }\n\n get [4]() {\n return this.columns[1].x;\n }\n\n get [5]() {\n return this.columns[1].y;\n }\n\n get [6]() {\n return this.columns[1].z;\n }\n\n get [7]() {\n return 0;\n }\n\n get [8]() {\n return this.columns[2].x;\n }\n\n get [9]() {\n return this.columns[2].y;\n }\n\n get [10]() {\n return this.columns[2].z;\n }\n\n get [11]() {\n return 0;\n }\n\n set [0](value: number) {\n this.columns[0].x = value;\n }\n\n set [1](value: number) {\n this.columns[0].y = value;\n }\n\n set [2](value: number) {\n this.columns[0].z = value;\n }\n\n set [3](_: number) {}\n\n set [4](value: number) {\n this.columns[1].x = value;\n }\n\n set [5](value: number) {\n this.columns[1].y = value;\n }\n\n set [6](value: number) {\n this.columns[1].z = value;\n }\n\n set [7](_: number) {}\n\n set [8](value: number) {\n this.columns[2].x = value;\n }\n\n set [9](value: number) {\n this.columns[2].y = value;\n }\n\n set [10](value: number) {\n this.columns[2].z = value;\n }\n\n set [11](_: number) {}\n\n '~resolve'(): string {\n return `${this.kind}(${this[0]}, ${this[1]}, ${this[2]}, ${this[4]}, ${this[5]}, ${this[6]}, ${this[8]}, ${this[9]}, ${this[10]})`;\n }\n}\n\nclass mat3x3fImpl extends mat3x3Impl<v3f> implements m3x3f {\n public readonly kind = 'mat3x3f';\n makeColumn(x: number, y: number, z: number): v3f {\n return vec3f(x, y, z);\n }\n}\n\nabstract class mat4x4Impl<TColumn extends v4f>\n implements mat4x4<TColumn>, SelfResolvable\n{\n public readonly columns: readonly [TColumn, TColumn, TColumn, TColumn];\n public abstract readonly kind: string;\n\n constructor(...elements: number[]) {\n this.columns = [\n this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n elements[3] as number,\n ),\n this.makeColumn(\n elements[4] as number,\n elements[5] as number,\n elements[6] as number,\n elements[7] as number,\n ),\n this.makeColumn(\n elements[8] as number,\n elements[9] as number,\n elements[10] as number,\n elements[11] as number,\n ),\n this.makeColumn(\n elements[12] as number,\n elements[13] as number,\n elements[14] as number,\n elements[15] as number,\n ),\n ];\n }\n\n abstract makeColumn(x: number, y: number, z: number, w: number): TColumn;\n\n public readonly length = 16;\n [n: number]: number;\n\n get [0]() {\n return this.columns[0].x;\n }\n\n get [1]() {\n return this.columns[0].y;\n }\n\n get [2]() {\n return this.columns[0].z;\n }\n\n get [3]() {\n return this.columns[0].w;\n }\n\n get [4]() {\n return this.columns[1].x;\n }\n\n get [5]() {\n return this.columns[1].y;\n }\n\n get [6]() {\n return this.columns[1].z;\n }\n\n get [7]() {\n return this.columns[1].w;\n }\n\n get [8]() {\n return this.columns[2].x;\n }\n\n get [9]() {\n return this.columns[2].y;\n }\n\n get [10]() {\n return this.columns[2].z;\n }\n\n get [11]() {\n return this.columns[2].w;\n }\n\n get [12]() {\n return this.columns[3].x;\n }\n\n get [13]() {\n return this.columns[3].y;\n }\n\n get [14]() {\n return this.columns[3].z;\n }\n\n get [15]() {\n return this.columns[3].w;\n }\n\n set [0](value: number) {\n this.columns[0].x = value;\n }\n\n set [1](value: number) {\n this.columns[0].y = value;\n }\n\n set [2](value: number) {\n this.columns[0].z = value;\n }\n\n set [3](value: number) {\n this.columns[0].w = value;\n }\n\n set [4](value: number) {\n this.columns[1].x = value;\n }\n\n set [5](value: number) {\n this.columns[1].y = value;\n }\n\n set [6](value: number) {\n this.columns[1].z = value;\n }\n\n set [7](value: number) {\n this.columns[1].w = value;\n }\n\n set [8](value: number) {\n this.columns[2].x = value;\n }\n\n set [9](value: number) {\n this.columns[2].y = value;\n }\n\n set [10](value: number) {\n this.columns[2].z = value;\n }\n\n set [11](value: number) {\n this.columns[2].w = value;\n }\n\n set [12](value: number) {\n this.columns[3].x = value;\n }\n\n set [13](value: number) {\n this.columns[3].y = value;\n }\n\n set [14](value: number) {\n this.columns[3].z = value;\n }\n\n set [15](value: number) {\n this.columns[3].w = value;\n }\n\n '~resolve'(): string {\n return `${this.kind}(${Array.from({ length: this.length })\n .map((_, i) => this[i])\n .join(', ')})`;\n }\n}\n\nclass mat4x4fImpl extends mat4x4Impl<v4f> implements m4x4f {\n public readonly kind = 'mat4x4f';\n\n makeColumn(x: number, y: number, z: number, w: number): v4f {\n return vec4f(x, y, z, w);\n }\n}\n\n// ----------\n// Public API\n// ----------\n\n/**\n *\n * Schema representing mat2x2f - a matrix with 2 rows and 2 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero2x2 = mat2x2f(); // filled with zeros\n *\n * @example\n * const mat = mat2x2f(0, 1, 2, 3);\n * mat.columns[0] // vec2f(0, 1)\n * mat.columns[1] // vec2f(2, 3)\n *\n * @example\n * const mat = mat2x2f(\n * vec2f(0, 1), // column 0\n * vec2f(1, 2), // column 1\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat2x2f, d.mat2x2f(0, 1, 2, 3)); // buffer holding a d.mat2x2f value, with an initial value of ((0, 1), (2, 3))\n */\nexport const mat2x2f = createMatSchema<'mat2x2f', m2x2f, v2f>({\n type: 'mat2x2f',\n rows: 2,\n columns: 2,\n makeFromElements: (...elements: number[]) => new mat2x2fImpl(...elements),\n}) as Mat2x2f;\n\n/**\n *\n * Schema representing mat3x3f - a matrix with 3 rows and 3 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero3x3 = mat3x3f(); // filled with zeros\n *\n * @example\n * const mat = mat3x3f(0, 1, 2, 3, 4, 5, 6, 7, 8);\n * mat.columns[0] // vec3f(0, 1, 2)\n * mat.columns[1] // vec3f(3, 4, 5)\n * mat.columns[2] // vec3f(6, 7, 8)\n *\n * @example\n * const mat = mat3x3f(\n * vec3f(0, 1, 2), // column 0\n * vec3f(2, 3, 4), // column 1\n * vec3f(5, 6, 7), // column 2\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat3x3f, d.mat3x3f()); // buffer holding a d.mat3x3f value, with an initial value of mat3x3f filled with zeros\n */\nexport const mat3x3f = createMatSchema<'mat3x3f', m3x3f, v3f>({\n type: 'mat3x3f',\n rows: 3,\n columns: 3,\n makeFromElements: (...elements: number[]) => new mat3x3fImpl(...elements),\n}) as Mat3x3f;\n\n/**\n *\n * Schema representing mat4x4f - a matrix with 4 rows and 4 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero4x4 = mat4x4f(); // filled with zeros\n *\n * @example\n * const mat = mat3x3f(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n * mat.columns[0] // vec4f(0, 1, 2, 3)\n * mat.columns[1] // vec4f(4, 5, 6, 7)\n * mat.columns[2] // vec4f(8, 9, 10, 11)\n * mat.columns[3] // vec4f(12, 13, 14, 15)\n *\n * @example\n * const mat = mat3x3f(\n * vec4f(0, 1, 2, 3), // column 0\n * vec4f(4, 5, 6, 7), // column 1\n * vec4f(8, 9, 10, 11), // column 2\n * vec4f(12, 13, 14, 15), // column 3\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat4x4f, d.mat4x4f()); // buffer holding a d.mat4x4f value, with an initial value of mat4x4f filled with zeros\n */\nexport const mat4x4f = createMatSchema<'mat4x4f', m4x4f, v4f>({\n type: 'mat4x4f',\n rows: 4,\n columns: 4,\n makeFromElements: (...elements: number[]) => new mat4x4fImpl(...elements),\n}) as Mat4x4f;\n\nexport function matToArray(mat: m2x2f | m3x3f | m4x4f): number[] {\n if (mat.kind === 'mat3x3f') {\n return [\n mat[0],\n mat[1],\n mat[2],\n mat[4],\n mat[5],\n mat[6],\n mat[8],\n mat[9],\n mat[10],\n ] as number[];\n }\n\n return Array.from({ length: mat.length }).map((_, idx) => mat[idx] as number);\n}\n"]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{c as o,m as A,n as c,p as I,q as V,r as E,t as N,u as f,v as y,x as F,y as B}from"./chunk-YLI4IK35.js";import _ from"typed-binary";var re={type:"bool"},ne=e=>A()?`u32(${e})`:typeof e=="boolean"?e?1:0:Number.isInteger(e)?((e<0||e>4294967295)&&console.warn(`u32 value ${e} overflowed`),(e&4294967295)>>>0):Math.max(0,Math.min(4294967295,Math.floor(e))),x=Object.assign(ne,{type:"u32"}),oe=e=>{if(A())return`i32(${e})`;if(typeof e=="boolean")return e?1:0;if(Number.isInteger(e))return(e<-2147483648||e>2147483647)&&console.warn(`i32 value ${e} overflowed`),(e|0)&4294967295;let t=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,t))},h=Object.assign(oe,{type:"i32"}),ae=e=>{if(A())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let t=new Float32Array(1);return t[0]=e,t[0]},l=Object.assign(ae,{type:"f32"}),ie=e=>{if(A())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let t=new ArrayBuffer(2);return _.f16.write(new _.BufferWriter(t),e),_.f16.read(new _.BufferReader(t))},ye=Object.assign(ie,{type:"f16"});var xe=["bool","f32","f16","i32","u32","vec2f","vec2h","vec2i","vec2u","vec3f","vec3h","vec3i","vec3u","vec4f","vec4h","vec4i","vec4u","mat2x2f","mat3x3f","mat4x4f","struct","array","ptrFn","atomic","decorated"];function k(e){return xe.includes(e==null?void 0:e.type)}function L(e){return(e==null?void 0:e.type)==="array"}function S(e){return(e==null?void 0:e.type)==="struct"}function le(e){return(e==null?void 0:e.type)==="ptrFn"}function se(e){return(e==null?void 0:e.type)==="atomic"}function P(e){return(e==null?void 0:e.type)==="@align"}function W(e){return(e==null?void 0:e.type)==="@size"}function R(e){return(e==null?void 0:e.type)==="@location"}function ue(e){return(e==null?void 0:e.type)==="@interpolate"}function $(e){return(e==null?void 0:e.type)==="@builtin"}function d(e){return(e==null?void 0:e.type)==="decorated"}function me(e){let t=n=>n;return Object.setPrototypeOf(t,de),t.propTypes=e,t}var de={type:"struct",_label:void 0,get label(){return this._label},$name(e){return this._label=e,this},toString(){var e;return`struct:${(e=this.label)!=null?e:"<unnamed>"}`}};var w=(e,t)=>{let n=t-1,a=~n;return e&n?(e&a)+t:e};var Q=["uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2","unorm8x4-bgra"],Re={f32:"float32",vec2f:"float32x2",vec3f:"float32x3",vec4f:"float32x4",f16:"float16",vec2h:"float16x2",vec4h:"float16x4",u32:"uint32",vec2u:"uint32x2",vec3u:"uint32x3",vec4u:"uint32x4",i32:"sint32",vec2i:"sint32x2",vec3i:"sint32x3",vec4i:"sint32x4"};var Te=["unstruct","disarray","loose-decorated",...Q];function C(e){return Te.includes(e==null?void 0:e.type)}function b(e){return(e==null?void 0:e.type)==="disarray"}function z(e){return(e==null?void 0:e.type)==="unstruct"}function m(e){return(e==null?void 0:e.type)==="loose-decorated"}function g(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(P))==null?void 0:n.value}function X(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(W))==null?void 0:n.value}function Ge(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(R))==null?void 0:n.value}function ce(e){return k(e)||C(e)}var r=class{constructor(t){this.type=t;o(this,"~repr")}},fe={uint8:x,uint8x2:V,uint8x4:B,sint8:h,sint8x2:I,sint8x4:F,unorm8:l,unorm8x2:c,unorm8x4:y,snorm8:l,snorm8x2:c,snorm8x4:y,uint16:x,uint16x2:V,uint16x4:B,sint16:h,sint16x2:I,sint16x4:F,unorm16:l,unorm16x2:c,unorm16x4:y,snorm16:l,snorm16x2:c,snorm16x4:y,float16:l,float16x2:c,float16x4:y,float32:l,float32x2:c,float32x3:E,float32x4:y,uint32:x,uint32x2:V,uint32x3:f,uint32x4:B,sint32:h,sint32x2:I,sint32x3:N,sint32x4:F,"unorm10-10-10-2":y,"unorm8x4-bgra":y},Y=Object.keys(fe),qe=new r("uint8"),Qe=new r("uint8x2"),Xe=new r("uint8x4"),Ye=new r("sint8"),Ze=new r("sint8x2"),et=new r("sint8x4"),tt=new r("unorm8"),rt=new r("unorm8x2"),nt=new r("unorm8x4"),ot=new r("snorm8"),at=new r("snorm8x2"),it=new r("snorm8x4"),yt=new r("uint16"),xt=new r("uint16x2"),lt=new r("uint16x4"),st=new r("sint16"),ut=new r("sint16x2"),pt=new r("sint16x4"),mt=new r("unorm16"),dt=new r("unorm16x2"),Tt=new r("unorm16x4"),ct=new r("snorm16"),ft=new r("snorm16x2"),wt=new r("snorm16x4"),bt=new r("float16"),zt=new r("float16x2"),gt=new r("float16x4"),vt=new r("float32"),Dt=new r("float32x2"),At=new r("float32x3"),It=new r("float32x4"),Vt=new r("uint32"),Ft=new r("uint32x2"),Bt=new r("uint32x3"),ht=new r("uint32x4"),kt=new r("sint32"),Lt=new r("sint32x2"),St=new r("sint32x3"),Pt=new r("sint32x4"),Wt=new r("unorm10-10-10-2"),_t=new r("unorm8x4-bgra");var we={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec3f:16,vec3h:8,vec3i:16,vec3u:16,vec4f:16,vec4h:8,vec4i:16,vec4u:16,mat2x2f:8,mat3x3f:16,mat4x4f:16,atomic:4};function be(e){var a,p,D;let t=e==null?void 0:e.type,n=we[t];if(n!==void 0)return n;if(S(e))return Object.values(e.propTypes).map(s).reduce((T,q)=>T>q?T:q);if(L(e))return s(e.elementType);if(z(e)){let T=Object.values(e.propTypes)[0];return T&&(a=g(T))!=null?a:1}if(b(e))return(p=g(e.elementType))!=null?p:1;if(d(e)||m(e))return(D=g(e))!=null?D:s(e.inner);if(Y.includes(t))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function ze(e){var t,n;if(z(e)){let a=Object.values(e.propTypes)[0];return a?v(a):1}return b(e)?v(e.elementType):m(e)?(t=g(e))!=null?t:v(e.inner):(n=g(e))!=null?n:1}var Z=new WeakMap,ee=new WeakMap;function s(e){let t=Z.get(e);return t===void 0&&(t=be(e),Z.set(e,t)),t}function v(e){let t=ee.get(e);return t===void 0&&(t=ze(e),ee.set(e,t)),t}function ge(e){return s(e)}var ve={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec3f:12,vec3h:6,vec3i:12,vec3u:12,vec4f:16,vec4h:8,vec4i:16,vec4u:16,mat2x2f:16,mat3x3f:48,mat4x4f:64,uint8:1,uint8x2:2,uint8x4:4,sint8:1,sint8x2:2,sint8x4:4,unorm8:1,unorm8x2:2,unorm8x4:4,snorm8:1,snorm8x2:2,snorm8x4:4,uint16:2,uint16x2:4,uint16x4:8,sint16:2,sint16x2:4,sint16x4:8,unorm16:2,unorm16x2:4,unorm16x4:8,snorm16:2,snorm16x2:4,snorm16x4:8,float16:2,float16x2:4,float16x4:8,float32:4,float32x2:8,float32x3:12,float32x4:16,uint32:4,uint32x2:8,uint32x3:12,uint32x4:16,sint32:4,sint32x2:8,sint32x3:12,sint32x4:16,"unorm10-10-10-2":4,"unorm8x4-bgra":4,atomic:4};function De(e){let t=0;for(let n of Object.values(e.propTypes)){if(Number.isNaN(t))throw new Error("Only the last property of a struct can be unbounded");if(t=w(t,s(n)),t+=u(n),Number.isNaN(t)&&n.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return w(t,s(e))}function Ae(e){let t=0;for(let n of Object.values(e.propTypes)){let a=v(n);t=w(t,a),t+=u(n)}return t}function Ie(e){var n;let t=ve[e==null?void 0:e.type];if(t!==void 0)return t;if(S(e))return De(e);if(z(e))return Ae(e);if(L(e)){if(e.elementCount===0)return Number.NaN;let a=s(e.elementType);return w(u(e.elementType),a)*e.elementCount}if(b(e)){let a=v(e.elementType);return w(u(e.elementType),a)*e.elementCount}if(d(e)||m(e))return(n=X(e))!=null?n:u(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var te=new WeakMap;function u(e){let t=te.get(e);return t===void 0&&(t=Ie(e),te.set(e,t)),t}function Ve(e){return u(e)}function G(e,t){return new j(e,t)}var j=class{constructor(t,n){this.elementType=t;this.elementCount=n;o(this,"type","array");o(this,"~repr");o(this,"~reprPartial");o(this,"~memIdent");if(Number.isNaN(u(t)))throw new Error("Cannot nest runtime sized arrays.")}toString(){return`arrayOf(${this.elementType})`}};function Fe(e){return{type:"ptrFn",inner:e}}function Be(e,t){return new K(e,t)}var K=class{constructor(t,n){this.elementType=t;this.elementCount=n;o(this,"type","disarray");o(this,"~repr");o(this,"~reprPartial")}};function he(e){return new H(e)}var H=class{constructor(t){this.propTypes=t;o(this,"_label");o(this,"type","unstruct");o(this,"~repr");o(this,"~reprPartial")}get label(){return this._label}$name(t){return this._label=t,this}};function ke(e){return new J(e)}var J=class{constructor(t){this.inner=t;o(this,"type","atomic");o(this,"~repr");o(this,"~memIdent")}};function i(e,t){return d(e)?new M(e.inner,[t,...e.attribs]):m(e)?new O(e.inner,[t,...e.attribs]):C(e)?new O(e,[t]):new M(e,[t])}function Le(e,t){return i(t,{type:"@align",value:e})}function Se(e,t){return i(t,{type:"@size",value:e})}function Pe(e,t){return i(t,{type:"@location",value:e})}function We(e,t){return i(t,{type:"@interpolate",value:e})}function _e(e){return(d(e)||m(e))&&e.attribs.find($)!==void 0}function yr(e){return!d(e)&&!m(e)?"":e.attribs.map(t=>`${t.type}(${t.value}) `).join("")}var U=class{constructor(t,n){this.inner=t;this.attribs=n;o(this,"~repr");var D,T;let a=(D=n.find(P))==null?void 0:D.value,p=(T=n.find(W))==null?void 0:T.value;if(a!==void 0){if(a<=0)throw new Error(`Custom data alignment must be a positive number, got: ${a}.`);if(Math.log2(a)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${a}.`);if(k(this.inner)&&a%s(this.inner)!==0)throw new Error(`Custom alignment has to be a multiple of the standard data alignment. Got: ${a}, expected multiple of: ${s(this.inner)}.`)}if(p!==void 0){if(p<u(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${p}, expected at least: ${u(this.inner)}.`);if(p<=0)throw new Error(`Custom data size must be a positive number. Got: ${p}.`)}}},M=class extends U{constructor(){super(...arguments);o(this,"type","decorated");o(this,"~memIdent")}},O=class extends U{constructor(){super(...arguments);o(this,"type","loose-decorated")}};var Ce={vertexIndex:i(x,{type:"@builtin",value:"vertex_index"}),instanceIndex:i(x,{type:"@builtin",value:"instance_index"}),position:i(y,{type:"@builtin",value:"position"}),clipDistances:i(G(x,8),{type:"@builtin",value:"clip_distances"}),frontFacing:i(l,{type:"@builtin",value:"front_facing"}),fragDepth:i(l,{type:"@builtin",value:"frag_depth"}),sampleIndex:i(x,{type:"@builtin",value:"sample_index"}),sampleMask:i(x,{type:"@builtin",value:"sample_mask"}),localInvocationId:i(f,{type:"@builtin",value:"local_invocation_id"}),localInvocationIndex:i(x,{type:"@builtin",value:"local_invocation_index"}),globalInvocationId:i(f,{type:"@builtin",value:"global_invocation_id"}),workgroupId:i(f,{type:"@builtin",value:"workgroup_id"}),numWorkgroups:i(f,{type:"@builtin",value:"num_workgroups"})};export{k as a,L as b,S as c,le as d,se as e,P as f,W as g,R as h,ue as i,$ as j,d as k,Q as l,Re as m,C as n,b as o,z as p,m as q,Ge as r,ce as s,re as t,x as u,h as v,l as w,ye as x,me as y,w as z,fe as A,Y as B,qe as C,Qe as D,Xe as E,Ye as F,Ze as G,et as H,tt as I,rt as J,nt as K,ot as L,at as M,it as N,yt as O,xt as P,lt as Q,st as R,ut as S,pt as T,mt as U,dt as V,Tt as W,ct as X,ft as Y,wt as Z,bt as _,zt as $,gt as aa,vt as ba,Dt as ca,At as da,It as ea,Vt as fa,Ft as ga,Bt as ha,ht as ia,kt as ja,Lt as ka,St as la,Pt as ma,Wt as na,_t as oa,s as pa,v as qa,ge as ra,u as sa,Ve as ta,G as ua,Fe as va,Be as wa,he as xa,ke as ya,i as za,Le as Aa,Se as Ba,Pe as Ca,We as Da,_e as Ea,yr as Fa,Ce as Ga};
|
2
|
+
//# sourceMappingURL=chunk-SDSDWWKW.js.map
|