typegpu 0.1.2 → 0.2.0-alpha.0

Sign up to get free protection for your applications and to get access to all the features.
package/data/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/data/std140.ts","../../src/data/numeric.ts","../../src/data/struct.ts","../../src/builtin.ts","../../src/tgpuIdentifier.ts","../../src/builtinIdentifiers.ts","../../src/tgpuCode.ts","../../src/data/align.ts","../../src/data/size.ts","../../src/data/array.ts","../../src/mathUtils.ts","../../src/data/matrix.ts","../../src/data/pointer.ts","../../src/data/atomic.ts"],"sourcesContent":["/*\n * Typed-binary types that adhere to the `std140` layout rules.\n */\n\nimport {\n type AnySchema,\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, TgpuData } from '../types';\nimport alignIO from './alignIO';\n\nexport class SimpleTgpuData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements TgpuData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n public readonly expressionCode: string;\n\n private readonly _innerSchema: TSchema;\n\n /**\n * byteAlignment has to be a power of 2\n */\n constructor({\n schema,\n byteAlignment,\n code,\n }: {\n schema: TSchema;\n byteAlignment: number;\n code: string;\n }) {\n super();\n\n this._innerSchema = schema;\n this.byteAlignment = byteAlignment;\n this.expressionCode = code;\n this.size = this.measure(MaxValue).size;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n alignIO(output, this.byteAlignment);\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n alignIO(input, this.byteAlignment);\n return this._innerSchema.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n\n this._innerSchema.measure(value, measurer);\n\n return measurer;\n }\n\n getUnderlyingTypeString(): string {\n if (typeof this.expressionCode === 'string') {\n return this.expressionCode;\n }\n if ('elementSchema' in this._innerSchema) {\n const underlyingType = this._innerSchema\n .elementSchema as SimpleTgpuData<AnySchema>;\n return underlyingType.getUnderlyingTypeString();\n }\n throw new Error('Unexpected type used as vertex buffer element');\n }\n\n getUnderlyingType(): SimpleTgpuData<AnySchema> {\n if ('elementSchema' in this._innerSchema) {\n const underlyingType = this._innerSchema\n .elementSchema as SimpleTgpuData<AnySchema>;\n return underlyingType.getUnderlyingType();\n }\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.expressionCode;\n }\n}\n","import * as TB from 'typed-binary';\nimport type { TgpuData } from '../types';\nimport { SimpleTgpuData } from './std140';\n\nexport type Bool = TgpuData<boolean>;\nexport const bool: Bool = new SimpleTgpuData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\nexport type U32 = TgpuData<number>;\nexport const u32: U32 = new SimpleTgpuData({\n schema: TB.u32,\n byteAlignment: 4,\n code: 'u32',\n});\nexport type I32 = TgpuData<number>;\nexport const i32: I32 = new SimpleTgpuData({\n schema: TB.i32,\n byteAlignment: 4,\n code: 'i32',\n});\nexport type F32 = TgpuData<number>;\nexport const f32: F32 = new SimpleTgpuData({\n schema: TB.f32,\n byteAlignment: 4,\n code: 'f32',\n});\n","import {\n type IMeasurer,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type UnwrapRecord,\n object,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuNamable } from '../namable';\nimport { code } from '../tgpuCode';\nimport { identifier } from '../tgpuIdentifier';\nimport type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\nimport { TgpuAlignedImpl } from './align';\nimport alignIO from './alignIO';\nimport { TgpuSizedImpl } from './size';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuStruct<TProps extends Record<string, AnyTgpuData>>\n extends ISchema<UnwrapRecord<TProps>>,\n TgpuData<UnwrapRecord<TProps>>,\n TgpuNamable {}\n\nexport const struct = <TProps extends Record<string, AnyTgpuData>>(\n properties: TProps,\n): TgpuStruct<TProps> => new TgpuStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuStructImpl<TProps extends Record<string, AnyTgpuData>>\n extends Schema<UnwrapRecord<TProps>>\n implements TgpuData<UnwrapRecord<TProps>>\n{\n private _label: string | undefined;\n private _innerSchema: ISchema<UnwrapRecord<TProps>>;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(private readonly _properties: TProps) {\n super();\n\n this._innerSchema = object(_properties);\n\n this.byteAlignment = Object.values(_properties)\n .map((prop) => prop.byteAlignment)\n .reduce((a, b) => (a > b ? a : b));\n\n this.size = this.measure(MaxValue).size;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<UnwrapRecord<TProps>>): void {\n alignIO(output, this.byteAlignment);\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n alignIO(input, this.byteAlignment);\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const ident = identifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${ident} {\n ${Object.entries(this._properties).map(([key, field]) => code`${getAttribute(field) ?? ''}${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(ident);\n }\n}\n\nfunction getAttribute(field: AnyTgpuData): string | undefined {\n if (field instanceof TgpuAlignedImpl) {\n return `@align(${field.byteAlignment}) `;\n }\n if (field instanceof TgpuSizedImpl) {\n return `@size(${field.size}) `;\n }\n}\n","export const builtin = {\n vertexIndex: Symbol('builtin_vertexIndex'),\n instanceIndex: Symbol('builtin_instanceIndex'),\n position: Symbol('builtin_position'),\n clipDistances: Symbol('builtin_clipDistances'),\n frontFacing: Symbol('builtin_frontFacing'),\n fragDepth: Symbol('builtin_fragDepth'),\n sampleIndex: Symbol('builtin_sampleIndex'),\n sampleMask: Symbol('builtin_sampleMask'),\n fragment: Symbol('builtin_fragment'),\n localInvocationId: Symbol('builtin_localInvocationId'),\n localInvocationIndex: Symbol('builtin_localInvocationIndex'),\n globalInvocationId: Symbol('builtin_globalInvocationId'),\n workgroupId: Symbol('builtin_workgroupId'),\n numWorkgroups: Symbol('builtin_numWorkgroups'),\n} as const;\n\nconst builtins = Object.values(builtin);\n\nexport function getUsedBuiltinsNamed(\n o: Record<symbol, string>,\n): { name: string; builtin: symbol }[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n if (!builtins.includes(s)) {\n throw new Error('Symbol is not a member of `builtin`');\n }\n const name = o[s];\n if (!name) {\n throw new Error('Name is not provided');\n }\n return { name: name, builtin: s };\n });\n return res;\n}\n\nexport function getUsedBuiltins(o: Record<symbol, string>): symbol[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n if (!builtins.includes(s)) {\n throw new Error('Symbol is not a member of `builtin`');\n }\n return s;\n });\n\n return res;\n}\n","import type { TgpuNamable } from './namable';\nimport type { ResolutionCtx, TgpuResolvable } from './types';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Helpful when creating new Resolvable types. For internal use.\n */\nexport function identifier() {\n return new TgpuIdentifierImpl();\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuIdentifierImpl implements TgpuResolvable, TgpuNamable {\n label?: string | undefined;\n\n $name(label: string | undefined) {\n this.label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.nameFor(this);\n }\n\n toString(): string {\n return `id:${this.label ?? '<unnamed>'}`;\n }\n}\n","import { builtin } from './builtin';\nimport { identifier } from './tgpuIdentifier';\nimport type { TgpuIdentifier } from './types';\n\nconst builtinToName = {\n [builtin.vertexIndex]: 'vertex_index',\n [builtin.instanceIndex]: 'instance_index',\n [builtin.position]: 'position',\n [builtin.clipDistances]: 'clip_distances',\n [builtin.frontFacing]: 'front_facing',\n [builtin.fragDepth]: 'frag_depth',\n [builtin.sampleIndex]: 'sample_index',\n [builtin.sampleMask]: 'sample_mask',\n [builtin.fragment]: 'fragment',\n [builtin.localInvocationId]: 'local_invocation_id',\n [builtin.localInvocationIndex]: 'local_invocation_index',\n [builtin.globalInvocationId]: 'global_invocation_id',\n [builtin.workgroupId]: 'workgroup_id',\n [builtin.numWorkgroups]: 'num_workgroups',\n};\n\nconst identifierMap = new Map<symbol, TgpuIdentifier>();\n\nexport function nameForBuiltin(key: symbol): string {\n const name = builtinToName[key];\n if (!name) {\n throw new Error(`The symbol ${String(key)} in not a valid 'builtin'`);\n }\n\n return name;\n}\n\nexport function idForBuiltin(key: symbol) {\n let id = identifierMap.get(key);\n\n if (id === undefined) {\n id = identifier().$name(builtinToName[key]);\n identifierMap.set(key, id);\n }\n\n return id;\n}\n","import { idForBuiltin } from './builtinIdentifiers';\nimport {\n type BoundTgpuCode,\n type Eventual,\n type InlineResolve,\n type ResolutionCtx,\n type SlotValuePair,\n type TgpuCode,\n type TgpuSlot,\n type Wgsl,\n isResolvable,\n} from './types';\n\n// ----------\n// Public API\n// ----------\n\nexport function code(\n strings: TemplateStringsArray,\n ...params: (Wgsl | Wgsl[] | InlineResolve)[]\n): TgpuCode {\n const segments: (Wgsl | InlineResolve)[] = strings.flatMap((string, idx) => {\n const param = params[idx];\n if (param === undefined) {\n return [string];\n }\n\n return Array.isArray(param) ? [string, ...param] : [string, param];\n });\n\n return new TgpuCodeImpl(segments);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuCodeImpl implements TgpuCode {\n private _label: string | undefined;\n\n constructor(public readonly segments: (Wgsl | InlineResolve)[]) {}\n\n get label() {\n return this._label;\n }\n\n $name(label?: string | undefined) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx) {\n let code = '';\n\n for (const s of this.segments) {\n if (isResolvable(s)) {\n code += ctx.resolve(s);\n } else if (typeof s === 'function') {\n const result = s((eventual) => ctx.unwrap(eventual));\n code += ctx.resolve(result);\n } else if (typeof s === 'symbol') {\n ctx.addBuiltin(s);\n code += ctx.resolve(idForBuiltin(s));\n } else {\n code += String(s);\n }\n }\n\n return code;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n toString(): string {\n return `code:${this._label ?? '<unnamed>'}`;\n }\n}\n\nclass BoundTgpuCodeImpl<T> implements BoundTgpuCode {\n constructor(\n private readonly _innerFn: BoundTgpuCode,\n private readonly _slotValuePair: SlotValuePair<T>,\n ) {}\n\n get label() {\n return this._innerFn.label;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._innerFn, [this._slotValuePair]);\n }\n\n toString(): string {\n const [slot, value] = this._slotValuePair;\n return `code:${this.label ?? '<unnamed>'}[${slot.label ?? '<unnamed>'}=${value}]`;\n }\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\nimport alignIO from './alignIO';\n\nexport function align<TAlign extends number, TData extends AnyTgpuData>(\n byteAlignment: TAlign,\n data: TData,\n): TgpuAligned<TAlign, TData> {\n return new TgpuAlignedImpl(data, byteAlignment);\n}\n\nexport interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData>\n extends TgpuData<Unwrap<TData>> {}\n\nexport class TgpuAlignedImpl<TAlign extends number, TData extends AnyTgpuData>\n extends Schema<Unwrap<TData>>\n implements TgpuAligned<TAlign, TData>\n{\n public readonly size: number;\n\n constructor(\n private data: AnyTgpuData,\n public readonly byteAlignment: number,\n ) {\n super();\n\n this.size = this.data.size;\n\n if (byteAlignment <= 0) {\n throw new Error(\n `Custom data alignment must be a positive number, got: ${byteAlignment}.`,\n );\n }\n\n if (Math.log2(byteAlignment) % 1 !== 0) {\n throw new Error(\n `Alignment has to be a power of 2, got: ${byteAlignment}.`,\n );\n }\n\n if (byteAlignment % this.data.byteAlignment !== 0) {\n throw new Error(\n `Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${byteAlignment}, expected multiple of: ${this.data.byteAlignment}.`,\n );\n }\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TData>): void {\n alignIO(output, this.byteAlignment);\n this.data.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TData> {\n alignIO(input, this.byteAlignment);\n return this.data.read(input) as ParseUnwrapped<TData>;\n }\n\n measure(\n value: MaxValue | ParseUnwrapped<TData>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return this.data.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.data.resolve(ctx);\n }\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\n\nexport function size<TSize extends number, TData extends AnyTgpuData>(\n size: TSize,\n data: TData,\n): TgpuSized<TSize, TData> {\n return new TgpuSizedImpl(data, size);\n}\n\nexport interface TgpuSized<TSize extends number, TData extends AnyTgpuData>\n extends TgpuData<Unwrap<TData>> {}\n\nexport class TgpuSizedImpl<TSize extends number, TData extends AnyTgpuData>\n extends Schema<Unwrap<TData>>\n implements TgpuSized<TSize, TData>\n{\n public readonly byteAlignment: number;\n\n constructor(\n private data: AnyTgpuData,\n public readonly size: number,\n ) {\n super();\n\n this.byteAlignment = this.data.byteAlignment;\n\n if (size < this.data.size) {\n throw new Error(\n `Custom data size cannot be smaller then the standard data size. Got: ${size}, expected at least: ${this.data.size}.`,\n );\n }\n\n if (size <= 0) {\n throw new Error(\n `Custom data size must be a positive number. Got: ${size}.`,\n );\n }\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TData>): void {\n this.data.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TData> {\n return this.data.read(input) as ParseUnwrapped<TData>;\n }\n\n measure(\n value: MaxValue | ParseUnwrapped<TData>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return measurer.add(this.size);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.data.resolve(ctx);\n }\n}\n","import type * as TB from 'typed-binary';\nimport {\n type IMeasurer,\n type MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { roundUp } from '../mathUtils';\nimport type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\nimport alignIO from './alignIO';\n\nexport interface TgpuArray<TElement extends AnyTgpuData>\n extends TgpuData<Unwrap<TElement>[]> {\n readonly elementType: TElement;\n readonly elementCount: number;\n}\n\nexport class TgpuArrayImpl<TElement extends AnyTgpuData>\n extends Schema<Unwrap<TElement>[]>\n implements TgpuArray<TElement>\n{\n readonly elementType: TElement;\n readonly elementCount: number;\n readonly byteAlignment: number;\n readonly size: number;\n readonly stride: number;\n constructor(elementType: TElement, count: number) {\n super();\n this.elementType = elementType;\n this.elementCount = count;\n this.byteAlignment = elementType.byteAlignment;\n this.stride = roundUp(\n this.elementType.size,\n this.elementType.byteAlignment,\n );\n this.size = this.stride * this.elementCount;\n }\n\n write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]) {\n alignIO(output, this.byteAlignment);\n const beginning = output.currentByteOffset;\n for (let i = 0; i < Math.min(this.elementCount, value.length); i++) {\n this.elementType.write(output, value[i]);\n }\n output.seekTo(beginning + this.stride * this.elementCount);\n }\n\n read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[] {\n alignIO(input, this.byteAlignment);\n const elements: Parsed<Unwrap<TElement>>[] = [];\n for (let i = 0; i < this.elementCount; i++) {\n elements.push(this.elementType.read(input) as Parsed<Unwrap<TElement>>);\n }\n return elements;\n }\n\n measure(\n value: MaxValue | Parsed<Unwrap<TElement>>[],\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.stride * this.elementCount);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(`\n array<${ctx.resolve(this.elementType)}, ${this.elementCount}>\n `);\n }\n}\n\nexport const arrayOf = <TElement extends AnyTgpuData>(\n elementType: TElement,\n count: number,\n): TgpuArray<TElement> => new TgpuArrayImpl(elementType, count);\n","/**\n * @param value\n * @param modulo has to be power of 2\n */\nexport const roundUp = (value: number, modulo: number) => {\n const bitMask = modulo - 1;\n const invBitMask = ~bitMask;\n return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;\n};\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport { roundUp } from '../mathUtils';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\nimport { vec2f, vec3f, vec4f, type vecBase } from './vector';\n\n// --------------\n// Implementation\n// --------------\n\ninterface MatSchemaOptions<ValueType, ColumnType extends vecBase> {\n label: string;\n columnType: TgpuData<ColumnType>;\n rows: number;\n columns: number;\n makeFromColumnVectors(...columns: ColumnType[]): ValueType;\n makeFromElements(...elements: number[]): ValueType;\n}\n\ntype MatSchema<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vecBase,\n> = TgpuData<ValueType> & ((...args: (number | ColumnType)[]) => ValueType);\n\nfunction createMatSchema<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vecBase,\n>(\n options: MatSchemaOptions<ValueType, ColumnType>,\n): MatSchema<ValueType, ColumnType> {\n const MatSchema: TgpuData<ValueType> = {\n // Type-token, not available at runtime.\n __unwrapped: undefined as unknown as ValueType,\n\n label: options.label,\n byteAlignment: options.columnType.byteAlignment,\n size: roundUp(\n options.columnType.size * options.columns,\n options.columnType.byteAlignment,\n ),\n\n resolveReferences() {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n for (const col of value.columns()) {\n options.columnType.write(output, col as Parsed<ColumnType>);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n const columns = new Array(options.columns) as ColumnType[];\n\n for (let c = 0; c < options.columns; ++c) {\n columns[c] = options.columnType.read(input) as ColumnType;\n }\n\n return options.makeFromColumnVectors(...columns) as Parsed<ValueType>;\n },\n\n measure(_value: MaxValue, measurer: IMeasurer = new Measurer()): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\n },\n\n seekProperty() {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return options.label;\n },\n };\n\n const construct = (...args: (number | ColumnType)[]): ValueType => {\n const elements: number[] = [];\n\n for (const arg of args) {\n if (typeof arg === 'number') {\n elements.push(arg);\n } else {\n elements.push(...arg);\n }\n }\n\n // Fill the rest with zeros\n for (let i = elements.length; i < options.columns * options.rows; ++i) {\n elements.push(0);\n }\n\n return options.makeFromElements(...elements);\n };\n\n return Object.assign(construct, MatSchema);\n}\n\ninterface matBase<TColumn> {\n columns(): Iterable<TColumn>;\n elements(): Iterable<number>;\n}\n\nabstract class mat2x2Impl<TColumn extends vecBase> implements mat2x2<TColumn> {\n private _columns = new Array(2) as [TColumn, TColumn];\n\n constructor(...elements: number[]) {\n this._columns[0] = this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n );\n this._columns[1] = this.makeColumn(\n elements[2] as number,\n elements[3] as number,\n );\n }\n\n abstract makeColumn(e0: number, e1: number): TColumn;\n\n *columns() {\n yield this._columns[0];\n yield this._columns[1];\n }\n\n *elements() {\n yield* this._columns[0];\n yield* this._columns[1];\n }\n\n get [0]() {\n return this._columns[0];\n }\n\n get [1]() {\n return this._columns[1];\n }\n\n [idx: number]: TColumn | undefined;\n}\n\nclass mat2x2fImpl extends mat2x2Impl<vec2f> implements mat2x2f {\n makeColumn(e0: number, e1: number): vec2f {\n return vec2f(e0, e1);\n }\n}\n\nabstract class mat3x3Impl<TColumn extends vecBase> implements mat3x3<TColumn> {\n private _columns = new Array(3) as [TColumn, TColumn, TColumn];\n\n constructor(...elements: number[]) {\n this._columns[0] = this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n );\n this._columns[1] = this.makeColumn(\n elements[3] as number,\n elements[4] as number,\n elements[5] as number,\n );\n this._columns[2] = this.makeColumn(\n elements[6] as number,\n elements[7] as number,\n elements[8] as number,\n );\n }\n\n abstract makeColumn(x: number, y: number, z: number): TColumn;\n\n *columns() {\n yield this._columns[0];\n yield this._columns[1];\n yield this._columns[2];\n }\n\n *elements() {\n yield* this._columns[0];\n yield* this._columns[1];\n yield* this._columns[2];\n }\n\n get [0]() {\n return this._columns[0];\n }\n\n get [1]() {\n return this._columns[1];\n }\n\n get [2]() {\n return this._columns[2];\n }\n\n [idx: number]: TColumn | undefined;\n}\n\nclass mat3x3fImpl extends mat3x3Impl<vec3f> implements mat3x3f {\n makeColumn(x: number, y: number, z: number): vec3f {\n return vec3f(x, y, z);\n }\n}\n\nabstract class mat4x4Impl<TColumn extends vecBase> implements mat4x4<TColumn> {\n private readonly _columns = new Array(4) as [\n TColumn,\n TColumn,\n TColumn,\n TColumn,\n ];\n\n constructor(...elements: number[]) {\n this._columns[0] = this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n elements[3] as number,\n );\n this._columns[1] = this.makeColumn(\n elements[4] as number,\n elements[5] as number,\n elements[6] as number,\n elements[7] as number,\n );\n this._columns[2] = this.makeColumn(\n elements[8] as number,\n elements[9] as number,\n elements[10] as number,\n elements[11] as number,\n );\n this._columns[3] = this.makeColumn(\n elements[12] as number,\n elements[13] as number,\n elements[14] as number,\n elements[15] as number,\n );\n }\n\n abstract makeColumn(x: number, y: number, z: number, w: number): TColumn;\n\n *columns() {\n yield this._columns[0];\n yield this._columns[1];\n yield this._columns[2];\n yield this._columns[3];\n }\n\n *elements() {\n yield* this._columns[0];\n yield* this._columns[1];\n yield* this._columns[2];\n yield* this._columns[3];\n }\n\n get [0]() {\n return this._columns[0];\n }\n\n get [1]() {\n return this._columns[1];\n }\n\n get [2]() {\n return this._columns[2];\n }\n\n get [3]() {\n return this._columns[3];\n }\n\n [idx: number]: TColumn | undefined;\n}\n\nclass mat4x4fImpl extends mat4x4Impl<vec4f> implements mat4x4f {\n makeColumn(x: number, y: number, z: number, w: number): vec4f {\n return vec4f(x, y, z, w);\n }\n}\n\n// ----------\n// Public API\n// ----------\n\nexport interface mat2x2<TColumn> extends matBase<TColumn> {\n [0]: TColumn;\n [1]: TColumn;\n [idx: number]: TColumn | undefined;\n}\n\nexport interface mat2x2f extends mat2x2<vec2f> {}\n\nexport type Mat2x2f = TgpuData<mat2x2f> &\n ((...elements: number[]) => mat2x2f) &\n ((...columns: vec2f[]) => mat2x2f) &\n (() => mat2x2f);\n\nexport const mat2x2f = createMatSchema({\n label: 'mat2x2f',\n columnType: vec2f,\n rows: 2,\n columns: 2,\n makeFromColumnVectors: (...columns: [vec2f, vec2f]) =>\n new mat2x2fImpl(...columns[0], ...columns[1]),\n makeFromElements: (...elements: number[]) => new mat2x2fImpl(...elements),\n}) as Mat2x2f;\n\nexport interface mat3x3<TColumn> extends matBase<TColumn> {\n [0]: TColumn;\n [1]: TColumn;\n [2]: TColumn;\n [idx: number]: TColumn | undefined;\n}\n\nexport interface mat3x3f extends mat3x3<vec3f> {}\n\nexport type Mat3x3f = TgpuData<mat3x3f> &\n ((...elements: number[]) => mat3x3f) &\n ((...columns: vec3f[]) => mat3x3f) &\n (() => mat3x3f);\n\nexport const mat3x3f = createMatSchema({\n label: 'mat3x3f',\n columnType: vec3f,\n rows: 3,\n columns: 3,\n makeFromColumnVectors(...[v0, v1, v2]: [vec3f, vec3f, vec3f]) {\n return new mat3x3fImpl(...v0, ...v1, ...v2);\n },\n makeFromElements: (...elements: number[]) => new mat3x3fImpl(...elements),\n}) as Mat3x3f;\n\nexport interface mat4x4<TColumn> extends matBase<TColumn> {\n [0]: TColumn;\n [1]: TColumn;\n [2]: TColumn;\n [3]: TColumn;\n [idx: number]: TColumn | undefined;\n}\n\nexport interface mat4x4f extends mat4x4<vec4f> {}\n\nexport type Mat4x4f = TgpuData<mat4x4f> &\n ((...elements: number[]) => mat4x4f) &\n ((...columns: vec4f[]) => mat4x4f) &\n (() => mat4x4f);\n\nexport const mat4x4f = createMatSchema({\n label: 'mat4x4f',\n columnType: vec4f,\n rows: 4,\n columns: 4,\n makeFromColumnVectors(...[v0, v1, v2, v3]: [vec4f, vec4f, vec4f, vec4f]) {\n return new mat4x4fImpl(...v0, ...v1, ...v2, ...v3);\n },\n makeFromElements: (...elements: number[]) => new mat4x4fImpl(...elements),\n}) as Mat4x4f;\n","import type { AnyTgpuData, TgpuPointer } from '../types';\n\nexport function ptr<TDataType extends AnyTgpuData>(\n pointsTo: TDataType,\n): TgpuPointer<'function', TDataType> {\n return {\n scope: 'function',\n pointsTo,\n };\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, TgpuData } from '../types';\nimport type { I32, U32 } from './numeric';\n\nexport function atomic<TSchema extends U32 | I32>(\n data: TSchema,\n): Atomic<TSchema> {\n return new AtomicImpl(data);\n}\n\nexport interface Atomic<TSchema extends U32 | I32>\n extends TgpuData<Unwrap<TSchema>> {}\n\nclass AtomicImpl<TSchema extends U32 | I32>\n extends Schema<Unwrap<TSchema>>\n implements Atomic<TSchema>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this.innerData.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this.innerData.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return this.innerData.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return `atomic<${ctx.resolve(this.innerData)}>`;\n }\n}\n"],"mappings":"0IAIA,OAKE,YAAAA,EACA,YAAAC,EAEA,UAAAC,MAEK,eAKA,IAAMC,EAAN,cACGC,CAEV,CAUE,YAAY,CACV,OAAAC,EACA,cAAAC,EACA,KAAAC,CACF,EAIG,CACD,MAAM,EAlBRC,EAAA,KAAgB,QAChBA,EAAA,KAAgB,iBAChBA,EAAA,KAAgB,kBAEhBA,EAAA,KAAiB,gBAgBf,KAAK,aAAeH,EACpB,KAAK,cAAgBC,EACrB,KAAK,eAAiBC,EACtB,KAAK,KAAO,KAAK,QAAQE,CAAQ,EAAE,IACrC,CAEA,mBAA0B,CACxB,MAAM,IAAIC,CACZ,CAEA,MAAMC,EAAuBC,EAAsC,CACjEC,EAAQF,EAAQ,KAAK,aAAa,EAClC,KAAK,aAAa,MAAMA,EAAQC,CAAK,CACvC,CAEA,KAAKE,EAA8C,CACjD,OAAAD,EAAQC,EAAO,KAAK,aAAa,EAC1B,KAAK,aAAa,KAAKA,CAAK,CACrC,CAEA,QACEF,EACAG,EAAsB,IAAIC,EACf,CACX,OAAAH,EAAQE,EAAU,KAAK,aAAa,EAEpC,KAAK,aAAa,QAAQH,EAAOG,CAAQ,EAElCA,CACT,CAEA,yBAAkC,CAChC,GAAI,OAAO,KAAK,gBAAmB,SACjC,OAAO,KAAK,eAEd,GAAI,kBAAmB,KAAK,aAG1B,OAFuB,KAAK,aACzB,cACmB,wBAAwB,EAEhD,MAAM,IAAI,MAAM,+CAA+C,CACjE,CAEA,mBAA+C,CAC7C,MAAI,kBAAmB,KAAK,aACH,KAAK,aACzB,cACmB,kBAAkB,EAEnC,IACT,CAEA,QAAQE,EAA4B,CAClC,OAAO,KAAK,cACd,CACF,EClGA,UAAYC,MAAQ,eAKb,IAAMC,GAAa,IAAIC,EAAe,CAC3C,OAAW,OACX,cAAe,EACf,KAAM,MACR,CAAC,EAEYC,GAAW,IAAID,EAAe,CACzC,OAAW,MACX,cAAe,EACf,KAAM,KACR,CAAC,EAEYE,GAAW,IAAIF,EAAe,CACzC,OAAW,MACX,cAAe,EACf,KAAM,KACR,CAAC,EAEYG,GAAW,IAAIH,EAAe,CACzC,OAAW,MACX,cAAe,EACf,KAAM,KACR,CAAC,EC3BD,OAKE,YAAAI,EACA,YAAAC,EAEA,UAAAC,EAEA,UAAAC,MACK,eCXA,IAAMC,EAAU,CACrB,YAAa,OAAO,qBAAqB,EACzC,cAAe,OAAO,uBAAuB,EAC7C,SAAU,OAAO,kBAAkB,EACnC,cAAe,OAAO,uBAAuB,EAC7C,YAAa,OAAO,qBAAqB,EACzC,UAAW,OAAO,mBAAmB,EACrC,YAAa,OAAO,qBAAqB,EACzC,WAAY,OAAO,oBAAoB,EACvC,SAAU,OAAO,kBAAkB,EACnC,kBAAmB,OAAO,2BAA2B,EACrD,qBAAsB,OAAO,8BAA8B,EAC3D,mBAAoB,OAAO,4BAA4B,EACvD,YAAa,OAAO,qBAAqB,EACzC,cAAe,OAAO,uBAAuB,CAC/C,EAEMC,GAAW,OAAO,OAAOD,CAAO,ECP/B,SAASE,GAAa,CAC3B,OAAO,IAAIC,CACb,CAMA,IAAMA,EAAN,KAAgE,CAAhE,cACEC,EAAA,cAEA,MAAMC,EAA2B,CAC/B,YAAK,MAAQA,EACN,IACT,CAEA,QAAQC,EAA4B,CAClC,OAAOA,EAAI,QAAQ,IAAI,CACzB,CAEA,UAAmB,CA9BrB,IAAAC,EA+BI,MAAO,OAAMA,EAAA,KAAK,QAAL,KAAAA,EAAc,WAAW,EACxC,CACF,EC7BA,IAAMC,EAAgB,CACpB,CAACC,EAAQ,WAAW,EAAG,eACvB,CAACA,EAAQ,aAAa,EAAG,iBACzB,CAACA,EAAQ,QAAQ,EAAG,WACpB,CAACA,EAAQ,aAAa,EAAG,iBACzB,CAACA,EAAQ,WAAW,EAAG,eACvB,CAACA,EAAQ,SAAS,EAAG,aACrB,CAACA,EAAQ,WAAW,EAAG,eACvB,CAACA,EAAQ,UAAU,EAAG,cACtB,CAACA,EAAQ,QAAQ,EAAG,WACpB,CAACA,EAAQ,iBAAiB,EAAG,sBAC7B,CAACA,EAAQ,oBAAoB,EAAG,yBAChC,CAACA,EAAQ,kBAAkB,EAAG,uBAC9B,CAACA,EAAQ,WAAW,EAAG,eACvB,CAACA,EAAQ,aAAa,EAAG,gBAC3B,EAEMC,EAAgB,IAAI,IAWnB,SAASC,EAAaC,EAAa,CACxC,IAAIC,EAAKC,EAAc,IAAIF,CAAG,EAE9B,OAAIC,IAAO,SACTA,EAAKE,EAAW,EAAE,MAAMC,EAAcJ,CAAG,CAAC,EAC1CE,EAAc,IAAIF,EAAKC,CAAE,GAGpBA,CACT,CCxBO,SAASI,EACdC,KACGC,EACO,CACV,IAAMC,EAAqCF,EAAQ,QAAQ,CAACG,EAAQC,IAAQ,CAC1E,IAAMC,EAAQJ,EAAOG,CAAG,EACxB,OAAIC,IAAU,OACL,CAACF,CAAM,EAGT,MAAM,QAAQE,CAAK,EAAI,CAACF,EAAQ,GAAGE,CAAK,EAAI,CAACF,EAAQE,CAAK,CACnE,CAAC,EAED,OAAO,IAAIC,EAAaJ,CAAQ,CAClC,CAMA,IAAMI,EAAN,KAAuC,CAGrC,YAA4BJ,EAAoC,CAApC,cAAAA,EAF5BK,EAAA,KAAQ,SAEyD,CAEjE,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CAEA,MAAMC,EAA4B,CAChC,YAAK,OAASA,EACP,IACT,CAEA,QAAQC,EAAoB,CAC1B,IAAIV,EAAO,GAEX,QAAWW,KAAK,KAAK,SACnB,GAAIC,EAAaD,CAAC,EAChBX,GAAQU,EAAI,QAAQC,CAAC,UACZ,OAAOA,GAAM,WAAY,CAClC,IAAME,EAASF,EAAGG,GAAaJ,EAAI,OAAOI,CAAQ,CAAC,EACnDd,GAAQU,EAAI,QAAQG,CAAM,CAC5B,MAAW,OAAOF,GAAM,UACtBD,EAAI,WAAWC,CAAC,EAChBX,GAAQU,EAAI,QAAQK,EAAaJ,CAAC,CAAC,GAEnCX,GAAQ,OAAOW,CAAC,EAIpB,OAAOX,CACT,CAEA,KAAagB,EAAwBC,EAAwC,CAC3E,OAAO,IAAIC,EAAkB,KAAM,CAACF,EAAMC,CAAK,CAAC,CAClD,CAEA,UAAmB,CA3ErB,IAAAE,EA4EI,MAAO,SAAQA,EAAA,KAAK,SAAL,KAAAA,EAAe,WAAW,EAC3C,CACF,EAEMD,EAAN,MAAME,CAA8C,CAClD,YACmBC,EACAC,EACjB,CAFiB,cAAAD,EACA,oBAAAC,CAChB,CAEH,IAAI,OAAQ,CACV,OAAO,KAAK,SAAS,KACvB,CAEA,KAAaN,EAAwBC,EAAwC,CAC3E,OAAO,IAAIG,EAAkB,KAAM,CAACJ,EAAMC,CAAK,CAAC,CAClD,CAEA,QAAQP,EAA4B,CAClC,OAAOA,EAAI,QAAQ,KAAK,SAAU,CAAC,KAAK,cAAc,CAAC,CACzD,CAEA,UAAmB,CAlGrB,IAAAS,EAAAI,EAmGI,GAAM,CAACP,EAAMC,CAAK,EAAI,KAAK,eAC3B,MAAO,SAAQE,EAAA,KAAK,QAAL,KAAAA,EAAc,WAAW,KAAII,EAAAP,EAAK,QAAL,KAAAO,EAAc,WAAW,IAAIN,CAAK,GAChF,CACF,ECtGA,OAKE,YAAAO,EAEA,UAAAC,MAEK,eAIA,SAASC,EACdC,EACAC,EAC4B,CAC5B,OAAO,IAAIC,EAAgBD,EAAMD,CAAa,CAChD,CAKO,IAAME,EAAN,cACGC,CAEV,CAGE,YACUF,EACQD,EAChB,CACA,MAAM,EAHE,UAAAC,EACQ,mBAAAD,EAJlBI,EAAA,KAAgB,QAQd,QAAK,KAAO,KAAK,KAAK,KAElBJ,GAAiB,EACnB,MAAM,IAAI,MACR,yDAAyDA,CAAa,GACxE,EAGF,GAAI,KAAK,KAAKA,CAAa,EAAI,IAAM,EACnC,MAAM,IAAI,MACR,0CAA0CA,CAAa,GACzD,EAGF,GAAIA,EAAgB,KAAK,KAAK,gBAAkB,EAC9C,MAAM,IAAI,MACR,kFAAkFA,CAAa,2BAA2B,KAAK,KAAK,aAAa,GACnJ,CAEJ,CAEA,MAAMK,EAAuBC,EAAoC,CAC/DC,EAAQF,EAAQ,KAAK,aAAa,EAClC,KAAK,KAAK,MAAMA,EAAQC,CAAK,CAC/B,CAEA,KAAKE,EAA4C,CAC/C,OAAAD,EAAQC,EAAO,KAAK,aAAa,EAC1B,KAAK,KAAK,KAAKA,CAAK,CAC7B,CAEA,QACEF,EACAG,EAAsB,IAAIC,EACf,CACX,OAAAH,EAAQE,EAAU,KAAK,aAAa,EAC7B,KAAK,KAAK,QAAQH,EAAOG,CAAQ,CAC1C,CAEA,QAAQE,EAA4B,CAClC,OAAO,KAAK,KAAK,QAAQA,CAAG,CAC9B,CACF,EC7EA,OAKE,YAAAC,EAEA,UAAAC,MAEK,eAGA,SAASC,EACdA,EACAC,EACyB,CACzB,OAAO,IAAIC,EAAcD,EAAMD,CAAI,CACrC,CAKO,IAAME,EAAN,cACGC,CAEV,CAGE,YACUF,EACQD,EAChB,CACA,MAAM,EAHE,UAAAC,EACQ,UAAAD,EAJlBI,EAAA,KAAgB,iBAQd,QAAK,cAAgB,KAAK,KAAK,cAE3BJ,EAAO,KAAK,KAAK,KACnB,MAAM,IAAI,MACR,wEAAwEA,CAAI,wBAAwB,KAAK,KAAK,IAAI,GACpH,EAGF,GAAIA,GAAQ,EACV,MAAM,IAAI,MACR,oDAAoDA,CAAI,GAC1D,CAEJ,CAEA,MAAMK,EAAuBC,EAAoC,CAC/D,KAAK,KAAK,MAAMD,EAAQC,CAAK,CAC/B,CAEA,KAAKC,EAA4C,CAC/C,OAAO,KAAK,KAAK,KAAKA,CAAK,CAC7B,CAEA,QACED,EACAE,EAAsB,IAAIC,EACf,CACX,OAAOD,EAAS,IAAI,KAAK,IAAI,CAC/B,CAEA,QAAQE,EAA4B,CAClC,OAAO,KAAK,KAAK,QAAQA,CAAG,CAC9B,CACF,ENrCO,IAAMC,GACXC,GACuB,IAAIC,EAAeD,CAAU,EAMhDC,EAAN,cACUC,CAEV,CAOE,YAA6BC,EAAqB,CAChD,MAAM,EADqB,iBAAAA,EAN7BC,EAAA,KAAQ,UACRA,EAAA,KAAQ,gBAERA,EAAA,KAAgB,iBAChBA,EAAA,KAAgB,QAKd,KAAK,aAAeC,EAAOF,CAAW,EAEtC,KAAK,cAAgB,OAAO,OAAOA,CAAW,EAC3C,IAAKG,GAASA,EAAK,aAAa,EAChC,OAAO,CAACC,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,CAAE,EAEnC,KAAK,KAAO,KAAK,QAAQC,CAAQ,EAAE,IACrC,CAEA,MAAMC,EAAe,CACnB,YAAK,OAASA,EACP,IACT,CAEA,mBAA0B,CACxB,MAAM,IAAIC,CACZ,CAEA,MAAMC,EAAuBC,EAA2C,CACtEC,EAAQF,EAAQ,KAAK,aAAa,EAClC,KAAK,aAAa,MAAMA,EAAQC,CAAK,CACvC,CAEA,KAAKE,EAAmD,CACtD,OAAAD,EAAQC,EAAO,KAAK,aAAa,EAC1B,KAAK,aAAa,KAAKA,CAAK,CACrC,CAEA,QACEF,EACAG,EAAsB,IAAIC,EACf,CACX,OAAAH,EAAQE,EAAU,KAAK,aAAa,EACpC,KAAK,aAAa,QAAQH,EAAOG,CAAQ,EAClCA,CACT,CAEA,QAAQE,EAA4B,CAClC,IAAMC,EAAQC,EAAW,EAAE,MAAM,KAAK,MAAM,EAE5C,OAAAF,EAAI,eAAeG;AAAA,eACRF,CAAK;AAAA,UACV,OAAO,QAAQ,KAAK,WAAW,EAAE,IAAI,CAAC,CAACG,EAAKC,CAAK,IAAG,CA7F9D,IAAAC,EA6FiE,OAAAH,KAAOG,EAAAC,EAAaF,CAAK,IAAlB,KAAAC,EAAuB,EAAE,GAAGF,CAAG,KAAKC,CAAK,MAAK,CAAC;AAAA;AAAA,KAElH,EAEML,EAAI,QAAQC,CAAK,CAC1B,CACF,EAEA,SAASM,EAAaF,EAAwC,CAC5D,GAAIA,aAAiBG,EACnB,MAAO,UAAUH,EAAM,aAAa,KAEtC,GAAIA,aAAiBI,EACnB,MAAO,SAASJ,EAAM,IAAI,IAE9B,CO3GA,OAGE,YAAAK,EAEA,UAAAC,OAEK,eCJA,IAAMC,EAAU,CAACC,EAAeC,IAAmB,CACxD,IAAMC,EAAUD,EAAS,EACnBE,EAAa,CAACD,EACpB,OAAQF,EAAQE,GAA0BF,EAAQG,GAAcF,EAA/BD,CACnC,EDWO,IAAMI,EAAN,cACGC,EAEV,CAME,YAAYC,EAAuBC,EAAe,CAChD,MAAM,EANRC,EAAA,KAAS,eACTA,EAAA,KAAS,gBACTA,EAAA,KAAS,iBACTA,EAAA,KAAS,QACTA,EAAA,KAAS,UAGP,KAAK,YAAcF,EACnB,KAAK,aAAeC,EACpB,KAAK,cAAgBD,EAAY,cACjC,KAAK,OAASG,EACZ,KAAK,YAAY,KACjB,KAAK,YAAY,aACnB,EACA,KAAK,KAAO,KAAK,OAAS,KAAK,YACjC,CAEA,MAAMC,EAA0BC,EAAmC,CACjEC,EAAQF,EAAQ,KAAK,aAAa,EAClC,IAAMG,EAAYH,EAAO,kBACzB,QAASI,EAAI,EAAGA,EAAI,KAAK,IAAI,KAAK,aAAcH,EAAM,MAAM,EAAGG,IAC7D,KAAK,YAAY,MAAMJ,EAAQC,EAAMG,CAAC,CAAC,EAEzCJ,EAAO,OAAOG,EAAY,KAAK,OAAS,KAAK,YAAY,CAC3D,CAEA,KAAKE,EAAoD,CACvDH,EAAQG,EAAO,KAAK,aAAa,EACjC,IAAMC,EAAuC,CAAC,EAC9C,QAASF,EAAI,EAAGA,EAAI,KAAK,aAAcA,IACrCE,EAAS,KAAK,KAAK,YAAY,KAAKD,CAAK,CAA6B,EAExE,OAAOC,CACT,CAEA,QACEL,EACAM,EAAsB,IAAIC,EACf,CACX,OAAAN,EAAQK,EAAU,KAAK,aAAa,EAC7BA,EAAS,IAAI,KAAK,OAAS,KAAK,YAAY,CACrD,CAEA,QAAQE,EAA4B,CAClC,OAAOA,EAAI,QAAQ;AAAA,cACTA,EAAI,QAAQ,KAAK,WAAW,CAAC,KAAK,KAAK,YAAY;AAAA,KAC5D,CACH,CACF,EAEaC,GAAU,CACrBd,EACAC,IACwB,IAAIH,EAAcE,EAAaC,CAAK,EE5E9D,OAKE,YAAAc,OAEK,eAyBP,SAASC,EAIPC,EACkC,CAClC,IAAMC,EAAiC,CAErC,YAAa,OAEb,MAAOD,EAAQ,MACf,cAAeA,EAAQ,WAAW,cAClC,KAAME,EACJF,EAAQ,WAAW,KAAOA,EAAQ,QAClCA,EAAQ,WAAW,aACrB,EAEA,mBAAoB,CAClB,MAAM,IAAIG,CACZ,EAEA,MAAMC,EAAuBC,EAAgC,CAC3D,QAAWC,KAAOD,EAAM,QAAQ,EAC9BL,EAAQ,WAAW,MAAMI,EAAQE,CAAyB,CAE9D,EAEA,KAAKC,EAAwC,CAC3C,IAAMC,EAAU,IAAI,MAAMR,EAAQ,OAAO,EAEzC,QAASS,EAAI,EAAGA,EAAIT,EAAQ,QAAS,EAAES,EACrCD,EAAQC,CAAC,EAAIT,EAAQ,WAAW,KAAKO,CAAK,EAG5C,OAAOP,EAAQ,sBAAsB,GAAGQ,CAAO,CACjD,EAEA,QAAQE,EAAkBC,EAAsB,IAAIC,GAAuB,CACzE,OAAAC,EAAQF,EAAU,KAAK,aAAa,EAC7BA,EAAS,IAAI,KAAK,IAAI,CAC/B,EAEA,cAAe,CACb,MAAM,IAAI,MAAM,yBAAyB,CAC3C,EAEA,SAAkB,CAChB,OAAOX,EAAQ,KACjB,CACF,EAqBA,OAAO,OAAO,OAnBI,IAAIc,IAA6C,CACjE,IAAMC,EAAqB,CAAC,EAE5B,QAAWC,KAAOF,EACZ,OAAOE,GAAQ,SACjBD,EAAS,KAAKC,CAAG,EAEjBD,EAAS,KAAK,GAAGC,CAAG,EAKxB,QAASC,EAAIF,EAAS,OAAQE,EAAIjB,EAAQ,QAAUA,EAAQ,KAAM,EAAEiB,EAClEF,EAAS,KAAK,CAAC,EAGjB,OAAOf,EAAQ,iBAAiB,GAAGe,CAAQ,CAC7C,EAEgCd,CAAS,CAC3C,CAOA,IAAeiB,EAAf,KAA8E,CAG5E,eAAeH,EAAoB,CAFnCI,EAAA,KAAQ,WAAW,IAAI,MAAM,CAAC,GAG5B,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBJ,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,EACA,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBA,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,CACF,CAIA,CAAC,SAAU,CACT,MAAM,KAAK,SAAS,CAAC,EACrB,MAAM,KAAK,SAAS,CAAC,CACvB,CAEA,CAAC,UAAW,CACV,MAAAK,EAAO,KAAK,SAAS,CAAC,GACtB,MAAAA,EAAO,KAAK,SAAS,CAAC,EACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAGF,EAEMC,EAAN,cAA0BH,CAAqC,CAC7D,WAAWI,EAAYC,EAAmB,CACxC,OAAOC,EAAMF,EAAIC,CAAE,CACrB,CACF,EAEeE,EAAf,KAA8E,CAG5E,eAAeV,EAAoB,CAFnCI,EAAA,KAAQ,WAAW,IAAI,MAAM,CAAC,GAG5B,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBJ,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,EACA,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBA,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,EACA,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBA,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,CACF,CAIA,CAAC,SAAU,CACT,MAAM,KAAK,SAAS,CAAC,EACrB,MAAM,KAAK,SAAS,CAAC,EACrB,MAAM,KAAK,SAAS,CAAC,CACvB,CAEA,CAAC,UAAW,CACV,MAAAK,EAAO,KAAK,SAAS,CAAC,GACtB,MAAAA,EAAO,KAAK,SAAS,CAAC,GACtB,MAAAA,EAAO,KAAK,SAAS,CAAC,EACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAGF,EAEMM,EAAN,cAA0BD,CAAqC,CAC7D,WAAWE,EAAWC,EAAWC,EAAkB,CACjD,OAAOC,EAAMH,EAAGC,EAAGC,CAAC,CACtB,CACF,EAEeE,EAAf,KAA8E,CAQ5E,eAAehB,EAAoB,CAPnCI,EAAA,KAAiB,WAAW,IAAI,MAAM,CAAC,GAQrC,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBJ,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,EACA,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBA,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,CAAC,CACZ,EACA,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBA,EAAS,CAAC,EACVA,EAAS,CAAC,EACVA,EAAS,EAAE,EACXA,EAAS,EAAE,CACb,EACA,KAAK,SAAS,CAAC,EAAI,KAAK,WACtBA,EAAS,EAAE,EACXA,EAAS,EAAE,EACXA,EAAS,EAAE,EACXA,EAAS,EAAE,CACb,CACF,CAIA,CAAC,SAAU,CACT,MAAM,KAAK,SAAS,CAAC,EACrB,MAAM,KAAK,SAAS,CAAC,EACrB,MAAM,KAAK,SAAS,CAAC,EACrB,MAAM,KAAK,SAAS,CAAC,CACvB,CAEA,CAAC,UAAW,CACV,MAAAK,EAAO,KAAK,SAAS,CAAC,GACtB,MAAAA,EAAO,KAAK,SAAS,CAAC,GACtB,MAAAA,EAAO,KAAK,SAAS,CAAC,GACtB,MAAAA,EAAO,KAAK,SAAS,CAAC,EACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAEA,GAAK,IAAK,CACR,OAAO,KAAK,SAAS,CAAC,CACxB,CAGF,EAEMY,EAAN,cAA0BD,CAAqC,CAC7D,WAAWJ,EAAWC,EAAWC,EAAWI,EAAkB,CAC5D,OAAOC,EAAMP,EAAGC,EAAGC,EAAGI,CAAC,CACzB,CACF,EAmBaE,GAAUpC,EAAgB,CACrC,MAAO,UACP,WAAYyB,EACZ,KAAM,EACN,QAAS,EACT,sBAAuB,IAAIhB,IACzB,IAAIa,EAAY,GAAGb,EAAQ,CAAC,EAAG,GAAGA,EAAQ,CAAC,CAAC,EAC9C,iBAAkB,IAAIO,IAAuB,IAAIM,EAAY,GAAGN,CAAQ,CAC1E,CAAC,EAgBYqB,GAAUrC,EAAgB,CACrC,MAAO,UACP,WAAY+B,EACZ,KAAM,EACN,QAAS,EACT,yBAAyB,CAACO,EAAIC,EAAIC,CAAE,EAA0B,CAC5D,OAAO,IAAIb,EAAY,GAAGW,EAAI,GAAGC,EAAI,GAAGC,CAAE,CAC5C,EACA,iBAAkB,IAAIxB,IAAuB,IAAIW,EAAY,GAAGX,CAAQ,CAC1E,CAAC,EAiBYyB,GAAUzC,EAAgB,CACrC,MAAO,UACP,WAAYmC,EACZ,KAAM,EACN,QAAS,EACT,yBAAyB,CAACG,EAAIC,EAAIC,EAAIE,CAAE,EAAiC,CACvE,OAAO,IAAIT,EAAY,GAAGK,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGE,CAAE,CACnD,EACA,iBAAkB,IAAI1B,IAAuB,IAAIiB,EAAY,GAAGjB,CAAQ,CAC1E,CAAC,ECvWM,SAAS2B,GACdC,EACoC,CACpC,MAAO,CACL,MAAO,WACP,SAAAA,CACF,CACF,CCTA,OAKE,YAAAC,GAEA,UAAAC,OAEK,eAKA,SAASC,GACdC,EACiB,CACjB,OAAO,IAAIC,EAAWD,CAAI,CAC5B,CAKA,IAAMC,EAAN,cACUC,EAEV,CAIE,YAA6BC,EAAoB,CAC/C,MAAM,EADqB,eAAAA,EAH7BC,EAAA,KAAgB,QAChBA,EAAA,KAAgB,iBAId,KAAK,KAAO,KAAK,UAAU,KAC3B,KAAK,cAAgB,KAAK,UAAU,aACtC,CAEA,mBAA0B,CACxB,MAAM,IAAIC,CACZ,CAEA,MAAMC,EAAuBC,EAAsC,CACjE,KAAK,UAAU,MAAMD,EAAQC,CAAK,CACpC,CAEA,KAAKC,EAA8C,CACjD,OAAO,KAAK,UAAU,KAAKA,CAAK,CAClC,CAEA,QACED,EACAE,EAAsB,IAAIC,GACf,CACX,OAAO,KAAK,UAAU,QAAQH,EAAOE,CAAQ,CAC/C,CAEA,QAAQE,EAA4B,CAClC,MAAO,UAAUA,EAAI,QAAQ,KAAK,SAAS,CAAC,GAC9C,CACF","names":["MaxValue","Measurer","Schema","SimpleTgpuData","Schema","schema","byteAlignment","code","__publicField","MaxValue","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","TB","bool","SimpleTgpuData","u32","i32","f32","MaxValue","Measurer","Schema","object","builtin","builtins","identifier","TgpuIdentifierImpl","__publicField","label","ctx","_a","builtinToName","builtin","identifierMap","idForBuiltin","key","id","identifierMap","identifier","builtinToName","code","strings","params","segments","string","idx","param","TgpuCodeImpl","__publicField","label","ctx","s","isResolvable","result","eventual","idForBuiltin","slot","value","BoundTgpuCodeImpl","_a","_BoundTgpuCodeImpl","_innerFn","_slotValuePair","_b","Measurer","Schema","align","byteAlignment","data","TgpuAlignedImpl","Schema","__publicField","output","value","alignIO_default","input","measurer","Measurer","ctx","Measurer","Schema","size","data","TgpuSizedImpl","Schema","__publicField","output","value","input","measurer","Measurer","ctx","struct","properties","TgpuStructImpl","Schema","_properties","__publicField","object","prop","a","b","MaxValue","label","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","ident","identifier","code","key","field","_a","getAttribute","TgpuAlignedImpl","TgpuSizedImpl","Measurer","Schema","roundUp","value","modulo","bitMask","invBitMask","TgpuArrayImpl","Schema","elementType","count","__publicField","roundUp","output","value","alignIO_default","beginning","i","input","elements","measurer","Measurer","ctx","arrayOf","Measurer","createMatSchema","options","MatSchema","roundUp","RecursiveDataTypeError","output","value","col","input","columns","c","_value","measurer","Measurer","alignIO_default","args","elements","arg","i","mat2x2Impl","__publicField","__yieldStar","mat2x2fImpl","e0","e1","vec2f","mat3x3Impl","mat3x3fImpl","x","y","z","vec3f","mat4x4Impl","mat4x4fImpl","w","vec4f","mat2x2f","mat3x3f","v0","v1","v2","mat4x4f","v3","ptr","pointsTo","Measurer","Schema","atomic","data","AtomicImpl","Schema","innerData","__publicField","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/index.cjs CHANGED
@@ -1,2 +1,52 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkPMM3NYJ4cjs = require('./chunk-PMM3NYJ4.cjs');var _typedbinary = require('typed-binary');var U={usableAsUniform:!0},B={usableAsStorage:!0},D={usableAsVertex:!0};function V(e,t){return new w(e,t)}function M(e){return!!e.usableAsUniform}function E(e){return!!e.usableAsStorage}function k(e){return!!e.usableAsVertex}var w=class{constructor(t,r){this.dataType=t;this.initialOrBuffer=r;_chunkPMM3NYJ4cjs.a.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkPMM3NYJ4cjs.a.call(void 0, this,"_device",null);_chunkPMM3NYJ4cjs.a.call(void 0, this,"_buffer",null);_chunkPMM3NYJ4cjs.a.call(void 0, this,"_destroyed",!1);_chunkPMM3NYJ4cjs.a.call(void 0, this,"_label");_chunkPMM3NYJ4cjs.a.call(void 0, this,"initial");_chunkPMM3NYJ4cjs.a.call(void 0, this,"usableAsUniform",!1);_chunkPMM3NYJ4cjs.a.call(void 0, this,"usableAsStorage",!1);_chunkPMM3NYJ4cjs.a.call(void 0, this,"usableAsVertex",!1);_chunkPMM3NYJ4cjs.d.call(void 0, r)?this._buffer=r:this.initial=r}get label(){return this._label}get buffer(){if(!this._device)throw new Error("To use this property, make the buffer unmanaged by passing a GPUDevice to $device");if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=this._device.createBuffer({size:this.dataType.size,usage:this.flags,mappedAtCreation:!!this.initial}),this.initial)){let t=new (0, _typedbinary.BufferWriter)(this._buffer.getMappedRange());this.dataType.write(t,this.initial),this._buffer.unmap()}return this._buffer}get device(){if(!this._device)throw new Error("This buffer has not been assigned a device. Use .$device(device) to assign a device");return this._device}get destroyed(){return this._destroyed}$name(t){return this._label=t,this}$usage(...t){for(let r of t)this.flags|=r===U?GPUBufferUsage.UNIFORM:0,this.flags|=r===B?GPUBufferUsage.STORAGE:0,this.flags|=r===D?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r===U,this.usableAsStorage=this.usableAsStorage||r===B,this.usableAsVertex=this.usableAsVertex||r===D;return this}$addFlags(t){return this.flags|=t,this}$device(t){return this._device=t,this}destroy(){var t;this._destroyed||(this._destroyed=!0,(t=this._buffer)==null||t.destroy())}toString(){var t;return`buffer:${(t=this._label)!=null?t:"<unnamed>"}`}};function _(e,t){let r=e.buffer,c=e.device;if(r.mapState==="mapped"){let x=r.getMappedRange();e.dataType.write(new (0, _typedbinary.BufferWriter)(x),t);return}let v=e.dataType.size,z=new ArrayBuffer(v);e.dataType.write(new (0, _typedbinary.BufferWriter)(z),t),c.queue.writeBuffer(r,0,z,0,v)}async function S(e){let t=e.buffer,r=e.device;if(t.mapState==="mapped"){let x=t.getMappedRange();return e.dataType.read(new (0, _typedbinary.BufferReader)(x))}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let x=t.getMappedRange(),A=e.dataType.read(new (0, _typedbinary.BufferReader)(x));return t.unmap(),A}let c=r.createBuffer({size:e.dataType.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),v=r.createCommandEncoder();v.copyBufferToBuffer(t,0,c,0,e.dataType.size),r.queue.submit([v.finish()]),await r.queue.onSubmittedWorkDone(),await c.mapAsync(GPUMapMode.READ,0,e.dataType.size);let z=e.dataType.read(new (0, _typedbinary.BufferReader)(c.getMappedRange()));return c.unmap(),c.destroy(),z}var f=e=>Math.sqrt(e.x**2+e.y**2),o=e=>Math.sqrt(e.x**2+e.y**2+e.z**2),d=e=>Math.sqrt(e.x**2+e.y**2+e.z**2+e.w**2),n={length:{vec2f:f,vec2i:f,vec2u:f,vec3f:o,vec3i:o,vec3u:o,vec4f:d,vec4i:d,vec4u:d},add:{vec2f:(e,t)=>_chunkPMM3NYJ4cjs.g.call(void 0, e.x+t.x,e.y+t.y),vec2i:(e,t)=>_chunkPMM3NYJ4cjs.h.call(void 0, e.x+t.x,e.y+t.y),vec2u:(e,t)=>_chunkPMM3NYJ4cjs.i.call(void 0, e.x+t.x,e.y+t.y),vec3f:(e,t)=>_chunkPMM3NYJ4cjs.j.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z),vec3i:(e,t)=>_chunkPMM3NYJ4cjs.k.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z),vec3u:(e,t)=>_chunkPMM3NYJ4cjs.l.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z),vec4f:(e,t)=>_chunkPMM3NYJ4cjs.m.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4i:(e,t)=>_chunkPMM3NYJ4cjs.n.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4u:(e,t)=>_chunkPMM3NYJ4cjs.o.call(void 0, e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w)},sub:{vec2f:(e,t)=>_chunkPMM3NYJ4cjs.g.call(void 0, e.x-t.x,e.y-t.y),vec2i:(e,t)=>_chunkPMM3NYJ4cjs.h.call(void 0, e.x-t.x,e.y-t.y),vec2u:(e,t)=>_chunkPMM3NYJ4cjs.i.call(void 0, e.x-t.x,e.y-t.y),vec3f:(e,t)=>_chunkPMM3NYJ4cjs.j.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z),vec3i:(e,t)=>_chunkPMM3NYJ4cjs.k.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z),vec3u:(e,t)=>_chunkPMM3NYJ4cjs.l.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z),vec4f:(e,t)=>_chunkPMM3NYJ4cjs.m.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4i:(e,t)=>_chunkPMM3NYJ4cjs.n.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4u:(e,t)=>_chunkPMM3NYJ4cjs.o.call(void 0, e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w)},mul:{vec2f:(e,t)=>_chunkPMM3NYJ4cjs.g.call(void 0, e*t.x,e*t.y),vec2i:(e,t)=>_chunkPMM3NYJ4cjs.h.call(void 0, e*t.x,e*t.y),vec2u:(e,t)=>_chunkPMM3NYJ4cjs.i.call(void 0, e*t.x,e*t.y),vec3f:(e,t)=>_chunkPMM3NYJ4cjs.j.call(void 0, e*t.x,e*t.y,e*t.z),vec3i:(e,t)=>_chunkPMM3NYJ4cjs.k.call(void 0, e*t.x,e*t.y,e*t.z),vec3u:(e,t)=>_chunkPMM3NYJ4cjs.l.call(void 0, e*t.x,e*t.y,e*t.z),vec4f:(e,t)=>_chunkPMM3NYJ4cjs.m.call(void 0, e*t.x,e*t.y,e*t.z,e*t.w),vec4i:(e,t)=>_chunkPMM3NYJ4cjs.n.call(void 0, e*t.x,e*t.y,e*t.z,e*t.w),vec4u:(e,t)=>_chunkPMM3NYJ4cjs.o.call(void 0, e*t.x,e*t.y,e*t.z,e*t.w)},dot:{vec2f:(e,t)=>e.x*t.x+e.y*t.y,vec2i:(e,t)=>e.x*t.x+e.y*t.y,vec2u:(e,t)=>e.x*t.x+e.y*t.y,vec3f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec4f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},normalize:{vec2f:e=>{let t=f(e);return _chunkPMM3NYJ4cjs.g.call(void 0, e.x/t,e.y/t)},vec2i:e=>{let t=f(e);return _chunkPMM3NYJ4cjs.h.call(void 0, e.x/t,e.y/t)},vec2u:e=>{let t=f(e);return _chunkPMM3NYJ4cjs.i.call(void 0, e.x/t,e.y/t)},vec3f:e=>{let t=o(e);return _chunkPMM3NYJ4cjs.j.call(void 0, e.x/t,e.y/t,e.z/t)},vec3i:e=>{let t=o(e);return _chunkPMM3NYJ4cjs.k.call(void 0, e.x/t,e.y/t,e.z/t)},vec3u:e=>{let t=o(e);return _chunkPMM3NYJ4cjs.l.call(void 0, e.x/t,e.y/t,e.z/t)},vec4f:e=>{let t=d(e);return _chunkPMM3NYJ4cjs.m.call(void 0, e.x/t,e.y/t,e.z/t,e.w/t)},vec4i:e=>{let t=d(e);return _chunkPMM3NYJ4cjs.n.call(void 0, e.x/t,e.y/t,e.z/t,e.w/t)},vec4u:e=>{let t=d(e);return _chunkPMM3NYJ4cjs.o.call(void 0, e.x/t,e.y/t,e.z/t,e.w/t)}},cross:{vec3f:(e,t)=>_chunkPMM3NYJ4cjs.j.call(void 0, e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3i:(e,t)=>_chunkPMM3NYJ4cjs.k.call(void 0, e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3u:(e,t)=>_chunkPMM3NYJ4cjs.l.call(void 0, e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}};var $={add:(e,t)=>n.add[e.kind](e,t),sub:(e,t)=>n.sub[e.kind](e,t),mul:(e,t)=>n.mul[t.kind](e,t),dot:(e,t)=>n.dot[e.kind](e,t),normalize:e=>n.normalize[e.kind](e),cross:(e,t)=>n.cross[e.kind](e,t),fract:e=>e-Math.floor(e),length:e=>n.length[e.kind](e),sin:Math.sin,cos:Math.cos};var K={Uniform:U,Storage:B,Vertex:D,createBuffer:V,read:S,write:_},L= exports.default =K;exports.RecursiveDataTypeError = _chunkPMM3NYJ4cjs.e; exports.default = L; exports.isUsableAsStorage = E; exports.isUsableAsUniform = M; exports.isUsableAsVertex = k; exports.std = $; exports.tgpu = K;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkSBJR5ZQJcjs = require('./chunk-SBJR5ZQJ.cjs');var H=class{constructor(e){this._make=e;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_map",new WeakMap)}getOrMake(e,...r){if(this._map.has(e))return this._map.get(e);let n=this._make(e,...r);return this._map.set(e,n),n}};var ft=Symbol("This plum's value is sourced from outside the root.");function re(t){return t[ft]===!0}function Xe(t){return t.__brand==="TgpuPlum"}var ne=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"_stateMap",new WeakMap)}inspect(e){return this._stateMap.get(e)}_getState(e){let r=this._stateMap.get(e);if(!r){let{value:n,dependencies:a}=this._computeAndGatherDependencies(e);r={value:n,dependencies:a,version:0},this._stateMap.set(e,r)}return r}_notifyListeners(e){let r=this._getState(e);if(!r.active)return;let n=[...r.active.listeners];for(let a of n)a(r.value)}_computeAndGatherDependencies(e){let r=new Map,n=a=>{if(!r.has(a)){let i=this._getState(a);r.set(a,i.version)}return this.get(a)};return{value:e.compute(n),dependencies:r}}_recompute(e){let r=this._getState(e);if(r.active)for(let i of r.active.unsubs)i();let{value:n,dependencies:a}=this._computeAndGatherDependencies(e);if(r.dependencies=a,r.active)for(let[i]of r.dependencies)r.active.unsubs.add(this.subscribe(i,()=>{this._recompute(e)}));return Object.is(r.value,n)||(r.value=n,r.version=re(e)?e.version:r.version+1,this._notifyListeners(e)),r.value}get(e){let r=this._getState(e);if(r.active)return r.value;let n=!1;return re(e)?(e.compute(null),n=r.version!==e.version):r.dependencies.size>0&&(n=[...r.dependencies.entries()].some(([a,i])=>(this.get(a),this._getState(a).version!==i))),n?this._recompute(e):r.value}set(e,r){let n=this._getState(e);Object.is(n.value,r)||(n.value=r,n.version++,this._notifyListeners(e))}subscribe(e,r){let n=this._getState(e),a;if(!n.active){let i=new Set;n.active={listeners:new Set,unsubs:i};for(let[u]of n.dependencies)i.add(this.subscribe(u,()=>{this._recompute(e)}));re(e)&&(a=e.subscribe(()=>{this._recompute(e)}))}return n.active.listeners.add(r),()=>{if(n.active&&(n.active.listeners.delete(r),n.active.listeners.size===0)){for(let i of n.active.unsubs)i();a==null||a(),n.active=void 0}}}};var Tt={f32:"float32",vec2f:"float32x2",vec3f:"float32x3",vec4f:"float32x4",u32:"uint32",vec2u:"uint32x2",vec3u:"uint32x3",vec4u:"uint32x4",i32:"sint32",vec2i:"sint32x2",vec3i:"sint32x3",vec4i:"sint32x4"};function xe(t){if("expressionCode"in t){let e=t.expressionCode,r=Tt[e];if(!r)throw new Error(`Unsupported vertex format: ${e}`);return r}if("elementType"in t)return xe(t.elementType);throw new Error("Invalid vertex format schema")}function ae(t){return t.type==="sampler"||t.type==="sampler_comparison"}function Qe(t){return!("texture"in t)&&!ae(t)}function ue(t){return"texture"in t}var mt={uniform:"uniform",mutable:"storage",readonly:"read-only-storage"},ie=class{constructor(e,r,n){this.root=e;this.context=r;this.shaderStage=n;_chunkSBJR5ZQJcjs.d.call(void 0, this,"samplers",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"textureViews",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"externalTextures",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"buffers",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"vertexBuffers",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"layout",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"bindGroup",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"vertexLayout",null);let a=Array.from(r.usedRenderResources);for(let i of a)if(ae(i))this.samplers.push(i);else if(ue(i))this.textureViews.push(i);else if(Qe(i))this.externalTextures.push(i);else throw new Error(`Invalid resource type: ${i}`);this.buffers=Array.from(r.usedBindables)}setVertexBuffers(e){if(this.shaderStage!==GPUShaderStage.VERTEX)throw new Error("Vertex buffers can only be set for vertex shader");this.vertexBuffers=new Map(e.map(({index:r,buffer:n})=>[n,r]))}getBindGroupLayout(){if(this.layout)return this.layout;let e=[];for(let n of this.textureViews)n.access===void 0?e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,texture:{}}):e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,storageTexture:{format:n.texture.descriptor.format}});for(let n of this.externalTextures)e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,externalTexture:{}});for(let n of this.samplers)e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,sampler:{}});for(let n of this.buffers)n.usage!=="vertex"&&e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,buffer:{type:mt[n.usage]}});let r=this.root.device.createBindGroupLayout({entries:e});return this.layout=r,r}getBindGroup(){if(this.checkBindGroupInvalidation(),this.bindGroup)return this.bindGroup;let e=[];for(let n of this.textureViews)e.push({binding:this.context.getIndexFor(n),resource:this.root.viewFor(n)});for(let n of this.externalTextures)e.push({binding:this.context.getIndexFor(n),resource:this.root.externalTextureFor(n)});for(let n of this.samplers)e.push({binding:this.context.getIndexFor(n),resource:this.root.samplerFor(n)});for(let n of this.buffers)n.usage!=="vertex"&&e.push({binding:this.context.getIndexFor(n),resource:{buffer:n.allocatable.buffer}});let r=this.root.device.createBindGroup({layout:this.getBindGroupLayout(),entries:e});return this.bindGroup=r,r}getBindings(){return{bindGroupLayout:this.getBindGroupLayout(),bindGroup:this.getBindGroup()}}getVertexBufferDescriptors(){if(this.vertexBuffers===null)throw new Error("Vertex buffers not set");if(this.vertexLayout)return this.vertexLayout;let e=[];for(let[r,n]of this.vertexBuffers.entries())e.push(_chunkSBJR5ZQJcjs.b.call(void 0, _chunkSBJR5ZQJcjs.a.call(void 0, {},r.vertexLayout),{attributes:[{shaderLocation:n,offset:0,format:xe(r.allocatable.dataType)}]}));return this.vertexLayout=e,e}getVertexBuffers(){if(this.vertexBuffers===null)throw new Error("Vertex buffers not set");return this.vertexBuffers.entries()}getVertexBufferIndex(e){var n;let r=(n=this.vertexBuffers)==null?void 0:n.get(e);if(this.vertexBuffers===null||r===void 0)throw new Error("Vertex buffers not set");return r}invalidateBindGroup(){this.bindGroup=null}checkBindGroupInvalidation(){for(let e of this.externalTextures){if(this.root.isDirty(e)){this.invalidateBindGroup(),this.root.markClean(e);continue}e.source instanceof HTMLVideoElement&&this.invalidateBindGroup()}}};var f=class{constructor(e){this.name=e;_chunkSBJR5ZQJcjs.d.call(void 0, this,"s");this.s=_chunkSBJR5ZQJcjs.q.get(e)}get label(){return this.name}resolve(e){return e.resolve(_chunkSBJR5ZQJcjs.B`${this.s}`)}},y={vertexIndex:new f("vertex_index"),instanceIndex:new f("instance_index"),position:new f("position"),clipDistances:new f("clip_distances"),frontFacing:new f("front_facing"),fragDepth:new f("frag_depth"),sampleIndex:new f("sample_index"),sampleMask:new f("sample_mask"),fragment:new f("fragment"),localInvocationId:new f("local_invocation_id"),localInvocationIndex:new f("local_invocation_index"),globalInvocationId:new f("global_invocation_id"),workgroupId:new f("workgroup_id"),numWorkgroups:new f("num_workgroups")};var yt={[y.vertexIndex.s]:_chunkSBJR5ZQJcjs.m,[y.instanceIndex.s]:_chunkSBJR5ZQJcjs.m,[y.position.s]:_chunkSBJR5ZQJcjs.V,[y.clipDistances.s]:_chunkSBJR5ZQJcjs.H.call(void 0, _chunkSBJR5ZQJcjs.m,8),[y.frontFacing.s]:_chunkSBJR5ZQJcjs.o,[y.fragDepth.s]:_chunkSBJR5ZQJcjs.o,[y.sampleIndex.s]:_chunkSBJR5ZQJcjs.m,[y.sampleMask.s]:_chunkSBJR5ZQJcjs.m,[y.fragment.s]:_chunkSBJR5ZQJcjs.V,[y.localInvocationId.s]:_chunkSBJR5ZQJcjs.U,[y.localInvocationIndex.s]:_chunkSBJR5ZQJcjs.m,[y.globalInvocationId.s]:_chunkSBJR5ZQJcjs.U,[y.workgroupId.s]:_chunkSBJR5ZQJcjs.U,[y.numWorkgroups.s]:_chunkSBJR5ZQJcjs.U};function X(t){let e=yt[t];if(!e)throw new Error(`The symbol ${String(t)} in not a valid 'builtin'`);return e}var S=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"lastUniqueId",0);_chunkSBJR5ZQJcjs.d.call(void 0, this,"names",new WeakMap)}nameFor(e){let r=this.names.get(e);if(r===void 0){let n;e.label?(n=e.label.replaceAll(/\s/g,"_"),n=n.replaceAll(/[^\w\d]/g,"")):n="item",r=`${n}_${this.lastUniqueId++}`,this.names.set(e,r)}return r}};function x(t,e){return _chunkSBJR5ZQJcjs.v.call(void 0, e.value)?t.resolve(e.value):String(e.value)}function xt(t){throw new Error(`'${JSON.stringify(t)}' was not handled by the WGSL generator.`)}function Ze(t,e){return e?{value:"true",dataType:_chunkSBJR5ZQJcjs.l}:{value:"false",dataType:_chunkSBJR5ZQJcjs.l}}function et(t,e){return`${t.indent()}{
2
+ ${e.block.map(r=>ve(t,r)).join(`
3
+ `)}
4
+ ${t.dedent()}}`}function he(t,e){return t.getById(e)}function b(t,e){if(typeof e=="string")return he(t,e);if(typeof e=="boolean")return Ze(t,e);if("x2"in e){let[r,n,a]=e.x2,i=x(t,b(t,r)),u=x(t,b(t,a));return{value:`${i} ${n} ${u}`,dataType:_chunkSBJR5ZQJcjs.t}}if("."in e){let[r,n]=e["."],a=b(t,r),i=x(t,b(t,n));return _chunkSBJR5ZQJcjs.u.call(void 0, a.value)||typeof a.value=="object"?i==="value"?{value:x(t,a),dataType:_chunkSBJR5ZQJcjs.t}:{value:a.value[i],dataType:_chunkSBJR5ZQJcjs.t}:{value:`${x(t,a)}.${i}`,dataType:_chunkSBJR5ZQJcjs.t}}if("[]"in e){let[r,n]=e["[]"],a=x(t,b(t,r)),i=x(t,b(t,n));return{value:`${a}[${i}]`,dataType:_chunkSBJR5ZQJcjs.t}}if("num"in e)return{value:e.num,dataType:_chunkSBJR5ZQJcjs.t};if("call"in e){let n=b(t,e.call).value,i=e.args.map(u=>b(t,u)).map(u=>x(t,u));return _chunkSBJR5ZQJcjs.u.call(void 0, n)||typeof n=="function"?{value:n(...i),dataType:_chunkSBJR5ZQJcjs.t}:{value:`${String(n)}(${i.join(", ")})`,dataType:_chunkSBJR5ZQJcjs.t}}xt(e)}function ve(t,e){if(typeof e=="string")return`${t.pre}${x(t,he(t,e))};`;if(typeof e=="boolean")return`${t.pre}${x(t,Ze(t,e))};`;if("return"in e)return e.return===null?`${t.pre}return;`:`${t.pre}return ${x(t,b(t,e.return))};`;if("if"in e){let r=x(t,b(t,e.if));t.indent();let n=ve(t,e.do);t.dedent(),t.indent();let a=e.else?ve(t,e.else):void 0;return t.dedent(),a?`${t.pre}if (${r})
5
+ ${n}
6
+ ${t.pre}else
7
+ ${a}`:`${t.pre}if (${r})
8
+ ${n}`}if("let"in e||"const"in e){let r=x(t,he(t,"let"in e?e.let:e.const)),n=e.eq?b(t,e.eq):void 0;if(!n)throw new Error("Cannot create variable without an initial value.");return`${t.pre}var ${r} = ${x(t,n)};`}return"block"in e?et(t,e):`${t.pre}${x(t,b(t,e))};`}function be(t,e){return et(t,e)}var ht={uniform:"uniform",mutable:"storage, read_write",readonly:"storage, read"},Be=class{constructor(e,r,n){this.names=e;this._bindingGroup=r;this.jitTranspiler=n;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_nextFreeBindingIdx",0);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_nextFreeVertexBindingIdx",0);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_usedBindables",new Set);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_usedRenderResources",new Set);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_resourceToIndexMap",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_vertexBufferToIndexMap",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_usedBuiltins",new Set);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_declarations",[])}get usedBindables(){return this._usedBindables}get usedRenderResources(){return this._usedRenderResources}get declarations(){return this._declarations}get usedBuiltins(){return this._usedBuiltins}reserveBindingEntry(e){this._usedBindables.add(e);let r=this._nextFreeBindingIdx++;return this._resourceToIndexMap.set(e,r),{group:this._bindingGroup,idx:r}}registerVertexEntry(e){this._usedBindables.add(e);let r=this._nextFreeVertexBindingIdx++;this._vertexBufferToIndexMap.set(e,r)}reserveRenderResourceEntry(e){this._usedRenderResources.add(e);let r=this._nextFreeBindingIdx++;return this._resourceToIndexMap.set(e,r),{group:this._bindingGroup,idx:r}}getBindingIndex(e){return this._resourceToIndexMap.get(e)}addDeclaration(e){this._declarations.push(e)}addBuiltin(e){this._usedBuiltins.add(e)}},Pe=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"_stack",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_itemDepth",0)}get itemDepth(){return this._itemDepth}get topItem(){let e=this._stack[this._stack.length-1];if(!e||e.type!=="item")throw new Error("Internal error, expected item layer to be on top.");return e}pushItem(){this._itemDepth++,this._stack.push({type:"item",usedSlots:new Set})}pushSlotBindings(e){this._stack.push({type:"slotBinding",bindingMap:new WeakMap(e)})}pushFunctionScope(e,r,n){this._stack.push({type:"functionScope",args:e,returnType:r,externalMap:n})}pop(){let e=this._stack.pop();(e==null?void 0:e.type)==="item"&&this._itemDepth--}readSlot(e){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if((n==null?void 0:n.type)==="item")n.usedSlots.add(e);else if((n==null?void 0:n.type)==="slotBinding"){let a=n.bindingMap.get(e);if(a!==void 0)return a}else if(!((n==null?void 0:n.type)==="functionScope"||(n==null?void 0:n.type)==="blockScope"))throw new Error("Unknown layer type.")}return e.defaultValue}getResourceById(e){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if((n==null?void 0:n.type)==="functionScope"){let a=n.args.find(u=>u.value===e);if(a!==void 0)return a;let i=n.externalMap[e];if(i!==void 0)return{value:i,dataType:_chunkSBJR5ZQJcjs.t}}else if((n==null?void 0:n.type)==="blockScope"){let a=n.declarations.get(e);if(a!==void 0)return{value:e,dataType:a}}}}},oe=[""," "," "," "," "," "," "," "," "],we=oe.length-1,Se=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"identLevel",0)}get pre(){var e;return(e=oe[this.identLevel])!=null?e:oe[we].repeat(this.identLevel/we)+oe[this.identLevel%we]}indent(){let e=this.pre;return this.identLevel++,e}dedent(){return this.identLevel--,this.pre}},_=class{constructor(e){_chunkSBJR5ZQJcjs.d.call(void 0, this,"_memoizedResolves",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_shared");_chunkSBJR5ZQJcjs.d.call(void 0, this,"_indentController",new Se);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_itemStateStack",new Pe);var r;this._shared=new Be(e.names,(r=e.bindingGroup)!=null?r:0,e.jitTranspiler)}get usedBindables(){return this._shared.usedBindables}get usedRenderResources(){return this._shared.usedRenderResources}get usedBuiltins(){return this._shared.usedBuiltins}get pre(){return this._indentController.pre}indent(){return this._indentController.indent()}dedent(){return this._indentController.dedent()}getById(e){var r;return(r=this._itemStateStack.getResourceById(e))!=null?r:{value:e,dataType:_chunkSBJR5ZQJcjs.t}}transpileFn(e){if(!this._shared.jitTranspiler)throw new Error("Tried to execute a tgpu.fn function without providing a JIT transpiler, or transpiling at build time.");return this._shared.jitTranspiler.transpileFn(e)}fnToWgsl(e,r,n,a){let i=r.map((l,d)=>({value:l,dataType:e.argTypes[d]}));this._itemStateStack.pushFunctionScope(i,e.returnType,a);let u=be(this,n);this._itemStateStack.pop();let s=i.map(l=>`${l.value}: ${this.resolve(l.dataType)}`).join(", ");return{head:e.returnType!==void 0?`(${s}) -> ${this.resolve(e.returnType)}`:`(${s})`,body:u}}addDeclaration(e){this._shared.addDeclaration(this.resolve(e))}addBinding(e,r){if(e.usage==="vertex"){this._shared.registerVertexEntry(e);return}let{group:n,idx:a}=this._shared.reserveBindingEntry(e);this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var<${ht[e.usage]}> ${r}: ${e.allocatable.dataType};`)}addRenderResource(e,r){let{group:n,idx:a}=this._shared.reserveRenderResourceEntry(e);if(_chunkSBJR5ZQJcjs.w.call(void 0, e.type)||_chunkSBJR5ZQJcjs.y.call(void 0, e.type)||_chunkSBJR5ZQJcjs.x.call(void 0, e.type)){this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var ${r}: ${e.type};`);return}if(ue(e)){if(e.access!==void 0){this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var ${r}: ${e.type}<${e.texture.descriptor.format}, ${e.access}>;`);return}this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var ${r}: ${e.type}<${e.dataType}>;`);return}throw new Error(`Unsupported resource type: ${e.type}`)}addBuiltin(e){this._shared.addBuiltin(e)}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){let r=this._itemStateStack.readSlot(e);if(r===void 0)throw new (0, _chunkSBJR5ZQJcjs.h)(e);return r}unwrap(e){let r=e;for(;_chunkSBJR5ZQJcjs.A.call(void 0, r);)r=this.readSlot(r);return r}_getOrInstantiate(e){var n;let r=(n=this._memoizedResolves.get(e))!=null?n:[];this._itemStateStack.pushItem();try{for(let u of r)if([...u.slotToValueMap.entries()].every(([l,d])=>this._itemStateStack.readSlot(l)===d))return u.result;let a=e.resolve(this),i=new Map;for(let u of this._itemStateStack.topItem.usedSlots)i.set(u,this._itemStateStack.readSlot(u));return r.push({slotToValueMap:i,result:a}),this._memoizedResolves.set(e,r),a}catch(a){throw a instanceof _chunkSBJR5ZQJcjs.g?a.appendToTrace(e):new (0, _chunkSBJR5ZQJcjs.g)(a,[e])}finally{this._itemStateStack.pop()}}resolve(e,r=[]){if(!_chunkSBJR5ZQJcjs.u.call(void 0, e))return String(e);let n=!1;r.length>0&&(n=!0,this._itemStateStack.pushSlotBindings(r));try{if(this._itemStateStack.itemDepth===0){let a=_chunkSBJR5ZQJcjs.e.call(void 0, ()=>this._getOrInstantiate(e));return`${[...this._shared.declarations].join(`
9
+
10
+ `)}${a}`}return this._getOrInstantiate(e)}finally{n&&this._itemStateStack.pop()}}getIndexFor(e){let r=this._shared.getBindingIndex(e);if(r===void 0)throw new Error("No index found for item");return r}};var $=class{constructor(e,r){this.root=e;this.rootNode=r}build(e){var a;let r=new _({names:(a=e.nameRegistry)!=null?a:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler}),n=r.resolve(this.rootNode);return{bindGroupResolver:new ie(this.root,r,e.shaderStage),code:n}}};function vt(t){return Object.getOwnPropertySymbols(t).map(r=>{if(_chunkSBJR5ZQJcjs.p.get(r)===void 0)throw new Error("Symbol is not a member of `builtin`");return{name:t[r],builtinSymbol:r}})}var se=class{constructor(e,r,n,a){this.root=e;this.vertexRoot=r;this.fragmentRoot=n;this.vertexOutputFormat=a}build(e){var ke,Ie,Ce,Fe;let r=Object.getOwnPropertySymbols(this.vertexOutputFormat).map(p=>{let h=this.vertexOutputFormat[p];if(typeof h!="string")throw new Error("Output names must be strings.");return{symbol:p,name:h}}),n=vt(Object.fromEntries(r.map(({symbol:p,name:h})=>[p,h]))),a=Object.keys(this.vertexOutputFormat).map((p,h)=>{let E=this.vertexOutputFormat[p];if(!E)throw new Error("Output names must be strings.");return{name:p,varInfo:E,index:h}}),i=[...n.map(p=>{var E;let h=(E=this.vertexOutputFormat[p.builtinSymbol])!=null?E:"";return _chunkSBJR5ZQJcjs.B`
11
+ @builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, p.builtinSymbol)}) ${h}: ${X(p.builtinSymbol)},
12
+ `}),...a.map(({name:p,varInfo:h,index:E})=>_chunkSBJR5ZQJcjs.B`
13
+ @location(${E}) ${p}: ${h},
14
+ `)],u=new _({names:(ke=e.nameRegistry)!=null?ke:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler});u.resolve(this.vertexRoot);let l=Array.from(u.usedBindables).filter(p=>p.usage==="vertex").map((p,h)=>({idx:h,entry:{bindable:p,underlyingType:p.allocatable.dataType}})),d=l.map(p=>_chunkSBJR5ZQJcjs.B`
15
+ @location(${p.idx}) ${p.entry.bindable} : ${"expressionCode"in p.entry.underlyingType?p.entry.underlyingType.expressionCode:p.entry.underlyingType.elementType},
16
+ `),c=[...Array.from(u.usedBuiltins).map(p=>_chunkSBJR5ZQJcjs.B`
17
+ @builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, p)}) ${_chunkSBJR5ZQJcjs.s.call(void 0, p)}: ${X(p)},
18
+ `),...d],w=_chunkSBJR5ZQJcjs.B`
19
+ struct VertexOutput {
20
+ ${i}
21
+ };
22
+
23
+ @vertex
24
+ fn main(${c}) -> VertexOutput {
25
+ ${this.vertexRoot}
26
+ var output: VertexOutput;
27
+ ${n.map(p=>_chunkSBJR5ZQJcjs.B`
28
+ output.${p.name} = ${p.name};
29
+ `)}
30
+ ${a.map(({name:p})=>_chunkSBJR5ZQJcjs.B`
31
+ output.${p} = ${p};
32
+ `)}
33
+ return output;
34
+ }
35
+ `,U=new _({names:(Ie=e.nameRegistry)!=null?Ie:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler});U.resolve(this.fragmentRoot);let Q=Array.from(U.usedBuiltins).map(p=>_chunkSBJR5ZQJcjs.B`
36
+ @builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, p)}) ${_chunkSBJR5ZQJcjs.s.call(void 0, p)}: ${X(p)},
37
+ `),Z=a.map(({name:p,varInfo:h},E)=>_chunkSBJR5ZQJcjs.B`
38
+ @location(${E}) ${p}: ${h},
39
+ `),lt=[...Q,...Z],dt=_chunkSBJR5ZQJcjs.B`
40
+ @fragment
41
+ fn main(${lt}) -> @location(0) vec4f {
42
+ ${this.fragmentRoot}
43
+ }
44
+ `,$e=new $(this.root,w).build({bindingGroup:e.bindingGroup,shaderStage:GPUShaderStage.VERTEX,nameRegistry:(Ce=e.nameRegistry)!=null?Ce:new S}),gt=new $(this.root,dt).build({bindingGroup:e.bindingGroup+1,shaderStage:GPUShaderStage.FRAGMENT,nameRegistry:(Fe=e.nameRegistry)!=null?Fe:new S});return $e.bindGroupResolver.setVertexBuffers(l.map(p=>({index:p.idx,buffer:p.entry.bindable}))),{vertexProgram:$e,fragmentProgram:gt}}},pe=class{constructor(e,r,n){this.root=e;this.computeRoot=r;this.workgroupSize=n}build(e){var l,d,T,m;let r=new _({names:(l=e.nameRegistry)!=null?l:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler});r.resolve(this.computeRoot);let a=Array.from(r.usedBuiltins).map(c=>_chunkSBJR5ZQJcjs.B`
45
+ @builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, c)}) ${_chunkSBJR5ZQJcjs.s.call(void 0, c)}: ${X(c)},
46
+ `),i=`@workgroup_size(${this.workgroupSize[0]}, ${(d=this.workgroupSize[1])!=null?d:1}, ${(T=this.workgroupSize[2])!=null?T:1})`,u=_chunkSBJR5ZQJcjs.B`
47
+ @compute ${i}
48
+ fn main(${a}) {
49
+ ${this.computeRoot}
50
+ }
51
+ `;return new $(this.root,u).build({bindingGroup:e.bindingGroup,shaderStage:GPUShaderStage.COMPUTE,nameRegistry:(m=e.nameRegistry)!=null?m:new S})}};var _typedbinary = require('typed-binary');function le(t,e,r){return new De(t,e,r)}function A(t){return t.resourceType==="buffer"}function de(t){return!!t.usableAsUniform}function ge(t){return!!t.usableAsStorage}function bt(t){return!!t.usableAsVertex}var De=class{constructor(e,r,n){this._group=e;this.dataType=r;this.initialOrBuffer=n;_chunkSBJR5ZQJcjs.d.call(void 0, this,"resourceType","buffer");_chunkSBJR5ZQJcjs.d.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_device",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_buffer",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_destroyed",!1);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_subscription",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_label");_chunkSBJR5ZQJcjs.d.call(void 0, this,"initial");_chunkSBJR5ZQJcjs.d.call(void 0, this,"usableAsUniform",!1);_chunkSBJR5ZQJcjs.d.call(void 0, this,"usableAsStorage",!1);_chunkSBJR5ZQJcjs.d.call(void 0, this,"usableAsVertex",!1);_chunkSBJR5ZQJcjs.z.call(void 0, n)?this._buffer=n:this.initial=n}get label(){return this._label}get buffer(){if(!this._device)throw new Error("Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.");if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=this._device.createBuffer({size:this.dataType.size,usage:this.flags,mappedAtCreation:!!this.initial}),this.initial)){let e=new (0, _typedbinary.BufferWriter)(this._buffer.getMappedRange());if(Xe(this.initial)){let r=this._group;if(!r)throw new Error("Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.");let n=this.initial;this.dataType.write(e,r.readPlum(n)),this._subscription=r.onPlumChange(n,()=>{this.write(r.readPlum(n))})}else this.dataType.write(e,this.initial);this._buffer.unmap()}return this._buffer}get device(){if(!this._device)throw new Error("This buffer has not been assigned a device. Use .$device(device) to assign a device");return this._device}get destroyed(){return this._destroyed}$name(e){return this._label=e,this}$usage(...e){for(let r of e)this.flags|=r==="uniform"?GPUBufferUsage.UNIFORM:0,this.flags|=r==="storage"?GPUBufferUsage.STORAGE:0,this.flags|=r==="vertex"?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r==="uniform",this.usableAsStorage=this.usableAsStorage||r==="storage",this.usableAsVertex=this.usableAsVertex||r==="vertex";return this}$addFlags(e){return this.flags|=e,this}$device(e){return this._device=e,this}write(e){let r=this.buffer,n=this.device;if(r.mapState==="mapped"){let i=r.getMappedRange();if(A(e))throw new Error("Cannot copy to a mapped buffer.");this.dataType.write(new (0, _typedbinary.BufferWriter)(i),e);return}let a=this.dataType.size;if(A(e)){let i=e.buffer;if(this._group)this._group.commandEncoder.copyBufferToBuffer(i,0,r,0,a);else{let u=n.createCommandEncoder();u.copyBufferToBuffer(i,0,r,0,a),n.queue.submit([u.finish()])}}else{this._group&&this._group.flush();let i=new ArrayBuffer(a);this.dataType.write(new (0, _typedbinary.BufferWriter)(i),e),n.queue.writeBuffer(r,0,i,0,a)}}async read(){this._group&&this._group.flush();let e=this.buffer,r=this.device;if(e.mapState==="mapped"){let u=e.getMappedRange();return this.dataType.read(new (0, _typedbinary.BufferReader)(u))}if(e.usage&GPUBufferUsage.MAP_READ){await e.mapAsync(GPUMapMode.READ);let u=e.getMappedRange(),s=this.dataType.read(new (0, _typedbinary.BufferReader)(u));return e.unmap(),s}let n=r.createBuffer({size:this.dataType.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),a=r.createCommandEncoder();a.copyBufferToBuffer(e,0,n,0,this.dataType.size),r.queue.submit([a.finish()]),await r.queue.onSubmittedWorkDone(),await n.mapAsync(GPUMapMode.READ,0,this.dataType.size);let i=this.dataType.read(new (0, _typedbinary.BufferReader)(n.getMappedRange()));return n.unmap(),n.destroy(),i}destroy(){var e;this._destroyed||(this._destroyed=!0,this._subscription&&this._subscription(),(e=this._buffer)==null||e.destroy())}toString(){var e;return`buffer:${(e=this._label)!=null?e:"<unnamed>"}`}};function Re(t){return!!t&&t.resourceType==="buffer-usage"}function rt(t){return new _e(t)}function nt(t){return!!t&&t.resourceType==="bind-group-layout"}function at(t){return!!t&&t.resourceType==="bind-group"}var Ge=class t extends Error{constructor(e,r){super(`Bind group '${e!=null?e:"<unnamed>"}' is missing a required binding '${r}'`),Object.setPrototypeOf(this,t.prototype)}},tt=["compute"],k=["compute","vertex","fragment"],_e=class{constructor(e){this.entries=e;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_label");_chunkSBJR5ZQJcjs.d.call(void 0, this,"resourceType","bind-group-layout");_chunkSBJR5ZQJcjs.d.call(void 0, this,"bound",{})}get label(){return this._label}$name(e){return this._label=e,this}unwrap(e){var n;return e.device.createBindGroupLayout({label:(n=this.label)!=null?n:"",entries:Object.values(this.entries).map((a,i)=>{var l,d,T,m;if(a===null)return null;let u=a.visibility,s={binding:i,visibility:0};if("uniform"in a)u=u!=null?u:k,s.buffer={type:"uniform"};else if("storage"in a)u=u!=null?u:a.access==="mutable"?tt:k,s.buffer={type:a.access==="mutable"?"storage":"read-only-storage"};else if("sampler"in a)u=u!=null?u:k,s.sampler={type:a.sampler};else if("texture"in a)u=u!=null?u:k,s.texture={sampleType:a.texture,viewDimension:(l=a.viewDimension)!=null?l:"2d",multisampled:(d=a.multisampled)!=null?d:!1};else if("storageTexture"in a){let c=(T=a.access)!=null?T:"writeonly";u=u!=null?u:c==="readonly"?k:tt,s.storageTexture={format:a.storageTexture,access:{mutable:"read-write",readonly:"read-only",writeonly:"write-only"}[c],viewDimension:(m=a.viewDimension)!=null?m:"2d"}}else"externalTexture"in a&&(u=u!=null?u:k,s.externalTexture={});return u!=null&&u.includes("compute")&&(s.visibility|=GPUShaderStage.COMPUTE),u!=null&&u.includes("vertex")&&(s.visibility|=GPUShaderStage.VERTEX),u!=null&&u.includes("fragment")&&(s.visibility|=GPUShaderStage.FRAGMENT),s}).filter(a=>a!==null)})}populate(e){return new Ae(this,e)}},Ae=class{constructor(e,r){this.layout=e;this.entries=r;_chunkSBJR5ZQJcjs.d.call(void 0, this,"resourceType","bind-group");for(let n of Object.keys(e.entries))if(e.entries[n]!==null&&!(n in r))throw new Ge(e.label,n)}unwrap(e){var n;return e.device.createBindGroup({label:(n=this.layout.label)!=null?n:"",layout:e.unwrap(this.layout),entries:Object.entries(this.layout.entries).map(([a,i],u)=>{var l;if(i===null)return null;let s=this.entries[a];if(s===void 0)throw new Error(`'${a}' is a resource required to populate bind group layout '${(l=this.layout.label)!=null?l:"<unnamed>"}'.`);if("uniform"in i){let d;if(A(s)){if(!de(s))throw new (0, _chunkSBJR5ZQJcjs.j)(s);d={buffer:e.unwrap(s)}}else if(Re(s)){if(!de(s.allocatable))throw new (0, _chunkSBJR5ZQJcjs.j)(s.allocatable);d={buffer:e.unwrap(s.allocatable)}}else d={buffer:s};return{binding:u,resource:d}}if("storage"in i){let d;if(A(s)){if(!ge(s))throw new (0, _chunkSBJR5ZQJcjs.j)(s);d={buffer:e.unwrap(s)}}else if(Re(s)){if(!ge(s.allocatable))throw new (0, _chunkSBJR5ZQJcjs.j)(s.allocatable);d={buffer:e.unwrap(s.allocatable)}}else d={buffer:s};return{binding:u,resource:d}}if("texture"in i||"storageTexture"in i||"externalTexture"in i||"sampler"in i)return{binding:u,resource:s};throw new Error(`Malformed bind group entry: ${s} (${JSON.stringify(s)})`)}).filter(a=>a!==null)})}};var ce=class{constructor(e,r){this.device=e;this.jitTranspiler=r;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_buffers",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_samplers",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_textures",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_textureViews",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_externalTexturesStatus",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_unwrappedBindGroupLayouts",new H(e=>e.unwrap(this)));_chunkSBJR5ZQJcjs.d.call(void 0, this,"_unwrappedBindGroups",new H(e=>e.unwrap(this)));_chunkSBJR5ZQJcjs.d.call(void 0, this,"_pipelineExecutors",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_commandEncoder",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_plumStore",new ne)}get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}createBuffer(e,r){let n=le(this,e,r).$device(this.device);return this._buffers.push(n),n}destroy(){for(let e of this._buffers)e.destroy()}unwrap(e){if(A(e))return e.buffer;if(nt(e))return this._unwrappedBindGroupLayouts.getOrMake(e);if(at(e))return this._unwrappedBindGroups.getOrMake(e);throw new Error(`Unknown resource type: ${e}`)}textureFor(e){let r;"texture"in e?r=e.texture:r=e;let n=this._textures.get(r);if(!n){let a=_chunkSBJR5ZQJcjs.b.call(void 0, _chunkSBJR5ZQJcjs.a.call(void 0, {},r.descriptor),{usage:r.flags});if(n=this.device.createTexture(a),!n)throw new Error(`Failed to create texture for ${e}`);this._textures.set(r,n)}return n}viewFor(e){let r=this._textureViews.get(e);return r||(r=this.textureFor(e.texture).createView(e.descriptor),this._textureViews.set(e,r)),r}externalTextureFor(e){if(this._externalTexturesStatus.set(e,"clean"),e.descriptor.source===void 0)throw new Error("External texture source needs to be defined before use");return this.device.importExternalTexture(e.descriptor)}samplerFor(e){let r=this._samplers.get(e);if(!r){if(r=this.device.createSampler(e.descriptor),!r)throw new Error(`Failed to create sampler for ${e}`);this._samplers.set(e,r)}return r}setSource(e,r){this._externalTexturesStatus.set(e,"dirty"),e.descriptor.source=r}isDirty(e){return this._externalTexturesStatus.get(e)==="dirty"}markClean(e){this._externalTexturesStatus.set(e,"clean")}readPlum(e){return this._plumStore.get(e)}setPlum(e,r){if(typeof r=="function"){let n=r;this._plumStore.set(e,n(this._plumStore.get(e)))}else this._plumStore.set(e,r)}onPlumChange(e,r){return this._plumStore.subscribe(e,r)}makeRenderPipeline(e){var d,T,m,c,w,U,fe,Q,Z;let{vertexProgram:r,fragmentProgram:n}=new se(this,e.vertex.code,e.fragment.code,e.vertex.output).build({bindingGroup:((d=e.externalLayouts)!=null?d:[]).length}),a=this.device.createShaderModule({code:r.code}),i=this.device.createShaderModule({code:n.code}),u=this.device.createPipelineLayout({label:(T=e.label)!=null?T:"",bindGroupLayouts:[...(m=e.externalLayouts)!=null?m:[],r.bindGroupResolver.getBindGroupLayout(),n.bindGroupResolver.getBindGroupLayout()]}),s=this.device.createRenderPipeline({label:(c=e.label)!=null?c:"",layout:u,vertex:{module:a,buffers:(w=r.bindGroupResolver.getVertexBufferDescriptors())!=null?w:[]},fragment:{module:i,targets:(fe=(U=e.fragment)==null?void 0:U.target)!=null?fe:[]},primitive:e.primitive}),l=new Ve(this,s,r,n,(Z=(Q=e.externalLayouts)==null?void 0:Q.length)!=null?Z:0);return this._pipelineExecutors.push(l),l}makeComputePipeline(e){var s,l,d,T,m;let r=_chunkSBJR5ZQJcjs.e.call(void 0, ()=>{var c,w;return new pe(this,e.code,(c=e.workgroupSize)!=null?c:[1]).build({bindingGroup:((w=e.externalLayouts)!=null?w:[]).length})}),n=this.device.createShaderModule({code:r.code}),a=this.device.createPipelineLayout({label:(s=e.label)!=null?s:"",bindGroupLayouts:[...(l=e.externalLayouts)!=null?l:[],r.bindGroupResolver.getBindGroupLayout()]}),i=this.device.createComputePipeline({label:(d=e.label)!=null?d:"",layout:a,compute:{module:n}}),u=new Le(this,i,[r],(m=(T=e.externalLayouts)==null?void 0:T.length)!=null?m:0);return this._pipelineExecutors.push(u),u}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}},Ve=class{constructor(e,r,n,a,i,u){this.root=e;this.pipeline=r;this.vertexProgram=n;this.fragmentProgram=a;this.externalLayoutCount=i;this.label=u}execute(e){var T,m,c;let d=e,{vertexCount:r,instanceCount:n,firstVertex:a,firstInstance:i,externalBindGroups:u}=d,s=_chunkSBJR5ZQJcjs.c.call(void 0, d,["vertexCount","instanceCount","firstVertex","firstInstance","externalBindGroups"]);if(((T=u==null?void 0:u.length)!=null?T:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(m=u==null?void 0:u.length)!=null?m:0}`);let l=this.root.commandEncoder.beginRenderPass(_chunkSBJR5ZQJcjs.b.call(void 0, _chunkSBJR5ZQJcjs.a.call(void 0, {},s),{label:(c=this.label)!=null?c:""}));l.setPipeline(this.pipeline),(u!=null?u:[]).forEach((w,U)=>l.setBindGroup(U,w)),l.setBindGroup((u!=null?u:[]).length,this.vertexProgram.bindGroupResolver.getBindGroup()),l.setBindGroup((u!=null?u:[]).length+1,this.fragmentProgram.bindGroupResolver.getBindGroup());for(let[w,U]of this.vertexProgram.bindGroupResolver.getVertexBuffers())l.setVertexBuffer(U,w.allocatable.buffer);l.draw(r,n,a,i),l.end()}},Le=class{constructor(e,r,n,a,i){this.root=e;this.pipeline=r;this.programs=n;this.externalLayoutCount=a;this.label=i}execute(e){var i,u,s;let{workgroups:r=[1,1],externalBindGroups:n}=e!=null?e:{};if(((i=n==null?void 0:n.length)!=null?i:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(u=n==null?void 0:n.length)!=null?u:0}`);let a=this.root.commandEncoder.beginComputePass({label:(s=this.label)!=null?s:""});a.setPipeline(this.pipeline),(n!=null?n:[]).forEach((l,d)=>a.setBindGroup(d,l)),this.programs.forEach((l,d)=>a.setBindGroup((n!=null?n:[]).length+d,l.bindGroupResolver.getBindGroup())),a.dispatchWorkgroups(...r),a.end()}};async function ut(t){if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let e=await navigator.gpu.requestAdapter(t==null?void 0:t.adapter);if(!e)throw new Error("Could not find a compatible GPU");return new ce(await e.requestDevice(t==null?void 0:t.device),t==null?void 0:t.unstable_jitTranspiler)}function it(t){return new ce(t.device,t.unstable_jitTranspiler)}function ot(t,e){return le(void 0,t,e)}function st(t,e){t.write(e)}async function pt(t){return t.read()}var I=t=>Math.sqrt(t.x**2+t.y**2),C=t=>Math.sqrt(t.x**2+t.y**2+t.z**2),F=t=>Math.sqrt(t.x**2+t.y**2+t.z**2+t.w**2),R={length:{vec2f:I,vec2i:I,vec2u:I,vec3f:C,vec3i:C,vec3u:C,vec4f:F,vec4i:F,vec4u:F},add:{vec2f:(t,e)=>_chunkSBJR5ZQJcjs.P.call(void 0, t.x+e.x,t.y+e.y),vec2i:(t,e)=>_chunkSBJR5ZQJcjs.Q.call(void 0, t.x+e.x,t.y+e.y),vec2u:(t,e)=>_chunkSBJR5ZQJcjs.R.call(void 0, t.x+e.x,t.y+e.y),vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z),vec4f:(t,e)=>_chunkSBJR5ZQJcjs.V.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w),vec4i:(t,e)=>_chunkSBJR5ZQJcjs.W.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w),vec4u:(t,e)=>_chunkSBJR5ZQJcjs.X.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w)},sub:{vec2f:(t,e)=>_chunkSBJR5ZQJcjs.P.call(void 0, t.x-e.x,t.y-e.y),vec2i:(t,e)=>_chunkSBJR5ZQJcjs.Q.call(void 0, t.x-e.x,t.y-e.y),vec2u:(t,e)=>_chunkSBJR5ZQJcjs.R.call(void 0, t.x-e.x,t.y-e.y),vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z),vec4f:(t,e)=>_chunkSBJR5ZQJcjs.V.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w),vec4i:(t,e)=>_chunkSBJR5ZQJcjs.W.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w),vec4u:(t,e)=>_chunkSBJR5ZQJcjs.X.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w)},mul:{vec2f:(t,e)=>_chunkSBJR5ZQJcjs.P.call(void 0, t*e.x,t*e.y),vec2i:(t,e)=>_chunkSBJR5ZQJcjs.Q.call(void 0, t*e.x,t*e.y),vec2u:(t,e)=>_chunkSBJR5ZQJcjs.R.call(void 0, t*e.x,t*e.y),vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t*e.x,t*e.y,t*e.z),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t*e.x,t*e.y,t*e.z),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t*e.x,t*e.y,t*e.z),vec4f:(t,e)=>_chunkSBJR5ZQJcjs.V.call(void 0, t*e.x,t*e.y,t*e.z,t*e.w),vec4i:(t,e)=>_chunkSBJR5ZQJcjs.W.call(void 0, t*e.x,t*e.y,t*e.z,t*e.w),vec4u:(t,e)=>_chunkSBJR5ZQJcjs.X.call(void 0, t*e.x,t*e.y,t*e.z,t*e.w)},dot:{vec2f:(t,e)=>t.x*e.x+t.y*e.y,vec2i:(t,e)=>t.x*e.x+t.y*e.y,vec2u:(t,e)=>t.x*e.x+t.y*e.y,vec3f:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z,vec3i:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z,vec3u:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z,vec4f:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w,vec4i:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w,vec4u:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w},normalize:{vec2f:t=>{let e=I(t);return _chunkSBJR5ZQJcjs.P.call(void 0, t.x/e,t.y/e)},vec2i:t=>{let e=I(t);return _chunkSBJR5ZQJcjs.Q.call(void 0, t.x/e,t.y/e)},vec2u:t=>{let e=I(t);return _chunkSBJR5ZQJcjs.R.call(void 0, t.x/e,t.y/e)},vec3f:t=>{let e=C(t);return _chunkSBJR5ZQJcjs.S.call(void 0, t.x/e,t.y/e,t.z/e)},vec3i:t=>{let e=C(t);return _chunkSBJR5ZQJcjs.T.call(void 0, t.x/e,t.y/e,t.z/e)},vec3u:t=>{let e=C(t);return _chunkSBJR5ZQJcjs.U.call(void 0, t.x/e,t.y/e,t.z/e)},vec4f:t=>{let e=F(t);return _chunkSBJR5ZQJcjs.V.call(void 0, t.x/e,t.y/e,t.z/e,t.w/e)},vec4i:t=>{let e=F(t);return _chunkSBJR5ZQJcjs.W.call(void 0, t.x/e,t.y/e,t.z/e,t.w/e)},vec4u:t=>{let e=F(t);return _chunkSBJR5ZQJcjs.X.call(void 0, t.x/e,t.y/e,t.z/e,t.w/e)}},cross:{vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x)}};var wt={add(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`(${t} + ${e})`:R.add[t.kind](t,e)},sub(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`(${t} - ${e})`:R.sub[t.kind](t,e)},mul:(t,e)=>_chunkSBJR5ZQJcjs.f.call(void 0, )?`(${t} * ${e})`:R.mul[e.kind](t,e),dot(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`dot(${t}, ${e})`:R.dot[t.kind](t,e)},normalize:t=>_chunkSBJR5ZQJcjs.f.call(void 0, )?`normalize(${t})`:R.normalize[t.kind](t),cross(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`cross(${t}, ${e})`:R.cross[t.kind](t,e)},fract(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`fract(${t})`:t-Math.floor(t)},length(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`length(${t})`:R.length[t.kind](t)},sin(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`sin(${t})`:Math.sin(t)},cos(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`cos(${t})`:Math.cos(t)}};var Bt={Uniform:"uniform",Storage:"storage",Vertex:"vertex",bindGroupLayout:rt,init:ut,initFromDevice:it,createBuffer:ot,read:pt,write:st},Yr= exports.default =Bt;exports.RecursiveDataTypeError = _chunkSBJR5ZQJcjs.i; exports.default = Yr; exports.isUsableAsStorage = ge; exports.isUsableAsUniform = de; exports.isUsableAsVertex = bt; exports.std = wt; exports.tgpu = Bt;
2
52
  //# sourceMappingURL=index.cjs.map