typegpu 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Parsed } from 'typed-binary';
2
- import { A as AnyTgpuData, T as TgpuAllocatable, a as TgpuNamable, b as TgpuPlum, v as vecBase, c as vec3f, d as vec3i, e as vec3u } from './types-D2gslu2F.js';
3
- export { g as TexelFormat, f as TgpuData } from './types-D2gslu2F.js';
2
+ import { A as AnyTgpuData, T as TgpuAllocatable, a as TgpuNamable, b as TgpuPlum, v as vecBase, c as vec3f, d as vec3i, e as vec3u } from './vector-D5Vx-xhb.js';
3
+ export { f as TgpuData } from './vector-D5Vx-xhb.js';
4
4
 
5
5
  interface Unmanaged {
6
6
  readonly device: GPUDevice;
@@ -27,8 +27,8 @@ interface TgpuBuffer<TData extends AnyTgpuData> extends TgpuAllocatable<TData>,
27
27
  $device(device: GPUDevice): this & Unmanaged;
28
28
  destroy(): void;
29
29
  }
30
- declare function buffer<TData extends AnyTgpuData>(typeSchema: TData, initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined): TgpuBuffer<TData>;
31
- declare function buffer<TData extends AnyTgpuData>(typeSchema: TData, gpuBuffer: GPUBuffer): TgpuBuffer<TData>;
30
+ declare function createBuffer<TData extends AnyTgpuData>(typeSchema: TData, initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined): TgpuBuffer<TData>;
31
+ declare function createBuffer<TData extends AnyTgpuData>(typeSchema: TData, gpuBuffer: GPUBuffer): TgpuBuffer<TData>;
32
32
  declare function isUsableAsUniform<T extends TgpuBuffer<AnyTgpuData>>(buffer: T): buffer is T & Uniform;
33
33
  declare function isUsableAsStorage<T extends TgpuBuffer<AnyTgpuData>>(buffer: T): buffer is T & Storage;
34
34
  declare function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(buffer: T): buffer is T & Vertex;
@@ -36,15 +36,6 @@ declare function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(buffer: T):
36
36
  declare function write<TData extends AnyTgpuData>(buffer: TgpuBuffer<TData> & Unmanaged, data: Parsed<TData>): void;
37
37
  declare function read<TData extends AnyTgpuData>(buffer: TgpuBuffer<TData> & Unmanaged): Promise<Parsed<TData>>;
38
38
 
39
- declare const tgpu_Storage: typeof Storage;
40
- declare const tgpu_Uniform: typeof Uniform;
41
- declare const tgpu_Vertex: typeof Vertex;
42
- declare const tgpu_read: typeof read;
43
- declare const tgpu_write: typeof write;
44
- declare namespace tgpu {
45
- export { tgpu_Storage as Storage, tgpu_Uniform as Uniform, tgpu_Vertex as Vertex, buffer as createBuffer, tgpu_read as read, tgpu_write as write };
46
- }
47
-
48
39
  /**
49
40
  * @category Errors
50
41
  */
@@ -69,4 +60,13 @@ declare const std: {
69
60
  * @module typegpu
70
61
  */
71
62
 
63
+ declare const tgpu: {
64
+ Uniform: Uniform;
65
+ Storage: Storage;
66
+ Vertex: Vertex;
67
+ createBuffer: typeof createBuffer;
68
+ read: typeof read;
69
+ write: typeof write;
70
+ };
71
+
72
72
  export { AnyTgpuData, RecursiveDataTypeError, type TgpuBuffer, type Unmanaged, tgpu as default, isUsableAsStorage, isUsableAsUniform, isUsableAsVertex, std, tgpu };
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as M,b as a,e as b,f as V,g as E,j as y,k as p,l as T,m as u,n as i,o as s,p as g,q as m,r as l}from"./chunk-34O2K2PT.js";var z={};M(z,{Storage:()=>B,Uniform:()=>D,Vertex:()=>w,createBuffer:()=>_,read:()=>R,write:()=>G});import{BufferWriter as k}from"typed-binary";var D={usableAsUniform:!0},B={usableAsStorage:!0},w={usableAsVertex:!0};function _(e,t){return new A(e,t)}function $(e){return!!e.usableAsUniform}function F(e){return!!e.usableAsStorage}function K(e){return!!e.usableAsVertex}var A=class{constructor(t,r){this.dataType=t;this.initialOrBuffer=r;a(this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);a(this,"_device",null);a(this,"_buffer",null);a(this,"_destroyed",!1);a(this,"_label");a(this,"initial");a(this,"usableAsUniform",!1);a(this,"usableAsStorage",!1);a(this,"usableAsVertex",!1);b(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 k(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===D?GPUBufferUsage.UNIFORM:0,this.flags|=r===B?GPUBufferUsage.STORAGE:0,this.flags|=r===w?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r===D,this.usableAsStorage=this.usableAsStorage||r===B,this.usableAsVertex=this.usableAsVertex||r===w;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>"}`}};import{BufferReader as P,BufferWriter as S}from"typed-binary";function G(e,t){let r=e.buffer,c=e.device;if(r.mapState==="mapped"){let x=r.getMappedRange();e.dataType.write(new S(x),t);return}let v=V(e.dataType.size,e.dataType.byteAlignment),U=new ArrayBuffer(v);e.dataType.write(new S(U),t),c.queue.writeBuffer(r,0,U,0,v)}async function R(e){let t=e.buffer,r=e.device;if(t.mapState==="mapped"){let x=t.getMappedRange();return e.dataType.read(new P(x))}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let x=t.getMappedRange(),h=e.dataType.read(new P(x));return t.unmap(),h}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 U=e.dataType.read(new P(c.getMappedRange()));return c.unmap(),c.destroy(),U}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)=>y(e.x+t.x,e.y+t.y),vec2i:(e,t)=>p(e.x+t.x,e.y+t.y),vec2u:(e,t)=>T(e.x+t.x,e.y+t.y),vec3f:(e,t)=>u(e.x+t.x,e.y+t.y,e.z+t.z),vec3i:(e,t)=>i(e.x+t.x,e.y+t.y,e.z+t.z),vec3u:(e,t)=>s(e.x+t.x,e.y+t.y,e.z+t.z),vec4f:(e,t)=>g(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4i:(e,t)=>m(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4u:(e,t)=>l(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w)},sub:{vec2f:(e,t)=>y(e.x-t.x,e.y-t.y),vec2i:(e,t)=>p(e.x-t.x,e.y-t.y),vec2u:(e,t)=>T(e.x-t.x,e.y-t.y),vec3f:(e,t)=>u(e.x-t.x,e.y-t.y,e.z-t.z),vec3i:(e,t)=>i(e.x-t.x,e.y-t.y,e.z-t.z),vec3u:(e,t)=>s(e.x-t.x,e.y-t.y,e.z-t.z),vec4f:(e,t)=>g(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4i:(e,t)=>m(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4u:(e,t)=>l(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w)},mul:{vec2f:(e,t)=>y(e*t.x,e*t.y),vec2i:(e,t)=>p(e*t.x,e*t.y),vec2u:(e,t)=>T(e*t.x,e*t.y),vec3f:(e,t)=>u(e*t.x,e*t.y,e*t.z),vec3i:(e,t)=>i(e*t.x,e*t.y,e*t.z),vec3u:(e,t)=>s(e*t.x,e*t.y,e*t.z),vec4f:(e,t)=>g(e*t.x,e*t.y,e*t.z,e*t.w),vec4i:(e,t)=>m(e*t.x,e*t.y,e*t.z,e*t.w),vec4u:(e,t)=>l(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 y(e.x/t,e.y/t)},vec2i:e=>{let t=f(e);return p(e.x/t,e.y/t)},vec2u:e=>{let t=f(e);return T(e.x/t,e.y/t)},vec3f:e=>{let t=o(e);return u(e.x/t,e.y/t,e.z/t)},vec3i:e=>{let t=o(e);return i(e.x/t,e.y/t,e.z/t)},vec3u:e=>{let t=o(e);return s(e.x/t,e.y/t,e.z/t)},vec4f:e=>{let t=d(e);return g(e.x/t,e.y/t,e.z/t,e.w/t)},vec4i:e=>{let t=d(e);return m(e.x/t,e.y/t,e.z/t,e.w/t)},vec4u:e=>{let t=d(e);return l(e.x/t,e.y/t,e.z/t,e.w/t)}},cross:{vec3f:(e,t)=>u(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)=>i(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)=>s(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 q={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 ee=z;export{E as RecursiveDataTypeError,ee as default,F as isUsableAsStorage,$ as isUsableAsUniform,K as isUsableAsVertex,q as std,z as tgpu};
1
+ import{a,d as h,e as G,g as y,h as p,i as T,j as u,k as i,l as s,m as g,n as m,o as l}from"./chunk-3I5VAGHS.js";import{BufferWriter as R}from"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;a(this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);a(this,"_device",null);a(this,"_buffer",null);a(this,"_destroyed",!1);a(this,"_label");a(this,"initial");a(this,"usableAsUniform",!1);a(this,"usableAsStorage",!1);a(this,"usableAsVertex",!1);h(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 R(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>"}`}};import{BufferReader as P,BufferWriter as b}from"typed-binary";function _(e,t){let r=e.buffer,c=e.device;if(r.mapState==="mapped"){let x=r.getMappedRange();e.dataType.write(new b(x),t);return}let v=e.dataType.size,z=new ArrayBuffer(v);e.dataType.write(new b(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 P(x))}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let x=t.getMappedRange(),A=e.dataType.read(new P(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 P(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)=>y(e.x+t.x,e.y+t.y),vec2i:(e,t)=>p(e.x+t.x,e.y+t.y),vec2u:(e,t)=>T(e.x+t.x,e.y+t.y),vec3f:(e,t)=>u(e.x+t.x,e.y+t.y,e.z+t.z),vec3i:(e,t)=>i(e.x+t.x,e.y+t.y,e.z+t.z),vec3u:(e,t)=>s(e.x+t.x,e.y+t.y,e.z+t.z),vec4f:(e,t)=>g(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4i:(e,t)=>m(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4u:(e,t)=>l(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w)},sub:{vec2f:(e,t)=>y(e.x-t.x,e.y-t.y),vec2i:(e,t)=>p(e.x-t.x,e.y-t.y),vec2u:(e,t)=>T(e.x-t.x,e.y-t.y),vec3f:(e,t)=>u(e.x-t.x,e.y-t.y,e.z-t.z),vec3i:(e,t)=>i(e.x-t.x,e.y-t.y,e.z-t.z),vec3u:(e,t)=>s(e.x-t.x,e.y-t.y,e.z-t.z),vec4f:(e,t)=>g(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4i:(e,t)=>m(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4u:(e,t)=>l(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w)},mul:{vec2f:(e,t)=>y(e*t.x,e*t.y),vec2i:(e,t)=>p(e*t.x,e*t.y),vec2u:(e,t)=>T(e*t.x,e*t.y),vec3f:(e,t)=>u(e*t.x,e*t.y,e*t.z),vec3i:(e,t)=>i(e*t.x,e*t.y,e*t.z),vec3u:(e,t)=>s(e*t.x,e*t.y,e*t.z),vec4f:(e,t)=>g(e*t.x,e*t.y,e*t.z,e*t.w),vec4i:(e,t)=>m(e*t.x,e*t.y,e*t.z,e*t.w),vec4u:(e,t)=>l(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 y(e.x/t,e.y/t)},vec2i:e=>{let t=f(e);return p(e.x/t,e.y/t)},vec2u:e=>{let t=f(e);return T(e.x/t,e.y/t)},vec3f:e=>{let t=o(e);return u(e.x/t,e.y/t,e.z/t)},vec3i:e=>{let t=o(e);return i(e.x/t,e.y/t,e.z/t)},vec3u:e=>{let t=o(e);return s(e.x/t,e.y/t,e.z/t)},vec4f:e=>{let t=d(e);return g(e.x/t,e.y/t,e.z/t,e.w/t)},vec4i:e=>{let t=d(e);return m(e.x/t,e.y/t,e.z/t,e.w/t)},vec4u:e=>{let t=d(e);return l(e.x/t,e.y/t,e.z/t,e.w/t)}},cross:{vec3f:(e,t)=>u(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)=>i(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)=>s(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=K;export{G as RecursiveDataTypeError,L as default,E as isUsableAsStorage,M as isUsableAsUniform,k as isUsableAsVertex,$ as std,K as tgpu};
2
2
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tgpu.ts","../src/wgslBuffer.ts","../src/tgpuBufferUtils.ts","../src/data/vectorOps.ts","../src/std.ts","../src/index.ts"],"sourcesContent":["export {\n buffer as createBuffer,\n Uniform,\n Storage,\n Vertex,\n} from './wgslBuffer';\nexport { read, write } from './tgpuBufferUtils';\n","import { BufferWriter, type Parsed } from 'typed-binary';\nimport {\n type AnyTgpuData,\n type TgpuAllocatable,\n type TgpuNamable,\n isGPUBuffer,\n} from './types';\nimport type { TgpuPlum } from './wgslPlum';\n\n// ----------\n// Public API\n// ----------\n\nexport interface Unmanaged {\n readonly device: GPUDevice;\n readonly buffer: GPUBuffer;\n}\n\nexport interface Uniform {\n usableAsUniform: true;\n}\n\nexport interface Storage {\n usableAsStorage: true;\n}\n\nexport interface Vertex {\n usableAsVertex: true;\n}\n\nexport const Uniform = { usableAsUniform: true } as Uniform;\nexport const Storage = { usableAsStorage: true } as Storage;\nexport const Vertex = { usableAsVertex: true } as Vertex;\n\ntype UnionToIntersection<U> =\n // biome-ignore lint/suspicious/noExplicitAny: <had to be done>\n (U extends any ? (x: U) => void : never) extends (x: infer I) => void\n ? I\n : never;\n\nexport interface TgpuBuffer<TData extends AnyTgpuData>\n extends TgpuAllocatable<TData>,\n TgpuNamable {\n readonly destroyed: boolean;\n readonly label: string | undefined;\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]>;\n $addFlags(flags: GPUBufferUsageFlags): this;\n $device(device: GPUDevice): this & Unmanaged;\n\n destroy(): void;\n}\n\nexport function buffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined,\n): TgpuBuffer<TData>;\n\nexport function buffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n gpuBuffer: GPUBuffer,\n): TgpuBuffer<TData>;\n\nexport function buffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initialOrBuffer?: Parsed<TData> | TgpuPlum<Parsed<TData>> | GPUBuffer,\n): TgpuBuffer<TData> {\n return new TgpuBufferImpl(typeSchema, initialOrBuffer);\n}\n\nexport function isUsableAsUniform<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Uniform {\n return !!(buffer as unknown as Uniform).usableAsUniform;\n}\n\nexport function isUsableAsStorage<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Storage {\n return !!(buffer as unknown as Storage).usableAsStorage;\n}\n\nexport function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Vertex {\n return !!(buffer as unknown as Vertex).usableAsVertex;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuBufferImpl<TData extends AnyTgpuData> implements TgpuBuffer<TData> {\n public flags: GPUBufferUsageFlags =\n GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n private _device: GPUDevice | null = null;\n private _buffer: GPUBuffer | null = null;\n private _destroyed = false;\n\n private _label: string | undefined;\n readonly initial: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n\n public usableAsUniform = false;\n public usableAsStorage = false;\n public usableAsVertex = false;\n\n constructor(\n public readonly dataType: TData,\n public readonly initialOrBuffer?:\n | Parsed<TData>\n | TgpuPlum<Parsed<TData>>\n | GPUBuffer\n | undefined,\n ) {\n if (isGPUBuffer(initialOrBuffer)) {\n this._buffer = initialOrBuffer;\n } else {\n this.initial = initialOrBuffer;\n }\n }\n\n get label() {\n return this._label;\n }\n\n get buffer() {\n if (!this._device) {\n throw new Error(\n 'To use this property, make the buffer unmanaged by passing a GPUDevice to $device',\n );\n }\n if (this._destroyed) {\n throw new Error('This buffer has been destroyed');\n }\n if (!this._buffer) {\n this._buffer = this._device.createBuffer({\n size: this.dataType.size,\n usage: this.flags,\n mappedAtCreation: !!this.initial,\n });\n if (this.initial) {\n const writer = new BufferWriter(this._buffer.getMappedRange());\n this.dataType.write(writer, this.initial);\n this._buffer.unmap();\n }\n }\n return this._buffer;\n }\n\n get device() {\n if (!this._device) {\n throw new Error(\n 'This buffer has not been assigned a device. Use .$device(device) to assign a device',\n );\n }\n return this._device;\n }\n\n get destroyed() {\n return this._destroyed;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]> {\n for (const usage of usages) {\n this.flags |= usage === Uniform ? GPUBufferUsage.UNIFORM : 0;\n this.flags |= usage === Storage ? GPUBufferUsage.STORAGE : 0;\n this.flags |= usage === Vertex ? GPUBufferUsage.VERTEX : 0;\n this.usableAsUniform = this.usableAsUniform || usage === Uniform;\n this.usableAsStorage = this.usableAsStorage || usage === Storage;\n this.usableAsVertex = this.usableAsVertex || usage === Vertex;\n }\n return this as this & UnionToIntersection<T[number]>;\n }\n\n // Temporary solution\n $addFlags(flags: GPUBufferUsageFlags) {\n this.flags |= flags;\n return this;\n }\n\n $device(device: GPUDevice) {\n this._device = device;\n return this;\n }\n\n destroy() {\n if (this._destroyed) {\n return;\n }\n this._destroyed = true;\n this._buffer?.destroy();\n }\n\n toString(): string {\n return `buffer:${this._label ?? '<unnamed>'}`;\n }\n}\n","import { BufferReader, BufferWriter, type Parsed } from 'typed-binary';\nimport { roundUp } from './mathUtils';\nimport type { AnyTgpuData } from './types';\nimport type { TgpuBuffer, Unmanaged } from './wgslBuffer';\n\nexport function write<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData> & Unmanaged,\n data: Parsed<TData>,\n): void {\n const gpuBuffer = buffer.buffer;\n const device = buffer.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n buffer.dataType.write(new BufferWriter(mapped), data);\n return;\n }\n\n const size = roundUp(buffer.dataType.size, buffer.dataType.byteAlignment);\n const hostBuffer = new ArrayBuffer(size);\n buffer.dataType.write(new BufferWriter(hostBuffer), data);\n device.queue.writeBuffer(gpuBuffer, 0, hostBuffer, 0, size);\n}\n\nexport async function read<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData> & Unmanaged,\n): Promise<Parsed<TData>> {\n const gpuBuffer = buffer.buffer;\n const device = buffer.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n const res = buffer.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n return res;\n }\n\n if (gpuBuffer.usage & GPUBufferUsage.MAP_READ) {\n await gpuBuffer.mapAsync(GPUMapMode.READ);\n const mapped = gpuBuffer.getMappedRange();\n const res = buffer.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n gpuBuffer.unmap();\n return res;\n }\n\n const stagingBuffer = device.createBuffer({\n size: buffer.dataType.size,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(\n gpuBuffer,\n 0,\n stagingBuffer,\n 0,\n buffer.dataType.size,\n );\n\n device.queue.submit([commandEncoder.finish()]);\n await device.queue.onSubmittedWorkDone();\n await stagingBuffer.mapAsync(GPUMapMode.READ, 0, buffer.dataType.size);\n\n const res = buffer.dataType.read(\n new BufferReader(stagingBuffer.getMappedRange()),\n ) as Parsed<TData>;\n\n stagingBuffer.unmap();\n stagingBuffer.destroy();\n\n return res;\n}\n","import {\n type VecKind,\n vec2f,\n vec2i,\n vec2u,\n vec3f,\n vec3i,\n vec3u,\n vec4f,\n vec4i,\n vec4u,\n type vecBase,\n} from './vector';\n\nconst lengthVec2 = (v: vec2f | vec2i | vec2u) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: vec3f | vec3i | vec3u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: vec4f | vec4i | vec4u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nexport const VectorOps = {\n length: {\n vec2f: lengthVec2,\n vec2i: lengthVec2,\n vec2u: lengthVec2,\n vec3f: lengthVec3,\n vec3i: lengthVec3,\n vec3u: lengthVec3,\n vec4f: lengthVec4,\n vec4i: lengthVec4,\n vec4u: lengthVec4,\n } as Record<VecKind, (v: vecBase) => number>,\n\n add: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n mul: {\n vec2f: (s: number, v: vec2f) => vec2f(s * v.x, s * v.y),\n vec2i: (s: number, v: vec2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: vec2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: vec3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: vec3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: vec3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: vec4f) => vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: vec4i) => vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: vec4u) => vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n } as Record<VecKind, <T extends vecBase>(s: number, v: T) => T>,\n\n dot: {\n vec2f: (lhs: vec2f, rhs: vec2f) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2i: (lhs: vec2i, rhs: vec2i) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2u: (lhs: vec2u, rhs: vec2u) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec3f: (lhs: vec3f, rhs: vec3f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3i: (lhs: vec3i, rhs: vec3i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3u: (lhs: vec3u, rhs: vec3u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec4f: (lhs: vec4f, rhs: vec4f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4i: (lhs: vec4i, rhs: vec4i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4u: (lhs: vec4u, rhs: vec4u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: vec2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2i: (v: vec2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: vec2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: vec3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: vec3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: vec3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: vec4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: vec4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: vec4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vecBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: vec3f, b: vec3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3i: (a: vec3i, b: vec3i) => {\n return vec3i(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3u: (a: vec3u, b: vec3u) => {\n return vec3u(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3i' | 'vec3u',\n <T extends vec3f | vec3i | vec3u>(a: T, b: T) => T\n >,\n};\n","import type { vec3f, vec3i, vec3u, vecBase } from './data';\nimport { VectorOps } from './data/vectorOps';\n\nexport const std = {\n add: <T extends vecBase>(lhs: T, rhs: T): T =>\n VectorOps.add[lhs.kind](lhs, rhs),\n sub: <T extends vecBase>(lhs: T, rhs: T): T =>\n VectorOps.sub[lhs.kind](lhs, rhs),\n mul: <T extends vecBase>(s: number, v: T): T => VectorOps.mul[v.kind](s, v),\n dot: <T extends vecBase>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n normalize: <T extends vecBase>(v: T): T => VectorOps.normalize[v.kind](v),\n cross: <T extends vec3f | vec3i | vec3u>(a: T, b: T): T =>\n VectorOps.cross[a.kind](a, b),\n fract: (a: number): number => a - Math.floor(a),\n length: <T extends vecBase>(vector: T): number =>\n VectorOps.length[vector.kind](vector),\n sin: Math.sin,\n cos: Math.cos,\n};\n","/**\n * @module typegpu\n */\n\nexport * as tgpu from './tgpu';\nimport * as tgpu from './tgpu';\nexport default tgpu;\n\nexport { RecursiveDataTypeError } from './errors';\nexport {\n TgpuData,\n AnyTgpuData,\n TexelFormat,\n} from './types';\nexport { std } from './std';\nexport {\n isUsableAsStorage,\n isUsableAsUniform,\n isUsableAsVertex,\n} from './wgslBuffer';\n\nexport type {\n TgpuBuffer,\n Unmanaged,\n} from './wgslBuffer';\n"],"mappings":"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","names":["tgpu_exports","__export","Storage","Uniform","Vertex","buffer","read","write","BufferWriter","Uniform","Storage","Vertex","buffer","typeSchema","initialOrBuffer","TgpuBufferImpl","isUsableAsUniform","isUsableAsStorage","isUsableAsVertex","dataType","__publicField","isGPUBuffer","writer","BufferWriter","label","usages","usage","flags","device","_a","BufferReader","BufferWriter","write","buffer","data","gpuBuffer","device","mapped","BufferWriter","size","roundUp","hostBuffer","read","BufferReader","res","stagingBuffer","commandEncoder","lengthVec2","v","lengthVec3","lengthVec4","VectorOps","a","b","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","s","lhs","rhs","len","std","lhs","rhs","VectorOps","s","v","a","b","vector","src_default","tgpu_exports"]}
1
+ {"version":3,"sources":["../src/tgpuBuffer.ts","../src/tgpuBufferUtils.ts","../src/data/vectorOps.ts","../src/std.ts","../src/index.ts"],"sourcesContent":["import { BufferWriter, type Parsed } from 'typed-binary';\nimport type { TgpuNamable } from './namable';\nimport type { TgpuPlum } from './tgpuPlumTypes';\nimport { type AnyTgpuData, type TgpuAllocatable, isGPUBuffer } from './types';\n\n// ----------\n// Public API\n// ----------\n\nexport interface Unmanaged {\n readonly device: GPUDevice;\n readonly buffer: GPUBuffer;\n}\n\nexport interface Uniform {\n usableAsUniform: true;\n}\n\nexport interface Storage {\n usableAsStorage: true;\n}\n\nexport interface Vertex {\n usableAsVertex: true;\n}\n\nexport const Uniform = { usableAsUniform: true } as Uniform;\nexport const Storage = { usableAsStorage: true } as Storage;\nexport const Vertex = { usableAsVertex: true } as Vertex;\n\ntype UnionToIntersection<U> =\n // biome-ignore lint/suspicious/noExplicitAny: <had to be done>\n (U extends any ? (x: U) => void : never) extends (x: infer I) => void\n ? I\n : never;\n\nexport interface TgpuBuffer<TData extends AnyTgpuData>\n extends TgpuAllocatable<TData>,\n TgpuNamable {\n readonly destroyed: boolean;\n readonly label: string | undefined;\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]>;\n $addFlags(flags: GPUBufferUsageFlags): this;\n $device(device: GPUDevice): this & Unmanaged;\n\n destroy(): void;\n}\n\nexport function createBuffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined,\n): TgpuBuffer<TData>;\n\nexport function createBuffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n gpuBuffer: GPUBuffer,\n): TgpuBuffer<TData>;\n\nexport function createBuffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initialOrBuffer?: Parsed<TData> | TgpuPlum<Parsed<TData>> | GPUBuffer,\n): TgpuBuffer<TData> {\n return new TgpuBufferImpl(typeSchema, initialOrBuffer);\n}\n\nexport function isUsableAsUniform<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Uniform {\n return !!(buffer as unknown as Uniform).usableAsUniform;\n}\n\nexport function isUsableAsStorage<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Storage {\n return !!(buffer as unknown as Storage).usableAsStorage;\n}\n\nexport function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Vertex {\n return !!(buffer as unknown as Vertex).usableAsVertex;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuBufferImpl<TData extends AnyTgpuData> implements TgpuBuffer<TData> {\n public flags: GPUBufferUsageFlags =\n GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n private _device: GPUDevice | null = null;\n private _buffer: GPUBuffer | null = null;\n private _destroyed = false;\n\n private _label: string | undefined;\n readonly initial: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n\n public usableAsUniform = false;\n public usableAsStorage = false;\n public usableAsVertex = false;\n\n constructor(\n public readonly dataType: TData,\n public readonly initialOrBuffer?:\n | Parsed<TData>\n | TgpuPlum<Parsed<TData>>\n | GPUBuffer\n | undefined,\n ) {\n if (isGPUBuffer(initialOrBuffer)) {\n this._buffer = initialOrBuffer;\n } else {\n this.initial = initialOrBuffer;\n }\n }\n\n get label() {\n return this._label;\n }\n\n get buffer() {\n if (!this._device) {\n throw new Error(\n 'To use this property, make the buffer unmanaged by passing a GPUDevice to $device',\n );\n }\n if (this._destroyed) {\n throw new Error('This buffer has been destroyed');\n }\n if (!this._buffer) {\n this._buffer = this._device.createBuffer({\n size: this.dataType.size,\n usage: this.flags,\n mappedAtCreation: !!this.initial,\n });\n if (this.initial) {\n const writer = new BufferWriter(this._buffer.getMappedRange());\n this.dataType.write(writer, this.initial);\n this._buffer.unmap();\n }\n }\n return this._buffer;\n }\n\n get device() {\n if (!this._device) {\n throw new Error(\n 'This buffer has not been assigned a device. Use .$device(device) to assign a device',\n );\n }\n return this._device;\n }\n\n get destroyed() {\n return this._destroyed;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]> {\n for (const usage of usages) {\n this.flags |= usage === Uniform ? GPUBufferUsage.UNIFORM : 0;\n this.flags |= usage === Storage ? GPUBufferUsage.STORAGE : 0;\n this.flags |= usage === Vertex ? GPUBufferUsage.VERTEX : 0;\n this.usableAsUniform = this.usableAsUniform || usage === Uniform;\n this.usableAsStorage = this.usableAsStorage || usage === Storage;\n this.usableAsVertex = this.usableAsVertex || usage === Vertex;\n }\n return this as this & UnionToIntersection<T[number]>;\n }\n\n // Temporary solution\n $addFlags(flags: GPUBufferUsageFlags) {\n this.flags |= flags;\n return this;\n }\n\n $device(device: GPUDevice) {\n this._device = device;\n return this;\n }\n\n destroy() {\n if (this._destroyed) {\n return;\n }\n this._destroyed = true;\n this._buffer?.destroy();\n }\n\n toString(): string {\n return `buffer:${this._label ?? '<unnamed>'}`;\n }\n}\n","import { BufferReader, BufferWriter, type Parsed } from 'typed-binary';\nimport type { TgpuBuffer, Unmanaged } from './tgpuBuffer';\nimport type { AnyTgpuData } from './types';\n\nexport function write<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData> & Unmanaged,\n data: Parsed<TData>,\n): void {\n const gpuBuffer = buffer.buffer;\n const device = buffer.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n buffer.dataType.write(new BufferWriter(mapped), data);\n return;\n }\n\n const size = buffer.dataType.size;\n const hostBuffer = new ArrayBuffer(size);\n buffer.dataType.write(new BufferWriter(hostBuffer), data);\n device.queue.writeBuffer(gpuBuffer, 0, hostBuffer, 0, size);\n}\n\nexport async function read<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData> & Unmanaged,\n): Promise<Parsed<TData>> {\n const gpuBuffer = buffer.buffer;\n const device = buffer.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n const res = buffer.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n return res;\n }\n\n if (gpuBuffer.usage & GPUBufferUsage.MAP_READ) {\n await gpuBuffer.mapAsync(GPUMapMode.READ);\n const mapped = gpuBuffer.getMappedRange();\n const res = buffer.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n gpuBuffer.unmap();\n return res;\n }\n\n const stagingBuffer = device.createBuffer({\n size: buffer.dataType.size,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(\n gpuBuffer,\n 0,\n stagingBuffer,\n 0,\n buffer.dataType.size,\n );\n\n device.queue.submit([commandEncoder.finish()]);\n await device.queue.onSubmittedWorkDone();\n await stagingBuffer.mapAsync(GPUMapMode.READ, 0, buffer.dataType.size);\n\n const res = buffer.dataType.read(\n new BufferReader(stagingBuffer.getMappedRange()),\n ) as Parsed<TData>;\n\n stagingBuffer.unmap();\n stagingBuffer.destroy();\n\n return res;\n}\n","import {\n type VecKind,\n vec2f,\n vec2i,\n vec2u,\n vec3f,\n vec3i,\n vec3u,\n vec4f,\n vec4i,\n vec4u,\n type vecBase,\n} from './vector';\n\nconst lengthVec2 = (v: vec2f | vec2i | vec2u) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: vec3f | vec3i | vec3u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: vec4f | vec4i | vec4u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nexport const VectorOps = {\n length: {\n vec2f: lengthVec2,\n vec2i: lengthVec2,\n vec2u: lengthVec2,\n vec3f: lengthVec3,\n vec3i: lengthVec3,\n vec3u: lengthVec3,\n vec4f: lengthVec4,\n vec4i: lengthVec4,\n vec4u: lengthVec4,\n } as Record<VecKind, (v: vecBase) => number>,\n\n add: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n mul: {\n vec2f: (s: number, v: vec2f) => vec2f(s * v.x, s * v.y),\n vec2i: (s: number, v: vec2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: vec2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: vec3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: vec3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: vec3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: vec4f) => vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: vec4i) => vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: vec4u) => vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n } as Record<VecKind, <T extends vecBase>(s: number, v: T) => T>,\n\n dot: {\n vec2f: (lhs: vec2f, rhs: vec2f) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2i: (lhs: vec2i, rhs: vec2i) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2u: (lhs: vec2u, rhs: vec2u) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec3f: (lhs: vec3f, rhs: vec3f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3i: (lhs: vec3i, rhs: vec3i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3u: (lhs: vec3u, rhs: vec3u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec4f: (lhs: vec4f, rhs: vec4f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4i: (lhs: vec4i, rhs: vec4i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4u: (lhs: vec4u, rhs: vec4u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: vec2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2i: (v: vec2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: vec2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: vec3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: vec3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: vec3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: vec4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: vec4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: vec4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vecBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: vec3f, b: vec3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3i: (a: vec3i, b: vec3i) => {\n return vec3i(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3u: (a: vec3u, b: vec3u) => {\n return vec3u(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3i' | 'vec3u',\n <T extends vec3f | vec3i | vec3u>(a: T, b: T) => T\n >,\n};\n","import type { vec3f, vec3i, vec3u, vecBase } from './data';\nimport { VectorOps } from './data/vectorOps';\n\nexport const std = {\n add: <T extends vecBase>(lhs: T, rhs: T): T =>\n VectorOps.add[lhs.kind](lhs, rhs),\n sub: <T extends vecBase>(lhs: T, rhs: T): T =>\n VectorOps.sub[lhs.kind](lhs, rhs),\n mul: <T extends vecBase>(s: number, v: T): T => VectorOps.mul[v.kind](s, v),\n dot: <T extends vecBase>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n normalize: <T extends vecBase>(v: T): T => VectorOps.normalize[v.kind](v),\n cross: <T extends vec3f | vec3i | vec3u>(a: T, b: T): T =>\n VectorOps.cross[a.kind](a, b),\n fract: (a: number): number => a - Math.floor(a),\n length: <T extends vecBase>(vector: T): number =>\n VectorOps.length[vector.kind](vector),\n sin: Math.sin,\n cos: Math.cos,\n};\n","/**\n * @module typegpu\n */\n\nimport { Storage, Uniform, Vertex, createBuffer } from './tgpuBuffer';\nimport { read, write } from './tgpuBufferUtils';\n\nexport const tgpu = {\n Uniform,\n Storage,\n Vertex,\n\n createBuffer,\n read,\n write,\n};\nexport default tgpu;\n\nexport { RecursiveDataTypeError } from './errors';\nexport {\n TgpuData,\n AnyTgpuData,\n} from './types';\nexport { std } from './std';\nexport {\n isUsableAsStorage,\n isUsableAsUniform,\n isUsableAsVertex,\n} from './tgpuBuffer';\n\nexport type {\n TgpuBuffer,\n Unmanaged,\n} from './tgpuBuffer';\n"],"mappings":"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","names":["BufferWriter","Uniform","Storage","Vertex","createBuffer","typeSchema","initialOrBuffer","TgpuBufferImpl","isUsableAsUniform","buffer","isUsableAsStorage","isUsableAsVertex","dataType","__publicField","isGPUBuffer","writer","BufferWriter","label","usages","usage","flags","device","_a","BufferReader","BufferWriter","write","buffer","data","gpuBuffer","device","mapped","size","hostBuffer","read","res","stagingBuffer","commandEncoder","lengthVec2","v","lengthVec3","lengthVec4","VectorOps","a","b","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","s","lhs","rhs","len","std","lhs","rhs","VectorOps","s","v","a","b","vector","tgpu","Uniform","Storage","Vertex","createBuffer","read","write","src_default"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "typegpu",
3
3
  "private": false,
4
- "version": "0.1.1",
4
+ "version": "0.1.2",
5
5
  "description": "A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -61,12 +61,7 @@
61
61
  "bugs": {
62
62
  "url": "https://github.com/software-mansion/TypeGPU/issues"
63
63
  },
64
- "homepage": "https://docs.swmansion.com/TypeGPU",
65
- "devDependencies": {
66
- "@webgpu/types": "^0.1.43",
67
- "typescript": "^5.3.3",
68
- "tsup": "^8.0.2"
69
- },
64
+ "homepage": "https://typegpu.com",
70
65
  "packageManager": "pnpm@8.15.8+sha256.691fe176eea9a8a80df20e4976f3dfb44a04841ceb885638fe2a26174f81e65e",
71
66
  "dependencies": {
72
67
  "typed-binary": "^4.0.1"