@zephyr3d/device 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/base_types.js +12 -13
  2. package/dist/base_types.js.map +1 -1
  3. package/dist/builder/ast.js +34 -48
  4. package/dist/builder/ast.js.map +1 -1
  5. package/dist/builder/base.js +6 -2
  6. package/dist/builder/base.js.map +1 -1
  7. package/dist/builder/builtinfunc.js +42 -6
  8. package/dist/builder/builtinfunc.js.map +1 -1
  9. package/dist/builder/constructors.js +2 -0
  10. package/dist/builder/constructors.js.map +1 -1
  11. package/dist/builder/errors.js +4 -4
  12. package/dist/builder/errors.js.map +1 -1
  13. package/dist/builder/misc.js +1 -1
  14. package/dist/builder/misc.js.map +1 -1
  15. package/dist/builder/programbuilder.js +18 -27
  16. package/dist/builder/programbuilder.js.map +1 -1
  17. package/dist/builder/reflection.js +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +7 -6
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +150 -39
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +2 -1
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +29 -25
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js.map +1 -1
  28. package/dist/helpers/glyphmanager.js +26 -8
  29. package/dist/helpers/glyphmanager.js.map +1 -1
  30. package/dist/helpers/textureatlas.js +7 -3
  31. package/dist/helpers/textureatlas.js.map +1 -1
  32. package/dist/index.d.ts +290 -266
  33. package/dist/pool.js +15 -6
  34. package/dist/pool.js.map +1 -1
  35. package/dist/timer.js +3 -2
  36. package/dist/timer.js.map +1 -1
  37. package/dist/uniformdata.js +1 -1
  38. package/dist/uniformdata.js.map +1 -1
  39. package/dist/vertexdata.js +2 -2
  40. package/dist/vertexdata.js.map +1 -1
  41. package/package.json +80 -80
package/dist/pool.js CHANGED
@@ -64,11 +64,14 @@
64
64
  texture = this._device.createTexture2D(format, width, height, {
65
65
  mipmapping
66
66
  });
67
+ if (!texture) {
68
+ throw new Error(`Create 2D texture failed: ${format}-${width}x${height}`);
69
+ }
67
70
  this._memCost += texture.memCost;
68
71
  } else {
69
72
  texture = list.pop();
70
73
  if (list.length === 0) {
71
- this._freeTextures[hash] = undefined;
74
+ delete this._freeTextures[hash];
72
75
  }
73
76
  }
74
77
  this._allocatedTextures.set(texture, {
@@ -98,11 +101,14 @@
98
101
  texture = this._device.createTexture2DArray(format, width, height, numLayers, {
99
102
  mipmapping
100
103
  });
104
+ if (!texture) {
105
+ throw new Error(`Create 2DArray texture failed: ${format}-${width}x${height}x${numLayers}`);
106
+ }
101
107
  this._memCost += texture.memCost;
102
108
  } else {
103
109
  texture = list.pop();
104
110
  if (list.length === 0) {
105
- this._freeTextures[hash] = undefined;
111
+ delete this._freeTextures[hash];
106
112
  }
107
113
  }
108
114
  this._allocatedTextures.set(texture, {
@@ -130,11 +136,14 @@
130
136
  texture = this._device.createCubeTexture(format, size, {
131
137
  mipmapping
132
138
  });
139
+ if (!texture) {
140
+ throw new Error(`Create Cube texture failed: ${format}-${size}`);
141
+ }
133
142
  this._memCost += texture.memCost;
134
143
  } else {
135
144
  texture = list.pop();
136
145
  if (list.length === 0) {
137
- this._freeTextures[hash] = undefined;
146
+ delete this._freeTextures[hash];
138
147
  }
139
148
  }
140
149
  this._allocatedTextures.set(texture, {
@@ -175,7 +184,7 @@
175
184
  this.releaseTexture(colorAttachments[i]);
176
185
  }
177
186
  }
178
- if (typeof depthTexOrFormat === 'string') {
187
+ if (!!depthAttachment && typeof depthTexOrFormat === 'string') {
179
188
  this.releaseTexture(depthAttachment);
180
189
  }
181
190
  return fb;
@@ -215,11 +224,11 @@
215
224
  } else {
216
225
  fb = list.pop();
217
226
  if (list.length === 0) {
218
- this._freeFramebuffers[hash] = undefined;
227
+ delete this._freeFramebuffers[hash];
219
228
  }
220
229
  }
221
230
  // Mark referenced textures
222
- const info = this._allocatedTextures.get(depthAttachment);
231
+ const info = depthAttachment ? this._allocatedTextures.get(depthAttachment) : null;
223
232
  if (info) {
224
233
  info.refcount++;
225
234
  }
package/dist/pool.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sources":["../src/pool.ts"],"sourcesContent":["import type { MaybeArray } from '@zephyr3d/base';\r\nimport type { AbstractDevice, TextureFormat } from './base_types';\r\nimport type { BaseTexture, FrameBuffer, Texture2D, Texture2DArray, TextureCube } from './gpuobject';\r\n\r\n/**\r\n * ObjectPool class is responsible for managing and reusing textures and framebuffers.\r\n * @public\r\n */\r\nexport class Pool {\r\n /** @internal */\r\n private _memCost: number;\r\n /** @internal */\r\n private readonly _memCostThreshold: number;\r\n /** @internal */\r\n private readonly _device: AbstractDevice;\r\n /** @internal */\r\n private readonly _id: string | symbol;\r\n /** @internal */\r\n private _freeTextures: Record<string, BaseTexture[]> = {};\r\n /** @internal */\r\n private readonly _allocatedTextures: WeakMap<\r\n BaseTexture,\r\n { hash: string; refcount: number; dispose: boolean }\r\n > = new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseTextures: Set<BaseTexture> = new Set();\r\n /** @internal */\r\n private _freeFramebuffers: Record<string, FrameBuffer[]> = {};\r\n /** @internal */\r\n private readonly _allocatedFramebuffers: WeakMap<FrameBuffer, { hash: string; refcount: number }> =\r\n new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseFramebuffers: Set<FrameBuffer> = new Set();\r\n /**\r\n * Creates an instance of Pool class\r\n * @param device - Rendering device\r\n */\r\n constructor(device: AbstractDevice, id: string | symbol, memCostThreshold = 1024 * 1024 * 1024) {\r\n this._device = device;\r\n this._id = id;\r\n this._memCost = 0;\r\n this._memCostThreshold = memCostThreshold;\r\n this._freeTextures = {};\r\n this._allocatedTextures = new WeakMap();\r\n this._autoReleaseTextures = new Set();\r\n this._freeFramebuffers = {};\r\n this._allocatedFramebuffers = new WeakMap();\r\n this._autoReleaseFramebuffers = new Set();\r\n this._memCost = 0;\r\n }\r\n /**\r\n * Id for this pool\r\n */\r\n get id(): string | symbol {\r\n return this._id;\r\n }\r\n autoRelease(): void {\r\n // auto release objects\r\n for (const tex of this._autoReleaseTextures) {\r\n this.releaseTexture(tex);\r\n }\r\n this._autoReleaseTextures.clear();\r\n for (const fb of this._autoReleaseFramebuffers) {\r\n this.releaseFrameBuffer(fb);\r\n }\r\n this._autoReleaseFramebuffers.clear();\r\n // Free up video memory if memory usage is greater than specific value\r\n if (this._memCost >= this._memCostThreshold) {\r\n this.purge();\r\n }\r\n }\r\n /**\r\n * Fetch a temporal 2D texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - The format of the texture.\r\n * @param width - The width of the texture.\r\n * @param height - The height of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2D object.\r\n */\r\n fetchTemporalTexture2D(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n mipmapping = false\r\n ): Texture2D {\r\n const hash = `2d:${format}:${width}:${height}:${mipmapping ? 1 : 0}`;\r\n let texture: BaseTexture = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2D(format, width, height, { mipmapping });\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop();\r\n if (list.length === 0) {\r\n this._freeTextures[hash] = undefined;\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2D;\r\n }\r\n /**\r\n * Fetch a temporal 2D array texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param width - Width of the texture.\r\n * @param height - Height of the texture.\r\n * @param numLayers - Layer count of the texture\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2DArray object.\r\n */\r\n fetchTemporalTexture2DArray(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n numLayers: number,\r\n mipmapping = false\r\n ): Texture2DArray {\r\n const hash = `2darray:${format}:${width}:${height}:${numLayers}:${mipmapping ? 1 : 0}`;\r\n let texture: BaseTexture = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2DArray(format, width, height, numLayers, { mipmapping });\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop();\r\n if (list.length === 0) {\r\n this._freeTextures[hash] = undefined;\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2DArray;\r\n }\r\n /**\r\n * Fetch a temporal Cube texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param size - size of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched TextureCube object.\r\n */\r\n fetchTemporalTextureCube(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n size: number,\r\n mipmapping = false\r\n ): TextureCube {\r\n const hash = `cube:${format}:${size}:${mipmapping ? 1 : 0}`;\r\n let texture: BaseTexture = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createCubeTexture(format, size, { mipmapping });\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop();\r\n if (list.length === 0) {\r\n this._freeTextures[hash] = undefined;\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as TextureCube;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param width - Width of the framebuffer\r\n * @param height - Height of the framebuffer\r\n * @param colorAttachments - Array of color attachments or texture format of the framebuffer.\r\n * @param depthAttachment - Depth attachment or texture format of the framebuffer.\r\n * @param mipmapping - Whether mipmapping should be enabled when creating color attachment textures, default is false.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n fetchTemporalFramebuffer<T extends BaseTexture<unknown>>(\r\n autoRelease: boolean,\r\n width: number,\r\n height: number,\r\n colorTexOrFormat: MaybeArray<TextureFormat | T>,\r\n depthTexOrFormat: TextureFormat | T = null,\r\n mipmapping = false,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ): FrameBuffer {\r\n const colors = Array.isArray(colorTexOrFormat)\r\n ? colorTexOrFormat\r\n : colorTexOrFormat\r\n ? [colorTexOrFormat]\r\n : [];\r\n const colorAttachments = colors.map((val) => {\r\n return typeof val === 'string'\r\n ? this.fetchTemporalTexture2D(false, val, width, height, mipmapping)\r\n : val;\r\n });\r\n const depthAttachment =\r\n typeof depthTexOrFormat === 'string'\r\n ? this.fetchTemporalTexture2D(false, depthTexOrFormat, width, height, false)\r\n : depthTexOrFormat;\r\n const fb = this.createTemporalFramebuffer(\r\n autoRelease,\r\n colorAttachments,\r\n depthAttachment,\r\n sampleCount,\r\n ignoreDepthStencil,\r\n attachmentMipLevel,\r\n attachmentCubeface,\r\n attachmentLayer\r\n );\r\n for (let i = 0; i < colors.length; i++) {\r\n if (typeof colors[i] === 'string') {\r\n this.releaseTexture(colorAttachments[i]);\r\n }\r\n }\r\n if (typeof depthTexOrFormat === 'string') {\r\n this.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param colorAttachments - Array of color attachments for the framebuffer.\r\n * @param depthAttachment - Depth attachment for the framebuffer.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0.\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0.\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0.\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n createTemporalFramebuffer(\r\n autoRelease: boolean,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: BaseTexture = null,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ): FrameBuffer {\r\n colorAttachments = colorAttachments ?? [];\r\n let hash = `${depthAttachment?.uid ?? 0}:${sampleCount ?? 1}:${ignoreDepthStencil ? 1 : 0}`;\r\n if (colorAttachments.length > 0) {\r\n hash += `:${attachmentMipLevel}:${attachmentCubeface}:${attachmentLayer}`;\r\n for (const tex of colorAttachments) {\r\n hash += `:${tex.uid}`;\r\n }\r\n }\r\n let fb: FrameBuffer = null;\r\n const list = this._freeFramebuffers[hash];\r\n if (!list) {\r\n fb = this._device.createFrameBuffer(colorAttachments, depthAttachment, {\r\n ignoreDepthStencil,\r\n sampleCount\r\n });\r\n for (let i = 0; i < fb.getColorAttachments().length; i++) {\r\n fb.setColorAttachmentMipLevel(i, attachmentMipLevel);\r\n fb.setColorAttachmentCubeFace(i, attachmentCubeface);\r\n fb.setColorAttachmentLayer(i, attachmentLayer);\r\n }\r\n } else {\r\n fb = list.pop();\r\n if (list.length === 0) {\r\n this._freeFramebuffers[hash] = undefined;\r\n }\r\n }\r\n // Mark referenced textures\r\n const info = this._allocatedTextures.get(depthAttachment);\r\n if (info) {\r\n info.refcount++;\r\n }\r\n for (const tex of colorAttachments) {\r\n const info = this._allocatedTextures.get(tex);\r\n if (info) {\r\n info.refcount++;\r\n }\r\n }\r\n this._allocatedFramebuffers.set(fb, { hash, refcount: 1 });\r\n if (autoRelease) {\r\n this._autoReleaseFramebuffers.add(fb);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Dispose a texture that is allocated from the object pool.\r\n * @param texture - The texture to dispose.\r\n */\r\n disposeTexture(texture: BaseTexture): void {\r\n this.safeReleaseTexture(texture, true);\r\n }\r\n /**\r\n * Release a texture back to the object pool.\r\n * @param texture - The texture to release.\r\n */\r\n releaseTexture(texture: BaseTexture): void {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseTexture(): texture is not allocated from pool`);\r\n } else {\r\n this.safeReleaseTexture(texture);\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given texture\r\n * @param texture - The texture to retain\r\n */\r\n retainTexture(texture: BaseTexture): void {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(`ObjectPool.retainTexture(): texture is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Dispose a framebuffer that is allocated from the object pool.\r\n * @param fb - The framebuffer to dispose.\r\n */\r\n disposeFrameBuffer(fb: FrameBuffer): void {\r\n const hash = this._allocatedFramebuffers.get(fb);\r\n if (!hash) {\r\n console.error(`ObjectPool.disposeFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n /**\r\n * Release a framebuffer back to the object pool.\r\n * @param fb - The framebuffer to release.\r\n */\r\n releaseFrameBuffer(fb: FrameBuffer): void {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this.internalDisposeFrameBuffer(fb);\r\n const list = this._freeFramebuffers[info.hash];\r\n if (list) {\r\n list.push(fb);\r\n } else {\r\n this._freeFramebuffers[info.hash] = [fb];\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given framebuffer\r\n * @param fb - The framebuffer to retain\r\n */\r\n retainFrameBuffer(fb: FrameBuffer): void {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.retainFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Purge the object pool by disposing all free framebuffers and textures.\r\n */\r\n purge(): void {\r\n for (const k in this._freeFramebuffers) {\r\n const list = this._freeFramebuffers[k];\r\n if (list) {\r\n for (const fb of this._freeFramebuffers[k]) {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n }\r\n this._freeFramebuffers = {};\r\n for (const k in this._freeTextures) {\r\n const list = this._freeTextures[k];\r\n for (const tex of list) {\r\n this._memCost -= tex.memCost;\r\n tex.dispose();\r\n }\r\n }\r\n this._freeTextures = {};\r\n }\r\n /** @internal */\r\n private internalDisposeFrameBuffer(fb: FrameBuffer): void {\r\n if (fb) {\r\n // Release attachment textures\r\n const colorAttachments = fb.getColorAttachments();\r\n if (colorAttachments) {\r\n for (const tex of colorAttachments) {\r\n this.safeReleaseTexture(tex);\r\n }\r\n }\r\n const depthAttachment = fb.getDepthAttachment();\r\n if (depthAttachment) {\r\n this.safeReleaseTexture(depthAttachment);\r\n }\r\n this._allocatedFramebuffers.delete(fb);\r\n this._autoReleaseFramebuffers.delete(fb);\r\n }\r\n }\r\n /** @internal */\r\n private safeReleaseTexture(texture: BaseTexture, purge = false): void {\r\n const info = this._allocatedTextures.get(texture);\r\n if (info) {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this._allocatedTextures.delete(texture);\r\n this._autoReleaseTextures.delete(texture);\r\n if (purge || info.dispose) {\r\n this._memCost -= texture.memCost;\r\n texture.dispose();\r\n } else {\r\n const list = this._freeTextures[info.hash];\r\n if (list) {\r\n list.push(texture);\r\n } else {\r\n this._freeTextures[info.hash] = [texture];\r\n }\r\n }\r\n } else if (purge) {\r\n info.dispose = true;\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["Pool","_freeTextures","_allocatedTextures","WeakMap","_autoReleaseTextures","Set","_freeFramebuffers","_allocatedFramebuffers","_autoReleaseFramebuffers","device","id","memCostThreshold","_device","_id","_memCost","_memCostThreshold","autoRelease","tex","releaseTexture","clear","fb","releaseFrameBuffer","purge","fetchTemporalTexture2D","format","width","height","mipmapping","hash","texture","list","createTexture2D","memCost","pop","length","undefined","set","refcount","dispose","add","fetchTemporalTexture2DArray","numLayers","createTexture2DArray","fetchTemporalTextureCube","size","createCubeTexture","fetchTemporalFramebuffer","colorTexOrFormat","depthTexOrFormat","sampleCount","ignoreDepthStencil","attachmentMipLevel","attachmentCubeface","attachmentLayer","colors","Array","isArray","colorAttachments","map","val","depthAttachment","createTemporalFramebuffer","i","uid","createFrameBuffer","getColorAttachments","setColorAttachmentMipLevel","setColorAttachmentCubeFace","setColorAttachmentLayer","info","get","disposeTexture","safeReleaseTexture","console","error","retainTexture","disposeFrameBuffer","internalDisposeFrameBuffer","push","retainFrameBuffer","k","getDepthAttachment","delete"],"mappings":"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"}
1
+ {"version":3,"file":"pool.js","sources":["../src/pool.ts"],"sourcesContent":["import type { Nullable, MaybeArray } from '@zephyr3d/base';\r\nimport type { AbstractDevice, TextureFormat } from './base_types';\r\nimport type { BaseTexture, FrameBuffer, Texture2D, Texture2DArray, TextureCube } from './gpuobject';\r\n\r\n/**\r\n * ObjectPool class is responsible for managing and reusing textures and framebuffers.\r\n * @public\r\n */\r\nexport class Pool {\r\n /** @internal */\r\n private _memCost: number;\r\n /** @internal */\r\n private readonly _memCostThreshold: number;\r\n /** @internal */\r\n private readonly _device: AbstractDevice;\r\n /** @internal */\r\n private readonly _id: string | symbol;\r\n /** @internal */\r\n private _freeTextures: Record<string, BaseTexture[]> = {};\r\n /** @internal */\r\n private readonly _allocatedTextures: WeakMap<\r\n BaseTexture,\r\n { hash: string; refcount: number; dispose: boolean }\r\n > = new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseTextures: Set<BaseTexture> = new Set();\r\n /** @internal */\r\n private _freeFramebuffers: Record<string, FrameBuffer[]> = {};\r\n /** @internal */\r\n private readonly _allocatedFramebuffers: WeakMap<FrameBuffer, { hash: string; refcount: number }> =\r\n new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseFramebuffers: Set<FrameBuffer> = new Set();\r\n /**\r\n * Creates an instance of Pool class\r\n * @param device - Rendering device\r\n */\r\n constructor(device: AbstractDevice, id: string | symbol, memCostThreshold = 1024 * 1024 * 1024) {\r\n this._device = device;\r\n this._id = id;\r\n this._memCost = 0;\r\n this._memCostThreshold = memCostThreshold;\r\n this._freeTextures = {};\r\n this._allocatedTextures = new WeakMap();\r\n this._autoReleaseTextures = new Set();\r\n this._freeFramebuffers = {};\r\n this._allocatedFramebuffers = new WeakMap();\r\n this._autoReleaseFramebuffers = new Set();\r\n this._memCost = 0;\r\n }\r\n /**\r\n * Id for this pool\r\n */\r\n get id() {\r\n return this._id;\r\n }\r\n autoRelease() {\r\n // auto release objects\r\n for (const tex of this._autoReleaseTextures) {\r\n this.releaseTexture(tex);\r\n }\r\n this._autoReleaseTextures.clear();\r\n for (const fb of this._autoReleaseFramebuffers) {\r\n this.releaseFrameBuffer(fb);\r\n }\r\n this._autoReleaseFramebuffers.clear();\r\n // Free up video memory if memory usage is greater than specific value\r\n if (this._memCost >= this._memCostThreshold) {\r\n this.purge();\r\n }\r\n }\r\n /**\r\n * Fetch a temporal 2D texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - The format of the texture.\r\n * @param width - The width of the texture.\r\n * @param height - The height of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2D object.\r\n */\r\n fetchTemporalTexture2D(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n mipmapping = false\r\n ) {\r\n const hash = `2d:${format}:${width}:${height}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2D(format, width, height, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create 2D texture failed: ${format}-${width}x${height}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2D;\r\n }\r\n /**\r\n * Fetch a temporal 2D array texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param width - Width of the texture.\r\n * @param height - Height of the texture.\r\n * @param numLayers - Layer count of the texture\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2DArray object.\r\n */\r\n fetchTemporalTexture2DArray(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n numLayers: number,\r\n mipmapping = false\r\n ) {\r\n const hash = `2darray:${format}:${width}:${height}:${numLayers}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2DArray(format, width, height, numLayers, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create 2DArray texture failed: ${format}-${width}x${height}x${numLayers}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2DArray;\r\n }\r\n /**\r\n * Fetch a temporal Cube texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param size - size of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched TextureCube object.\r\n */\r\n fetchTemporalTextureCube(autoRelease: boolean, format: TextureFormat, size: number, mipmapping = false) {\r\n const hash = `cube:${format}:${size}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createCubeTexture(format, size, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create Cube texture failed: ${format}-${size}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as TextureCube;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param width - Width of the framebuffer\r\n * @param height - Height of the framebuffer\r\n * @param colorAttachments - Array of color attachments or texture format of the framebuffer.\r\n * @param depthAttachment - Depth attachment or texture format of the framebuffer.\r\n * @param mipmapping - Whether mipmapping should be enabled when creating color attachment textures, default is false.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n fetchTemporalFramebuffer<T extends BaseTexture<unknown>>(\r\n autoRelease: boolean,\r\n width: number,\r\n height: number,\r\n colorTexOrFormat: MaybeArray<TextureFormat | T>,\r\n depthTexOrFormat: Nullable<TextureFormat | T> = null,\r\n mipmapping = false,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ) {\r\n const colors = Array.isArray(colorTexOrFormat)\r\n ? colorTexOrFormat\r\n : colorTexOrFormat\r\n ? [colorTexOrFormat]\r\n : [];\r\n const colorAttachments = colors.map((val) => {\r\n return typeof val === 'string'\r\n ? this.fetchTemporalTexture2D(false, val, width, height, mipmapping)\r\n : val;\r\n });\r\n const depthAttachment =\r\n typeof depthTexOrFormat === 'string'\r\n ? this.fetchTemporalTexture2D(false, depthTexOrFormat, width, height, false)\r\n : depthTexOrFormat;\r\n const fb = this.createTemporalFramebuffer(\r\n autoRelease,\r\n colorAttachments,\r\n depthAttachment,\r\n sampleCount,\r\n ignoreDepthStencil,\r\n attachmentMipLevel,\r\n attachmentCubeface,\r\n attachmentLayer\r\n );\r\n for (let i = 0; i < colors.length; i++) {\r\n if (typeof colors[i] === 'string') {\r\n this.releaseTexture(colorAttachments[i]);\r\n }\r\n }\r\n if (!!depthAttachment && typeof depthTexOrFormat === 'string') {\r\n this.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param colorAttachments - Array of color attachments for the framebuffer.\r\n * @param depthAttachment - Depth attachment for the framebuffer.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0.\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0.\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0.\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n createTemporalFramebuffer(\r\n autoRelease: boolean,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture> = null,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ) {\r\n colorAttachments = colorAttachments ?? [];\r\n let hash = `${depthAttachment?.uid ?? 0}:${sampleCount ?? 1}:${ignoreDepthStencil ? 1 : 0}`;\r\n if (colorAttachments.length > 0) {\r\n hash += `:${attachmentMipLevel}:${attachmentCubeface}:${attachmentLayer}`;\r\n for (const tex of colorAttachments) {\r\n hash += `:${tex.uid}`;\r\n }\r\n }\r\n let fb: Nullable<FrameBuffer> = null;\r\n const list = this._freeFramebuffers[hash];\r\n if (!list) {\r\n fb = this._device.createFrameBuffer(colorAttachments, depthAttachment, {\r\n ignoreDepthStencil,\r\n sampleCount\r\n });\r\n for (let i = 0; i < fb.getColorAttachments().length; i++) {\r\n fb.setColorAttachmentMipLevel(i, attachmentMipLevel);\r\n fb.setColorAttachmentCubeFace(i, attachmentCubeface);\r\n fb.setColorAttachmentLayer(i, attachmentLayer);\r\n }\r\n } else {\r\n fb = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeFramebuffers[hash];\r\n }\r\n }\r\n // Mark referenced textures\r\n const info = depthAttachment ? this._allocatedTextures.get(depthAttachment) : null;\r\n if (info) {\r\n info.refcount++;\r\n }\r\n for (const tex of colorAttachments) {\r\n const info = this._allocatedTextures.get(tex);\r\n if (info) {\r\n info.refcount++;\r\n }\r\n }\r\n this._allocatedFramebuffers.set(fb, { hash, refcount: 1 });\r\n if (autoRelease) {\r\n this._autoReleaseFramebuffers.add(fb);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Dispose a texture that is allocated from the object pool.\r\n * @param texture - The texture to dispose.\r\n */\r\n disposeTexture(texture: BaseTexture) {\r\n this.safeReleaseTexture(texture, true);\r\n }\r\n /**\r\n * Release a texture back to the object pool.\r\n * @param texture - The texture to release.\r\n */\r\n releaseTexture(texture: BaseTexture) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseTexture(): texture is not allocated from pool`);\r\n } else {\r\n this.safeReleaseTexture(texture);\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given texture\r\n * @param texture - The texture to retain\r\n */\r\n retainTexture(texture: BaseTexture) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(`ObjectPool.retainTexture(): texture is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Dispose a framebuffer that is allocated from the object pool.\r\n * @param fb - The framebuffer to dispose.\r\n */\r\n disposeFrameBuffer(fb: FrameBuffer) {\r\n const hash = this._allocatedFramebuffers.get(fb);\r\n if (!hash) {\r\n console.error(`ObjectPool.disposeFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n /**\r\n * Release a framebuffer back to the object pool.\r\n * @param fb - The framebuffer to release.\r\n */\r\n releaseFrameBuffer(fb: FrameBuffer) {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this.internalDisposeFrameBuffer(fb);\r\n const list = this._freeFramebuffers[info.hash];\r\n if (list) {\r\n list.push(fb);\r\n } else {\r\n this._freeFramebuffers[info.hash] = [fb];\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given framebuffer\r\n * @param fb - The framebuffer to retain\r\n */\r\n retainFrameBuffer(fb: FrameBuffer) {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.retainFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Purge the object pool by disposing all free framebuffers and textures.\r\n */\r\n purge() {\r\n for (const k in this._freeFramebuffers) {\r\n const list = this._freeFramebuffers[k];\r\n if (list) {\r\n for (const fb of this._freeFramebuffers[k]) {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n }\r\n this._freeFramebuffers = {};\r\n for (const k in this._freeTextures) {\r\n const list = this._freeTextures[k];\r\n for (const tex of list) {\r\n this._memCost -= tex.memCost;\r\n tex.dispose();\r\n }\r\n }\r\n this._freeTextures = {};\r\n }\r\n /** @internal */\r\n private internalDisposeFrameBuffer(fb: FrameBuffer) {\r\n if (fb) {\r\n // Release attachment textures\r\n const colorAttachments = fb.getColorAttachments();\r\n if (colorAttachments) {\r\n for (const tex of colorAttachments) {\r\n this.safeReleaseTexture(tex);\r\n }\r\n }\r\n const depthAttachment = fb.getDepthAttachment();\r\n if (depthAttachment) {\r\n this.safeReleaseTexture(depthAttachment);\r\n }\r\n this._allocatedFramebuffers.delete(fb);\r\n this._autoReleaseFramebuffers.delete(fb);\r\n }\r\n }\r\n /** @internal */\r\n private safeReleaseTexture(texture: BaseTexture, purge = false) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (info) {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this._allocatedTextures.delete(texture);\r\n this._autoReleaseTextures.delete(texture);\r\n if (purge || info.dispose) {\r\n this._memCost -= texture.memCost;\r\n texture.dispose();\r\n } else {\r\n const list = this._freeTextures[info.hash];\r\n if (list) {\r\n list.push(texture);\r\n } else {\r\n this._freeTextures[info.hash] = [texture];\r\n }\r\n }\r\n } else if (purge) {\r\n info.dispose = true;\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["Pool","_freeTextures","_allocatedTextures","WeakMap","_autoReleaseTextures","Set","_freeFramebuffers","_allocatedFramebuffers","_autoReleaseFramebuffers","device","id","memCostThreshold","_device","_id","_memCost","_memCostThreshold","autoRelease","tex","releaseTexture","clear","fb","releaseFrameBuffer","purge","fetchTemporalTexture2D","format","width","height","mipmapping","hash","texture","list","createTexture2D","Error","memCost","pop","length","set","refcount","dispose","add","fetchTemporalTexture2DArray","numLayers","createTexture2DArray","fetchTemporalTextureCube","size","createCubeTexture","fetchTemporalFramebuffer","colorTexOrFormat","depthTexOrFormat","sampleCount","ignoreDepthStencil","attachmentMipLevel","attachmentCubeface","attachmentLayer","colors","Array","isArray","colorAttachments","map","val","depthAttachment","createTemporalFramebuffer","i","uid","createFrameBuffer","getColorAttachments","setColorAttachmentMipLevel","setColorAttachmentCubeFace","setColorAttachmentLayer","info","get","disposeTexture","safeReleaseTexture","console","error","retainTexture","disposeFrameBuffer","internalDisposeFrameBuffer","push","retainFrameBuffer","k","getDepthAttachment","delete"],"mappings":"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"}
package/dist/timer.js CHANGED
@@ -11,7 +11,8 @@
11
11
  /** @internal */ _ended;
12
12
  constructor(){
13
13
  this._cpuTimer = window.performance || window.Date;
14
- this._cpuTime = null;
14
+ this._cpuStart = 0;
15
+ this._cpuTime = 0;
15
16
  this._ended = false;
16
17
  }
17
18
  now() {
@@ -19,7 +20,7 @@
19
20
  }
20
21
  begin() {
21
22
  this._cpuStart = this.now();
22
- this._cpuTime = null;
23
+ this._cpuTime = 0;
23
24
  this._ended = false;
24
25
  }
25
26
  end() {
package/dist/timer.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","sources":["../src/timer.ts"],"sourcesContent":["/**\r\n * Abstract timer interface\r\n * @public\r\n */\r\nexport interface ITimer {\r\n begin(): void;\r\n end(): void;\r\n ended(): boolean;\r\n elapsed(): number;\r\n}\r\n\r\n/**\r\n * CPU timer class\r\n * @public\r\n */\r\nexport class CPUTimer implements ITimer {\r\n /** @internal */\r\n private readonly _cpuTimer: Performance | DateConstructor;\r\n /** @internal */\r\n private _cpuStart: number;\r\n /** @internal */\r\n private _cpuTime: number;\r\n /** @internal */\r\n private _ended: boolean;\r\n constructor() {\r\n this._cpuTimer = window.performance || window.Date;\r\n this._cpuTime = null;\r\n this._ended = false;\r\n }\r\n now(): number {\r\n return this._cpuTimer.now();\r\n }\r\n begin(): void {\r\n this._cpuStart = this.now();\r\n this._cpuTime = null;\r\n this._ended = false;\r\n }\r\n end(): void {\r\n this._cpuTime = this.now() - this._cpuStart;\r\n this._ended = true;\r\n }\r\n ended(): boolean {\r\n return this._ended;\r\n }\r\n elapsed(): number {\r\n return this._cpuTime;\r\n }\r\n}\r\n"],"names":["CPUTimer","_cpuTimer","window","performance","Date","_cpuTime","_ended","now","begin","_cpuStart","end","ended","elapsed"],"mappings":"AAAA;;;;;;AAcC,IACM,MAAMA,QAAAA,CAAAA;qBAEX,SAA0D;qBAE1D,SAA0B;qBAE1B,QAAyB;qBAEzB,MAAwB;IACxB,WAAc,EAAA;AACZ,QAAA,IAAI,CAACC,SAAS,GAAGC,OAAOC,WAAW,IAAID,OAAOE,IAAI;QAClD,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,MAAM,GAAG,KAAA;AAChB;IACAC,GAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAACN,SAAS,CAACM,GAAG,EAAA;AAC3B;IACAC,KAAc,GAAA;AACZ,QAAA,IAAI,CAACC,SAAS,GAAG,IAAI,CAACF,GAAG,EAAA;QACzB,IAAI,CAACF,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,MAAM,GAAG,KAAA;AAChB;IACAI,GAAY,GAAA;QACV,IAAI,CAACL,QAAQ,GAAG,IAAI,CAACE,GAAG,EAAA,GAAK,IAAI,CAACE,SAAS;QAC3C,IAAI,CAACH,MAAM,GAAG,IAAA;AAChB;IACAK,KAAiB,GAAA;QACf,OAAO,IAAI,CAACL,MAAM;AACpB;IACAM,OAAkB,GAAA;QAChB,OAAO,IAAI,CAACP,QAAQ;AACtB;AACF;;;;"}
1
+ {"version":3,"file":"timer.js","sources":["../src/timer.ts"],"sourcesContent":["/**\r\n * Abstract timer interface\r\n * @public\r\n */\r\nexport interface ITimer {\r\n begin(): void;\r\n end(): void;\r\n ended(): boolean;\r\n elapsed(): number;\r\n}\r\n\r\n/**\r\n * CPU timer class\r\n * @public\r\n */\r\nexport class CPUTimer implements ITimer {\r\n /** @internal */\r\n private readonly _cpuTimer: Performance | DateConstructor;\r\n /** @internal */\r\n private _cpuStart: number;\r\n /** @internal */\r\n private _cpuTime: number;\r\n /** @internal */\r\n private _ended: boolean;\r\n constructor() {\r\n this._cpuTimer = window.performance || window.Date;\r\n this._cpuStart = 0;\r\n this._cpuTime = 0;\r\n this._ended = false;\r\n }\r\n now() {\r\n return this._cpuTimer.now();\r\n }\r\n begin() {\r\n this._cpuStart = this.now();\r\n this._cpuTime = 0;\r\n this._ended = false;\r\n }\r\n end() {\r\n this._cpuTime = this.now() - this._cpuStart;\r\n this._ended = true;\r\n }\r\n ended() {\r\n return this._ended;\r\n }\r\n elapsed() {\r\n return this._cpuTime;\r\n }\r\n}\r\n"],"names":["CPUTimer","_cpuTimer","window","performance","Date","_cpuStart","_cpuTime","_ended","now","begin","end","ended","elapsed"],"mappings":"AAAA;;;;;;AAcC,IACM,MAAMA,QAAAA,CAAAA;qBAEX,SAA0D;qBAE1D,SAA0B;qBAE1B,QAAyB;qBAEzB,MAAwB;IACxB,WAAc,EAAA;AACZ,QAAA,IAAI,CAACC,SAAS,GAAGC,OAAOC,WAAW,IAAID,OAAOE,IAAI;QAClD,IAAI,CAACC,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,QAAQ,GAAG,CAAA;QAChB,IAAI,CAACC,MAAM,GAAG,KAAA;AAChB;IACAC,GAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAACP,SAAS,CAACO,GAAG,EAAA;AAC3B;IACAC,KAAQ,GAAA;AACN,QAAA,IAAI,CAACJ,SAAS,GAAG,IAAI,CAACG,GAAG,EAAA;QACzB,IAAI,CAACF,QAAQ,GAAG,CAAA;QAChB,IAAI,CAACC,MAAM,GAAG,KAAA;AAChB;IACAG,GAAM,GAAA;QACJ,IAAI,CAACJ,QAAQ,GAAG,IAAI,CAACE,GAAG,EAAA,GAAK,IAAI,CAACH,SAAS;QAC3C,IAAI,CAACE,MAAM,GAAG,IAAA;AAChB;IACAI,KAAQ,GAAA;QACN,OAAO,IAAI,CAACJ,MAAM;AACpB;IACAK,OAAU,GAAA;QACR,OAAO,IAAI,CAACN,QAAQ;AACtB;AACF;;;;"}
@@ -22,7 +22,7 @@ import { PBPrimitiveType } from './builder/types.js';
22
22
  this._uniformMap = {};
23
23
  this._uniformPositions = {};
24
24
  this._cache = buffer instanceof ArrayBuffer ? buffer : null;
25
- this._buffer = buffer instanceof ArrayBuffer ? null : buffer;
25
+ this._buffer = buffer instanceof ArrayBuffer || !buffer ? null : buffer;
26
26
  this.init(layout, 0, '');
27
27
  }
28
28
  /** The buffer size in bytes */ get byteLength() {
@@ -1 +1 @@
1
- {"version":3,"file":"uniformdata.js","sources":["../src/uniformdata.ts"],"sourcesContent":["import { PBPrimitiveType } from './builder/types';\r\nimport type { TypedArray, TypedArrayConstructor } from '@zephyr3d/base';\r\nimport type { StructuredValue, UniformBufferLayout, StructuredBuffer } from './gpuobject';\r\n\r\n/**\r\n * Structured buffer data\r\n * @public\r\n */\r\nexport class StructuredBufferData {\r\n /** @internal */\r\n protected _cache: ArrayBuffer;\r\n /** @internal */\r\n protected _buffer: StructuredBuffer;\r\n /** @internal */\r\n protected _size: number;\r\n /** @internal */\r\n protected _uniformMap: Record<string, TypedArray>;\r\n /** @internal */\r\n protected _uniformPositions: Record<string, [number, number]>;\r\n /**\r\n * Creates a new structured buffer data\r\n * @param layout - Layout of the structure\r\n * @param buffer - Buffer that holds the data\r\n */\r\n constructor(layout: UniformBufferLayout, buffer?: StructuredBuffer | ArrayBuffer) {\r\n this._size = (layout.byteSize + 15) & ~15;\r\n if (this._size <= 0) {\r\n throw new Error(`UniformBuffer(): invalid uniform buffer byte size: ${this._size}`);\r\n }\r\n // this._cache = new ArrayBuffer(size);\r\n this._uniformMap = {};\r\n this._uniformPositions = {};\r\n this._cache = buffer instanceof ArrayBuffer ? buffer : null;\r\n this._buffer = buffer instanceof ArrayBuffer ? null : buffer;\r\n this.init(layout, 0, '');\r\n }\r\n /** The buffer size in bytes */\r\n get byteLength(): number {\r\n return this._size;\r\n }\r\n /** Get the data cache buffer */\r\n get buffer(): ArrayBuffer {\r\n return this._cache;\r\n }\r\n /** Get all the uniform datas */\r\n get uniforms(): Record<string, TypedArray> {\r\n return this._uniformMap;\r\n }\r\n /**\r\n * Sets the value of a structure member\r\n * @param name - Name of the member\r\n * @param value - Value to set\r\n */\r\n set(name: string, value: StructuredValue): void {\r\n if (value !== undefined) {\r\n const view = this._uniformMap[name];\r\n if (view) {\r\n if (this._cache) {\r\n if (typeof value === 'number') {\r\n view[0] = value;\r\n } else if ((value as any)?._v) {\r\n view.set((value as any)._v);\r\n } else if (typeof (value as any)?.length === 'number') {\r\n view.set(\r\n (value as TypedArray).length > view.length\r\n ? (value as TypedArray).subarray(0, view.length)\r\n : (value as TypedArray)\r\n );\r\n } else {\r\n throw new Error('invalid uniform value');\r\n }\r\n } else {\r\n const size = this._uniformPositions[name][1];\r\n if (typeof value === 'number') {\r\n view[0] = value;\r\n this._buffer.bufferSubData(this._uniformPositions[name][0], view);\r\n } else if (value['BYTES_PER_ELEMENT'] && size <= (value['byteLength'] as number)) {\r\n const arr = value as TypedArray;\r\n this._buffer.bufferSubData(\r\n this._uniformPositions[name][0],\r\n arr,\r\n 0,\r\n (size / arr.BYTES_PER_ELEMENT) >> 0\r\n );\r\n } else {\r\n throw new Error('invalid uniform value');\r\n }\r\n }\r\n } else {\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto === Object.getPrototypeOf({})) {\r\n this.setStruct(name, value);\r\n } else {\r\n throw new Error('invalid uniform value');\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private setStruct(name: string, value: any): void {\r\n for (const k in value) {\r\n this.set(`${name}.${k}`, value[k]);\r\n }\r\n }\r\n /** @internal */\r\n private init(layout: UniformBufferLayout, offset: number, prefix: string): number {\r\n for (const entry of layout.entries) {\r\n if (entry.subLayout) {\r\n offset = this.init(entry.subLayout, offset, `${prefix}${entry.name}.`);\r\n } else {\r\n const name = `${prefix}${entry.name}`;\r\n if (this._uniformPositions[name]) {\r\n throw new Error(`UniformBuffer(): duplicate uniform name: ${name}`);\r\n }\r\n if (entry.offset < offset || entry.byteSize < 0) {\r\n throw new Error('UniformBuffer(): invalid layout');\r\n }\r\n this._uniformPositions[name] = [entry.offset, entry.byteSize];\r\n let viewCtor: TypedArrayConstructor = null;\r\n switch (entry.type) {\r\n case PBPrimitiveType.F32:\r\n viewCtor = Float32Array;\r\n break;\r\n case PBPrimitiveType.U32:\r\n case PBPrimitiveType.BOOL:\r\n viewCtor = Uint32Array;\r\n break;\r\n case PBPrimitiveType.I32:\r\n viewCtor = Int32Array;\r\n break;\r\n case PBPrimitiveType.U16:\r\n case PBPrimitiveType.U16_NORM:\r\n case PBPrimitiveType.F16:\r\n viewCtor = Uint16Array;\r\n break;\r\n case PBPrimitiveType.I16:\r\n case PBPrimitiveType.I16_NORM:\r\n viewCtor = Int16Array;\r\n break;\r\n case PBPrimitiveType.U8:\r\n case PBPrimitiveType.U8_NORM:\r\n viewCtor = Uint8Array;\r\n break;\r\n case PBPrimitiveType.I8:\r\n case PBPrimitiveType.I8_NORM:\r\n viewCtor = Int8Array;\r\n break;\r\n }\r\n if (!viewCtor) {\r\n throw new Error(`UniformBuffer(): invalid data type for uniform: ${name}`);\r\n }\r\n if (entry.byteSize % viewCtor.BYTES_PER_ELEMENT) {\r\n throw new Error(`UniformBuffer(): invalid byte size for uniform: ${name}`);\r\n }\r\n if (this._cache) {\r\n this._uniformMap[name] = new viewCtor(\r\n this._cache,\r\n entry.offset,\r\n entry.byteSize / viewCtor.BYTES_PER_ELEMENT\r\n );\r\n } else {\r\n this._uniformMap[name] = new viewCtor(1);\r\n }\r\n offset = entry.offset + entry.byteSize;\r\n }\r\n }\r\n return offset;\r\n }\r\n}\r\n"],"names":["StructuredBufferData","layout","buffer","_size","byteSize","Error","_uniformMap","_uniformPositions","_cache","ArrayBuffer","_buffer","init","byteLength","uniforms","set","name","value","undefined","view","_v","length","subarray","size","bufferSubData","arr","BYTES_PER_ELEMENT","proto","Object","getPrototypeOf","setStruct","k","offset","prefix","entry","entries","subLayout","viewCtor","type","PBPrimitiveType","F32","Float32Array","U32","BOOL","Uint32Array","I32","Int32Array","U16","U16_NORM","F16","Uint16Array","I16","I16_NORM","Int16Array","U8","U8_NORM","Uint8Array","I8","I8_NORM","Int8Array"],"mappings":"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"}
1
+ {"version":3,"file":"uniformdata.js","sources":["../src/uniformdata.ts"],"sourcesContent":["import { PBPrimitiveType } from './builder/types';\r\nimport type { Nullable, TypedArray, TypedArrayConstructor } from '@zephyr3d/base';\r\nimport type { StructuredValue, UniformBufferLayout, StructuredBuffer } from './gpuobject';\r\n\r\n/**\r\n * Structured buffer data\r\n * @public\r\n */\r\nexport class StructuredBufferData {\r\n /** @internal */\r\n protected _cache: Nullable<ArrayBuffer>;\r\n /** @internal */\r\n protected _buffer: Nullable<StructuredBuffer>;\r\n /** @internal */\r\n protected _size: number;\r\n /** @internal */\r\n protected _uniformMap: Record<string, TypedArray>;\r\n /** @internal */\r\n protected _uniformPositions: Record<string, [number, number]>;\r\n /**\r\n * Creates a new structured buffer data\r\n * @param layout - Layout of the structure\r\n * @param buffer - Buffer that holds the data\r\n */\r\n constructor(layout: UniformBufferLayout, buffer?: Nullable<StructuredBuffer | ArrayBuffer>) {\r\n this._size = (layout.byteSize + 15) & ~15;\r\n if (this._size <= 0) {\r\n throw new Error(`UniformBuffer(): invalid uniform buffer byte size: ${this._size}`);\r\n }\r\n // this._cache = new ArrayBuffer(size);\r\n this._uniformMap = {};\r\n this._uniformPositions = {};\r\n this._cache = buffer instanceof ArrayBuffer ? buffer : null;\r\n this._buffer = buffer instanceof ArrayBuffer || !buffer ? null : buffer;\r\n this.init(layout, 0, '');\r\n }\r\n /** The buffer size in bytes */\r\n get byteLength() {\r\n return this._size;\r\n }\r\n /** Get the data cache buffer */\r\n get buffer() {\r\n return this._cache;\r\n }\r\n /** Get all the uniform datas */\r\n get uniforms() {\r\n return this._uniformMap;\r\n }\r\n /**\r\n * Sets the value of a structure member\r\n * @param name - Name of the member\r\n * @param value - Value to set\r\n */\r\n set(name: string, value: StructuredValue) {\r\n if (value !== undefined) {\r\n const view = this._uniformMap[name];\r\n if (view) {\r\n if (this._cache) {\r\n if (typeof value === 'number') {\r\n view[0] = value;\r\n } else if ((value as any)?._v) {\r\n view.set((value as any)._v);\r\n } else if (typeof (value as any)?.length === 'number') {\r\n view.set(\r\n (value as TypedArray).length > view.length\r\n ? (value as TypedArray).subarray(0, view.length)\r\n : (value as TypedArray)\r\n );\r\n } else {\r\n throw new Error('invalid uniform value');\r\n }\r\n } else {\r\n const size = this._uniformPositions[name][1];\r\n if (typeof value === 'number') {\r\n view[0] = value;\r\n this._buffer!.bufferSubData(this._uniformPositions[name][0], view);\r\n } else if (value['BYTES_PER_ELEMENT'] && size <= (value['byteLength'] as number)) {\r\n const arr = value as TypedArray;\r\n this._buffer!.bufferSubData(\r\n this._uniformPositions[name][0],\r\n arr,\r\n 0,\r\n (size / arr.BYTES_PER_ELEMENT) >> 0\r\n );\r\n } else {\r\n throw new Error('invalid uniform value');\r\n }\r\n }\r\n } else {\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto === Object.getPrototypeOf({})) {\r\n this.setStruct(name, value);\r\n } else {\r\n throw new Error('invalid uniform value');\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private setStruct(name: string, value: any) {\r\n for (const k in value) {\r\n this.set(`${name}.${k}`, value[k]);\r\n }\r\n }\r\n /** @internal */\r\n private init(layout: UniformBufferLayout, offset: number, prefix: string) {\r\n for (const entry of layout.entries) {\r\n if (entry.subLayout) {\r\n offset = this.init(entry.subLayout, offset, `${prefix}${entry.name}.`);\r\n } else {\r\n const name = `${prefix}${entry.name}`;\r\n if (this._uniformPositions[name]) {\r\n throw new Error(`UniformBuffer(): duplicate uniform name: ${name}`);\r\n }\r\n if (entry.offset < offset || entry.byteSize < 0) {\r\n throw new Error('UniformBuffer(): invalid layout');\r\n }\r\n this._uniformPositions[name] = [entry.offset, entry.byteSize];\r\n let viewCtor: Nullable<TypedArrayConstructor> = null;\r\n switch (entry.type) {\r\n case PBPrimitiveType.F32:\r\n viewCtor = Float32Array;\r\n break;\r\n case PBPrimitiveType.U32:\r\n case PBPrimitiveType.BOOL:\r\n viewCtor = Uint32Array;\r\n break;\r\n case PBPrimitiveType.I32:\r\n viewCtor = Int32Array;\r\n break;\r\n case PBPrimitiveType.U16:\r\n case PBPrimitiveType.U16_NORM:\r\n case PBPrimitiveType.F16:\r\n viewCtor = Uint16Array;\r\n break;\r\n case PBPrimitiveType.I16:\r\n case PBPrimitiveType.I16_NORM:\r\n viewCtor = Int16Array;\r\n break;\r\n case PBPrimitiveType.U8:\r\n case PBPrimitiveType.U8_NORM:\r\n viewCtor = Uint8Array;\r\n break;\r\n case PBPrimitiveType.I8:\r\n case PBPrimitiveType.I8_NORM:\r\n viewCtor = Int8Array;\r\n break;\r\n }\r\n if (!viewCtor) {\r\n throw new Error(`UniformBuffer(): invalid data type for uniform: ${name}`);\r\n }\r\n if (entry.byteSize % viewCtor.BYTES_PER_ELEMENT) {\r\n throw new Error(`UniformBuffer(): invalid byte size for uniform: ${name}`);\r\n }\r\n if (this._cache) {\r\n this._uniformMap[name] = new viewCtor(\r\n this._cache,\r\n entry.offset,\r\n entry.byteSize / viewCtor.BYTES_PER_ELEMENT\r\n );\r\n } else {\r\n this._uniformMap[name] = new viewCtor(1);\r\n }\r\n offset = entry.offset + entry.byteSize;\r\n }\r\n }\r\n return offset;\r\n }\r\n}\r\n"],"names":["StructuredBufferData","layout","buffer","_size","byteSize","Error","_uniformMap","_uniformPositions","_cache","ArrayBuffer","_buffer","init","byteLength","uniforms","set","name","value","undefined","view","_v","length","subarray","size","bufferSubData","arr","BYTES_PER_ELEMENT","proto","Object","getPrototypeOf","setStruct","k","offset","prefix","entry","entries","subLayout","viewCtor","type","PBPrimitiveType","F32","Float32Array","U32","BOOL","Uint32Array","I32","Int32Array","U16","U16_NORM","F16","Uint16Array","I16","I16_NORM","Int16Array","U8","U8_NORM","Uint8Array","I8","I8_NORM","Int8Array"],"mappings":"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"}
@@ -64,7 +64,7 @@ import { MAX_VERTEX_ATTRIBUTES, getVertexAttribByName, GPUResourceUsageFlags, ge
64
64
  * Gets the index buffer
65
65
  * @returns The index buffer
66
66
  */ getIndexBuffer() {
67
- return this._indexBuffer || null;
67
+ return this._indexBuffer;
68
68
  }
69
69
  /**
70
70
  * Sets a vertex buffer
@@ -118,7 +118,7 @@ import { MAX_VERTEX_ATTRIBUTES, getVertexAttribByName, GPUResourceUsageFlags, ge
118
118
  * @returns The index buffer that was set
119
119
  */ setIndexBuffer(buffer) {
120
120
  if (buffer !== this._indexBuffer) {
121
- this._indexBuffer = buffer || null;
121
+ this._indexBuffer = buffer;
122
122
  }
123
123
  return buffer;
124
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vertexdata.js","sources":["../src/vertexdata.ts"],"sourcesContent":["import type { StructuredBuffer, IndexBuffer, VertexStepMode, VertexSemantic } from './gpuobject';\r\nimport {\r\n GPUResourceUsageFlags,\r\n MAX_VERTEX_ATTRIBUTES,\r\n getVertexAttribByName,\r\n getVertexBufferStride,\r\n getVertexBufferAttribType\r\n} from './gpuobject';\r\nimport type { PBArrayTypeInfo, PBPrimitiveTypeInfo } from './builder/types';\r\n\r\n/**\r\n * Vertex buffer information\r\n * @public\r\n */\r\nexport type VertexBufferInfo = {\r\n buffer: StructuredBuffer;\r\n offset: number;\r\n stride: number;\r\n drawOffset: number;\r\n type: PBPrimitiveTypeInfo;\r\n stepMode: VertexStepMode;\r\n};\r\n\r\n/**\r\n * The vertex data class\r\n * @public\r\n */\r\nexport class VertexData {\r\n /** @internal */\r\n private _vertexBuffers: VertexBufferInfo[];\r\n /** @internal */\r\n private _indexBuffer: IndexBuffer;\r\n /** @internal */\r\n private _drawOffset: number;\r\n /** @internal */\r\n private _numVertices: number;\r\n constructor() {\r\n this._vertexBuffers = [];\r\n for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {\r\n this._vertexBuffers.push(null);\r\n }\r\n this._indexBuffer = null;\r\n this._drawOffset = 0;\r\n this._numVertices = 0;\r\n }\r\n /**\r\n * Creates a new instance of VertexData by copying from this object\r\n * @returns New instance of VertexData\r\n */\r\n clone(): VertexData {\r\n const newVertexData = new VertexData();\r\n newVertexData._vertexBuffers = this._vertexBuffers.slice();\r\n newVertexData._indexBuffer = this._indexBuffer;\r\n newVertexData._drawOffset = this._drawOffset;\r\n newVertexData.calcNumVertices();\r\n return newVertexData;\r\n }\r\n /** Vertex buffer information list */\r\n get vertexBuffers(): VertexBufferInfo[] {\r\n return this._vertexBuffers;\r\n }\r\n /** Index buffer */\r\n get indexBuffer(): IndexBuffer {\r\n return this._indexBuffer;\r\n }\r\n /** Number of vertices */\r\n get numVertices() {\r\n return this._numVertices;\r\n }\r\n /** Draw offset */\r\n getDrawOffset(): number {\r\n return this._drawOffset;\r\n }\r\n setDrawOffset(offset: number): void {\r\n if (offset !== this._drawOffset) {\r\n this._drawOffset = offset;\r\n this.calcNumVertices();\r\n }\r\n }\r\n /**\r\n * Gets the vertex buffer by specific vertex semantic\r\n * @param semantic - The vertex semantic\r\n * @returns Vertex buffer of the given semantic\r\n */\r\n getVertexBuffer(semantic: VertexSemantic): StructuredBuffer {\r\n return this._vertexBuffers[getVertexAttribByName(semantic)]?.buffer ?? null;\r\n }\r\n /**\r\n * Gets the vertex buffer information by specific vertex semantic\r\n * @param semantic - The vertex semantic\r\n * @returns Vertex buffer information of the given semantic\r\n */\r\n getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo {\r\n return this._vertexBuffers[getVertexAttribByName(semantic)] ?? null;\r\n }\r\n /**\r\n * Gets the index buffer\r\n * @returns The index buffer\r\n */\r\n getIndexBuffer(): IndexBuffer {\r\n return this._indexBuffer || null;\r\n }\r\n /**\r\n * Sets a vertex buffer\r\n * @param buffer - The vertex buffer object\r\n * @param stepMode - Step mode of the buffer\r\n * @returns The buffer that was set\r\n */\r\n setVertexBuffer(buffer: StructuredBuffer, stepMode?: VertexStepMode): StructuredBuffer {\r\n if (!buffer) {\r\n return null;\r\n }\r\n if (!(buffer.usage & GPUResourceUsageFlags.BF_VERTEX)) {\r\n throw new Error('setVertexBuffer() failed: buffer is null or buffer has not Vertex usage flag');\r\n }\r\n stepMode = stepMode || 'vertex';\r\n const vertexType = (buffer.structure.structMembers[0].type as PBArrayTypeInfo).elementType;\r\n if (vertexType.isStructType()) {\r\n let offset = 0;\r\n for (const attrib of vertexType.structMembers) {\r\n const loc = getVertexAttribByName(attrib.name as VertexSemantic);\r\n this.internalSetVertexBuffer(loc, buffer, offset, stepMode);\r\n offset += attrib.size;\r\n }\r\n } else {\r\n const loc = getVertexAttribByName(buffer.structure.structMembers[0].name as VertexSemantic);\r\n this.internalSetVertexBuffer(loc, buffer, 0, stepMode);\r\n }\r\n return buffer;\r\n }\r\n /**\r\n * Removes a vertex buffer\r\n * @param buffer - Vertex buffer to be removed\r\n * @returns true if the buffer was successfully removed, otherwise false\r\n */\r\n removeVertexBuffer(buffer: StructuredBuffer): boolean {\r\n let removed = false;\r\n for (let loc = 0; loc < this._vertexBuffers.length; loc++) {\r\n const info = this._vertexBuffers[loc];\r\n const remove = info?.buffer === buffer;\r\n if (remove) {\r\n this._vertexBuffers[loc] = null;\r\n removed = true;\r\n }\r\n }\r\n if (removed) {\r\n this.calcNumVertices();\r\n }\r\n return removed;\r\n }\r\n /**\r\n * Sets the index buffer\r\n * @param buffer - Index buffer to be set\r\n * @returns The index buffer that was set\r\n */\r\n setIndexBuffer(buffer: IndexBuffer): IndexBuffer {\r\n if (buffer !== this._indexBuffer) {\r\n this._indexBuffer = buffer || null;\r\n }\r\n return buffer;\r\n }\r\n /** @internal */\r\n private calcNumVertices() {\r\n this._numVertices = 0;\r\n for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {\r\n const info = this._vertexBuffers[i];\r\n if (info && info.stepMode !== 'instance') {\r\n const n = Math.floor(info.buffer.byteLength / info.stride);\r\n if (n > this._numVertices) {\r\n this._numVertices = n;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private internalSetVertexBuffer(\r\n loc: number,\r\n buffer: StructuredBuffer,\r\n offset?: number,\r\n stepMode?: VertexStepMode\r\n ): StructuredBuffer {\r\n if (loc < 0 || loc >= MAX_VERTEX_ATTRIBUTES) {\r\n throw new Error(`setVertexBuffer() failed: location out of bounds: ${loc}`);\r\n }\r\n offset = Number(offset) || 0;\r\n stepMode = stepMode || 'vertex';\r\n const old = this._vertexBuffers[loc];\r\n if (!old || old.buffer !== buffer || old.offset !== offset || old.stepMode !== stepMode) {\r\n this._vertexBuffers[loc] = {\r\n buffer: buffer,\r\n offset: offset,\r\n type: getVertexBufferAttribType(buffer.structure, loc),\r\n stride: getVertexBufferStride(buffer.structure),\r\n drawOffset: 0,\r\n stepMode: stepMode\r\n };\r\n this.calcNumVertices();\r\n return buffer;\r\n }\r\n return null;\r\n }\r\n}\r\n"],"names":["VertexData","_vertexBuffers","i","MAX_VERTEX_ATTRIBUTES","push","_indexBuffer","_drawOffset","_numVertices","clone","newVertexData","slice","calcNumVertices","vertexBuffers","indexBuffer","numVertices","getDrawOffset","setDrawOffset","offset","getVertexBuffer","semantic","getVertexAttribByName","buffer","getVertexBufferInfo","getIndexBuffer","setVertexBuffer","stepMode","usage","GPUResourceUsageFlags","BF_VERTEX","Error","vertexType","structure","structMembers","type","elementType","isStructType","attrib","loc","name","internalSetVertexBuffer","size","removeVertexBuffer","removed","length","info","remove","setIndexBuffer","n","Math","floor","byteLength","stride","Number","old","getVertexBufferAttribType","getVertexBufferStride","drawOffset"],"mappings":"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"}
1
+ {"version":3,"file":"vertexdata.js","sources":["../src/vertexdata.ts"],"sourcesContent":["import type { StructuredBuffer, IndexBuffer, VertexStepMode, VertexSemantic } from './gpuobject';\r\nimport {\r\n GPUResourceUsageFlags,\r\n MAX_VERTEX_ATTRIBUTES,\r\n getVertexAttribByName,\r\n getVertexBufferStride,\r\n getVertexBufferAttribType\r\n} from './gpuobject';\r\nimport type { PBArrayTypeInfo, PBPrimitiveTypeInfo } from './builder/types';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Vertex buffer information\r\n * @public\r\n */\r\nexport type VertexBufferInfo = {\r\n buffer: StructuredBuffer;\r\n offset: number;\r\n stride: number;\r\n drawOffset: number;\r\n type: PBPrimitiveTypeInfo;\r\n stepMode: VertexStepMode;\r\n};\r\n\r\n/**\r\n * The vertex data class\r\n * @public\r\n */\r\nexport class VertexData {\r\n /** @internal */\r\n private _vertexBuffers: Nullable<VertexBufferInfo>[];\r\n /** @internal */\r\n private _indexBuffer: Nullable<IndexBuffer>;\r\n /** @internal */\r\n private _drawOffset: number;\r\n /** @internal */\r\n private _numVertices: number;\r\n constructor() {\r\n this._vertexBuffers = [];\r\n for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {\r\n this._vertexBuffers.push(null);\r\n }\r\n this._indexBuffer = null;\r\n this._drawOffset = 0;\r\n this._numVertices = 0;\r\n }\r\n /**\r\n * Creates a new instance of VertexData by copying from this object\r\n * @returns New instance of VertexData\r\n */\r\n clone() {\r\n const newVertexData = new VertexData();\r\n newVertexData._vertexBuffers = this._vertexBuffers.slice();\r\n newVertexData._indexBuffer = this._indexBuffer;\r\n newVertexData._drawOffset = this._drawOffset;\r\n newVertexData.calcNumVertices();\r\n return newVertexData;\r\n }\r\n /** Vertex buffer information list */\r\n get vertexBuffers() {\r\n return this._vertexBuffers;\r\n }\r\n /** Index buffer */\r\n get indexBuffer() {\r\n return this._indexBuffer;\r\n }\r\n /** Number of vertices */\r\n get numVertices() {\r\n return this._numVertices;\r\n }\r\n /** Draw offset */\r\n getDrawOffset() {\r\n return this._drawOffset;\r\n }\r\n setDrawOffset(offset: number) {\r\n if (offset !== this._drawOffset) {\r\n this._drawOffset = offset;\r\n this.calcNumVertices();\r\n }\r\n }\r\n /**\r\n * Gets the vertex buffer by specific vertex semantic\r\n * @param semantic - The vertex semantic\r\n * @returns Vertex buffer of the given semantic\r\n */\r\n getVertexBuffer(semantic: VertexSemantic) {\r\n return this._vertexBuffers[getVertexAttribByName(semantic)!]?.buffer ?? null;\r\n }\r\n /**\r\n * Gets the vertex buffer information by specific vertex semantic\r\n * @param semantic - The vertex semantic\r\n * @returns Vertex buffer information of the given semantic\r\n */\r\n getVertexBufferInfo(semantic: VertexSemantic) {\r\n return this._vertexBuffers[getVertexAttribByName(semantic)!] ?? null;\r\n }\r\n /**\r\n * Gets the index buffer\r\n * @returns The index buffer\r\n */\r\n getIndexBuffer() {\r\n return this._indexBuffer;\r\n }\r\n /**\r\n * Sets a vertex buffer\r\n * @param buffer - The vertex buffer object\r\n * @param stepMode - Step mode of the buffer\r\n * @returns The buffer that was set\r\n */\r\n setVertexBuffer(buffer: StructuredBuffer, stepMode?: VertexStepMode) {\r\n if (!buffer) {\r\n return null;\r\n }\r\n if (!(buffer.usage & GPUResourceUsageFlags.BF_VERTEX)) {\r\n throw new Error('setVertexBuffer() failed: buffer is null or buffer has not Vertex usage flag');\r\n }\r\n stepMode = stepMode || 'vertex';\r\n const vertexType = (buffer.structure.structMembers[0].type as PBArrayTypeInfo).elementType;\r\n if (vertexType.isStructType()) {\r\n let offset = 0;\r\n for (const attrib of vertexType.structMembers) {\r\n const loc = getVertexAttribByName(attrib.name as VertexSemantic);\r\n this.internalSetVertexBuffer(loc!, buffer, offset, stepMode);\r\n offset += attrib.size;\r\n }\r\n } else {\r\n const loc = getVertexAttribByName(buffer.structure.structMembers[0].name as VertexSemantic);\r\n this.internalSetVertexBuffer(loc!, buffer, 0, stepMode);\r\n }\r\n return buffer;\r\n }\r\n /**\r\n * Removes a vertex buffer\r\n * @param buffer - Vertex buffer to be removed\r\n * @returns true if the buffer was successfully removed, otherwise false\r\n */\r\n removeVertexBuffer(buffer: StructuredBuffer) {\r\n let removed = false;\r\n for (let loc = 0; loc < this._vertexBuffers.length; loc++) {\r\n const info = this._vertexBuffers[loc];\r\n const remove = info?.buffer === buffer;\r\n if (remove) {\r\n this._vertexBuffers[loc] = null;\r\n removed = true;\r\n }\r\n }\r\n if (removed) {\r\n this.calcNumVertices();\r\n }\r\n return removed;\r\n }\r\n /**\r\n * Sets the index buffer\r\n * @param buffer - Index buffer to be set\r\n * @returns The index buffer that was set\r\n */\r\n setIndexBuffer(buffer: Nullable<IndexBuffer>) {\r\n if (buffer !== this._indexBuffer) {\r\n this._indexBuffer = buffer;\r\n }\r\n return buffer;\r\n }\r\n /** @internal */\r\n private calcNumVertices() {\r\n this._numVertices = 0;\r\n for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {\r\n const info = this._vertexBuffers[i];\r\n if (info && info.stepMode !== 'instance') {\r\n const n = Math.floor(info.buffer.byteLength / info.stride);\r\n if (n > this._numVertices) {\r\n this._numVertices = n;\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private internalSetVertexBuffer(\r\n loc: number,\r\n buffer: StructuredBuffer,\r\n offset?: number,\r\n stepMode?: VertexStepMode\r\n ) {\r\n if (loc < 0 || loc >= MAX_VERTEX_ATTRIBUTES) {\r\n throw new Error(`setVertexBuffer() failed: location out of bounds: ${loc}`);\r\n }\r\n offset = Number(offset) || 0;\r\n stepMode = stepMode || 'vertex';\r\n const old = this._vertexBuffers[loc];\r\n if (!old || old.buffer !== buffer || old.offset !== offset || old.stepMode !== stepMode) {\r\n this._vertexBuffers[loc] = {\r\n buffer: buffer,\r\n offset: offset,\r\n type: getVertexBufferAttribType(buffer.structure, loc)!,\r\n stride: getVertexBufferStride(buffer.structure),\r\n drawOffset: 0,\r\n stepMode: stepMode\r\n };\r\n this.calcNumVertices();\r\n return buffer;\r\n }\r\n return null;\r\n }\r\n}\r\n"],"names":["VertexData","_vertexBuffers","i","MAX_VERTEX_ATTRIBUTES","push","_indexBuffer","_drawOffset","_numVertices","clone","newVertexData","slice","calcNumVertices","vertexBuffers","indexBuffer","numVertices","getDrawOffset","setDrawOffset","offset","getVertexBuffer","semantic","getVertexAttribByName","buffer","getVertexBufferInfo","getIndexBuffer","setVertexBuffer","stepMode","usage","GPUResourceUsageFlags","BF_VERTEX","Error","vertexType","structure","structMembers","type","elementType","isStructType","attrib","loc","name","internalSetVertexBuffer","size","removeVertexBuffer","removed","length","info","remove","setIndexBuffer","n","Math","floor","byteLength","stride","Number","old","getVertexBufferAttribType","getVertexBufferStride","drawOffset"],"mappings":";;AAwBA;;;AAGC,IACM,MAAMA,UAAAA,CAAAA;qBAEX,cAAqD;qBAErD,YAA4C;qBAE5C,WAA4B;qBAE5B,YAA6B;IAC7B,WAAc,EAAA;QACZ,IAAI,CAACC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIC,uBAAuBD,CAAK,EAAA,CAAA;AAC9C,YAAA,IAAI,CAACD,cAAc,CAACG,IAAI,CAAC,IAAA,CAAA;AAC3B;QACA,IAAI,CAACC,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,WAAW,GAAG,CAAA;QACnB,IAAI,CAACC,YAAY,GAAG,CAAA;AACtB;AACA;;;AAGC,MACDC,KAAQ,GAAA;AACN,QAAA,MAAMC,gBAAgB,IAAIT,UAAAA,EAAAA;AAC1BS,QAAAA,aAAAA,CAAcR,cAAc,GAAG,IAAI,CAACA,cAAc,CAACS,KAAK,EAAA;AACxDD,QAAAA,aAAAA,CAAcJ,YAAY,GAAG,IAAI,CAACA,YAAY;AAC9CI,QAAAA,aAAAA,CAAcH,WAAW,GAAG,IAAI,CAACA,WAAW;AAC5CG,QAAAA,aAAAA,CAAcE,eAAe,EAAA;QAC7B,OAAOF,aAAAA;AACT;0CAEA,IAAIG,aAAgB,GAAA;QAClB,OAAO,IAAI,CAACX,cAAc;AAC5B;wBAEA,IAAIY,WAAc,GAAA;QAChB,OAAO,IAAI,CAACR,YAAY;AAC1B;8BAEA,IAAIS,WAAc,GAAA;QAChB,OAAO,IAAI,CAACP,YAAY;AAC1B;AACA,uBACAQ,aAAgB,GAAA;QACd,OAAO,IAAI,CAACT,WAAW;AACzB;AACAU,IAAAA,aAAAA,CAAcC,MAAc,EAAE;AAC5B,QAAA,IAAIA,MAAW,KAAA,IAAI,CAACX,WAAW,EAAE;YAC/B,IAAI,CAACA,WAAW,GAAGW,MAAAA;AACnB,YAAA,IAAI,CAACN,eAAe,EAAA;AACtB;AACF;AACA;;;;MAKAO,eAAAA,CAAgBC,QAAwB,EAAE;AACxC,QAAA,OAAO,IAAI,CAAClB,cAAc,CAACmB,qBAAsBD,CAAAA,QAAAA,CAAAA,CAAW,EAAEE,MAAU,IAAA,IAAA;AAC1E;AACA;;;;MAKAC,mBAAAA,CAAoBH,QAAwB,EAAE;AAC5C,QAAA,OAAO,IAAI,CAAClB,cAAc,CAACmB,qBAAAA,CAAsBD,UAAW,IAAI,IAAA;AAClE;AACA;;;AAGC,MACDI,cAAiB,GAAA;QACf,OAAO,IAAI,CAAClB,YAAY;AAC1B;AACA;;;;;AAKC,MACDmB,eAAgBH,CAAAA,MAAwB,EAAEI,QAAyB,EAAE;AACnE,QAAA,IAAI,CAACJ,MAAQ,EAAA;YACX,OAAO,IAAA;AACT;QACA,IAAI,EAAEA,MAAOK,CAAAA,KAAK,GAAGC,qBAAsBC,CAAAA,SAAS,CAAG,EAAA;AACrD,YAAA,MAAM,IAAIC,KAAM,CAAA,8EAAA,CAAA;AAClB;AACAJ,QAAAA,QAAAA,GAAWA,QAAY,IAAA,QAAA;QACvB,MAAMK,UAAAA,GAAa,MAACT,CAAOU,SAAS,CAACC,aAAa,CAAC,CAAE,CAAA,CAACC,IAAI,CAAqBC,WAAW;QAC1F,IAAIJ,UAAAA,CAAWK,YAAY,EAAI,EAAA;AAC7B,YAAA,IAAIlB,MAAS,GAAA,CAAA;AACb,YAAA,KAAK,MAAMmB,MAAAA,IAAUN,UAAWE,CAAAA,aAAa,CAAE;gBAC7C,MAAMK,GAAAA,GAAMjB,qBAAsBgB,CAAAA,MAAAA,CAAOE,IAAI,CAAA;AAC7C,gBAAA,IAAI,CAACC,uBAAuB,CAACF,GAAAA,EAAMhB,QAAQJ,MAAQQ,EAAAA,QAAAA,CAAAA;AACnDR,gBAAAA,MAAAA,IAAUmB,OAAOI,IAAI;AACvB;SACK,MAAA;YACL,MAAMH,GAAAA,GAAMjB,sBAAsBC,MAAOU,CAAAA,SAAS,CAACC,aAAa,CAAC,CAAE,CAAA,CAACM,IAAI,CAAA;AACxE,YAAA,IAAI,CAACC,uBAAuB,CAACF,GAAAA,EAAMhB,QAAQ,CAAGI,EAAAA,QAAAA,CAAAA;AAChD;QACA,OAAOJ,MAAAA;AACT;AACA;;;;MAKAoB,kBAAAA,CAAmBpB,MAAwB,EAAE;AAC3C,QAAA,IAAIqB,OAAU,GAAA,KAAA;QACd,IAAK,IAAIL,GAAM,GAAA,CAAA,EAAGA,GAAM,GAAA,IAAI,CAACpC,cAAc,CAAC0C,MAAM,EAAEN,GAAO,EAAA,CAAA;AACzD,YAAA,MAAMO,IAAO,GAAA,IAAI,CAAC3C,cAAc,CAACoC,GAAI,CAAA;YACrC,MAAMQ,MAAAA,GAASD,MAAMvB,MAAWA,KAAAA,MAAAA;AAChC,YAAA,IAAIwB,MAAQ,EAAA;AACV,gBAAA,IAAI,CAAC5C,cAAc,CAACoC,GAAAA,CAAI,GAAG,IAAA;gBAC3BK,OAAU,GAAA,IAAA;AACZ;AACF;AACA,QAAA,IAAIA,OAAS,EAAA;AACX,YAAA,IAAI,CAAC/B,eAAe,EAAA;AACtB;QACA,OAAO+B,OAAAA;AACT;AACA;;;;MAKAI,cAAAA,CAAezB,MAA6B,EAAE;AAC5C,QAAA,IAAIA,MAAW,KAAA,IAAI,CAAChB,YAAY,EAAE;YAChC,IAAI,CAACA,YAAY,GAAGgB,MAAAA;AACtB;QACA,OAAOA,MAAAA;AACT;qBAEA,eAA0B,GAAA;QACxB,IAAI,CAACd,YAAY,GAAG,CAAA;AACpB,QAAA,IAAK,IAAIL,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIC,uBAAuBD,CAAK,EAAA,CAAA;AAC9C,YAAA,MAAM0C,IAAO,GAAA,IAAI,CAAC3C,cAAc,CAACC,CAAE,CAAA;AACnC,YAAA,IAAI0C,IAAQA,IAAAA,IAAAA,CAAKnB,QAAQ,KAAK,UAAY,EAAA;gBACxC,MAAMsB,CAAAA,GAAIC,IAAKC,CAAAA,KAAK,CAACL,IAAAA,CAAKvB,MAAM,CAAC6B,UAAU,GAAGN,IAAAA,CAAKO,MAAM,CAAA;AACzD,gBAAA,IAAIJ,CAAI,GAAA,IAAI,CAACxC,YAAY,EAAE;oBACzB,IAAI,CAACA,YAAY,GAAGwC,CAAAA;AACtB;AACF;AACF;AACF;qBAEA,uBAAQR,CACNF,GAAW,EACXhB,MAAwB,EACxBJ,MAAe,EACfQ,QAAyB,EACzB;QACA,IAAIY,GAAAA,GAAM,CAAKA,IAAAA,GAAAA,IAAOlC,qBAAuB,EAAA;AAC3C,YAAA,MAAM,IAAI0B,KAAAA,CAAM,CAAC,kDAAkD,EAAEQ,GAAK,CAAA,CAAA,CAAA;AAC5E;AACApB,QAAAA,MAAAA,GAASmC,OAAOnC,MAAW,CAAA,IAAA,CAAA;AAC3BQ,QAAAA,QAAAA,GAAWA,QAAY,IAAA,QAAA;AACvB,QAAA,MAAM4B,GAAM,GAAA,IAAI,CAACpD,cAAc,CAACoC,GAAI,CAAA;AACpC,QAAA,IAAI,CAACgB,GAAAA,IAAOA,GAAIhC,CAAAA,MAAM,KAAKA,MAAAA,IAAUgC,GAAIpC,CAAAA,MAAM,KAAKA,MAAAA,IAAUoC,GAAI5B,CAAAA,QAAQ,KAAKA,QAAU,EAAA;AACvF,YAAA,IAAI,CAACxB,cAAc,CAACoC,GAAAA,CAAI,GAAG;gBACzBhB,MAAQA,EAAAA,MAAAA;gBACRJ,MAAQA,EAAAA,MAAAA;gBACRgB,IAAMqB,EAAAA,yBAAAA,CAA0BjC,MAAOU,CAAAA,SAAS,EAAEM,GAAAA,CAAAA;gBAClDc,MAAQI,EAAAA,qBAAAA,CAAsBlC,OAAOU,SAAS,CAAA;gBAC9CyB,UAAY,EAAA,CAAA;gBACZ/B,QAAUA,EAAAA;AACZ,aAAA;AACA,YAAA,IAAI,CAACd,eAAe,EAAA;YACpB,OAAOU,MAAAA;AACT;QACA,OAAO,IAAA;AACT;AACF;;;;"}
package/package.json CHANGED
@@ -1,81 +1,81 @@
1
1
  {
2
- "name": "@zephyr3d/device",
3
- "version": "0.2.5",
4
- "description": "Device API for zephyr3d",
5
- "homepage": "https://github.com/gavinyork/zephyr3d#readme",
6
- "type": "module",
7
- "main": "./dist/index.js",
8
- "module": "./dist/index.js",
9
- "types": "./dist/index.d.ts",
10
- "files": [
11
- "**/*.js",
12
- "**/*.d.ts",
13
- "**/*.js.map"
14
- ],
15
- "sideEffects": false,
16
- "repository": {
17
- "type": "git",
18
- "url": "git+https://github.com/gavinyork/zephyr3d.git"
19
- },
20
- "keywords": [
21
- "javascript",
22
- "3d",
23
- "rendering",
24
- "engine",
25
- "webgl",
26
- "webgpu",
27
- "canvas",
28
- "zephyr3d",
29
- "device"
30
- ],
31
- "license": "MIT",
32
- "bugs": {
33
- "url": "https://github.com/gavinyork/zephyr3d/issues"
34
- },
35
- "engines": {
36
- "node": ">=16.18.0"
37
- },
38
- "devDependencies": {
39
- "@babel/core": "^7.20.12",
40
- "@babel/preset-env": "^7.20.2",
41
- "@rollup/plugin-node-resolve": "~16.0.0",
42
- "@rollup/plugin-strip": "~3.0.4",
43
- "@rollup/plugin-terser": "~0.4.4",
44
- "@rollup/pluginutils": "~5.1.4",
45
- "rollup": "~4.30.1",
46
- "rollup-plugin-dts": "~6.1.1",
47
- "rollup-plugin-copy": "^3.4.0",
48
- "rollup-plugin-typescript2": "^0.34.1",
49
- "@swc/core": "^1.3.62",
50
- "rollup-plugin-swc3": "~0.12.1",
51
- "shx": "^0.3.4",
52
- "cross-env": "^7.0.3",
53
- "typescript": "^5.7.3",
54
- "eslint": "~9.38.0",
55
- "@eslint/js": "~9.38.0",
56
- "@typescript-eslint/parser": "~8.46.1",
57
- "@typescript-eslint/eslint-plugin": "~8.46.1",
58
- "prettier": "~3.6.2",
59
- "eslint-plugin-prettier": "~5.5.4",
60
- "eslint-config-prettier": "~10.1.8",
61
- "eslint-plugin-import": "~2.32.0",
62
- "eslint-import-resolver-typescript": "~4.4.4",
63
- "eslint-plugin-tsdoc": "~0.4.0",
64
- "globals": "^16.4.0",
65
- "eslint-formatter-compact": "~8.40.0"
66
- },
67
- "dependencies": {
68
- "@zephyr3d/base": "^0.2.0",
69
- "@webgpu/types": "^0.1.65",
70
- "@types/node": "^22.12.0",
71
- "@rollup/plugin-commonjs": "~28.0.2",
72
- "rollup-plugin-import-css": "~3.5.8"
73
- },
74
- "scripts": {
75
- "clean": "shx rm -rf ./dist .tsbuildinfo",
76
- "build:check": "tsc -p . --noEmit",
77
- "lint": "cross-env NODE_OPTIONS=--max_old_space_size=8192 eslint \"src/**/*.ts\" -f compact",
78
- "lint-fix": "cross-env NODE_OPTIONS=--max_old_space_size=8192 eslint --fix \"src/**/*.ts\" -f compact",
79
- "build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 rollup -c --silent"
80
- }
81
- }
2
+ "name": "@zephyr3d/device",
3
+ "version": "0.2.6",
4
+ "description": "Device API for zephyr3d",
5
+ "homepage": "https://github.com/gavinyork/zephyr3d#readme",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "files": [
11
+ "**/*.js",
12
+ "**/*.d.ts",
13
+ "**/*.js.map"
14
+ ],
15
+ "sideEffects": false,
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/gavinyork/zephyr3d.git"
19
+ },
20
+ "keywords": [
21
+ "javascript",
22
+ "3d",
23
+ "rendering",
24
+ "engine",
25
+ "webgl",
26
+ "webgpu",
27
+ "canvas",
28
+ "zephyr3d",
29
+ "device"
30
+ ],
31
+ "license": "MIT",
32
+ "bugs": {
33
+ "url": "https://github.com/gavinyork/zephyr3d/issues"
34
+ },
35
+ "engines": {
36
+ "node": ">=16.18.0"
37
+ },
38
+ "devDependencies": {
39
+ "@babel/core": "^7.20.12",
40
+ "@babel/preset-env": "^7.20.2",
41
+ "@eslint/js": "~9.38.0",
42
+ "@rollup/plugin-node-resolve": "~16.0.0",
43
+ "@rollup/plugin-strip": "~3.0.4",
44
+ "@rollup/plugin-terser": "~0.4.4",
45
+ "@rollup/pluginutils": "~5.1.4",
46
+ "@swc/core": "^1.3.62",
47
+ "@typescript-eslint/eslint-plugin": "~8.46.1",
48
+ "@typescript-eslint/parser": "~8.46.1",
49
+ "cross-env": "^7.0.3",
50
+ "eslint": "~9.38.0",
51
+ "eslint-config-prettier": "~10.1.8",
52
+ "eslint-formatter-compact": "~8.40.0",
53
+ "eslint-import-resolver-typescript": "~4.4.4",
54
+ "eslint-plugin-import": "~2.32.0",
55
+ "eslint-plugin-prettier": "~5.5.4",
56
+ "eslint-plugin-tsdoc": "~0.4.0",
57
+ "globals": "^16.4.0",
58
+ "prettier": "~3.6.2",
59
+ "rollup": "~4.30.1",
60
+ "rollup-plugin-copy": "^3.4.0",
61
+ "rollup-plugin-dts": "~6.1.1",
62
+ "rollup-plugin-swc3": "~0.12.1",
63
+ "rollup-plugin-typescript2": "^0.34.1",
64
+ "shx": "^0.3.4",
65
+ "typescript": "^5.7.3"
66
+ },
67
+ "dependencies": {
68
+ "@rollup/plugin-commonjs": "~28.0.2",
69
+ "@types/node": "^22.12.0",
70
+ "@webgpu/types": "^0.1.65",
71
+ "@zephyr3d/base": "^0.2.1",
72
+ "rollup-plugin-import-css": "~3.5.8"
73
+ },
74
+ "scripts": {
75
+ "clean": "shx rm -rf ./dist .tsbuildinfo",
76
+ "build:check": "tsc -p . --noEmit",
77
+ "lint": "cross-env NODE_OPTIONS=--max_old_space_size=8192 eslint \"src/**/*.ts\" -f compact",
78
+ "lint-fix": "cross-env NODE_OPTIONS=--max_old_space_size=8192 eslint --fix \"src/**/*.ts\" -f compact",
79
+ "build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 rollup -c --silent"
80
+ }
81
+ }