typegpu 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 _chunkT3YCU4G4cjs = require('../chunk-T3YCU4G4.cjs');var _typedbinary = require('typed-binary'); var c = _interopRequireWildcard(_typedbinary);var d=class extends _typedbinary.Schema{constructor({schema:e,byteAlignment:t,code:i}){super();_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"expressionCode");_chunkT3YCU4G4cjs.b.call(void 0, this,"_innerSchema");this._innerSchema=e,this.byteAlignment=t,this.expressionCode=i,this.size=this.measure(_typedbinary.MaxValue).size}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,t)}read(e){return _chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),this._innerSchema.measure(e,t),t}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 d({schema:c.bool,byteAlignment:4,code:"bool"}),he= exports.u32 =new d({schema:c.u32,byteAlignment:4,code:"u32"}),fe= exports.i32 =new d({schema:c.i32,byteAlignment:4,code:"i32"}),xe= exports.f32 =new d({schema:c.f32,byteAlignment:4,code:"f32"});var s=class{constructor(){_chunkT3YCU4G4cjs.b.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 o={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")},F={[o.vertexIndex]:{symbol:o.vertexIndex,name:"vertex_index",stage:"vertex",direction:"input",identifier:new s().$name("vertex_index")},[o.instanceIndex]:{symbol:o.instanceIndex,name:"instance_index",stage:"vertex",direction:"input",identifier:new s().$name("instance_index")},[o.position]:{symbol:o.position,name:"position",stage:"vertex",direction:"output",identifier:new s().$name("position")},[o.clipDistances]:{symbol:o.clipDistances,name:"clip_distances",stage:"vertex",direction:"output",identifier:new s().$name("clip_distances")},[o.frontFacing]:{symbol:o.frontFacing,name:"front_facing",stage:"fragment",direction:"input",identifier:new s().$name("front_facing")},[o.fragDepth]:{symbol:o.fragDepth,name:"frag_depth",stage:"fragment",direction:"output",identifier:new s().$name("frag_depth")},[o.sampleIndex]:{symbol:o.sampleIndex,name:"sample_index",stage:"fragment",direction:"input",identifier:new s().$name("sample_index")},[o.sampleMask]:{symbol:o.sampleMask,name:"sample_mask",stage:"fragment",direction:"input",identifier:new s().$name("sample_mask")},[o.fragment]:{symbol:o.fragment,name:"fragment",stage:"fragment",direction:"input",identifier:new s().$name("fragment")},[o.localInvocationId]:{symbol:o.localInvocationId,name:"local_invocation_id",stage:"compute",direction:"input",identifier:new s().$name("local_invocation_id")},[o.localInvocationIndex]:{symbol:o.localInvocationIndex,name:"local_invocation_index",stage:"compute",direction:"input",identifier:new s().$name("local_invocation_index")},[o.globalInvocationId]:{symbol:o.globalInvocationId,name:"global_invocation_id",stage:"compute",direction:"input",identifier:new s().$name("global_invocation_id")},[o.workgroupId]:{symbol:o.workgroupId,name:"workgroup_id",stage:"compute",direction:"input",identifier:new s().$name("workgroup_id")},[o.numWorkgroups]:{symbol:o.numWorkgroups,name:"num_workgroups",stage:"compute",direction:"input",identifier:new s().$name("num_workgroups")}};function z(r){let n=F[r];if(!n)throw new Error("Symbol is not a member of builtin");return n}function I(r,...n){let e=r.flatMap((t,i)=>{let u=n[i];return u===void 0?[t]:Array.isArray(u)?[t,...u]:[t,u]});return new S(e)}var S=class{constructor(n){this.segments=n;_chunkT3YCU4G4cjs.b.call(void 0, this,"_label")}get label(){return this._label}$name(n){return this._label=n,this}resolve(n){let e="";for(let t of this.segments)if(_chunkT3YCU4G4cjs.d.call(void 0, t))e+=n.resolve(t);else if(typeof t=="function"){let i=t(u=>n.unwrap(u));e+=n.resolve(i)}else if(typeof t=="symbol"){let i=z(t);n.addBuiltin(i),e+=n.resolve(i.identifier)}else e+=String(t);return e}with(n,e){return new C(this,[n,e])}toString(){var n;return`code:${(n=this._label)!=null?n:"<unnamed>"}`}},C=class r{constructor(n,e){this._innerFn=n;this._slotValuePair=e}get label(){return this._innerFn.label}with(n,e){return new r(this,[n,e])}resolve(n){return n.resolve(this._innerFn,[this._slotValuePair])}toString(){var t,i;let[n,e]=this._slotValuePair;return`code:${(t=this.label)!=null?t:"<unnamed>"}[${(i=n.label)!=null?i:"<unnamed>"}=${e}]`}};function j(r,n){return new y(n,r)}var y=class extends _typedbinary.Schema{constructor(e,t){super();this.data=e;this.byteAlignment=t;_chunkT3YCU4G4cjs.b.call(void 0, this,"size");if(this.size=this.data.size,t<=0)throw new Error(`Custom data alignment must be a positive number, got: ${t}.`);if(Math.log2(t)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${t}.`);if(t%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${t}, expected multiple of: ${this.data.byteAlignment}.`)}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this.data.write(e,t)}read(e){return _chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this.data.read(e)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),this.data.measure(e,t)}resolve(e){return this.data.resolve(e)}};function H(r,n){return new T(n,r)}var T=class extends _typedbinary.Schema{constructor(e,t){super();this.data=e;this.size=t;_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");if(this.byteAlignment=this.data.byteAlignment,t<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${t}, expected at least: ${this.data.size}.`);if(t<=0)throw new Error(`Custom data size must be a positive number. Got: ${t}.`)}write(e,t){this.data.write(e,t)}read(e){return this.data.read(e)}measure(e,t=new _typedbinary.Measurer){return t.add(this.size)}resolve(e){return this.data.resolve(e)}};var Ge=r=>new D(r),D=class extends _typedbinary.Schema{constructor(e){super();this._properties=e;_chunkT3YCU4G4cjs.b.call(void 0, this,"_label");_chunkT3YCU4G4cjs.b.call(void 0, this,"_innerSchema");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"size");this._innerSchema=_typedbinary.object.call(void 0, e),this.byteAlignment=Object.values(e).map(t=>t.byteAlignment).reduce((t,i)=>t>i?t:i),this.size=this.measure(_typedbinary.MaxValue).size}$name(e){return this._label=e,this}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,t)}read(e){return _chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),this._innerSchema.measure(e,t),t}resolve(e){let t=new s().$name(this._label);return e.addDeclaration(I`
2
- struct ${t} {
3
- ${Object.entries(this._properties).map(([i,u])=>{var R;return I`${(R=X(u))!=null?R:""}${i}: ${u},\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(t)}};function X(r){if(r instanceof y)return`@align(${r.byteAlignment}) `;if(r instanceof T)return`@size(${r.size}) `}var A=class extends _typedbinary.Schema{constructor(e,t){super();_chunkT3YCU4G4cjs.b.call(void 0, this,"elementType");_chunkT3YCU4G4cjs.b.call(void 0, this,"elementCount");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"stride");this.elementType=e,this.elementCount=t,this.byteAlignment=e.byteAlignment,this.stride=_chunkT3YCU4G4cjs.f.call(void 0, this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment);let i=e.currentByteOffset;for(let u=0;u<Math.min(this.elementCount,t.length);u++)this.elementType.write(e,t[u]);e.seekTo(i+this.stride*this.elementCount)}read(e){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment);let t=[];for(let i=0;i<this.elementCount;i++)t.push(this.elementType.read(e));return t}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),t.add(this.stride*this.elementCount)}resolve(e){return e.resolve(`
6
- array<${e.resolve(this.elementType)}, ${this.elementCount}>
7
- `)}},Qe= exports.arrayOf =(r,n)=>new A(r,n);var b=class extends _chunkT3YCU4G4cjs.h{constructor(e){super();_chunkT3YCU4G4cjs.b.call(void 0, this,"__unwrapped");_chunkT3YCU4G4cjs.b.call(void 0, this,"_columnType");_chunkT3YCU4G4cjs.b.call(void 0, this,"_rows");_chunkT3YCU4G4cjs.b.call(void 0, this,"_columns");_chunkT3YCU4G4cjs.b.call(void 0, this,"_makeFromColumnVectors");_chunkT3YCU4G4cjs.b.call(void 0, this,"_makeFromElements");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"label");this._columnType=e.columnType,this._rows=e.rows,this._columns=e.columns,this.label=e.label,this._makeFromColumnVectors=e.makeFromColumnVectors,this._makeFromElements=e.makeFromElements,this.byteAlignment=this._columnType.byteAlignment,this.size=_chunkT3YCU4G4cjs.f.call(void 0, this._columnType.size*this._columns,this.byteAlignment)}_call(...e){let t=[];for(let i of e)typeof i=="number"?t.push(i):t.push(...i);for(let i=t.length;i<this._columns*this._rows;++i)t.push(0);return this._makeFromElements(...t)}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){for(let i of t.columns())this._columnType.write(e,i)}read(e){let t=new Array(this._columns);for(let i=0;i<this._columns;++i)t[i]=this._columnType.read(e);return this._makeFromColumnVectors(...t)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),t.add(this.size)}seekProperty(){throw new Error("Method not implemented.")}resolve(){return this.label}},U=class{constructor(...n){_chunkT3YCU4G4cjs.b.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*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[0]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},h=class extends U{makeColumn(n,e){return _chunkT3YCU4G4cjs.j.call(void 0, n,e)}},P=class{constructor(...n){_chunkT3YCU4G4cjs.b.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*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[0]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[1]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},f=class extends P{makeColumn(n,e,t){return _chunkT3YCU4G4cjs.m.call(void 0, n,e,t)}},M=class{constructor(...n){_chunkT3YCU4G4cjs.b.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*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[0]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[1]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[2]),yield*_chunkT3YCU4G4cjs.c.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]}},x=class extends M{makeColumn(n,e,t,i){return _chunkT3YCU4G4cjs.p.call(void 0, n,e,t,i)}},it= exports.mat2x2f =new b({label:"mat2x2f",columnType:_chunkT3YCU4G4cjs.j,rows:2,columns:2,makeFromColumnVectors:(...r)=>new h(...r[0],...r[1]),makeFromElements:(...r)=>new h(...r)}),ot= exports.mat3x3f =new b({label:"mat3x3f",columnType:_chunkT3YCU4G4cjs.m,rows:3,columns:3,makeFromColumnVectors(...[r,n,e]){return new f(...r,...n,...e)},makeFromElements:(...r)=>new f(...r)}),st= exports.mat4x4f =new b({label:"mat4x4f",columnType:_chunkT3YCU4G4cjs.p,rows:4,columns:4,makeFromColumnVectors(...[r,n,e,t]){return new x(...r,...n,...e,...t)},makeFromElements:(...r)=>new x(...r)});function te(r){return{scope:"function",pointsTo:r}}function ae(r){return new k(r)}var k=class extends _typedbinary.Schema{constructor(e){super();this.innerData=e;_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){this.innerData.write(e,t)}read(e){return this.innerData.read(e)}measure(e,t=new _typedbinary.Measurer){return this.innerData.measure(e,t)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};exports.SimpleTgpuData = d; exports.TgpuArrayImpl = A; exports.align = j; exports.arrayOf = Qe; exports.atomic = ae; exports.bool = ge; exports.f32 = xe; exports.i32 = fe; exports.mat2x2f = it; exports.mat3x3f = ot; exports.mat4x4f = st; exports.ptr = te; exports.size = H; exports.struct = Ge; exports.u32 = he; exports.vec2f = _chunkT3YCU4G4cjs.j; exports.vec2i = _chunkT3YCU4G4cjs.k; exports.vec2u = _chunkT3YCU4G4cjs.l; exports.vec3f = _chunkT3YCU4G4cjs.m; exports.vec3i = _chunkT3YCU4G4cjs.n; exports.vec3u = _chunkT3YCU4G4cjs.o; exports.vec4f = _chunkT3YCU4G4cjs.p; exports.vec4i = _chunkT3YCU4G4cjs.q; exports.vec4u = _chunkT3YCU4G4cjs.r;
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