typegpu 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
package/chunk-2FWG5LPQ.js DELETED
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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"]}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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"]}