@zephyr3d/device 0.2.3 → 0.2.5

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 (43) hide show
  1. package/README.md +1 -1
  2. package/dist/base_types.js +7 -66
  3. package/dist/base_types.js.map +1 -1
  4. package/dist/builder/ast.js +121 -118
  5. package/dist/builder/ast.js.map +1 -1
  6. package/dist/builder/base.js +29 -25
  7. package/dist/builder/base.js.map +1 -1
  8. package/dist/builder/builtinfunc.js +62 -19
  9. package/dist/builder/builtinfunc.js.map +1 -1
  10. package/dist/builder/constructors.js +1 -1
  11. package/dist/builder/constructors.js.map +1 -1
  12. package/dist/builder/errors.js +7 -7
  13. package/dist/builder/errors.js.map +1 -1
  14. package/dist/builder/misc.js +10 -0
  15. package/dist/builder/misc.js.map +1 -0
  16. package/dist/builder/programbuilder.js +65 -34
  17. package/dist/builder/programbuilder.js.map +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +74 -74
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +72 -43
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +82 -24
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +1 -0
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js +1 -0
  28. package/dist/helpers/font.js.map +1 -1
  29. package/dist/helpers/glyphmanager.js +7 -7
  30. package/dist/helpers/glyphmanager.js.map +1 -1
  31. package/dist/helpers/textureatlas.js +3 -5
  32. package/dist/helpers/textureatlas.js.map +1 -1
  33. package/dist/index.d.ts +267 -204
  34. package/dist/index.js +6 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/pool.js +102 -45
  37. package/dist/pool.js.map +1 -1
  38. package/dist/timer.js.map +1 -1
  39. package/dist/uniformdata.js +2 -2
  40. package/dist/uniformdata.js.map +1 -1
  41. package/dist/vertexdata.js +27 -1
  42. package/dist/vertexdata.js.map +1 -1
  43. package/package.json +31 -19
package/dist/device.js CHANGED
@@ -1,17 +1,14 @@
1
+ import { Observable } from '@zephyr3d/base';
1
2
  import { CPUTimer } from './timer.js';
2
- import { getVertexAttribFormat, getVertexFormatSize, makeVertexBufferType, GPUResourceUsageFlags } from './gpuobject.js';
3
- import './builder/ast.js';
4
- import './builder/types.js';
3
+ import { getVertexAttribFormat, makeVertexBufferType, getVertexFormatSize, GPUResourceUsageFlags } from './gpuobject.js';
4
+ import { Pool } from './pool.js';
5
5
  import { ProgramBuilder } from './builder/programbuilder.js';
6
- import { DeviceGPUObjectAddedEvent, DeviceGPUObjectRemovedEvent, DeviceResizeEvent } from './base_types.js';
7
- import '@zephyr3d/base';
8
6
  import { DrawText } from './helpers/drawtext.js';
9
- import { Pool } from './pool.js';
10
7
 
11
8
  /**
12
9
  * Base class for rendering device
13
10
  * @public
14
- */ class BaseDevice {
11
+ */ class BaseDevice extends Observable {
15
12
  _canvas;
16
13
  _canvasClientWidth;
17
14
  _canvasClientHeight;
@@ -29,11 +26,13 @@ import { Pool } from './pool.js';
29
26
  _backend;
30
27
  _beginFrameCounter;
31
28
  _programBuilder;
32
- _pool;
29
+ _poolMap;
30
+ _defaultPoolKey;
33
31
  _temporalFramebuffer;
34
32
  _vSync;
35
33
  _stateStack;
36
34
  constructor(cvs, backend){
35
+ super();
37
36
  this._backend = backend;
38
37
  this._gpuObjectList = {
39
38
  textures: [],
@@ -76,7 +75,10 @@ import { Pool } from './pool.js';
76
75
  };
77
76
  this._stateStack = [];
78
77
  this._beginFrameCounter = 0;
79
- this._pool = new Pool(this);
78
+ this._poolMap = new Map();
79
+ this._defaultPoolKey = Symbol('defaultPool');
80
+ this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));
81
+ this._temporalFramebuffer = false;
80
82
  this._temporalFramebuffer = false;
81
83
  this._vSync = true;
82
84
  this._registerEventHandlers();
@@ -106,7 +108,7 @@ import { Pool } from './pool.js';
106
108
  this._vSync = !!val;
107
109
  }
108
110
  get pool() {
109
- return this._pool;
111
+ return this._poolMap.get(this._defaultPoolKey);
110
112
  }
111
113
  get runLoopFunction() {
112
114
  return this._runLoopFunc;
@@ -114,6 +116,17 @@ import { Pool } from './pool.js';
114
116
  get programBuilder() {
115
117
  return this._programBuilder;
116
118
  }
119
+ poolExists(key) {
120
+ return this._poolMap.has(key);
121
+ }
122
+ getPool(key) {
123
+ let pool = this._poolMap.get(key);
124
+ if (!pool) {
125
+ pool = new Pool(this, key);
126
+ this._poolMap.set(key, pool);
127
+ }
128
+ return pool;
129
+ }
117
130
  setFont(fontName) {
118
131
  DrawText.setFont(this, fontName);
119
132
  }
@@ -126,20 +139,13 @@ import { Pool } from './pool.js';
126
139
  if (!Array.isArray(colorOrRT)) {
127
140
  newRT = colorOrRT ?? null;
128
141
  } else {
129
- const colorAttachments = colorOrRT.map((val)=>val.texture ?? val);
130
- newRT = this._pool.createTemporalFramebuffer(false, colorAttachments, depth, sampleCount, true);
131
- for(let i = 0; i < colorOrRT.length; i++){
132
- const rt = colorOrRT[i];
133
- newRT.setColorAttachmentMipLevel(i, rt.texture ? rt.miplevel ?? 0 : 0);
134
- newRT.setColorAttachmentLayer(i, rt.texture ? rt.face ?? 0 : 0);
135
- newRT.setColorAttachmentCubeFace(i, rt.texture ? rt.layer ?? 0 : 0);
136
- }
142
+ newRT = this.pool.fetchTemporalFramebuffer(false, 0, 0, colorOrRT, depth, true, sampleCount);
137
143
  temporal = true;
138
144
  }
139
145
  const currentRT = this.getFramebuffer();
140
146
  if (currentRT !== newRT) {
141
147
  if (this._temporalFramebuffer) {
142
- this._pool.releaseFrameBuffer(currentRT);
148
+ this.pool.releaseFrameBuffer(currentRT);
143
149
  }
144
150
  this._temporalFramebuffer = temporal;
145
151
  this._setFramebuffer(newRT);
@@ -150,22 +156,17 @@ import { Pool } from './pool.js';
150
156
  if (remove) {
151
157
  this.removeGPUObject(obj);
152
158
  }
153
- if (!obj.disposed) {
154
- if (this.isContextLost()) {
155
- obj.destroy();
156
- } else {
157
- this._disposeObjectList.push(obj);
158
- }
159
+ if (this.isContextLost()) {
160
+ obj.destroy();
161
+ } else {
162
+ this._disposeObjectList.push(obj);
159
163
  }
160
- obj.dispatchEvent(null, 'disposed');
161
164
  }
162
165
  }
163
- async restoreObject(obj) {
166
+ restoreObject(obj) {
164
167
  if (obj && obj.disposed && !this.isContextLost()) {
165
- await obj.restore();
166
- if (obj.restoreHandler) {
167
- await obj.restoreHandler(obj);
168
- }
168
+ obj.restore();
169
+ obj.restoreHandler?.(obj);
169
170
  }
170
171
  }
171
172
  enableGPUTimeRecording(enable) {
@@ -186,7 +187,7 @@ import { Pool } from './pool.js';
186
187
  this._beginFrameCounter++;
187
188
  this._beginFrameTime = this._cpuTimer.now();
188
189
  this.updateFrameInfo();
189
- this._pool.autoRelease();
190
+ this._poolMap.forEach((pool)=>pool.autoRelease());
190
191
  return this.onBeginFrame();
191
192
  }
192
193
  endFrame() {
@@ -194,6 +195,7 @@ import { Pool } from './pool.js';
194
195
  this._beginFrameCounter--;
195
196
  if (this._beginFrameCounter === 0) {
196
197
  this._endFrameTime = this._cpuTimer.now();
198
+ this._frameInfo.frameCounter++;
197
199
  this.onEndFrame();
198
200
  }
199
201
  }
@@ -203,7 +205,7 @@ import { Pool } from './pool.js';
203
205
  }
204
206
  createInterleavedVertexBuffer(attribFormats, data, options) {
205
207
  if (options && options.usage && options.usage !== 'vertex') {
206
- console.error(`createVertexBuffer() failed: options.usage must be 'vertex' or not set`);
208
+ console.error(`createInterleavedVertexBuffer() failed: options.usage must be 'vertex' or not set`);
207
209
  return null;
208
210
  }
209
211
  let size = 0;
@@ -256,6 +258,9 @@ import { Pool } from './pool.js';
256
258
  this._frameInfo.drawCalls++;
257
259
  this._drawInstanced(primitiveType, first, count, numInstances);
258
260
  }
261
+ executeRenderBundle(renderBundle) {
262
+ this._frameInfo.drawCalls += this._executeRenderBundle(renderBundle);
263
+ }
259
264
  compute(workgroupCountX, workgroupCountY, workgroupCountZ) {
260
265
  this._frameInfo.computeCalls++;
261
266
  this._compute(workgroupCountX, workgroupCountY, workgroupCountZ);
@@ -265,6 +270,22 @@ import { Pool } from './pool.js';
265
270
  this._frameInfo.nextFrameCall.push(f);
266
271
  }
267
272
  }
273
+ async runNextFrameAsync(f) {
274
+ return new Promise((resolve)=>{
275
+ if (f) {
276
+ this._frameInfo.nextFrameCall.push(()=>{
277
+ const p = f();
278
+ if (p instanceof Promise) {
279
+ p.then(()=>resolve());
280
+ } else {
281
+ resolve();
282
+ }
283
+ });
284
+ } else {
285
+ resolve();
286
+ }
287
+ });
288
+ }
268
289
  exitLoop() {
269
290
  if (this._runningLoop !== null) {
270
291
  if (this._runningLoop !== 0) {
@@ -373,7 +394,7 @@ import { Pool } from './pool.js';
373
394
  const list = this.getGPUObjectList(obj);
374
395
  if (list && list.indexOf(obj) < 0) {
375
396
  list.push(obj);
376
- this.dispatchEvent(new DeviceGPUObjectAddedEvent(obj));
397
+ this.dispatchEvent('gpuobject_added', obj);
377
398
  }
378
399
  }
379
400
  removeGPUObject(obj) {
@@ -382,7 +403,7 @@ import { Pool } from './pool.js';
382
403
  const index = list.indexOf(obj);
383
404
  if (index >= 0) {
384
405
  list.splice(index, 1);
385
- this.dispatchEvent(new DeviceGPUObjectRemovedEvent(obj));
406
+ this.dispatchEvent('gpuobject_removed', obj);
386
407
  }
387
408
  }
388
409
  }
@@ -393,14 +414,14 @@ import { Pool } from './pool.js';
393
414
  if (this._canvasClientWidth !== this._canvas.clientWidth || this._canvasClientHeight !== this._canvas.clientHeight) {
394
415
  this._canvasClientWidth = this._canvas.clientWidth;
395
416
  this._canvasClientHeight = this._canvas.clientHeight;
396
- this.dispatchEvent(new DeviceResizeEvent(this._canvasClientWidth, this._canvasClientHeight));
417
+ this.dispatchEvent('resize', this._canvasClientWidth, this._canvasClientHeight);
397
418
  }
398
419
  }
399
420
  _registerEventHandlers() {
400
421
  const canvas = this._canvas;
401
422
  const that = this;
402
423
  if (window.ResizeObserver) {
403
- new window.ResizeObserver((entries)=>{
424
+ new window.ResizeObserver(()=>{
404
425
  that._onresize();
405
426
  }).observe(canvas, {});
406
427
  } else {
@@ -422,7 +443,6 @@ import { Pool } from './pool.js';
422
443
  }
423
444
  }
424
445
  updateFrameInfo() {
425
- this._frameInfo.frameCounter++;
426
446
  this._frameInfo.drawCalls = 0;
427
447
  this._frameInfo.computeCalls = 0;
428
448
  const now = this._beginFrameTime;
@@ -504,8 +524,7 @@ import { Pool } from './pool.js';
504
524
  this._disposeObjectList = [];
505
525
  }
506
526
  }
507
- async reloadAll() {
508
- const promises = [];
527
+ reloadAll() {
509
528
  for (const list of [
510
529
  this._gpuObjectList.buffers,
511
530
  this._gpuObjectList.textures,
@@ -517,16 +536,18 @@ import { Pool } from './pool.js';
517
536
  ]){
518
537
  // obj.reload() may change the list, so make a copy first
519
538
  for (const obj of list.slice()){
520
- promises.push(obj.reload());
539
+ obj.reload();
521
540
  }
522
541
  }
523
- Promise.all(promises);
524
542
  return;
525
543
  }
526
544
  parseTextureOptions(options) {
527
- const noMipmapFlag = options?.samplerOptions?.mipFilter === 'none' ? GPUResourceUsageFlags.TF_NO_MIPMAP : 0;
545
+ const noMipmapFlag = options?.mipmapping === false ? GPUResourceUsageFlags.TF_NO_MIPMAP : 0;
528
546
  const writableFlag = options?.writable ? GPUResourceUsageFlags.TF_WRITABLE : 0;
529
547
  const dynamicFlag = options?.dynamic ? GPUResourceUsageFlags.DYNAMIC : 0;
548
+ if (noMipmapFlag && options?.samplerOptions) {
549
+ options.samplerOptions.mipFilter = 'none';
550
+ }
530
551
  return noMipmapFlag | writableFlag | dynamicFlag;
531
552
  }
532
553
  parseBufferOptions(options, defaultUsage) {
@@ -552,6 +573,14 @@ import { Pool } from './pool.js';
552
573
  usageFlag = GPUResourceUsageFlags.BF_WRITE;
553
574
  options.managed = false;
554
575
  break;
576
+ case 'pack-pixel':
577
+ usageFlag = GPUResourceUsageFlags.BF_PACK_PIXEL;
578
+ options.managed = false;
579
+ break;
580
+ case 'unpack-pixel':
581
+ usageFlag = GPUResourceUsageFlags.BF_UNPACK_PIXEL;
582
+ options.managed = false;
583
+ break;
555
584
  default:
556
585
  usageFlag = 0;
557
586
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import { type Vector4, type TypedArray, type IEventTarget, Observable } from '@zephyr3d/base';\r\nimport type { ITimer } from './timer';\r\nimport { CPUTimer } from './timer';\r\nimport type {\r\n BlendingState,\r\n ColorState,\r\n DepthState,\r\n RasterizerState,\r\n RenderStateSet,\r\n StencilState\r\n} from './render_states';\r\nimport type {\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n TextureSampler,\r\n Texture2D,\r\n Texture3D,\r\n TextureCube,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n GPUObject,\r\n StructuredBuffer,\r\n BindGroupLayout,\r\n BindGroup,\r\n IndexBuffer,\r\n TextureVideo,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n BufferUsage,\r\n VertexSemantic,\r\n VertexAttribFormat,\r\n VertexLayoutOptions,\r\n BaseTexture,\r\n RenderBundle\r\n} from './gpuobject';\r\nimport {\r\n GPUResourceUsageFlags,\r\n makeVertexBufferType,\r\n getVertexFormatSize,\r\n getVertexAttribFormat\r\n} from './gpuobject';\r\nimport type { PBComputeOptions, PBRenderOptions, PBStructTypeInfo } from './builder';\r\nimport { ProgramBuilder } from './builder';\r\nimport type {\r\n DataType,\r\n PrimitiveType,\r\n TextureFormat,\r\n GPUObjectList,\r\n FrameInfo,\r\n DeviceCaps,\r\n GPUProgramConstructParams,\r\n AbstractDevice,\r\n DeviceOptions,\r\n DeviceEventMap,\r\n DeviceViewport\r\n} from './base_types';\r\nimport { DrawText } from './helpers';\r\nimport { Pool } from './pool';\r\n\r\n/**\r\n * The device backend interface\r\n * @public\r\n */\r\nexport interface DeviceBackend {\r\n typeName(): string;\r\n supported(): boolean;\r\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<AbstractDevice>;\r\n}\r\n\r\ntype DeviceState = {\r\n framebuffer: FrameBuffer;\r\n windowOrderReversed: boolean;\r\n viewport: DeviceViewport;\r\n scissor: DeviceViewport;\r\n renderStateSet: RenderStateSet;\r\n program: GPUProgram;\r\n vertexLayout: VertexLayout;\r\n bindGroups: [BindGroup, Iterable<number>][];\r\n};\r\n\r\n/**\r\n * Base class for rendering device\r\n * @public\r\n */\r\nexport abstract class BaseDevice extends Observable<DeviceEventMap> {\r\n protected _canvas: HTMLCanvasElement;\r\n protected _canvasClientWidth: number;\r\n protected _canvasClientHeight: number;\r\n protected _gpuObjectList: GPUObjectList;\r\n protected _gpuMemCost: number;\r\n protected _disposeObjectList: GPUObject[];\r\n protected _beginFrameTime: number;\r\n protected _endFrameTime: number;\r\n protected _frameInfo: FrameInfo;\r\n protected _cpuTimer: CPUTimer;\r\n protected _gpuTimer: ITimer;\r\n protected _runningLoop: number;\r\n protected _fpsCounter: { time: number; frame: number };\r\n protected _runLoopFunc: (device: AbstractDevice) => void;\r\n protected _backend: DeviceBackend;\r\n protected _beginFrameCounter: number;\r\n protected _programBuilder: ProgramBuilder;\r\n protected _poolMap: Map<string | symbol, Pool>;\r\n protected _defaultPoolKey: symbol;\r\n protected _temporalFramebuffer: boolean;\r\n protected _vSync: boolean;\r\n private readonly _stateStack: DeviceState[];\r\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend) {\r\n super();\r\n this._backend = backend;\r\n this._gpuObjectList = {\r\n textures: [],\r\n samplers: [],\r\n buffers: [],\r\n programs: [],\r\n framebuffers: [],\r\n vertexArrayObjects: [],\r\n bindGroups: []\r\n };\r\n this._canvas = cvs;\r\n this._canvas.setAttribute('tabindex', '1');\r\n this._canvasClientWidth = cvs.clientWidth;\r\n this._canvasClientHeight = cvs.clientHeight;\r\n this._gpuMemCost = 0;\r\n this._disposeObjectList = [];\r\n this._beginFrameTime = 0;\r\n this._endFrameTime = 0;\r\n this._runLoopFunc = null;\r\n this._frameInfo = {\r\n frameCounter: 0,\r\n frameTimestamp: 0,\r\n elapsedTimeCPU: 0,\r\n elapsedTimeGPU: 0,\r\n elapsedFrame: 0,\r\n elapsedOverall: 0,\r\n FPS: 0,\r\n drawCalls: 0,\r\n computeCalls: 0,\r\n nextFrameCall: [],\r\n nextFrameCallNext: []\r\n };\r\n this._programBuilder = new ProgramBuilder(this);\r\n this._cpuTimer = new CPUTimer();\r\n this._gpuTimer = null;\r\n this._runningLoop = null;\r\n this._fpsCounter = { time: 0, frame: 0 };\r\n this._stateStack = [];\r\n this._beginFrameCounter = 0;\r\n this._poolMap = new Map();\r\n this._defaultPoolKey = Symbol('defaultPool');\r\n this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));\r\n this._temporalFramebuffer = false;\r\n this._temporalFramebuffer = false;\r\n this._vSync = true;\r\n this._registerEventHandlers();\r\n }\r\n abstract getAdapterInfo(): any;\r\n abstract getFrameBufferSampleCount(): number;\r\n abstract isContextLost(): boolean;\r\n abstract getScale(): number;\r\n abstract getDrawingBufferWidth(): number;\r\n abstract getDrawingBufferHeight(): number;\r\n abstract getBackBufferWidth(): number;\r\n abstract getBackBufferHeight(): number;\r\n abstract getDeviceCaps(): DeviceCaps;\r\n abstract initContext(): Promise<void>;\r\n abstract clearFrameBuffer(clearColor: Vector4, clearDepth: number, clearStencil: number);\r\n abstract createGPUTimer(): ITimer;\r\n abstract createRenderStateSet(): RenderStateSet;\r\n abstract createBlendingState(): BlendingState;\r\n abstract createColorState(): ColorState;\r\n abstract createRasterizerState(): RasterizerState;\r\n abstract createDepthState(): DepthState;\r\n abstract createStencilState(): StencilState;\r\n abstract createSampler(options: SamplerOptions): TextureSampler;\r\n abstract createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): T;\r\n abstract createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Texture2D;\r\n abstract createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Texture2D;\r\n abstract createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Texture2DArray;\r\n abstract createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Texture2DArray;\r\n abstract createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Texture3D;\r\n abstract createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): TextureCube;\r\n abstract createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\r\n abstract reverseVertexWindingOrder(reverse: boolean): void;\r\n abstract isWindingOrderReversed(): boolean;\r\n abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number);\r\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number);\r\n // program\r\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n abstract createBindGroup(layout: BindGroupLayout): BindGroup;\r\n abstract createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\r\n abstract copyBuffer(\r\n sourceBuffer: GPUDataBuffer,\r\n destBuffer: GPUDataBuffer,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n );\r\n abstract createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ): IndexBuffer;\r\n abstract createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options: BufferCreationOptions,\r\n data?: TypedArray\r\n ): StructuredBuffer;\r\n abstract createVertexLayout(options: VertexLayoutOptions): VertexLayout;\r\n abstract createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: BaseTexture,\r\n options?: FrameBufferOptions\r\n ): FrameBuffer;\r\n // render related\r\n abstract setViewport(vp?: number[] | DeviceViewport): void;\r\n abstract getViewport(): DeviceViewport;\r\n abstract setScissor(scissor?: number[] | DeviceViewport): void;\r\n abstract getScissor(): DeviceViewport;\r\n abstract setProgram(program: GPUProgram): void;\r\n abstract getProgram(): GPUProgram;\r\n abstract setVertexLayout(vertexData: VertexLayout): void;\r\n abstract getVertexLayout(): VertexLayout;\r\n abstract setRenderStates(renderStates: RenderStateSet): void;\r\n abstract getRenderStates(): RenderStateSet;\r\n abstract getFramebuffer(): FrameBuffer;\r\n abstract setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Iterable<number>);\r\n abstract getBindGroup(index: number): [BindGroup, Iterable<number>];\r\n abstract flush(): void;\r\n abstract nextFrame(callback: () => void): number;\r\n abstract cancelNextFrame(handle: number);\r\n // misc\r\n abstract readPixels(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n abstract beginCapture(): void;\r\n abstract endCapture(): RenderBundle;\r\n abstract looseContext(): void;\r\n abstract restoreContext(): void;\r\n protected abstract _executeRenderBundle(renderBundle: RenderBundle): number;\r\n protected abstract _draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n protected abstract _drawInstanced(\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ): void;\r\n protected abstract _compute(\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ): void;\r\n get backend(): DeviceBackend {\r\n return this._backend;\r\n }\r\n get videoMemoryUsage(): number {\r\n return this._gpuMemCost;\r\n }\r\n get frameInfo(): FrameInfo {\r\n return this._frameInfo;\r\n }\r\n get isRendering(): boolean {\r\n return this._runningLoop !== null;\r\n }\r\n get canvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n get type(): string {\r\n return this._backend.typeName();\r\n }\r\n get vSync(): boolean {\r\n return this._vSync;\r\n }\r\n set vSync(val: boolean) {\r\n this._vSync = !!val;\r\n }\r\n get pool(): Pool {\r\n return this._poolMap.get(this._defaultPoolKey);\r\n }\r\n get runLoopFunction(): (device: AbstractDevice) => void {\r\n return this._runLoopFunc;\r\n }\r\n get programBuilder(): ProgramBuilder {\r\n return this._programBuilder;\r\n }\r\n poolExists(key: string | symbol): boolean {\r\n return this._poolMap.has(key);\r\n }\r\n getPool(key: string | symbol): Pool {\r\n let pool = this._poolMap.get(key);\r\n if (!pool) {\r\n pool = new Pool(this, key);\r\n this._poolMap.set(key, pool);\r\n }\r\n return pool;\r\n }\r\n setFont(fontName: string) {\r\n DrawText.setFont(this, fontName);\r\n }\r\n drawText(text: string, x: number, y: number, color: string) {\r\n DrawText.drawText(this, text, color, x, y);\r\n }\r\n setFramebuffer(rt: FrameBuffer);\r\n setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number);\r\n setFramebuffer(colorOrRT: BaseTexture[] | FrameBuffer, depth?: BaseTexture, sampleCount?: number) {\r\n let newRT: FrameBuffer = null;\r\n let temporal = false;\r\n if (!Array.isArray(colorOrRT)) {\r\n newRT = colorOrRT ?? null;\r\n } else {\r\n newRT = this.pool.fetchTemporalFramebuffer(false, 0, 0, colorOrRT, depth, true, sampleCount);\r\n temporal = true;\r\n }\r\n const currentRT = this.getFramebuffer();\r\n if (currentRT !== newRT) {\r\n if (this._temporalFramebuffer) {\r\n this.pool.releaseFrameBuffer(currentRT);\r\n }\r\n this._temporalFramebuffer = temporal;\r\n this._setFramebuffer(newRT);\r\n }\r\n }\r\n disposeObject(obj: GPUObject, remove = true) {\r\n if (obj) {\r\n if (remove) {\r\n this.removeGPUObject(obj);\r\n }\r\n if (this.isContextLost()) {\r\n obj.destroy();\r\n } else {\r\n this._disposeObjectList.push(obj);\r\n }\r\n }\r\n }\r\n restoreObject(obj: GPUObject) {\r\n if (obj && obj.disposed && !this.isContextLost()) {\r\n obj.restore();\r\n obj.restoreHandler?.(obj);\r\n }\r\n }\r\n enableGPUTimeRecording(enable: boolean) {\r\n if (enable && !this._gpuTimer) {\r\n this._gpuTimer = this.createGPUTimer();\r\n } else if (!enable) {\r\n this._gpuTimer?.end();\r\n this._gpuTimer = null;\r\n }\r\n }\r\n beginFrame(): boolean {\r\n if (this._beginFrameCounter === 0) {\r\n for (const obj of this._disposeObjectList) {\r\n obj.destroy();\r\n }\r\n this._disposeObjectList = [];\r\n }\r\n this._beginFrameCounter++;\r\n this._beginFrameTime = this._cpuTimer.now();\r\n this.updateFrameInfo();\r\n this._poolMap.forEach((pool) => pool.autoRelease());\r\n return this.onBeginFrame();\r\n }\r\n endFrame(): void {\r\n if (this._beginFrameCounter > 0) {\r\n this._beginFrameCounter--;\r\n if (this._beginFrameCounter === 0) {\r\n this._endFrameTime = this._cpuTimer.now();\r\n this._frameInfo.frameCounter++;\r\n this.onEndFrame();\r\n }\r\n }\r\n }\r\n getVertexAttribFormat(\r\n semantic: VertexSemantic,\r\n dataType: DataType,\r\n componentCount: number\r\n ): VertexAttribFormat {\r\n return getVertexAttribFormat(semantic, dataType, componentCount);\r\n }\r\n createInterleavedVertexBuffer(\r\n attribFormats: VertexAttribFormat[],\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ): StructuredBuffer {\r\n if (options && options.usage && options.usage !== 'vertex') {\r\n console.error(`createInterleavedVertexBuffer() failed: options.usage must be 'vertex' or not set`);\r\n return null;\r\n }\r\n let size = 0;\r\n for (const format of attribFormats) {\r\n size += getVertexFormatSize(format);\r\n }\r\n const vertexBufferType = makeVertexBufferType((data.byteLength / size) >> 0, ...attribFormats);\r\n const opt = Object.assign(\r\n {\r\n usage: 'vertex',\r\n dynamic: false,\r\n managed: true,\r\n storage: false\r\n },\r\n options || {}\r\n );\r\n if (opt.storage) {\r\n opt.dynamic = false;\r\n opt.managed = false;\r\n }\r\n if (opt.dynamic) {\r\n opt.managed = false;\r\n }\r\n return this.createStructuredBuffer(vertexBufferType, opt, data);\r\n }\r\n createVertexBuffer(\r\n attribFormat: VertexAttribFormat,\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ): StructuredBuffer {\r\n if (options && options.usage && options.usage !== 'vertex') {\r\n console.error(`createVertexBuffer() failed: options.usage must be 'vertex' or not set`);\r\n return null;\r\n }\r\n const count = getVertexFormatSize(attribFormat);\r\n const vertexBufferType = makeVertexBufferType((data.byteLength / count) >> 0, attribFormat);\r\n const opt = Object.assign(\r\n {\r\n usage: 'vertex',\r\n dynamic: false,\r\n managed: true,\r\n storage: false\r\n },\r\n options || {}\r\n );\r\n if (opt.storage) {\r\n opt.dynamic = false;\r\n opt.managed = false;\r\n }\r\n if (opt.dynamic) {\r\n opt.managed = false;\r\n }\r\n return this.createStructuredBuffer(vertexBufferType, opt, data);\r\n }\r\n draw(primitiveType: PrimitiveType, first: number, count: number): void {\r\n this._frameInfo.drawCalls++;\r\n this._draw(primitiveType, first, count);\r\n }\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number): void {\r\n this._frameInfo.drawCalls++;\r\n this._drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n executeRenderBundle(renderBundle: RenderBundle) {\r\n this._frameInfo.drawCalls += this._executeRenderBundle(renderBundle);\r\n }\r\n compute(workgroupCountX, workgroupCountY, workgroupCountZ): void {\r\n this._frameInfo.computeCalls++;\r\n this._compute(workgroupCountX, workgroupCountY, workgroupCountZ);\r\n }\r\n runNextFrame(f: () => void) {\r\n if (f) {\r\n this._frameInfo.nextFrameCall.push(f);\r\n }\r\n }\r\n async runNextFrameAsync(f: () => void | Promise<void>): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (f) {\r\n this._frameInfo.nextFrameCall.push(() => {\r\n const p = f();\r\n if (p instanceof Promise) {\r\n p.then(() => resolve());\r\n } else {\r\n resolve();\r\n }\r\n });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n exitLoop() {\r\n if (this._runningLoop !== null) {\r\n if (this._runningLoop !== 0) {\r\n cancelAnimationFrame(this._runningLoop);\r\n } else {\r\n this.cancelNextFrame(this._runningLoop);\r\n }\r\n this._runningLoop = null;\r\n }\r\n }\r\n runLoop(func: (device: AbstractDevice) => void) {\r\n if (this._runningLoop !== null) {\r\n console.error('Device.runLoop() can not be nested');\r\n return;\r\n }\r\n if (!func) {\r\n console.error('Device.runLoop() argment error');\r\n return;\r\n }\r\n const that = this;\r\n that._runLoopFunc = func;\r\n (function entry() {\r\n if (that._vSync) {\r\n that._runningLoop = requestAnimationFrame(entry);\r\n } else {\r\n that._runningLoop = that.nextFrame(() => {\r\n if (that._runningLoop !== null) {\r\n entry();\r\n }\r\n });\r\n }\r\n if (that.beginFrame()) {\r\n that._runLoopFunc(that as unknown as AbstractDevice);\r\n that.endFrame();\r\n }\r\n })();\r\n }\r\n pushDeviceStates() {\r\n this._stateStack.push({\r\n windowOrderReversed: this.isWindingOrderReversed(),\r\n framebuffer: this.getFramebuffer(),\r\n viewport: this.getViewport(),\r\n scissor: this.getScissor(),\r\n program: this.getProgram(),\r\n renderStateSet: this.getRenderStates(),\r\n vertexLayout: this.getVertexLayout(),\r\n bindGroups: [this.getBindGroup(0), this.getBindGroup(1), this.getBindGroup(2), this.getBindGroup(3)]\r\n });\r\n }\r\n popDeviceStates() {\r\n if (this._stateStack.length === 0) {\r\n console.error('Device.popDeviceStates(): stack is empty');\r\n } else {\r\n const top = this._stateStack.pop();\r\n this.setFramebuffer(top.framebuffer);\r\n this.setViewport(top.viewport);\r\n this.setScissor(top.scissor);\r\n this.setProgram(top.program);\r\n this.setRenderStates(top.renderStateSet);\r\n this.setVertexLayout(top.vertexLayout);\r\n this.setBindGroup(0, ...top.bindGroups[0]);\r\n this.setBindGroup(1, ...top.bindGroups[1]);\r\n this.setBindGroup(2, ...top.bindGroups[2]);\r\n this.setBindGroup(3, ...top.bindGroups[3]);\r\n this.reverseVertexWindingOrder(top.windowOrderReversed);\r\n }\r\n }\r\n getGPUObjects(): GPUObjectList {\r\n return this._gpuObjectList;\r\n }\r\n getGPUObjectById(uid: number): GPUObject {\r\n for (const list of [\r\n this._gpuObjectList.textures,\r\n this._gpuObjectList.samplers,\r\n this._gpuObjectList.buffers,\r\n this._gpuObjectList.framebuffers,\r\n this._gpuObjectList.programs,\r\n this._gpuObjectList.vertexArrayObjects\r\n ]) {\r\n for (const obj of list) {\r\n if (obj.uid === uid) {\r\n return obj;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n screenToDevice(val: number): number {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScale());\r\n }\r\n deviceToScreen(val: number): number {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScale());\r\n }\r\n buildRenderProgram(options: PBRenderOptions): GPUProgram {\r\n return this._programBuilder.buildRenderProgram(options);\r\n }\r\n buildComputeProgram(options: PBComputeOptions): GPUProgram {\r\n return this._programBuilder.buildComputeProgram(options);\r\n }\r\n addGPUObject(obj: GPUObject) {\r\n const list = this.getGPUObjectList(obj);\r\n if (list && list.indexOf(obj) < 0) {\r\n list.push(obj);\r\n this.dispatchEvent('gpuobject_added', obj);\r\n }\r\n }\r\n removeGPUObject(obj: GPUObject) {\r\n const list = this.getGPUObjectList(obj);\r\n if (list) {\r\n const index = list.indexOf(obj);\r\n if (index >= 0) {\r\n list.splice(index, 1);\r\n this.dispatchEvent('gpuobject_removed', obj);\r\n }\r\n }\r\n }\r\n updateVideoMemoryCost(delta: number) {\r\n this._gpuMemCost += delta;\r\n }\r\n protected abstract onBeginFrame(): boolean;\r\n protected abstract onEndFrame(): void;\r\n protected abstract _setFramebuffer(fb: FrameBuffer);\r\n private _onresize() {\r\n if (\r\n this._canvasClientWidth !== this._canvas.clientWidth ||\r\n this._canvasClientHeight !== this._canvas.clientHeight\r\n ) {\r\n this._canvasClientWidth = this._canvas.clientWidth;\r\n this._canvasClientHeight = this._canvas.clientHeight;\r\n this.dispatchEvent('resize', this._canvasClientWidth, this._canvasClientHeight);\r\n }\r\n }\r\n private _registerEventHandlers() {\r\n const canvas: HTMLCanvasElement = this._canvas;\r\n const that = this;\r\n if (window.ResizeObserver) {\r\n new window.ResizeObserver(() => {\r\n that._onresize();\r\n }).observe(canvas, {});\r\n } else {\r\n if (window.MutationObserver) {\r\n new MutationObserver(function (mutations) {\r\n if (mutations.length > 0) {\r\n that._onresize();\r\n }\r\n }).observe(canvas, { attributes: true, attributeFilter: ['style'] });\r\n }\r\n window.addEventListener('resize', () => {\r\n this._onresize();\r\n });\r\n }\r\n }\r\n private updateFrameInfo() {\r\n this._frameInfo.drawCalls = 0;\r\n this._frameInfo.computeCalls = 0;\r\n const now = this._beginFrameTime;\r\n if (this._frameInfo.frameTimestamp === 0) {\r\n this._frameInfo.frameTimestamp = now;\r\n this._frameInfo.elapsedTimeCPU = 0;\r\n this._frameInfo.elapsedTimeGPU = 0;\r\n this._frameInfo.elapsedFrame = 0;\r\n this._frameInfo.elapsedOverall = 0;\r\n this._frameInfo.FPS = 0;\r\n this._fpsCounter.time = now;\r\n this._fpsCounter.frame = this._frameInfo.frameCounter;\r\n if (this._gpuTimer) {\r\n this._gpuTimer.begin();\r\n }\r\n } else {\r\n this._frameInfo.elapsedFrame = now - this._frameInfo.frameTimestamp;\r\n this._frameInfo.elapsedOverall += this._frameInfo.elapsedFrame;\r\n let gpuTime = 0;\r\n let cpuTime = 0;\r\n if (this._endFrameTime !== 0) {\r\n gpuTime = now - this._endFrameTime;\r\n cpuTime = this._endFrameTime - this._frameInfo.frameTimestamp;\r\n }\r\n this._frameInfo.frameTimestamp = now;\r\n if (now >= this._fpsCounter.time + 1000) {\r\n this._frameInfo.FPS =\r\n ((this._frameInfo.frameCounter - this._fpsCounter.frame) * 1000) / (now - this._fpsCounter.time);\r\n this._fpsCounter.time = now;\r\n this._fpsCounter.frame = this._frameInfo.frameCounter;\r\n this._frameInfo.elapsedTimeGPU = gpuTime;\r\n this._frameInfo.elapsedTimeCPU = cpuTime;\r\n }\r\n }\r\n const tmp = this._frameInfo.nextFrameCall;\r\n this._frameInfo.nextFrameCall = this._frameInfo.nextFrameCallNext;\r\n this._frameInfo.nextFrameCallNext = tmp;\r\n for (const f of this._frameInfo.nextFrameCallNext) {\r\n f();\r\n }\r\n this._frameInfo.nextFrameCallNext.length = 0;\r\n }\r\n private getGPUObjectList(obj: GPUObject): GPUObject[] {\r\n let list: GPUObject[] = null;\r\n if (obj.isTexture()) {\r\n list = this._gpuObjectList.textures;\r\n } else if (obj.isSampler()) {\r\n list = this._gpuObjectList.samplers;\r\n } else if (obj.isBuffer()) {\r\n list = this._gpuObjectList.buffers;\r\n } else if (obj.isFramebuffer()) {\r\n list = this._gpuObjectList.framebuffers;\r\n } else if (obj.isProgram()) {\r\n list = this._gpuObjectList.programs;\r\n } else if (obj.isVertexLayout()) {\r\n list = this._gpuObjectList.vertexArrayObjects;\r\n } else if (obj.isBindGroup()) {\r\n list = this._gpuObjectList.bindGroups;\r\n }\r\n return list;\r\n }\r\n protected invalidateAll() {\r\n for (const list of [\r\n this._gpuObjectList.buffers,\r\n this._gpuObjectList.textures,\r\n this._gpuObjectList.samplers,\r\n this._gpuObjectList.programs,\r\n this._gpuObjectList.framebuffers,\r\n this._gpuObjectList.vertexArrayObjects,\r\n this._gpuObjectList.bindGroups\r\n ]) {\r\n for (const obj of list) {\r\n this.disposeObject(obj, false);\r\n }\r\n }\r\n if (this.isContextLost()) {\r\n for (const obj of this._disposeObjectList) {\r\n obj.destroy();\r\n }\r\n this._disposeObjectList = [];\r\n }\r\n }\r\n protected reloadAll(): void {\r\n for (const list of [\r\n this._gpuObjectList.buffers,\r\n this._gpuObjectList.textures,\r\n this._gpuObjectList.samplers,\r\n this._gpuObjectList.programs,\r\n this._gpuObjectList.framebuffers,\r\n this._gpuObjectList.vertexArrayObjects,\r\n this._gpuObjectList.bindGroups\r\n ]) {\r\n // obj.reload() may change the list, so make a copy first\r\n for (const obj of list.slice()) {\r\n obj.reload();\r\n }\r\n }\r\n return;\r\n }\r\n protected parseTextureOptions(options?: TextureCreationOptions): number {\r\n const noMipmapFlag = options?.mipmapping === false ? GPUResourceUsageFlags.TF_NO_MIPMAP : 0;\r\n const writableFlag = options?.writable ? GPUResourceUsageFlags.TF_WRITABLE : 0;\r\n const dynamicFlag = options?.dynamic ? GPUResourceUsageFlags.DYNAMIC : 0;\r\n if (noMipmapFlag && options?.samplerOptions) {\r\n options.samplerOptions.mipFilter = 'none';\r\n }\r\n return noMipmapFlag | writableFlag | dynamicFlag;\r\n }\r\n protected parseBufferOptions(options: BufferCreationOptions, defaultUsage?: BufferUsage): number {\r\n const usage = options?.usage || defaultUsage;\r\n let usageFlag: number;\r\n switch (usage) {\r\n case 'uniform':\r\n usageFlag = GPUResourceUsageFlags.BF_UNIFORM;\r\n options.managed = false;\r\n options.dynamic = options.dynamic ?? true;\r\n break;\r\n case 'vertex':\r\n usageFlag = GPUResourceUsageFlags.BF_VERTEX;\r\n break;\r\n case 'index':\r\n usageFlag = GPUResourceUsageFlags.BF_INDEX;\r\n break;\r\n case 'read':\r\n usageFlag = GPUResourceUsageFlags.BF_READ;\r\n options.managed = false;\r\n break;\r\n case 'write':\r\n usageFlag = GPUResourceUsageFlags.BF_WRITE;\r\n options.managed = false;\r\n break;\r\n case 'pack-pixel':\r\n usageFlag = GPUResourceUsageFlags.BF_PACK_PIXEL;\r\n options.managed = false;\r\n break;\r\n case 'unpack-pixel':\r\n usageFlag = GPUResourceUsageFlags.BF_UNPACK_PIXEL;\r\n options.managed = false;\r\n break;\r\n default:\r\n usageFlag = 0;\r\n break;\r\n }\r\n const storageFlag = (options?.storage ?? false) ? GPUResourceUsageFlags.BF_STORAGE : 0;\r\n const dynamicFlag = (options?.dynamic ?? false) ? GPUResourceUsageFlags.DYNAMIC : 0;\r\n const managedFlag = dynamicFlag === 0 && (options?.managed ?? true) ? GPUResourceUsageFlags.MANAGED : 0;\r\n return usageFlag | storageFlag | dynamicFlag | managedFlag;\r\n }\r\n}\r\n\r\n/**\r\n * Merge event target interface\r\n * @public\r\n */\r\nexport interface BaseDevice extends IEventTarget<DeviceEventMap> {}\r\n"],"names":["BaseDevice","Observable","_canvas","_canvasClientWidth","_canvasClientHeight","_gpuObjectList","_gpuMemCost","_disposeObjectList","_beginFrameTime","_endFrameTime","_frameInfo","_cpuTimer","_gpuTimer","_runningLoop","_fpsCounter","_runLoopFunc","_backend","_beginFrameCounter","_programBuilder","_poolMap","_defaultPoolKey","_temporalFramebuffer","_vSync","_stateStack","cvs","backend","textures","samplers","buffers","programs","framebuffers","vertexArrayObjects","bindGroups","setAttribute","clientWidth","clientHeight","frameCounter","frameTimestamp","elapsedTimeCPU","elapsedTimeGPU","elapsedFrame","elapsedOverall","FPS","drawCalls","computeCalls","nextFrameCall","nextFrameCallNext","ProgramBuilder","CPUTimer","time","frame","Map","Symbol","set","Pool","_registerEventHandlers","videoMemoryUsage","frameInfo","isRendering","canvas","type","typeName","vSync","val","pool","get","runLoopFunction","programBuilder","poolExists","key","has","getPool","setFont","fontName","DrawText","drawText","text","x","y","color","setFramebuffer","colorOrRT","depth","sampleCount","newRT","temporal","Array","isArray","fetchTemporalFramebuffer","currentRT","getFramebuffer","releaseFrameBuffer","_setFramebuffer","disposeObject","obj","remove","removeGPUObject","isContextLost","destroy","push","restoreObject","disposed","restore","restoreHandler","enableGPUTimeRecording","enable","createGPUTimer","end","beginFrame","now","updateFrameInfo","forEach","autoRelease","onBeginFrame","endFrame","onEndFrame","getVertexAttribFormat","semantic","dataType","componentCount","createInterleavedVertexBuffer","attribFormats","data","options","usage","console","error","size","format","getVertexFormatSize","vertexBufferType","makeVertexBufferType","byteLength","opt","Object","assign","dynamic","managed","storage","createStructuredBuffer","createVertexBuffer","attribFormat","count","draw","primitiveType","first","_draw","drawInstanced","numInstances","_drawInstanced","executeRenderBundle","renderBundle","_executeRenderBundle","compute","workgroupCountX","workgroupCountY","workgroupCountZ","_compute","runNextFrame","f","runNextFrameAsync","Promise","resolve","p","then","exitLoop","cancelAnimationFrame","cancelNextFrame","runLoop","func","that","entry","requestAnimationFrame","nextFrame","pushDeviceStates","windowOrderReversed","isWindingOrderReversed","framebuffer","viewport","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","length","top","pop","setViewport","setScissor","setProgram","setRenderStates","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenToDevice","Math","round","getScale","deviceToScreen","buildRenderProgram","buildComputeProgram","addGPUObject","getGPUObjectList","indexOf","dispatchEvent","index","splice","updateVideoMemoryCost","delta","_onresize","window","ResizeObserver","observe","MutationObserver","mutations","attributes","attributeFilter","addEventListener","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","invalidateAll","reloadAll","slice","reload","parseTextureOptions","noMipmapFlag","mipmapping","GPUResourceUsageFlags","TF_NO_MIPMAP","writableFlag","writable","TF_WRITABLE","dynamicFlag","DYNAMIC","samplerOptions","mipFilter","parseBufferOptions","defaultUsage","usageFlag","BF_UNIFORM","BF_VERTEX","BF_INDEX","BF_READ","BF_WRITE","BF_PACK_PIXEL","BF_UNPACK_PIXEL","storageFlag","BF_STORAGE","managedFlag","MANAGED"],"mappings":"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"}
package/dist/gpuobject.js CHANGED
@@ -1,22 +1,22 @@
1
- import { PBPrimitiveType, PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo } from './builder/types.js';
1
+ import { PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo, PBPrimitiveType } from './builder/types.js';
2
2
 
3
- /** @internal */ const MAX_VERTEX_ATTRIBUTES = 16;
4
- /** @internal */ const MAX_BINDING_GROUPS = 4;
5
- /** @internal */ const MAX_TEXCOORD_INDEX_COUNT = 8;
6
- /** @internal */ const VERTEX_ATTRIB_POSITION = 0;
7
- /** @internal */ const VERTEX_ATTRIB_NORMAL = 1;
8
- /** @internal */ const VERTEX_ATTRIB_DIFFUSE = 2;
9
- /** @internal */ const VERTEX_ATTRIB_TANGENT = 3;
10
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD0 = 4;
11
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD1 = 5;
12
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD2 = 6;
13
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD3 = 7;
14
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD4 = 8;
15
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD5 = 9;
16
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD6 = 10;
17
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD7 = 11;
18
- /** @internal */ const VERTEX_ATTRIB_BLEND_WEIGHT = 12;
19
- /** @internal */ const VERTEX_ATTRIB_BLEND_INDICES = 13;
3
+ /** @public */ const MAX_VERTEX_ATTRIBUTES = 16;
4
+ /** @public */ const MAX_BINDING_GROUPS = 4;
5
+ /** @public */ const MAX_TEXCOORD_INDEX_COUNT = 8;
6
+ /** @public */ const VERTEX_ATTRIB_POSITION = 0;
7
+ /** @public */ const VERTEX_ATTRIB_NORMAL = 1;
8
+ /** @public */ const VERTEX_ATTRIB_DIFFUSE = 2;
9
+ /** @public */ const VERTEX_ATTRIB_TANGENT = 3;
10
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD0 = 4;
11
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD1 = 5;
12
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD2 = 6;
13
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD3 = 7;
14
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD4 = 8;
15
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD5 = 9;
16
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD6 = 10;
17
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD7 = 11;
18
+ /** @public */ const VERTEX_ATTRIB_BLEND_WEIGHT = 12;
19
+ /** @public */ const VERTEX_ATTRIB_BLEND_INDICES = 13;
20
20
  const vertexAttribFormatMap = {
21
21
  position_u8normx2: [
22
22
  VERTEX_ATTRIB_POSITION,
@@ -1955,8 +1955,10 @@ const vertexAttribNameRevMap = {
1955
1955
  [VERTEX_ATTRIB_TEXCOORD6]: 'texCoord6',
1956
1956
  [VERTEX_ATTRIB_TEXCOORD7]: 'texCoord7'
1957
1957
  };
1958
- var GPUResourceUsageFlags;
1959
- (function(GPUResourceUsageFlags) {
1958
+ /**
1959
+ * The gpu resource usage flags
1960
+ * @public
1961
+ */ var GPUResourceUsageFlags = /*#__PURE__*/ function(GPUResourceUsageFlags) {
1960
1962
  GPUResourceUsageFlags[GPUResourceUsageFlags["TF_LINEAR_COLOR_SPACE"] = 2] = "TF_LINEAR_COLOR_SPACE";
1961
1963
  GPUResourceUsageFlags[GPUResourceUsageFlags["TF_NO_MIPMAP"] = 4] = "TF_NO_MIPMAP";
1962
1964
  GPUResourceUsageFlags[GPUResourceUsageFlags["TF_WRITABLE"] = 8] = "TF_WRITABLE";
@@ -1967,9 +1969,12 @@ var GPUResourceUsageFlags;
1967
1969
  GPUResourceUsageFlags[GPUResourceUsageFlags["BF_WRITE"] = 256] = "BF_WRITE";
1968
1970
  GPUResourceUsageFlags[GPUResourceUsageFlags["BF_UNIFORM"] = 512] = "BF_UNIFORM";
1969
1971
  GPUResourceUsageFlags[GPUResourceUsageFlags["BF_STORAGE"] = 1024] = "BF_STORAGE";
1970
- GPUResourceUsageFlags[GPUResourceUsageFlags["DYNAMIC"] = 2048] = "DYNAMIC";
1971
- GPUResourceUsageFlags[GPUResourceUsageFlags["MANAGED"] = 4096] = "MANAGED";
1972
- })(GPUResourceUsageFlags || (GPUResourceUsageFlags = {}));
1972
+ GPUResourceUsageFlags[GPUResourceUsageFlags["BF_PACK_PIXEL"] = 2048] = "BF_PACK_PIXEL";
1973
+ GPUResourceUsageFlags[GPUResourceUsageFlags["BF_UNPACK_PIXEL"] = 4096] = "BF_UNPACK_PIXEL";
1974
+ GPUResourceUsageFlags[GPUResourceUsageFlags["DYNAMIC"] = 8192] = "DYNAMIC";
1975
+ GPUResourceUsageFlags[GPUResourceUsageFlags["MANAGED"] = 16384] = "MANAGED";
1976
+ return GPUResourceUsageFlags;
1977
+ }({});
1973
1978
  /**
1974
1979
  * Get vertex attribute index by semantic
1975
1980
  * @public
@@ -1982,14 +1987,60 @@ var GPUResourceUsageFlags;
1982
1987
  */ function getVertexAttribName(attrib) {
1983
1988
  return vertexAttribNameRevMap[attrib];
1984
1989
  }
1990
+ /**
1991
+ * Test whether a vertex buffer matches given semantic
1992
+ * @param buffer - Vertex buffer
1993
+ * @param name - Semantic to test
1994
+ * @returns true if the vertex buffer matches given semantic, otherwise false
1995
+ *
1996
+ * @public
1997
+ */ function matchVertexBuffer(buffer, name) {
1998
+ if (!buffer) {
1999
+ return false;
2000
+ }
2001
+ const bufferType = buffer.structure.structMembers[0].type;
2002
+ if (!bufferType.isArrayType()) {
2003
+ return false;
2004
+ }
2005
+ const vertexType = bufferType.elementType;
2006
+ if (vertexType.isStructType()) {
2007
+ for (const attrib of vertexType.structMembers){
2008
+ if (attrib.name === name) {
2009
+ return true;
2010
+ }
2011
+ }
2012
+ } else {
2013
+ return buffer.structure.structMembers[0].name === name;
2014
+ }
2015
+ }
2016
+ /**
2017
+ * Get vertex attribute type of specified vertex format
2018
+ * @param fmt - The vertex format
2019
+ * @returns Vertex attribute type, possible values are 'f32', 'f16', 'i32', 'u32', 'i16', 'u16', 'i8norm', 'u8norm', 'i16norm', 'u16norm'
2020
+ *
2021
+ * @public
2022
+ */ function getVertexAttributeFormat(fmt) {
2023
+ return vertexAttribFormatMap[fmt][3];
2024
+ }
2025
+ /**
2026
+ * Get vertex attribute index of specified vertex format
2027
+ * @param fmt - The vertex format
2028
+ * @returns Vertex attribute index
2029
+ *
2030
+ * @public
2031
+ */ function getVertexAttributeIndex(fmt) {
2032
+ return vertexAttribFormatMap[fmt][0];
2033
+ }
1985
2034
  /**
1986
2035
  * Get byte size of specified vertex format
2036
+ *
1987
2037
  * @public
1988
2038
  */ function getVertexFormatSize(fmt) {
1989
2039
  return vertexAttribFormatMap[fmt][2];
1990
2040
  }
1991
2041
  /**
1992
2042
  * Get number of components of specified vertex format
2043
+ *
1993
2044
  * @public
1994
2045
  */ function getVertexFormatComponentCount(fmt) {
1995
2046
  return vertexAttribFormatMap[fmt][4];
@@ -2000,6 +2051,7 @@ var GPUResourceUsageFlags;
2000
2051
  * @param type - Data type of vertex component
2001
2052
  * @param count - The count of vertex components
2002
2053
  * @returns Vertex format
2054
+ *
2003
2055
  * @public
2004
2056
  */ function getVertexAttribFormat(semantic, type, count) {
2005
2057
  const loc = getVertexAttribByName(semantic);
@@ -2015,6 +2067,7 @@ var GPUResourceUsageFlags;
2015
2067
  * Get the length of a vertex buffer by specified structure type of the vertex buffer
2016
2068
  * @param vertexBufferType - The structure type of the vertex buffer
2017
2069
  * @returns The length of the vertex buffer
2070
+ *
2018
2071
  * @public
2019
2072
  */ function getVertexBufferLength(vertexBufferType) {
2020
2073
  return vertexBufferType.structMembers[0].type.dimension;
@@ -2023,6 +2076,7 @@ var GPUResourceUsageFlags;
2023
2076
  * Get byte stride of a vertex buffer by specified structure type of the vertex buffer
2024
2077
  * @param vertexBufferType - The structure type of the vertex buffer
2025
2078
  * @returns The byte stride of the vertex buffer
2079
+ *
2026
2080
  * @public
2027
2081
  */ function getVertexBufferStride(vertexBufferType) {
2028
2082
  const vertexType = vertexBufferType.structMembers[0].type.elementType;
@@ -2041,6 +2095,7 @@ var GPUResourceUsageFlags;
2041
2095
  * @param vertexBufferType - The structure type of the vertex buffer
2042
2096
  * @param semantic - The vertex semantic
2043
2097
  * @returns - The primitive type of the vertex attribute
2098
+ *
2044
2099
  * @public
2045
2100
  */ function getVertexBufferAttribTypeBySemantic(vertexBufferType, semantic) {
2046
2101
  const k = vertexBufferType.structMembers[0];
@@ -2061,6 +2116,7 @@ var GPUResourceUsageFlags;
2061
2116
  * @param vertexBufferType - The structure type of the vertex buffer
2062
2117
  * @param semantic - The vertex attribute index
2063
2118
  * @returns - The primitive type of the vertex attribute
2119
+ *
2064
2120
  * @public
2065
2121
  */ function getVertexBufferAttribType(vertexBufferType, attrib) {
2066
2122
  const attribName = getVertexAttribName(attrib);
@@ -2074,6 +2130,7 @@ var GPUResourceUsageFlags;
2074
2130
  * @param length - The length of the vertex buffer
2075
2131
  * @param attributes - The vertex attributes
2076
2132
  * @returns The structure type of the vertex buffer
2133
+ *
2077
2134
  * @public
2078
2135
  */ function makeVertexBufferType(length, ...attributes) {
2079
2136
  if (attributes.length === 0) {
@@ -2102,6 +2159,7 @@ var GPUResourceUsageFlags;
2102
2159
  }
2103
2160
  /**
2104
2161
  * Vertex semantic list
2162
+ *
2105
2163
  * @public
2106
2164
  */ const semanticList = function() {
2107
2165
  const list = [];
@@ -2175,5 +2233,5 @@ var GPUResourceUsageFlags;
2175
2233
  }
2176
2234
  }
2177
2235
 
2178
- export { GPUResourceUsageFlags, MAX_BINDING_GROUPS, MAX_TEXCOORD_INDEX_COUNT, MAX_VERTEX_ATTRIBUTES, VERTEX_ATTRIB_BLEND_INDICES, VERTEX_ATTRIB_BLEND_WEIGHT, VERTEX_ATTRIB_DIFFUSE, VERTEX_ATTRIB_NORMAL, VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_TANGENT, VERTEX_ATTRIB_TEXCOORD0, VERTEX_ATTRIB_TEXCOORD1, VERTEX_ATTRIB_TEXCOORD2, VERTEX_ATTRIB_TEXCOORD3, VERTEX_ATTRIB_TEXCOORD4, VERTEX_ATTRIB_TEXCOORD5, VERTEX_ATTRIB_TEXCOORD6, VERTEX_ATTRIB_TEXCOORD7, genDefaultName, getVertexAttribByName, getVertexAttribFormat, getVertexAttribName, getVertexBufferAttribType, getVertexBufferAttribTypeBySemantic, getVertexBufferLength, getVertexBufferStride, getVertexFormatComponentCount, getVertexFormatSize, makeVertexBufferType, semanticList, semanticToAttrib };
2236
+ export { GPUResourceUsageFlags, MAX_BINDING_GROUPS, MAX_TEXCOORD_INDEX_COUNT, MAX_VERTEX_ATTRIBUTES, VERTEX_ATTRIB_BLEND_INDICES, VERTEX_ATTRIB_BLEND_WEIGHT, VERTEX_ATTRIB_DIFFUSE, VERTEX_ATTRIB_NORMAL, VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_TANGENT, VERTEX_ATTRIB_TEXCOORD0, VERTEX_ATTRIB_TEXCOORD1, VERTEX_ATTRIB_TEXCOORD2, VERTEX_ATTRIB_TEXCOORD3, VERTEX_ATTRIB_TEXCOORD4, VERTEX_ATTRIB_TEXCOORD5, VERTEX_ATTRIB_TEXCOORD6, VERTEX_ATTRIB_TEXCOORD7, genDefaultName, getVertexAttribByName, getVertexAttribFormat, getVertexAttribName, getVertexAttributeFormat, getVertexAttributeIndex, getVertexBufferAttribType, getVertexBufferAttribTypeBySemantic, getVertexBufferLength, getVertexBufferStride, getVertexFormatComponentCount, getVertexFormatSize, makeVertexBufferType, matchVertexBuffer, semanticList, semanticToAttrib };
2179
2237
  //# sourceMappingURL=gpuobject.js.map