typegpu 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Software Mansion <swmansion.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ var D=Object.defineProperty;var k=(e,a)=>(a=Symbol[e])?a:Symbol.for("Symbol."+e);var P=(e,a,r)=>a in e?D(e,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[a]=r;var u=(e,a,r)=>(P(e,typeof a!="symbol"?a+"":a,r),r);var A=function(e,a){this[0]=e,this[1]=a};var I=e=>{var a=e[k("asyncIterator")],r=!1,n,y={};return a==null?(a=e[k("iterator")](),n=o=>y[o]=m=>a[o](m)):(a=a.call(e),n=o=>y[o]=m=>{if(r){if(r=!1,o==="throw")throw m;return m}return r=!0,{done:!1,value:new A(new Promise(R=>{var V=a[o](m);if(!(V instanceof Object))throw TypeError("Object expected");R(V)}),1)}}),y[k("iterator")]=()=>y,n("next"),"throw"in a?n("throw"):y.throw=o=>{throw o},"return"in a&&n("return"),y};var O=Symbol("Unknown data type");function F(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function E(e){return e.isLoose}function L(e){return!e.isLoose}function W(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}var f=class e extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,e.prototype)}};import{Measurer as B,f32 as S,i32 as h,u32 as _}from"typed-binary";function l(e){let a={__unwrapped:void 0,isLoose:!1,isCustomAligned:!1,size:e.length*4,label:e.label,byteAlignment:e.byteAlignment,expressionCode:e.label,resolveReferences(n){throw new f},write(n,y){for(let o of y)e.unitType.write(n,o)},read(n){return e.make(...Array.from({length:e.length}).map(y=>e.unitType.read(n)))},measure(n,y=new B){return y.add(this.size)},seekProperty(n,y){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...n)=>{var o;let y=n;if(y.length<=1)return e.makeFromScalar((o=y[0])!=null?o:0);if(y.length===e.length)return e.make(...y);throw new Error(`'${e.label}' constructor called with invalid number of arguments.`)},a)}var b=class{constructor(a,r){this.x=a;this.y=r}*[Symbol.iterator](){yield this.x,yield this.y}},T=class e extends b{constructor(){super(...arguments);u(this,"kind","vec2f")}make2(r,n){return new e(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,o){return new p(r,n,y,o)}},d=class e extends b{constructor(){super(...arguments);u(this,"kind","vec2i")}make2(r,n){return new e(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,o){return new i(r,n,y,o)}},x=class e extends b{constructor(){super(...arguments);u(this,"kind","vec2u")}make2(r,n){return new e(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,o){return new z(r,n,y,o)}},v=class{constructor(a,r,n){this.x=a;this.y=r;this.z=n}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},c=class e extends v{constructor(){super(...arguments);u(this,"kind","vec3f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,o){return new p(r,n,y,o)}},s=class e extends v{constructor(){super(...arguments);u(this,"kind","vec3i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,o){return new i(r,n,y,o)}},w=class e extends v{constructor(){super(...arguments);u(this,"kind","vec3u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,o){return new z(r,n,y,o)}},g=class{constructor(a,r,n,y){this.x=a;this.y=r;this.z=n;this.w=y}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},p=class e extends g{constructor(){super(...arguments);u(this,"kind","vec4f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,o){return new e(r,n,y,o)}},i=class e extends g{constructor(){super(...arguments);u(this,"kind","vec4i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,o){return new e(r,n,y,o)}},z=class e extends g{constructor(){super(...arguments);u(this,"kind","vec4u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,o){return new e(r,n,y,o)}},t={get:(e,a)=>{if(typeof a=="symbol")return Reflect.get(e,a);let r=e,n=new Array(a.length),y=0;for(let o of a){switch(o){case"x":n[y]=r.x;break;case"y":n[y]=r.y;break;case"z":n[y]=r.z;break;case"w":n[y]=r.w;break;default:return Reflect.get(r,a)}y++}return a.length===4?new Proxy(r.make4(n[0],n[1],n[2],n[3]),t):a.length===3?new Proxy(r.make3(n[0],n[1],n[2]),t):a.length===2?new Proxy(r.make2(n[0],n[1]),t):Reflect.get(e,a)}},N=l({unitType:S,byteAlignment:8,length:2,label:"vec2f",make:(e,a)=>new Proxy(new T(e,a),t),makeFromScalar:e=>new Proxy(new T(e,e),t)}),$=l({unitType:h,byteAlignment:8,length:2,label:"vec2i",make:(e,a)=>new Proxy(new d(e,a),t),makeFromScalar:e=>new Proxy(new d(e,e),t)}),H=l({unitType:_,byteAlignment:8,length:2,label:"vec2u",make:(e,a)=>new Proxy(new x(e,a),t),makeFromScalar:e=>new Proxy(new x(e,e),t)}),K=l({unitType:S,byteAlignment:16,length:3,label:"vec3f",make:(e,a,r)=>new Proxy(new c(e,a,r),t),makeFromScalar:e=>new Proxy(new c(e,e,e),t)}),q=l({unitType:h,byteAlignment:16,length:3,label:"vec3i",make:(e,a,r)=>new Proxy(new s(e,a,r),t),makeFromScalar:e=>new Proxy(new s(e,e,e),t)}),J=l({unitType:_,byteAlignment:16,length:3,label:"vec3u",make:(e,a,r)=>new Proxy(new w(e,a,r),t),makeFromScalar:e=>new Proxy(new w(e,e,e),t)}),Q=l({unitType:S,byteAlignment:16,length:4,label:"vec4f",make:(e,a,r,n)=>new Proxy(new p(e,a,r,n),t),makeFromScalar:e=>new Proxy(new p(e,e,e,e),t)}),X=l({unitType:h,byteAlignment:16,length:4,label:"vec4i",make:(e,a,r,n)=>new Proxy(new i(e,a,r,n),t),makeFromScalar:e=>new Proxy(new i(e,e,e,e),t)}),Y=l({unitType:_,byteAlignment:16,length:4,label:"vec4u",make:(e,a,r,n)=>new Proxy(new z(e,a,r,n),t),makeFromScalar:e=>new Proxy(new z(e,e,e,e),t)});export{u as a,I as b,F as c,E as d,L as e,W as f,f as g,N as h,$ as i,H as j,K as k,q as l,J as m,Q as n,X as o,Y as p};
2
+ //# sourceMappingURL=chunk-2FWG5LPQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/data/vector.ts"],"sourcesContent":["import type { ISchema, Unwrap } from 'typed-binary';\nimport type { TgpuNamable } from './namable';\nimport type { TgpuBuffer } from './tgpuBuffer';\nimport type { TgpuBufferUsage } from './tgpuBufferUsage';\nimport type { TgpuFn } from './tgpuFn';\n\nexport type Wgsl = string | number | TgpuResolvable | symbol | boolean;\n\nexport const UnknownData = Symbol('Unknown data type');\nexport type UnknownData = typeof UnknownData;\n\nexport type Resource = {\n value: Wgsl;\n dataType: AnyTgpuData | UnknownData;\n};\n\n/**\n * Passed into each resolvable item. All sibling items share a resolution ctx,\n * and a new resolution ctx is made when going down each level in the tree.\n */\nexport interface ResolutionCtx {\n addDeclaration(item: TgpuResolvable): void;\n addBinding(bindable: TgpuBindable, identifier: TgpuIdentifier): void;\n addRenderResource(\n resource: TgpuRenderResource,\n identifier: TgpuIdentifier,\n ): void;\n addBuiltin(builtin: symbol): void;\n nameFor(token: TgpuResolvable): string;\n /**\n * Unwraps all layers of slot indirection and returns the concrete value if available.\n * @throws {MissingSlotValueError}\n */\n unwrap<T>(eventual: Eventual<T>): T;\n resolve(item: Wgsl, slotValueOverrides?: SlotValuePair<unknown>[]): string;\n fnToWgsl(\n // biome-ignore lint/suspicious/noExplicitAny: <no need for generic magic>\n fn: TgpuFn<any, any>,\n externalMap: Record<string, unknown>,\n ): {\n head: Wgsl;\n body: Wgsl;\n };\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\nexport interface TgpuIdentifier extends TgpuNamable, TgpuResolvable {}\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\n}\n\nexport function isResolvable(value: unknown): value is TgpuResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | TgpuSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface TgpuResolvableSlot<T extends Wgsl>\n extends TgpuResolvable,\n TgpuSlot<T> {}\n\nexport type SlotValuePair<T> = [TgpuSlot<T>, T];\n\nexport interface TgpuBindable<\n TData extends AnyTgpuData = AnyTgpuData,\n TUsage extends BufferUsage = BufferUsage,\n> extends TgpuResolvable {\n readonly allocatable: TgpuBuffer<TData>;\n readonly usage: TUsage;\n}\n\nexport type TgpuSamplerType = 'sampler' | 'sampler_comparison';\nexport type TgpuTypedTextureType =\n | 'texture_1d'\n | 'texture_2d'\n | 'texture_2d_array'\n | 'texture_3d'\n | 'texture_cube'\n | 'texture_cube_array'\n | 'texture_multisampled_2d';\nexport type TgpuDepthTextureType =\n | 'texture_depth_2d'\n | 'texture_depth_2d_array'\n | 'texture_depth_cube'\n | 'texture_depth_cube_array'\n | 'texture_depth_multisampled_2d';\nexport type TgpuStorageTextureType =\n | 'texture_storage_1d'\n | 'texture_storage_2d'\n | 'texture_storage_2d_array'\n | 'texture_storage_3d';\nexport type TgpuExternalTextureType = 'texture_external';\n\nexport type TgpuRenderResourceType =\n | TgpuSamplerType\n | TgpuTypedTextureType\n | TgpuDepthTextureType\n | TgpuStorageTextureType\n | TgpuExternalTextureType;\n\nexport interface TgpuRenderResource extends TgpuResolvable {\n readonly type: TgpuRenderResourceType;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';\nexport type TextureUsage = 'sampled' | 'storage';\n\nexport function isSamplerType(\n type: TgpuRenderResourceType,\n): type is TgpuSamplerType {\n return type === 'sampler' || type === 'sampler_comparison';\n}\n\nexport function isTypedTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuTypedTextureType {\n return [\n 'texture_1d',\n 'texture_2d',\n 'texture_2d_array',\n 'texture_3d',\n 'texture_cube',\n 'texture_cube_array',\n 'texture_multisampled_2d',\n ].includes(type);\n}\n\nexport function isDepthTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuDepthTextureType {\n return [\n 'texture_depth_2d',\n 'texture_depth_2d_array',\n 'texture_depth_cube',\n 'texture_depth_cube_array',\n 'texture_depth_multisampled_2d',\n ].includes(type);\n}\n\nexport function isStorageTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuStorageTextureType {\n return [\n 'texture_storage_1d',\n 'texture_storage_2d',\n 'texture_storage_2d_array',\n 'texture_storage_3d',\n ].includes(type);\n}\n\nexport function isExternalTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuExternalTextureType {\n return type === 'texture_external';\n}\n\nexport type ValueOf<T> = T extends TgpuSlot<infer I>\n ? ValueOf<I>\n : T extends TgpuBufferUsage<infer D>\n ? ValueOf<D>\n : T extends TgpuData<unknown>\n ? Unwrap<T>\n : T;\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly isLoose: false;\n readonly isCustomAligned: boolean;\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport interface TgpuLooseData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly isLoose: true;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\nexport type AnyTgpuLooseData = TgpuLooseData<unknown>;\n\nexport function isDataLoose<T>(\n data: TgpuData<T> | TgpuLooseData<T>,\n): data is TgpuLooseData<T> {\n return data.isLoose;\n}\nexport function isDataNotLoose<T>(\n data: TgpuData<T> | TgpuLooseData<T>,\n): data is TgpuData<T> {\n return !data.isLoose;\n}\n\nexport interface TgpuPointer<\n TScope extends 'function',\n TInner extends AnyTgpuData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type TgpuValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyTgpuPointer = TgpuPointer<'function', AnyTgpuData>;\n\nexport type TgpuFnArgument = AnyTgpuPointer | AnyTgpuData;\n\nexport function isPointer(\n value: AnyTgpuPointer | AnyTgpuData,\n): value is AnyTgpuPointer {\n return 'pointsTo' in value;\n}\n\nexport function isGPUBuffer(value: unknown): value is GPUBuffer {\n return (\n !!value &&\n typeof value === 'object' &&\n 'getMappedRange' in value &&\n 'mapAsync' in value\n );\n}\n\n// -----------------\n// TypeGPU Resources\n// -----------------\n\n// Code\n\nexport interface BoundTgpuCode extends TgpuResolvable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport interface TgpuCode extends BoundTgpuCode, TgpuNamable {}\n\n// Slot\n\nexport interface TgpuSlot<T> extends TgpuNamable {\n readonly __brand: 'TgpuSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n /**\n * Used to determine if code generated using either value `a` or `b` in place\n * of the slot will be equivalent. Defaults to `Object.is`.\n */\n areEqual(a: T, b: T): boolean;\n\n value: ValueOf<T>;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\n}\n","import type { TgpuResolvable, TgpuSlot } from './types';\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: TgpuResolvable[],\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: TgpuResolvable): 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 RecursiveDataTypeError extends Error {\n constructor() {\n super('Recursive types are not supported in WGSL');\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, RecursiveDataTypeError.prototype);\n }\n}\n","import {\n type IMeasurer,\n type IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n f32,\n i32,\n u32,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<ValueType> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => ValueType;\n makeFromScalar: (value: number) => ValueType;\n}\n\ntype VecSchemaBase<ValueType> = TgpuData<ValueType> & {\n expressionCode: string;\n};\n\nfunction makeVecSchema<ValueType extends vecBase>(\n options: VecSchemaOptions<ValueType>,\n): VecSchemaBase<ValueType> & ((...args: number[]) => ValueType) {\n const VecSchema: VecSchemaBase<ValueType> = {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as ValueType,\n isLoose: false as const,\n isCustomAligned: false,\n\n size: options.length * 4,\n label: options.label,\n byteAlignment: options.byteAlignment,\n expressionCode: options.label,\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n for (const element of value) {\n options.unitType.write(output, element);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n return options.make(\n ...Array.from({ length: options.length }).map((_) =>\n options.unitType.read(input),\n ),\n ) as Parsed<ValueType>;\n },\n\n measure(\n _value: Parsed<ValueType> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return measurer.add(this.size);\n },\n\n seekProperty(\n reference: Parsed<ValueType> | MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return options.label;\n },\n };\n\n const construct = (...args: number[]): ValueType => {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\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.label}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl implements vec2 {\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\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec3Impl implements vec3 {\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\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec4Impl implements vec4 {\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\nclass vec4fImpl extends vec4Impl {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\ninterface Swizzle2<T2, T3, T4> {\n readonly xx: T2;\n readonly xy: T2;\n readonly yx: T2;\n readonly yy: T2;\n\n readonly xxx: T3;\n readonly xxy: T3;\n readonly xyx: T3;\n readonly xyy: T3;\n readonly yxx: T3;\n readonly yxy: T3;\n readonly yyx: T3;\n readonly yyy: T3;\n\n readonly xxxx: T4;\n readonly xxxy: T4;\n readonly xxyx: T4;\n readonly xxyy: T4;\n readonly xyxx: T4;\n readonly xyxy: T4;\n readonly xyyx: T4;\n readonly xyyy: T4;\n readonly yxxx: T4;\n readonly yxxy: T4;\n readonly yxyx: T4;\n readonly yxyy: T4;\n readonly yyxx: T4;\n readonly yyxy: T4;\n readonly yyyx: T4;\n readonly yyyy: T4;\n}\n\ninterface Swizzle3<T2, T3, T4> extends Swizzle2<T2, T3, T4> {\n readonly xz: T2;\n readonly yz: T2;\n readonly zx: T2;\n readonly zy: T2;\n readonly zz: T2;\n\n readonly xxz: T3;\n readonly xyz: T3;\n readonly xzx: T3;\n readonly xzy: T3;\n readonly xzz: T3;\n readonly yxz: T3;\n readonly yyz: T3;\n readonly yzx: T3;\n readonly yzy: T3;\n readonly yzz: T3;\n readonly zxx: T3;\n readonly zxy: T3;\n readonly zxz: T3;\n readonly zyx: T3;\n readonly zyy: T3;\n readonly zyz: T3;\n readonly zzx: T3;\n readonly zzy: T3;\n readonly zzz: T3;\n\n readonly xxxz: T4;\n readonly xxyz: T4;\n readonly xxzx: T4;\n readonly xxzy: T4;\n readonly xxzz: T4;\n readonly xyxz: T4;\n readonly xyyz: T4;\n readonly xyzx: T4;\n readonly xyzy: T4;\n readonly xyzz: T4;\n readonly xzxx: T4;\n readonly xzxy: T4;\n readonly xzxz: T4;\n readonly xzyx: T4;\n readonly xzyy: T4;\n readonly xzyz: T4;\n readonly xzzx: T4;\n readonly xzzy: T4;\n readonly xzzz: T4;\n readonly yxxz: T4;\n readonly yxyz: T4;\n readonly yxzx: T4;\n readonly yxzy: T4;\n readonly yxzz: T4;\n readonly yyxz: T4;\n readonly yyyz: T4;\n readonly yyzx: T4;\n readonly yyzy: T4;\n readonly yyzz: T4;\n readonly yzxx: T4;\n readonly yzxy: T4;\n readonly yzxz: T4;\n readonly yzyx: T4;\n readonly yzyy: T4;\n readonly yzyz: T4;\n readonly yzzx: T4;\n readonly yzzy: T4;\n readonly yzzz: T4;\n readonly zxxx: T4;\n readonly zxxy: T4;\n readonly zxxz: T4;\n readonly zxyx: T4;\n readonly zxyy: T4;\n readonly zxyz: T4;\n readonly zxzx: T4;\n readonly zxzy: T4;\n readonly zxzz: T4;\n readonly zyxx: T4;\n readonly zyxy: T4;\n readonly zyxz: T4;\n readonly zyyx: T4;\n readonly zyyy: T4;\n readonly zyyz: T4;\n readonly zyzx: T4;\n readonly zyzy: T4;\n readonly zyzz: T4;\n readonly zzxx: T4;\n readonly zzxy: T4;\n readonly zzxz: T4;\n readonly zzyx: T4;\n readonly zzyy: T4;\n readonly zzyz: T4;\n readonly zzzx: T4;\n readonly zzzy: T4;\n readonly zzzz: T4;\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3, T4> {\n readonly yw: T2;\n readonly zw: T2;\n readonly wx: T2;\n readonly wy: T2;\n readonly wz: T2;\n readonly ww: T2;\n\n readonly xxw: T3;\n readonly xyw: T3;\n readonly xzw: T3;\n readonly xwx: T3;\n readonly xwy: T3;\n readonly xwz: T3;\n readonly xww: T3;\n readonly yxw: T3;\n readonly yyw: T3;\n readonly yzw: T3;\n readonly ywx: T3;\n readonly ywy: T3;\n readonly ywz: T3;\n readonly yww: T3;\n readonly zxw: T3;\n readonly zyw: T3;\n readonly zzw: T3;\n readonly zwx: T3;\n readonly zwy: T3;\n readonly zwz: T3;\n readonly zww: T3;\n readonly wxx: T3;\n readonly wxz: T3;\n readonly wxy: T3;\n readonly wyy: T3;\n readonly wyz: T3;\n readonly wzz: T3;\n readonly wwx: T3;\n readonly wwy: T3;\n readonly wwz: T3;\n readonly www: T3;\n\n readonly xxxw: T4;\n readonly xxyw: T4;\n readonly xxzw: T4;\n readonly xxwx: T4;\n readonly xxwy: T4;\n readonly xxwz: T4;\n readonly xxww: T4;\n readonly xyxw: T4;\n readonly xyyw: T4;\n readonly xyzw: T4;\n readonly xywx: T4;\n readonly xywy: T4;\n readonly xywz: T4;\n readonly xyww: T4;\n readonly xzxw: T4;\n readonly xzyw: T4;\n readonly xzzw: T4;\n readonly xzwx: T4;\n readonly xzwy: T4;\n readonly xzwz: T4;\n readonly xzww: T4;\n readonly xwxx: T4;\n readonly xwxy: T4;\n readonly xwxz: T4;\n readonly xwyy: T4;\n readonly xwyz: T4;\n readonly xwzz: T4;\n readonly xwwx: T4;\n readonly xwwy: T4;\n readonly xwwz: T4;\n readonly xwww: T4;\n readonly yxxw: T4;\n readonly yxyw: T4;\n readonly yxzw: T4;\n readonly yxwx: T4;\n readonly yxwy: T4;\n readonly yxwz: T4;\n readonly yxww: T4;\n readonly yyxw: T4;\n readonly yyyw: T4;\n readonly yyzw: T4;\n readonly yywx: T4;\n readonly yywy: T4;\n readonly yywz: T4;\n readonly yyww: T4;\n readonly yzxw: T4;\n readonly yzyw: T4;\n readonly yzzw: T4;\n readonly yzwx: T4;\n readonly yzwy: T4;\n readonly yzwz: T4;\n readonly yzww: T4;\n readonly ywxx: T4;\n readonly ywxy: T4;\n readonly ywxz: T4;\n readonly ywxw: T4;\n readonly ywyy: T4;\n readonly ywyz: T4;\n readonly ywzz: T4;\n readonly ywwx: T4;\n readonly ywwy: T4;\n readonly ywwz: T4;\n readonly ywww: T4;\n readonly zxxw: T4;\n readonly zxyw: T4;\n readonly zxzw: T4;\n readonly zxwx: T4;\n readonly zxwy: T4;\n readonly zxwz: T4;\n readonly zxww: T4;\n readonly zyxw: T4;\n readonly zyyw: T4;\n readonly zyzw: T4;\n readonly zywx: T4;\n readonly zywy: T4;\n readonly zywz: T4;\n readonly zyww: T4;\n readonly zzxw: T4;\n readonly zzyw: T4;\n readonly zzzw: T4;\n readonly zzwx: T4;\n readonly zzwy: T4;\n readonly zzwz: T4;\n readonly zzww: T4;\n readonly zwxx: T4;\n readonly zwxy: T4;\n readonly zwxz: T4;\n readonly zwxw: T4;\n readonly zwyy: T4;\n readonly zwyz: T4;\n readonly zwzz: T4;\n readonly zwwx: T4;\n readonly zwwy: T4;\n readonly zwwz: T4;\n readonly zwww: T4;\n readonly wxxx: T4;\n readonly wxxy: T4;\n readonly wxxz: T4;\n readonly wxxw: T4;\n readonly wxyx: T4;\n readonly wxyy: T4;\n readonly wxyz: T4;\n readonly wxyw: T4;\n readonly wxzx: T4;\n readonly wxzy: T4;\n readonly wxzz: T4;\n readonly wxzw: T4;\n readonly wxwx: T4;\n readonly wxwy: T4;\n readonly wxwz: T4;\n readonly wxww: T4;\n readonly wyxx: T4;\n readonly wyxy: T4;\n readonly wyxz: T4;\n readonly wyxw: T4;\n readonly wyyy: T4;\n readonly wyyz: T4;\n readonly wyzw: T4;\n readonly wywx: T4;\n readonly wywy: T4;\n readonly wywz: T4;\n readonly wyww: T4;\n readonly wzxx: T4;\n readonly wzxy: T4;\n readonly wzxz: T4;\n readonly wzxw: T4;\n readonly wzyy: T4;\n readonly wzyz: T4;\n readonly wzzy: T4;\n readonly wzzw: T4;\n readonly wzwx: T4;\n readonly wzwy: T4;\n readonly wzwz: T4;\n readonly wzww: T4;\n readonly wwxx: T4;\n readonly wwxy: T4;\n readonly wwxz: T4;\n readonly wwxw: T4;\n readonly wwyy: T4;\n readonly wwyz: T4;\n readonly wwzz: T4;\n readonly wwwx: T4;\n readonly wwwy: T4;\n readonly wwwz: T4;\n readonly wwww: T4;\n}\n\ninterface vec2 {\n x: number;\n y: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec3 {\n x: number;\n y: number;\n z: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\nconst vecProxyHandler: ProxyHandler<vecBase> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol') {\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\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\nexport interface vecBase {\n kind: VecKind;\n [Symbol.iterator](): Iterator<number>;\n}\n\nexport interface vec2f extends vec2, Swizzle2<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2f';\n}\nexport interface vec2i extends vec2, Swizzle2<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2i';\n}\nexport interface vec2u extends vec2, Swizzle2<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2u';\n}\n\nexport interface vec3f extends vec3, Swizzle3<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3f';\n}\nexport interface vec3i extends vec3, Swizzle3<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3i';\n}\nexport interface vec3u extends vec3, Swizzle3<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3u';\n}\n\nexport interface vec4f extends vec4, Swizzle4<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4f';\n}\nexport interface vec4i extends vec4, Swizzle4<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4i';\n}\nexport interface vec4u extends vec4, Swizzle4<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4u';\n}\n\nexport type Vec2f = TgpuData<vec2f> &\n ((x: number, y: number) => vec2f) &\n ((xy: number) => vec2f) &\n (() => vec2f);\n\nexport const vec2f = makeVecSchema({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as vec2f,\n makeFromScalar: (x) =>\n new Proxy(new vec2fImpl(x, x), vecProxyHandler) as vec2f,\n}) as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = makeVecSchema({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as vec2i,\n makeFromScalar: (x) =>\n new Proxy(new vec2iImpl(x, x), vecProxyHandler) as vec2i,\n}) as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = makeVecSchema({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as vec2u,\n makeFromScalar: (x) =>\n new Proxy(new vec2uImpl(x, x), vecProxyHandler) as vec2u,\n}) as Vec2u;\n\nexport type Vec3f = TgpuData<vec3f> &\n ((x: number, y: number, z: number) => vec3f) &\n ((xyz: number) => vec3f) &\n (() => vec3f);\n\nexport const vec3f = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) =>\n new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as vec3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as vec3f,\n}) as Vec3f;\n\nexport type Vec3i = TgpuData<vec3i> &\n ((x: number, y: number, z: number) => vec3i) &\n ((xyz: number) => vec3i) &\n (() => vec3i);\n\nexport const vec3i = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) =>\n new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as vec3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as vec3i,\n}) as Vec3i;\n\nexport type Vec3u = TgpuData<vec3u> &\n ((x: number, y: number, z: number) => vec3u) &\n ((xyz: number) => vec3u) &\n (() => vec3u);\n\nexport const vec3u = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) =>\n new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as vec3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as vec3u,\n}) as Vec3u;\n\nexport type Vec4f = TgpuData<vec4f> &\n ((x: number, y: number, z: number, w: number) => vec4f) &\n ((xyzw: number) => vec4f) &\n (() => vec4f);\n\nexport const vec4f = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as vec4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as vec4f,\n}) as Vec4f;\n\nexport type Vec4i = TgpuData<vec4i> &\n ((x: number, y: number, z: number, w: number) => vec4i) &\n ((xyzw: number) => vec4i) &\n (() => vec4i);\n\nexport const vec4i = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as vec4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as vec4i,\n}) as Vec4i;\n\nexport type Vec4u = TgpuData<vec4u> &\n ((x: number, y: number, z: number, w: number) => vec4u) &\n ((xyzw: number) => vec4u) &\n (() => vec4u);\n\nexport const vec4u = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as vec4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as vec4u,\n}) as Vec4u;\n"],"mappings":"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","names":["UnknownData","isResolvable","value","isDataLoose","data","isDataNotLoose","isGPUBuffer","value","RecursiveDataTypeError","_RecursiveDataTypeError","Measurer","f32","i32","u32","makeVecSchema","options","VecSchema","ctx","RecursiveDataTypeError","output","value","element","input","_","_value","measurer","Measurer","reference","prop","args","_a","values","vec2Impl","x","y","vec2fImpl","_vec2fImpl","__publicField","z","vec3fImpl","w","vec4fImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","targetAsVec4","idx","char","vec2f","f32","vec2i","i32","vec2u","u32","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var D=Object.defineProperty;var k=(e,a)=>(a=Symbol[e])?a:Symbol.for("Symbol."+e);var P=(e,a,r)=>a in e?D(e,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[a]=r;var u=(e,a,r)=>(P(e,typeof a!="symbol"?a+"":a,r),r);var A=function(e,a){this[0]=e,this[1]=a};var I=e=>{var a=e[k("asyncIterator")],r=!1,n,y={};return a==null?(a=e[k("iterator")](),n=o=>y[o]=m=>a[o](m)):(a=a.call(e),n=o=>y[o]=m=>{if(r){if(r=!1,o==="throw")throw m;return m}return r=!0,{done:!1,value:new A(new Promise(R=>{var V=a[o](m);if(!(V instanceof Object))throw TypeError("Object expected");R(V)}),1)}}),y[k("iterator")]=()=>y,n("next"),"throw"in a?n("throw"):y.throw=o=>{throw o},"return"in a&&n("return"),y};var O=Symbol("Unknown data type");function F(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function E(e){return e.isLoose}function L(e){return!e.isLoose}function W(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}var f=class e extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,e.prototype)}};var _typedbinary = require('typed-binary');function l(e){let a={__unwrapped:void 0,isLoose:!1,isCustomAligned:!1,size:e.length*4,label:e.label,byteAlignment:e.byteAlignment,expressionCode:e.label,resolveReferences(n){throw new f},write(n,y){for(let o of y)e.unitType.write(n,o)},read(n){return e.make(...Array.from({length:e.length}).map(y=>e.unitType.read(n)))},measure(n,y=new _typedbinary.Measurer){return y.add(this.size)},seekProperty(n,y){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...n)=>{var o;let y=n;if(y.length<=1)return e.makeFromScalar((o=y[0])!=null?o:0);if(y.length===e.length)return e.make(...y);throw new Error(`'${e.label}' constructor called with invalid number of arguments.`)},a)}var b=class{constructor(a,r){this.x=a;this.y=r}*[Symbol.iterator](){yield this.x,yield this.y}},T=class e extends b{constructor(){super(...arguments);u(this,"kind","vec2f")}make2(r,n){return new e(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,o){return new p(r,n,y,o)}},d=class e extends b{constructor(){super(...arguments);u(this,"kind","vec2i")}make2(r,n){return new e(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,o){return new i(r,n,y,o)}},x=class e extends b{constructor(){super(...arguments);u(this,"kind","vec2u")}make2(r,n){return new e(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,o){return new z(r,n,y,o)}},v=class{constructor(a,r,n){this.x=a;this.y=r;this.z=n}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},c=class e extends v{constructor(){super(...arguments);u(this,"kind","vec3f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,o){return new p(r,n,y,o)}},s=class e extends v{constructor(){super(...arguments);u(this,"kind","vec3i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,o){return new i(r,n,y,o)}},w=class e extends v{constructor(){super(...arguments);u(this,"kind","vec3u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,o){return new z(r,n,y,o)}},g=class{constructor(a,r,n,y){this.x=a;this.y=r;this.z=n;this.w=y}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},p=class e extends g{constructor(){super(...arguments);u(this,"kind","vec4f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,o){return new e(r,n,y,o)}},i=class e extends g{constructor(){super(...arguments);u(this,"kind","vec4i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,o){return new e(r,n,y,o)}},z=class e extends g{constructor(){super(...arguments);u(this,"kind","vec4u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,o){return new e(r,n,y,o)}},t={get:(e,a)=>{if(typeof a=="symbol")return Reflect.get(e,a);let r=e,n=new Array(a.length),y=0;for(let o of a){switch(o){case"x":n[y]=r.x;break;case"y":n[y]=r.y;break;case"z":n[y]=r.z;break;case"w":n[y]=r.w;break;default:return Reflect.get(r,a)}y++}return a.length===4?new Proxy(r.make4(n[0],n[1],n[2],n[3]),t):a.length===3?new Proxy(r.make3(n[0],n[1],n[2]),t):a.length===2?new Proxy(r.make2(n[0],n[1]),t):Reflect.get(e,a)}},N= exports.h =l({unitType:_typedbinary.f32,byteAlignment:8,length:2,label:"vec2f",make:(e,a)=>new Proxy(new T(e,a),t),makeFromScalar:e=>new Proxy(new T(e,e),t)}),$= exports.i =l({unitType:_typedbinary.i32,byteAlignment:8,length:2,label:"vec2i",make:(e,a)=>new Proxy(new d(e,a),t),makeFromScalar:e=>new Proxy(new d(e,e),t)}),H= exports.j =l({unitType:_typedbinary.u32,byteAlignment:8,length:2,label:"vec2u",make:(e,a)=>new Proxy(new x(e,a),t),makeFromScalar:e=>new Proxy(new x(e,e),t)}),K= exports.k =l({unitType:_typedbinary.f32,byteAlignment:16,length:3,label:"vec3f",make:(e,a,r)=>new Proxy(new c(e,a,r),t),makeFromScalar:e=>new Proxy(new c(e,e,e),t)}),q= exports.l =l({unitType:_typedbinary.i32,byteAlignment:16,length:3,label:"vec3i",make:(e,a,r)=>new Proxy(new s(e,a,r),t),makeFromScalar:e=>new Proxy(new s(e,e,e),t)}),J= exports.m =l({unitType:_typedbinary.u32,byteAlignment:16,length:3,label:"vec3u",make:(e,a,r)=>new Proxy(new w(e,a,r),t),makeFromScalar:e=>new Proxy(new w(e,e,e),t)}),Q= exports.n =l({unitType:_typedbinary.f32,byteAlignment:16,length:4,label:"vec4f",make:(e,a,r,n)=>new Proxy(new p(e,a,r,n),t),makeFromScalar:e=>new Proxy(new p(e,e,e,e),t)}),X= exports.o =l({unitType:_typedbinary.i32,byteAlignment:16,length:4,label:"vec4i",make:(e,a,r,n)=>new Proxy(new i(e,a,r,n),t),makeFromScalar:e=>new Proxy(new i(e,e,e,e),t)}),Y= exports.p =l({unitType:_typedbinary.u32,byteAlignment:16,length:4,label:"vec4u",make:(e,a,r,n)=>new Proxy(new z(e,a,r,n),t),makeFromScalar:e=>new Proxy(new z(e,e,e,e),t)});exports.a = u; exports.b = I; exports.c = F; exports.d = E; exports.e = L; exports.f = W; exports.g = f; exports.h = N; exports.i = $; exports.j = H; exports.k = K; exports.l = q; exports.m = J; exports.n = Q; exports.o = X; exports.p = Y;
2
+ //# sourceMappingURL=chunk-7EYKOUWH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/data/vector.ts"],"names":["UnknownData","isResolvable","value","isDataLoose","data","isDataNotLoose","isGPUBuffer","RecursiveDataTypeError","_RecursiveDataTypeError","Measurer","f32","i32","u32","makeVecSchema","options","VecSchema","ctx","output","element","input","_","_value","measurer","reference","prop","args","_a","values","vec2Impl","x","y","vec2fImpl","_vec2fImpl","__publicField","z","vec3fImpl","w","vec4fImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","targetAsVec4","idx","char","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u"],"mappings":"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","sourcesContent":["import type { ISchema, Unwrap } from 'typed-binary';\nimport type { TgpuNamable } from './namable';\nimport type { TgpuBuffer } from './tgpuBuffer';\nimport type { TgpuBufferUsage } from './tgpuBufferUsage';\nimport type { TgpuFn } from './tgpuFn';\n\nexport type Wgsl = string | number | TgpuResolvable | symbol | boolean;\n\nexport const UnknownData = Symbol('Unknown data type');\nexport type UnknownData = typeof UnknownData;\n\nexport type Resource = {\n value: Wgsl;\n dataType: AnyTgpuData | UnknownData;\n};\n\n/**\n * Passed into each resolvable item. All sibling items share a resolution ctx,\n * and a new resolution ctx is made when going down each level in the tree.\n */\nexport interface ResolutionCtx {\n addDeclaration(item: TgpuResolvable): void;\n addBinding(bindable: TgpuBindable, identifier: TgpuIdentifier): void;\n addRenderResource(\n resource: TgpuRenderResource,\n identifier: TgpuIdentifier,\n ): void;\n addBuiltin(builtin: symbol): void;\n nameFor(token: TgpuResolvable): string;\n /**\n * Unwraps all layers of slot indirection and returns the concrete value if available.\n * @throws {MissingSlotValueError}\n */\n unwrap<T>(eventual: Eventual<T>): T;\n resolve(item: Wgsl, slotValueOverrides?: SlotValuePair<unknown>[]): string;\n fnToWgsl(\n // biome-ignore lint/suspicious/noExplicitAny: <no need for generic magic>\n fn: TgpuFn<any, any>,\n externalMap: Record<string, unknown>,\n ): {\n head: Wgsl;\n body: Wgsl;\n };\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\nexport interface TgpuIdentifier extends TgpuNamable, TgpuResolvable {}\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\n}\n\nexport function isResolvable(value: unknown): value is TgpuResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | TgpuSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface TgpuResolvableSlot<T extends Wgsl>\n extends TgpuResolvable,\n TgpuSlot<T> {}\n\nexport type SlotValuePair<T> = [TgpuSlot<T>, T];\n\nexport interface TgpuBindable<\n TData extends AnyTgpuData = AnyTgpuData,\n TUsage extends BufferUsage = BufferUsage,\n> extends TgpuResolvable {\n readonly allocatable: TgpuBuffer<TData>;\n readonly usage: TUsage;\n}\n\nexport type TgpuSamplerType = 'sampler' | 'sampler_comparison';\nexport type TgpuTypedTextureType =\n | 'texture_1d'\n | 'texture_2d'\n | 'texture_2d_array'\n | 'texture_3d'\n | 'texture_cube'\n | 'texture_cube_array'\n | 'texture_multisampled_2d';\nexport type TgpuDepthTextureType =\n | 'texture_depth_2d'\n | 'texture_depth_2d_array'\n | 'texture_depth_cube'\n | 'texture_depth_cube_array'\n | 'texture_depth_multisampled_2d';\nexport type TgpuStorageTextureType =\n | 'texture_storage_1d'\n | 'texture_storage_2d'\n | 'texture_storage_2d_array'\n | 'texture_storage_3d';\nexport type TgpuExternalTextureType = 'texture_external';\n\nexport type TgpuRenderResourceType =\n | TgpuSamplerType\n | TgpuTypedTextureType\n | TgpuDepthTextureType\n | TgpuStorageTextureType\n | TgpuExternalTextureType;\n\nexport interface TgpuRenderResource extends TgpuResolvable {\n readonly type: TgpuRenderResourceType;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';\nexport type TextureUsage = 'sampled' | 'storage';\n\nexport function isSamplerType(\n type: TgpuRenderResourceType,\n): type is TgpuSamplerType {\n return type === 'sampler' || type === 'sampler_comparison';\n}\n\nexport function isTypedTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuTypedTextureType {\n return [\n 'texture_1d',\n 'texture_2d',\n 'texture_2d_array',\n 'texture_3d',\n 'texture_cube',\n 'texture_cube_array',\n 'texture_multisampled_2d',\n ].includes(type);\n}\n\nexport function isDepthTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuDepthTextureType {\n return [\n 'texture_depth_2d',\n 'texture_depth_2d_array',\n 'texture_depth_cube',\n 'texture_depth_cube_array',\n 'texture_depth_multisampled_2d',\n ].includes(type);\n}\n\nexport function isStorageTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuStorageTextureType {\n return [\n 'texture_storage_1d',\n 'texture_storage_2d',\n 'texture_storage_2d_array',\n 'texture_storage_3d',\n ].includes(type);\n}\n\nexport function isExternalTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuExternalTextureType {\n return type === 'texture_external';\n}\n\nexport type ValueOf<T> = T extends TgpuSlot<infer I>\n ? ValueOf<I>\n : T extends TgpuBufferUsage<infer D>\n ? ValueOf<D>\n : T extends TgpuData<unknown>\n ? Unwrap<T>\n : T;\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly isLoose: false;\n readonly isCustomAligned: boolean;\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport interface TgpuLooseData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly isLoose: true;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\nexport type AnyTgpuLooseData = TgpuLooseData<unknown>;\n\nexport function isDataLoose<T>(\n data: TgpuData<T> | TgpuLooseData<T>,\n): data is TgpuLooseData<T> {\n return data.isLoose;\n}\nexport function isDataNotLoose<T>(\n data: TgpuData<T> | TgpuLooseData<T>,\n): data is TgpuData<T> {\n return !data.isLoose;\n}\n\nexport interface TgpuPointer<\n TScope extends 'function',\n TInner extends AnyTgpuData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type TgpuValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyTgpuPointer = TgpuPointer<'function', AnyTgpuData>;\n\nexport type TgpuFnArgument = AnyTgpuPointer | AnyTgpuData;\n\nexport function isPointer(\n value: AnyTgpuPointer | AnyTgpuData,\n): value is AnyTgpuPointer {\n return 'pointsTo' in value;\n}\n\nexport function isGPUBuffer(value: unknown): value is GPUBuffer {\n return (\n !!value &&\n typeof value === 'object' &&\n 'getMappedRange' in value &&\n 'mapAsync' in value\n );\n}\n\n// -----------------\n// TypeGPU Resources\n// -----------------\n\n// Code\n\nexport interface BoundTgpuCode extends TgpuResolvable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport interface TgpuCode extends BoundTgpuCode, TgpuNamable {}\n\n// Slot\n\nexport interface TgpuSlot<T> extends TgpuNamable {\n readonly __brand: 'TgpuSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n /**\n * Used to determine if code generated using either value `a` or `b` in place\n * of the slot will be equivalent. Defaults to `Object.is`.\n */\n areEqual(a: T, b: T): boolean;\n\n value: ValueOf<T>;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\n}\n","import type { TgpuResolvable, TgpuSlot } from './types';\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: TgpuResolvable[],\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: TgpuResolvable): 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 RecursiveDataTypeError extends Error {\n constructor() {\n super('Recursive types are not supported in WGSL');\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, RecursiveDataTypeError.prototype);\n }\n}\n","import {\n type IMeasurer,\n type IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n f32,\n i32,\n u32,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<ValueType> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => ValueType;\n makeFromScalar: (value: number) => ValueType;\n}\n\ntype VecSchemaBase<ValueType> = TgpuData<ValueType> & {\n expressionCode: string;\n};\n\nfunction makeVecSchema<ValueType extends vecBase>(\n options: VecSchemaOptions<ValueType>,\n): VecSchemaBase<ValueType> & ((...args: number[]) => ValueType) {\n const VecSchema: VecSchemaBase<ValueType> = {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as ValueType,\n isLoose: false as const,\n isCustomAligned: false,\n\n size: options.length * 4,\n label: options.label,\n byteAlignment: options.byteAlignment,\n expressionCode: options.label,\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n for (const element of value) {\n options.unitType.write(output, element);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n return options.make(\n ...Array.from({ length: options.length }).map((_) =>\n options.unitType.read(input),\n ),\n ) as Parsed<ValueType>;\n },\n\n measure(\n _value: Parsed<ValueType> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return measurer.add(this.size);\n },\n\n seekProperty(\n reference: Parsed<ValueType> | MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return options.label;\n },\n };\n\n const construct = (...args: number[]): ValueType => {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\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.label}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl implements vec2 {\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\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec3Impl implements vec3 {\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\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec4Impl implements vec4 {\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\nclass vec4fImpl extends vec4Impl {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\ninterface Swizzle2<T2, T3, T4> {\n readonly xx: T2;\n readonly xy: T2;\n readonly yx: T2;\n readonly yy: T2;\n\n readonly xxx: T3;\n readonly xxy: T3;\n readonly xyx: T3;\n readonly xyy: T3;\n readonly yxx: T3;\n readonly yxy: T3;\n readonly yyx: T3;\n readonly yyy: T3;\n\n readonly xxxx: T4;\n readonly xxxy: T4;\n readonly xxyx: T4;\n readonly xxyy: T4;\n readonly xyxx: T4;\n readonly xyxy: T4;\n readonly xyyx: T4;\n readonly xyyy: T4;\n readonly yxxx: T4;\n readonly yxxy: T4;\n readonly yxyx: T4;\n readonly yxyy: T4;\n readonly yyxx: T4;\n readonly yyxy: T4;\n readonly yyyx: T4;\n readonly yyyy: T4;\n}\n\ninterface Swizzle3<T2, T3, T4> extends Swizzle2<T2, T3, T4> {\n readonly xz: T2;\n readonly yz: T2;\n readonly zx: T2;\n readonly zy: T2;\n readonly zz: T2;\n\n readonly xxz: T3;\n readonly xyz: T3;\n readonly xzx: T3;\n readonly xzy: T3;\n readonly xzz: T3;\n readonly yxz: T3;\n readonly yyz: T3;\n readonly yzx: T3;\n readonly yzy: T3;\n readonly yzz: T3;\n readonly zxx: T3;\n readonly zxy: T3;\n readonly zxz: T3;\n readonly zyx: T3;\n readonly zyy: T3;\n readonly zyz: T3;\n readonly zzx: T3;\n readonly zzy: T3;\n readonly zzz: T3;\n\n readonly xxxz: T4;\n readonly xxyz: T4;\n readonly xxzx: T4;\n readonly xxzy: T4;\n readonly xxzz: T4;\n readonly xyxz: T4;\n readonly xyyz: T4;\n readonly xyzx: T4;\n readonly xyzy: T4;\n readonly xyzz: T4;\n readonly xzxx: T4;\n readonly xzxy: T4;\n readonly xzxz: T4;\n readonly xzyx: T4;\n readonly xzyy: T4;\n readonly xzyz: T4;\n readonly xzzx: T4;\n readonly xzzy: T4;\n readonly xzzz: T4;\n readonly yxxz: T4;\n readonly yxyz: T4;\n readonly yxzx: T4;\n readonly yxzy: T4;\n readonly yxzz: T4;\n readonly yyxz: T4;\n readonly yyyz: T4;\n readonly yyzx: T4;\n readonly yyzy: T4;\n readonly yyzz: T4;\n readonly yzxx: T4;\n readonly yzxy: T4;\n readonly yzxz: T4;\n readonly yzyx: T4;\n readonly yzyy: T4;\n readonly yzyz: T4;\n readonly yzzx: T4;\n readonly yzzy: T4;\n readonly yzzz: T4;\n readonly zxxx: T4;\n readonly zxxy: T4;\n readonly zxxz: T4;\n readonly zxyx: T4;\n readonly zxyy: T4;\n readonly zxyz: T4;\n readonly zxzx: T4;\n readonly zxzy: T4;\n readonly zxzz: T4;\n readonly zyxx: T4;\n readonly zyxy: T4;\n readonly zyxz: T4;\n readonly zyyx: T4;\n readonly zyyy: T4;\n readonly zyyz: T4;\n readonly zyzx: T4;\n readonly zyzy: T4;\n readonly zyzz: T4;\n readonly zzxx: T4;\n readonly zzxy: T4;\n readonly zzxz: T4;\n readonly zzyx: T4;\n readonly zzyy: T4;\n readonly zzyz: T4;\n readonly zzzx: T4;\n readonly zzzy: T4;\n readonly zzzz: T4;\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3, T4> {\n readonly yw: T2;\n readonly zw: T2;\n readonly wx: T2;\n readonly wy: T2;\n readonly wz: T2;\n readonly ww: T2;\n\n readonly xxw: T3;\n readonly xyw: T3;\n readonly xzw: T3;\n readonly xwx: T3;\n readonly xwy: T3;\n readonly xwz: T3;\n readonly xww: T3;\n readonly yxw: T3;\n readonly yyw: T3;\n readonly yzw: T3;\n readonly ywx: T3;\n readonly ywy: T3;\n readonly ywz: T3;\n readonly yww: T3;\n readonly zxw: T3;\n readonly zyw: T3;\n readonly zzw: T3;\n readonly zwx: T3;\n readonly zwy: T3;\n readonly zwz: T3;\n readonly zww: T3;\n readonly wxx: T3;\n readonly wxz: T3;\n readonly wxy: T3;\n readonly wyy: T3;\n readonly wyz: T3;\n readonly wzz: T3;\n readonly wwx: T3;\n readonly wwy: T3;\n readonly wwz: T3;\n readonly www: T3;\n\n readonly xxxw: T4;\n readonly xxyw: T4;\n readonly xxzw: T4;\n readonly xxwx: T4;\n readonly xxwy: T4;\n readonly xxwz: T4;\n readonly xxww: T4;\n readonly xyxw: T4;\n readonly xyyw: T4;\n readonly xyzw: T4;\n readonly xywx: T4;\n readonly xywy: T4;\n readonly xywz: T4;\n readonly xyww: T4;\n readonly xzxw: T4;\n readonly xzyw: T4;\n readonly xzzw: T4;\n readonly xzwx: T4;\n readonly xzwy: T4;\n readonly xzwz: T4;\n readonly xzww: T4;\n readonly xwxx: T4;\n readonly xwxy: T4;\n readonly xwxz: T4;\n readonly xwyy: T4;\n readonly xwyz: T4;\n readonly xwzz: T4;\n readonly xwwx: T4;\n readonly xwwy: T4;\n readonly xwwz: T4;\n readonly xwww: T4;\n readonly yxxw: T4;\n readonly yxyw: T4;\n readonly yxzw: T4;\n readonly yxwx: T4;\n readonly yxwy: T4;\n readonly yxwz: T4;\n readonly yxww: T4;\n readonly yyxw: T4;\n readonly yyyw: T4;\n readonly yyzw: T4;\n readonly yywx: T4;\n readonly yywy: T4;\n readonly yywz: T4;\n readonly yyww: T4;\n readonly yzxw: T4;\n readonly yzyw: T4;\n readonly yzzw: T4;\n readonly yzwx: T4;\n readonly yzwy: T4;\n readonly yzwz: T4;\n readonly yzww: T4;\n readonly ywxx: T4;\n readonly ywxy: T4;\n readonly ywxz: T4;\n readonly ywxw: T4;\n readonly ywyy: T4;\n readonly ywyz: T4;\n readonly ywzz: T4;\n readonly ywwx: T4;\n readonly ywwy: T4;\n readonly ywwz: T4;\n readonly ywww: T4;\n readonly zxxw: T4;\n readonly zxyw: T4;\n readonly zxzw: T4;\n readonly zxwx: T4;\n readonly zxwy: T4;\n readonly zxwz: T4;\n readonly zxww: T4;\n readonly zyxw: T4;\n readonly zyyw: T4;\n readonly zyzw: T4;\n readonly zywx: T4;\n readonly zywy: T4;\n readonly zywz: T4;\n readonly zyww: T4;\n readonly zzxw: T4;\n readonly zzyw: T4;\n readonly zzzw: T4;\n readonly zzwx: T4;\n readonly zzwy: T4;\n readonly zzwz: T4;\n readonly zzww: T4;\n readonly zwxx: T4;\n readonly zwxy: T4;\n readonly zwxz: T4;\n readonly zwxw: T4;\n readonly zwyy: T4;\n readonly zwyz: T4;\n readonly zwzz: T4;\n readonly zwwx: T4;\n readonly zwwy: T4;\n readonly zwwz: T4;\n readonly zwww: T4;\n readonly wxxx: T4;\n readonly wxxy: T4;\n readonly wxxz: T4;\n readonly wxxw: T4;\n readonly wxyx: T4;\n readonly wxyy: T4;\n readonly wxyz: T4;\n readonly wxyw: T4;\n readonly wxzx: T4;\n readonly wxzy: T4;\n readonly wxzz: T4;\n readonly wxzw: T4;\n readonly wxwx: T4;\n readonly wxwy: T4;\n readonly wxwz: T4;\n readonly wxww: T4;\n readonly wyxx: T4;\n readonly wyxy: T4;\n readonly wyxz: T4;\n readonly wyxw: T4;\n readonly wyyy: T4;\n readonly wyyz: T4;\n readonly wyzw: T4;\n readonly wywx: T4;\n readonly wywy: T4;\n readonly wywz: T4;\n readonly wyww: T4;\n readonly wzxx: T4;\n readonly wzxy: T4;\n readonly wzxz: T4;\n readonly wzxw: T4;\n readonly wzyy: T4;\n readonly wzyz: T4;\n readonly wzzy: T4;\n readonly wzzw: T4;\n readonly wzwx: T4;\n readonly wzwy: T4;\n readonly wzwz: T4;\n readonly wzww: T4;\n readonly wwxx: T4;\n readonly wwxy: T4;\n readonly wwxz: T4;\n readonly wwxw: T4;\n readonly wwyy: T4;\n readonly wwyz: T4;\n readonly wwzz: T4;\n readonly wwwx: T4;\n readonly wwwy: T4;\n readonly wwwz: T4;\n readonly wwww: T4;\n}\n\ninterface vec2 {\n x: number;\n y: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec3 {\n x: number;\n y: number;\n z: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\nconst vecProxyHandler: ProxyHandler<vecBase> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol') {\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\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\nexport interface vecBase {\n kind: VecKind;\n [Symbol.iterator](): Iterator<number>;\n}\n\nexport interface vec2f extends vec2, Swizzle2<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2f';\n}\nexport interface vec2i extends vec2, Swizzle2<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2i';\n}\nexport interface vec2u extends vec2, Swizzle2<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2u';\n}\n\nexport interface vec3f extends vec3, Swizzle3<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3f';\n}\nexport interface vec3i extends vec3, Swizzle3<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3i';\n}\nexport interface vec3u extends vec3, Swizzle3<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3u';\n}\n\nexport interface vec4f extends vec4, Swizzle4<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4f';\n}\nexport interface vec4i extends vec4, Swizzle4<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4i';\n}\nexport interface vec4u extends vec4, Swizzle4<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4u';\n}\n\nexport type Vec2f = TgpuData<vec2f> &\n ((x: number, y: number) => vec2f) &\n ((xy: number) => vec2f) &\n (() => vec2f);\n\nexport const vec2f = makeVecSchema({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as vec2f,\n makeFromScalar: (x) =>\n new Proxy(new vec2fImpl(x, x), vecProxyHandler) as vec2f,\n}) as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = makeVecSchema({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as vec2i,\n makeFromScalar: (x) =>\n new Proxy(new vec2iImpl(x, x), vecProxyHandler) as vec2i,\n}) as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = makeVecSchema({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as vec2u,\n makeFromScalar: (x) =>\n new Proxy(new vec2uImpl(x, x), vecProxyHandler) as vec2u,\n}) as Vec2u;\n\nexport type Vec3f = TgpuData<vec3f> &\n ((x: number, y: number, z: number) => vec3f) &\n ((xyz: number) => vec3f) &\n (() => vec3f);\n\nexport const vec3f = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) =>\n new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as vec3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as vec3f,\n}) as Vec3f;\n\nexport type Vec3i = TgpuData<vec3i> &\n ((x: number, y: number, z: number) => vec3i) &\n ((xyz: number) => vec3i) &\n (() => vec3i);\n\nexport const vec3i = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) =>\n new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as vec3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as vec3i,\n}) as Vec3i;\n\nexport type Vec3u = TgpuData<vec3u> &\n ((x: number, y: number, z: number) => vec3u) &\n ((xyz: number) => vec3u) &\n (() => vec3u);\n\nexport const vec3u = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) =>\n new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as vec3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as vec3u,\n}) as Vec3u;\n\nexport type Vec4f = TgpuData<vec4f> &\n ((x: number, y: number, z: number, w: number) => vec4f) &\n ((xyzw: number) => vec4f) &\n (() => vec4f);\n\nexport const vec4f = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as vec4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as vec4f,\n}) as Vec4f;\n\nexport type Vec4i = TgpuData<vec4i> &\n ((x: number, y: number, z: number, w: number) => vec4i) &\n ((xyzw: number) => vec4i) &\n (() => vec4i);\n\nexport const vec4i = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as vec4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as vec4i,\n}) as Vec4i;\n\nexport type Vec4u = TgpuData<vec4u> &\n ((x: number, y: number, z: number, w: number) => vec4u) &\n ((xyzw: number) => vec4u) &\n (() => vec4u);\n\nexport const vec4u = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as vec4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as vec4u,\n}) as Vec4u;\n"]}
package/data/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkPMM3NYJ4cjs = require('../chunk-PMM3NYJ4.cjs');var _typedbinary = require('typed-binary'); var p = _interopRequireWildcard(_typedbinary);var c=class extends _typedbinary.Schema{constructor({schema:e,byteAlignment:n,code:a}){super();_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");_chunkPMM3NYJ4cjs.a.call(void 0, this,"expressionCode");_chunkPMM3NYJ4cjs.a.call(void 0, this,"_innerSchema");this._innerSchema=e,this.byteAlignment=n,this.expressionCode=a,this.size=this.measure(_typedbinary.MaxValue).size}resolveReferences(){throw new _chunkPMM3NYJ4cjs.e}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,n)}read(e){return _chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),this._innerSchema.measure(e,n),n}getUnderlyingTypeString(){if(typeof this.expressionCode=="string")return this.expressionCode;if("elementSchema"in this._innerSchema)return this._innerSchema.elementSchema.getUnderlyingTypeString();throw new Error("Unexpected type used as vertex buffer element")}getUnderlyingType(){return"elementSchema"in this._innerSchema?this._innerSchema.elementSchema.getUnderlyingType():this}resolve(e){return this.expressionCode}};var ge=new c({schema:p.bool,byteAlignment:4,code:"bool"}),fe= exports.u32 =new c({schema:p.u32,byteAlignment:4,code:"u32"}),xe= exports.i32 =new c({schema:p.i32,byteAlignment:4,code:"i32"}),we= exports.f32 =new c({schema:p.f32,byteAlignment:4,code:"f32"});var u={vertexIndex:Symbol("builtin_vertexIndex"),instanceIndex:Symbol("builtin_instanceIndex"),position:Symbol("builtin_position"),clipDistances:Symbol("builtin_clipDistances"),frontFacing:Symbol("builtin_frontFacing"),fragDepth:Symbol("builtin_fragDepth"),sampleIndex:Symbol("builtin_sampleIndex"),sampleMask:Symbol("builtin_sampleMask"),fragment:Symbol("builtin_fragment"),localInvocationId:Symbol("builtin_localInvocationId"),localInvocationIndex:Symbol("builtin_localInvocationIndex"),globalInvocationId:Symbol("builtin_globalInvocationId"),workgroupId:Symbol("builtin_workgroupId"),numWorkgroups:Symbol("builtin_numWorkgroups")},ve=Object.values(u);function T(){return new v}var v=class{constructor(){_chunkPMM3NYJ4cjs.a.call(void 0, this,"label")}$name(t){return this.label=t,this}resolve(t){return t.nameFor(this)}toString(){var t;return`id:${(t=this.label)!=null?t:"<unnamed>"}`}};var W={[u.vertexIndex]:"vertex_index",[u.instanceIndex]:"instance_index",[u.position]:"position",[u.clipDistances]:"clip_distances",[u.frontFacing]:"front_facing",[u.fragDepth]:"frag_depth",[u.sampleIndex]:"sample_index",[u.sampleMask]:"sample_mask",[u.fragment]:"fragment",[u.localInvocationId]:"local_invocation_id",[u.localInvocationIndex]:"local_invocation_index",[u.globalInvocationId]:"global_invocation_id",[u.workgroupId]:"workgroup_id",[u.numWorkgroups]:"num_workgroups"},z=new Map;function B(r){let t=z.get(r);return t===void 0&&(t=T().$name(W[r]),z.set(r,t)),t}function _(r,...t){let e=r.flatMap((n,a)=>{let o=t[a];return o===void 0?[n]:Array.isArray(o)?[n,...o]:[n,o]});return new C(e)}var C=class{constructor(t){this.segments=t;_chunkPMM3NYJ4cjs.a.call(void 0, this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let e="";for(let n of this.segments)if(_chunkPMM3NYJ4cjs.c.call(void 0, n))e+=t.resolve(n);else if(typeof n=="function"){let a=n(o=>t.unwrap(o));e+=t.resolve(a)}else typeof n=="symbol"?(t.addBuiltin(n),e+=t.resolve(B(n))):e+=String(n);return e}with(t,e){return new I(this,[t,e])}toString(){var t;return`code:${(t=this._label)!=null?t:"<unnamed>"}`}},I=class r{constructor(t,e){this._innerFn=t;this._slotValuePair=e}get label(){return this._innerFn.label}with(t,e){return new r(this,[t,e])}resolve(t){return t.resolve(this._innerFn,[this._slotValuePair])}toString(){var n,a;let[t,e]=this._slotValuePair;return`code:${(n=this.label)!=null?n:"<unnamed>"}[${(a=t.label)!=null?a:"<unnamed>"}=${e}]`}};function G(r,t){return new d(t,r)}var d=class extends _typedbinary.Schema{constructor(e,n){super();this.data=e;this.byteAlignment=n;_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");if(this.size=this.data.size,n<=0)throw new Error(`Custom data alignment must be a positive number, got: ${n}.`);if(Math.log2(n)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${n}.`);if(n%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${n}, expected multiple of: ${this.data.byteAlignment}.`)}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this.data.write(e,n)}read(e){return _chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this.data.read(e)}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),this.data.measure(e,n)}resolve(e){return this.data.resolve(e)}};function J(r,t){return new y(t,r)}var y=class extends _typedbinary.Schema{constructor(e,n){super();this.data=e;this.size=n;_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");if(this.byteAlignment=this.data.byteAlignment,n<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${n}, expected at least: ${this.data.size}.`);if(n<=0)throw new Error(`Custom data size must be a positive number. Got: ${n}.`)}write(e,n){this.data.write(e,n)}read(e){return this.data.read(e)}measure(e,n=new _typedbinary.Measurer){return n.add(this.size)}resolve(e){return this.data.resolve(e)}};var Ke=r=>new D(r),D=class extends _typedbinary.Schema{constructor(e){super();this._properties=e;_chunkPMM3NYJ4cjs.a.call(void 0, this,"_label");_chunkPMM3NYJ4cjs.a.call(void 0, this,"_innerSchema");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");this._innerSchema=_typedbinary.object.call(void 0, e),this.byteAlignment=Object.values(e).map(n=>n.byteAlignment).reduce((n,a)=>n>a?n:a),this.size=this.measure(_typedbinary.MaxValue).size}$name(e){return this._label=e,this}resolveReferences(){throw new _chunkPMM3NYJ4cjs.e}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,n)}read(e){return _chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),this._innerSchema.measure(e,n),n}resolve(e){let n=T().$name(this._label);return e.addDeclaration(_`
2
- struct ${n} {
3
- ${Object.entries(this._properties).map(([a,o])=>{var k;return _`${(k=Y(o))!=null?k:""}${a}: ${o},\n`})}
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunk7EYKOUWHcjs = require('../chunk-7EYKOUWH.cjs');var _typedbinary = require('typed-binary'); var p = _interopRequireWildcard(_typedbinary);var c=class extends _typedbinary.Schema{constructor({schema:t,byteAlignment:r,code:s}){super();_chunk7EYKOUWHcjs.a.call(void 0, this,"size");_chunk7EYKOUWHcjs.a.call(void 0, this,"byteAlignment");_chunk7EYKOUWHcjs.a.call(void 0, this,"expressionCode");_chunk7EYKOUWHcjs.a.call(void 0, this,"isCustomAligned",!1);_chunk7EYKOUWHcjs.a.call(void 0, this,"_innerSchema");_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!1);_chunk7EYKOUWHcjs.a.call(void 0, this,"label");this._innerSchema=t,this.byteAlignment=r,this.expressionCode=s,this.size=this.measure(_typedbinary.MaxValue).size,this.label=s}resolveReferences(){throw new _chunk7EYKOUWHcjs.g}write(t,r){this._innerSchema.write(t,r)}read(t){return this._innerSchema.read(t)}measure(t,r=new _typedbinary.Measurer){return this._innerSchema.measure(t,r),r}getUnderlyingTypeString(){if(typeof this.expressionCode=="string")return this.expressionCode;if("elementSchema"in this._innerSchema)return this._innerSchema.elementSchema.getUnderlyingTypeString();throw new Error("Unexpected type used as vertex buffer element")}getUnderlyingType(){return"elementSchema"in this._innerSchema?this._innerSchema.elementSchema.getUnderlyingType():this}resolve(t){return this.expressionCode}};var _=(e,n)=>({__unwrapped:void 0,isLoose:!1,isCustomAligned:!1,size:4,byteAlignment:4,expressionCode:n,write(t,r){e.write(t,r)},read(t){return e.read(t)},measure(t,r=new p.Measurer){return e.measure(t,r),r},resolveReferences(t){throw new _chunk7EYKOUWHcjs.g},seekProperty(t,r){throw new Error("Method not implemented.")},resolve(){return n},toString(){return n}}),Re= exports.bool =new c({schema:p.bool,byteAlignment:4,code:"bool"}),Q=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))),Be= exports.u32 =Object.assign(Q,_(p.u32,"u32")),X=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 n=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,n))},ze= exports.i32 =Object.assign(X,_(p.i32,"i32")),Y=e=>typeof e=="boolean"?e?1:0:e,Ve= exports.f32 =Object.assign(Y,_(p.f32,"f32"));var u={vertexIndex:Symbol("builtin_vertexIndex"),instanceIndex:Symbol("builtin_instanceIndex"),position:Symbol("builtin_position"),clipDistances:Symbol("builtin_clipDistances"),frontFacing:Symbol("builtin_frontFacing"),fragDepth:Symbol("builtin_fragDepth"),sampleIndex:Symbol("builtin_sampleIndex"),sampleMask:Symbol("builtin_sampleMask"),fragment:Symbol("builtin_fragment"),localInvocationId:Symbol("builtin_localInvocationId"),localInvocationIndex:Symbol("builtin_localInvocationIndex"),globalInvocationId:Symbol("builtin_globalInvocationId"),workgroupId:Symbol("builtin_workgroupId"),numWorkgroups:Symbol("builtin_numWorkgroups")},Le=Object.values(u);function d(){return new M}var M=class{constructor(){_chunk7EYKOUWHcjs.a.call(void 0, this,"label")}$name(n){return this.label=n,this}resolve(n){return n.nameFor(this)}toString(){var n;return`id:${(n=this.label)!=null?n:"<unnamed>"}`}};var Z={[u.vertexIndex]:"vertex_index",[u.instanceIndex]:"instance_index",[u.position]:"position",[u.clipDistances]:"clip_distances",[u.frontFacing]:"front_facing",[u.fragDepth]:"frag_depth",[u.sampleIndex]:"sample_index",[u.sampleMask]:"sample_mask",[u.fragment]:"fragment",[u.localInvocationId]:"local_invocation_id",[u.localInvocationIndex]:"local_invocation_index",[u.globalInvocationId]:"global_invocation_id",[u.workgroupId]:"workgroup_id",[u.numWorkgroups]:"num_workgroups"},G=new Map;function q(e){let n=G.get(e);return n===void 0&&(n=d().$name(Z[e]),G.set(e,n)),n}function k(e,...n){let t=e.flatMap((r,s)=>{let o=n[s];return o===void 0?[r]:Array.isArray(o)?[r,...o]:[r,o]});return new P(t)}var P=class{constructor(n){this.segments=n;_chunk7EYKOUWHcjs.a.call(void 0, this,"_label")}get label(){return this._label}$name(n){return this._label=n,this}resolve(n){let t="";for(let r of this.segments)if(_chunk7EYKOUWHcjs.c.call(void 0, r))t+=n.resolve(r);else if(typeof r=="function"){let s=r(o=>n.unwrap(o));t+=n.resolve(s)}else typeof r=="symbol"?(n.addBuiltin(r),t+=n.resolve(q(r))):t+=String(r);return t}with(n,t){return new U(this,[n,t])}toString(){var n;return`code:${(n=this._label)!=null?n:"<unnamed>"}`}},U=class e{constructor(n,t){this._innerFn=n;this._slotValuePair=t}get label(){return this._innerFn.label}with(n,t){return new e(this,[n,t])}resolve(n){return n.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,s;let[n,t]=this._slotValuePair;return`code:${(r=this.label)!=null?r:"<unnamed>"}[${(s=n.label)!=null?s:"<unnamed>"}=${t}]`}};function ee(e,n){let t="size"in e?e.size:e.currentByteOffset,r=n-1,s=t&r;"skipBytes"in e?e.skipBytes(n-s&r):e.add(n-s&r)}var i=ee;function re(e,n){if(_chunk7EYKOUWHcjs.d.call(void 0, n))return new E(n,e);if(_chunk7EYKOUWHcjs.e.call(void 0, n))return new y(n,e);throw new Error(`Could not align data: ${n}`)}function R(e){return e instanceof y}var T=class extends _typedbinary.Schema{constructor(t,r){super();this.data=t;this.byteAlignment=r;_chunk7EYKOUWHcjs.a.call(void 0, this,"size");_chunk7EYKOUWHcjs.a.call(void 0, this,"isCustomAligned",!0);if(this.size=this.data.size,r<=0)throw new Error(`Custom data alignment must be a positive number, got: ${r}.`);if(Math.log2(r)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${r}.`);if(_chunk7EYKOUWHcjs.e.call(void 0, this.data)&&r%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${r}, expected multiple of: ${this.data.byteAlignment}.`)}write(t,r){i(t,this.byteAlignment),this.data.write(t,r)}read(t){return i(t,this.byteAlignment),this.data.read(t)}measure(t,r=new _typedbinary.Measurer){return i(r,this.byteAlignment),this.data.measure(t,r)}resolve(t){return this.data.resolve(t)}},y=class extends T{constructor(){super(...arguments);_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!1)}},E=class extends T{constructor(){super(...arguments);_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!0)}};function oe(e,n){return new f(n,e)}function B(e){return e instanceof f}var f=class extends _typedbinary.Schema{constructor(t,r){super();this.data=t;this.size=r;_chunk7EYKOUWHcjs.a.call(void 0, this,"byteAlignment");_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!1);_chunk7EYKOUWHcjs.a.call(void 0, this,"isCustomAligned");if(this.byteAlignment=this.data.byteAlignment,this.isCustomAligned=this.data.isCustomAligned,r<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${r}, expected at least: ${this.data.size}.`);if(r<=0)throw new Error(`Custom data size must be a positive number. Got: ${r}.`)}write(t,r){this.data.write(t,r)}read(t){return this.data.read(t)}measure(t,r=new _typedbinary.Measurer){return r.add(this.size)}resolve(t){return this.data.resolve(t)}};var le=e=>new g(e);function me(e){return e instanceof g}var g=class extends _typedbinary.Schema{constructor(t){super();this._properties=t;_chunk7EYKOUWHcjs.a.call(void 0, this,"_label");_chunk7EYKOUWHcjs.a.call(void 0, this,"byteAlignment");_chunk7EYKOUWHcjs.a.call(void 0, this,"size");_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!1);_chunk7EYKOUWHcjs.a.call(void 0, this,"isCustomAligned",!1);this.byteAlignment=Object.values(t).map(r=>r.byteAlignment).reduce((r,s)=>r>s?r:s),this.size=this.measure(_typedbinary.MaxValue).size}$name(t){return this._label=t,this}resolveReferences(){throw new _chunk7EYKOUWHcjs.g}write(t,r){i(t,this.byteAlignment);for(let[s,o]of V(this._properties))i(t,o.byteAlignment),o.write(t,r[s])}read(t){i(t,this.byteAlignment);let r={};for(let[s,o]of V(this._properties))i(t,o.byteAlignment),r[s]=o.read(t);return r}measure(t,r=new _typedbinary.Measurer){i(r,this.byteAlignment);for(let[s,o]of V(this._properties))i(r,o.byteAlignment),o.measure(t===_typedbinary.MaxValue?_typedbinary.MaxValue:t[s],r);return i(r,this.byteAlignment),r}resolve(t){let r=d().$name(this._label);return t.addDeclaration(k`
2
+ struct ${r} {
3
+ ${Object.entries(this._properties).map(([s,o])=>{var N;return k`${(N=pe(o))!=null?N:""}${s}: ${o},\n`})}
4
4
  }
5
- `),e.resolve(n)}};function Y(r){if(r instanceof d)return`@align(${r.byteAlignment}) `;if(r instanceof y)return`@size(${r.size}) `}var b=(r,t)=>{let e=t-1,n=~e;return r&e?(r&n)+t:r};var A=class extends _typedbinary.Schema{constructor(e,n){super();_chunkPMM3NYJ4cjs.a.call(void 0, this,"elementType");_chunkPMM3NYJ4cjs.a.call(void 0, this,"elementCount");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");_chunkPMM3NYJ4cjs.a.call(void 0, this,"stride");this.elementType=e,this.elementCount=n,this.byteAlignment=e.byteAlignment,this.stride=b(this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment);let a=e.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,n.length);o++)this.elementType.write(e,n[o]);e.seekTo(a+this.stride*this.elementCount)}read(e){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment);let n=[];for(let a=0;a<this.elementCount;a++)n.push(this.elementType.read(e));return n}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),n.add(this.stride*this.elementCount)}resolve(e){return e.resolve(`
6
- array<${e.resolve(this.elementType)}, ${this.elementCount}>
7
- `)}},tt= exports.arrayOf =(r,t)=>new A(r,t);function R(r){let t={__unwrapped:void 0,label:r.label,byteAlignment:r.columnType.byteAlignment,size:b(r.columnType.size*r.columns,r.columnType.byteAlignment),resolveReferences(){throw new _chunkPMM3NYJ4cjs.e},write(n,a){for(let o of a.columns())r.columnType.write(n,o)},read(n){let a=new Array(r.columns);for(let o=0;o<r.columns;++o)a[o]=r.columnType.read(n);return r.makeFromColumnVectors(...a)},measure(n,a=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, a,this.byteAlignment),a.add(this.size)},seekProperty(){throw new Error("Method not implemented.")},resolve(){return r.label}};return Object.assign((...n)=>{let a=[];for(let o of n)typeof o=="number"?a.push(o):a.push(...o);for(let o=a.length;o<r.columns*r.rows;++o)a.push(0);return r.makeFromElements(...a)},t)}var U=class{constructor(...t){_chunkPMM3NYJ4cjs.a.call(void 0, this,"_columns",new Array(2));this._columns[0]=this.makeColumn(t[0],t[1]),this._columns[1]=this.makeColumn(t[2],t[3])}*columns(){yield this._columns[0],yield this._columns[1]}*elements(){yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[0]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},h=class extends U{makeColumn(t,e){return _chunkPMM3NYJ4cjs.g.call(void 0, t,e)}},M=class{constructor(...t){_chunkPMM3NYJ4cjs.a.call(void 0, this,"_columns",new Array(3));this._columns[0]=this.makeColumn(t[0],t[1],t[2]),this._columns[1]=this.makeColumn(t[3],t[4],t[5]),this._columns[2]=this.makeColumn(t[6],t[7],t[8])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2]}*elements(){yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[0]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[1]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},g=class extends M{makeColumn(t,e,n){return _chunkPMM3NYJ4cjs.j.call(void 0, t,e,n)}},P=class{constructor(...t){_chunkPMM3NYJ4cjs.a.call(void 0, this,"_columns",new Array(4));this._columns[0]=this.makeColumn(t[0],t[1],t[2],t[3]),this._columns[1]=this.makeColumn(t[4],t[5],t[6],t[7]),this._columns[2]=this.makeColumn(t[8],t[9],t[10],t[11]),this._columns[3]=this.makeColumn(t[12],t[13],t[14],t[15])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2],yield this._columns[3]}*elements(){yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[0]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[1]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[2]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[3])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}get 3(){return this._columns[3]}},f=class extends P{makeColumn(t,e,n,a){return _chunkPMM3NYJ4cjs.m.call(void 0, t,e,n,a)}},mt= exports.mat2x2f =R({label:"mat2x2f",columnType:_chunkPMM3NYJ4cjs.g,rows:2,columns:2,makeFromColumnVectors:(...r)=>new h(...r[0],...r[1]),makeFromElements:(...r)=>new h(...r)}),lt= exports.mat3x3f =R({label:"mat3x3f",columnType:_chunkPMM3NYJ4cjs.j,rows:3,columns:3,makeFromColumnVectors(...[r,t,e]){return new g(...r,...t,...e)},makeFromElements:(...r)=>new g(...r)}),pt= exports.mat4x4f =R({label:"mat4x4f",columnType:_chunkPMM3NYJ4cjs.m,rows:4,columns:4,makeFromColumnVectors(...[r,t,e,n]){return new f(...r,...t,...e,...n)},makeFromElements:(...r)=>new f(...r)});function ne(r){return{scope:"function",pointsTo:r}}function se(r){return new V(r)}var V=class extends _typedbinary.Schema{constructor(e){super();this.innerData=e;_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new _chunkPMM3NYJ4cjs.e}write(e,n){this.innerData.write(e,n)}read(e){return this.innerData.read(e)}measure(e,n=new _typedbinary.Measurer){return this.innerData.measure(e,n)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};exports.SimpleTgpuData = c; exports.TgpuArrayImpl = A; exports.align = G; exports.arrayOf = tt; exports.atomic = se; exports.bool = ge; exports.f32 = we; exports.i32 = xe; exports.mat2x2f = mt; exports.mat3x3f = lt; exports.mat4x4f = pt; exports.ptr = ne; exports.size = J; exports.struct = Ke; exports.u32 = fe; exports.vec2f = _chunkPMM3NYJ4cjs.g; exports.vec2i = _chunkPMM3NYJ4cjs.h; exports.vec2u = _chunkPMM3NYJ4cjs.i; exports.vec3f = _chunkPMM3NYJ4cjs.j; exports.vec3i = _chunkPMM3NYJ4cjs.k; exports.vec3u = _chunkPMM3NYJ4cjs.l; exports.vec4f = _chunkPMM3NYJ4cjs.m; exports.vec4i = _chunkPMM3NYJ4cjs.n; exports.vec4u = _chunkPMM3NYJ4cjs.o;
5
+ `),t.resolve(r)}};function pe(e){if(R(e))return`@align(${e.byteAlignment}) `;if(B(e))return`@size(${e.size}) `}function V(e){return Object.entries(e)}var b=(e,n)=>{let t=n-1,r=~t;return e&t?(e&r)+n:e};var Te=(e,n)=>new h(e,n);function ye(e){return e instanceof h}var h=class extends _typedbinary.Schema{constructor(t,r){super();_chunk7EYKOUWHcjs.a.call(void 0, this,"elementType");_chunk7EYKOUWHcjs.a.call(void 0, this,"elementCount");_chunk7EYKOUWHcjs.a.call(void 0, this,"byteAlignment");_chunk7EYKOUWHcjs.a.call(void 0, this,"size");_chunk7EYKOUWHcjs.a.call(void 0, this,"stride");_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!1);_chunk7EYKOUWHcjs.a.call(void 0, this,"isCustomAligned",!1);this.elementType=t,this.elementCount=r,this.byteAlignment=t.byteAlignment,this.stride=b(this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(t,r){i(t,this.byteAlignment);let s=t.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,r.length);o++)i(t,this.byteAlignment),this.elementType.write(t,r[o]);t.seekTo(s+this.stride*this.elementCount)}read(t){i(t,this.byteAlignment);let r=[];for(let s=0;s<this.elementCount;s++)i(t,this.byteAlignment),r.push(this.elementType.read(t));return r}measure(t,r=new _typedbinary.Measurer){return i(r,this.byteAlignment),r.add(this.stride*this.elementCount)}resolve(t){return t.resolve(`
6
+ array<${t.resolve(this.elementType)}, ${this.elementCount}>
7
+ `)}};function F(e){let n={__unwrapped:void 0,isLoose:!1,isCustomAligned:!1,label:e.label,byteAlignment:e.columnType.byteAlignment,size:b(e.columnType.size*e.columns,e.columnType.byteAlignment),resolveReferences(){throw new _chunk7EYKOUWHcjs.g},write(r,s){for(let o of s.columns())e.columnType.write(r,o)},read(r){let s=new Array(e.columns);for(let o=0;o<e.columns;++o)s[o]=e.columnType.read(r);return e.makeFromColumnVectors(...s)},measure(r,s=new _typedbinary.Measurer){return s.add(this.size)},seekProperty(){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...r)=>{let s=[];for(let o of r)typeof o=="number"?s.push(o):s.push(...o);for(let o=s.length;o<e.columns*e.rows;++o)s.push(0);return e.makeFromElements(...s)},n)}var O=class{constructor(...n){_chunk7EYKOUWHcjs.a.call(void 0, this,"_columns",new Array(2));this._columns[0]=this.makeColumn(n[0],n[1]),this._columns[1]=this.makeColumn(n[2],n[3])}*columns(){yield this._columns[0],yield this._columns[1]}*elements(){yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[0]),yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},x=class extends O{makeColumn(n,t){return _chunk7EYKOUWHcjs.h.call(void 0, n,t)}},L=class{constructor(...n){_chunk7EYKOUWHcjs.a.call(void 0, this,"_columns",new Array(3));this._columns[0]=this.makeColumn(n[0],n[1],n[2]),this._columns[1]=this.makeColumn(n[3],n[4],n[5]),this._columns[2]=this.makeColumn(n[6],n[7],n[8])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2]}*elements(){yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[0]),yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[1]),yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},w=class extends L{makeColumn(n,t,r){return _chunk7EYKOUWHcjs.k.call(void 0, n,t,r)}},$=class{constructor(...n){_chunk7EYKOUWHcjs.a.call(void 0, this,"_columns",new Array(4));this._columns[0]=this.makeColumn(n[0],n[1],n[2],n[3]),this._columns[1]=this.makeColumn(n[4],n[5],n[6],n[7]),this._columns[2]=this.makeColumn(n[8],n[9],n[10],n[11]),this._columns[3]=this.makeColumn(n[12],n[13],n[14],n[15])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2],yield this._columns[3]}*elements(){yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[0]),yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[1]),yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[2]),yield*_chunk7EYKOUWHcjs.b.call(void 0, this._columns[3])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}get 3(){return this._columns[3]}},A=class extends ${makeColumn(n,t,r,s){return _chunk7EYKOUWHcjs.n.call(void 0, n,t,r,s)}},Ct= exports.mat2x2f =F({label:"mat2x2f",columnType:_chunk7EYKOUWHcjs.h,rows:2,columns:2,makeFromColumnVectors:(...e)=>new x(...e[0],...e[1]),makeFromElements:(...e)=>new x(...e)}),Dt= exports.mat3x3f =F({label:"mat3x3f",columnType:_chunk7EYKOUWHcjs.k,rows:3,columns:3,makeFromColumnVectors(...[e,n,t]){return new w(...e,...n,...t)},makeFromElements:(...e)=>new w(...e)}),vt= exports.mat4x4f =F({label:"mat4x4f",columnType:_chunk7EYKOUWHcjs.n,rows:4,columns:4,makeFromColumnVectors(...[e,n,t,r]){return new A(...e,...n,...t,...r)},makeFromElements:(...e)=>new A(...e)});function ge(e){return{scope:"function",pointsTo:e}}function xe(e){return new S(e)}function we(e){return e instanceof S}var S=class extends _typedbinary.Schema{constructor(t){super();this.innerData=t;_chunk7EYKOUWHcjs.a.call(void 0, this,"size");_chunk7EYKOUWHcjs.a.call(void 0, this,"byteAlignment");_chunk7EYKOUWHcjs.a.call(void 0, this,"isLoose",!1);_chunk7EYKOUWHcjs.a.call(void 0, this,"isCustomAligned");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment,this.isCustomAligned=this.innerData.isCustomAligned}resolveReferences(){throw new _chunk7EYKOUWHcjs.g}write(t,r){this.innerData.write(t,r)}read(t){return this.innerData.read(t)}measure(t,r=new _typedbinary.Measurer){return this.innerData.measure(t,r)}resolve(t){return`atomic<${t.resolve(this.innerData)}>`}};exports.SimpleTgpuData = c; exports.align = re; exports.arrayOf = Te; exports.atomic = xe; exports.bool = Re; exports.f32 = Ve; exports.i32 = ze; exports.isAlignedSchema = R; exports.isArraySchema = ye; exports.isAtomicSchema = we; exports.isSizedSchema = B; exports.isStructSchema = me; exports.mat2x2f = Ct; exports.mat3x3f = Dt; exports.mat4x4f = vt; exports.ptr = ge; exports.size = oe; exports.struct = le; exports.u32 = Be; exports.vec2f = _chunk7EYKOUWHcjs.h; exports.vec2i = _chunk7EYKOUWHcjs.i; exports.vec2u = _chunk7EYKOUWHcjs.j; exports.vec3f = _chunk7EYKOUWHcjs.k; exports.vec3i = _chunk7EYKOUWHcjs.l; exports.vec3u = _chunk7EYKOUWHcjs.m; exports.vec4f = _chunk7EYKOUWHcjs.n; exports.vec4i = _chunk7EYKOUWHcjs.o; exports.vec4u = _chunk7EYKOUWHcjs.p;
8
8
  //# sourceMappingURL=index.cjs.map