@zephyr3d/editor 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{index-BZ1L8ggE.js → index-CO6yA4Rj.js} +313 -11
- package/dist/assistant/zephyr-types-index.json +13834 -11679
- package/dist/index.html +1 -1
- package/dist/modules/zephyr3d_backend-webgpu.js +1 -1
- package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
- package/dist/modules/zephyr3d_device.js +2 -2
- package/dist/modules/zephyr3d_device.js.map +1 -1
- package/dist/modules/zephyr3d_scene.js +2325 -515
- package/dist/modules/zephyr3d_scene.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/device/dist/device.js +2 -2
- package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js +3 -1
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/asset/assetmanager.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/asset/assetmanager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +87 -0
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/index.d.ts +158 -4
- package/dist/vendor/zephyr3d/scene/dist/index.js +3 -0
- package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/meshmaterial.js +8 -1
- package/dist/vendor/zephyr3d/scene/dist/material/meshmaterial.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +6 -0
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/skin.js +263 -0
- package/dist/vendor/zephyr3d/scene/dist/material/skin.js.map +1 -0
- package/dist/vendor/zephyr3d/scene/dist/posteffect/compositor.js +3 -0
- package/dist/vendor/zephyr3d/scene/dist/posteffect/compositor.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/skinsss.js +194 -0
- package/dist/vendor/zephyr3d/scene/dist/posteffect/skinsss.js.map +1 -0
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +26 -49
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/sss.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/posteffect/sss.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/taa.js +2 -40
- package/dist/vendor/zephyr3d/scene/dist/posteffect/taa.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/abuffer_oit.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/abuffer_oit.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/drawable_mixin.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/drawable_mixin.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/fbm_wavegenerator.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/gerstner_wavegenerator.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/globalbindgroup_allocator.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +4 -1
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/render_queue.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/render_queue.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/device_pool_allocator.js +12 -5
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +78 -8
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/basesprite.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/basesprite.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/batchgroup.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/batchgroup.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/environment.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/environment.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/light.js +158 -154
- package/dist/vendor/zephyr3d/scene/dist/scene/light.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/mesh.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/mesh.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/msdftext.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/msdftext.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/msdftextsprite.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/particlesys.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/particlesys.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grass.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grassmaterial.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/terrain-cm.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/scene/water.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/scene/water.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shaders/shadow.js +617 -1
- package/dist/vendor/zephyr3d/scene/dist/shaders/shadow.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_opt.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_pd.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/pcss.js +182 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/pcss.js.map +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/shader.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/shader.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadowmapper.js +183 -105
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/ssm.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/ssm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/vsm.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/shadow/vsm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +3 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/batch.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js +122 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js +102 -21
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js +195 -3
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/text.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/water.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/values.js +1 -0
- package/dist/vendor/zephyr3d/scene/dist/values.js.map +1 -1
- package/electron/main.cjs +30 -6
- package/package.json +4 -4
|
@@ -67,7 +67,7 @@ class WebGPURenderPass {
|
|
|
67
67
|
this._currentViewport = {
|
|
68
68
|
x: 0,
|
|
69
69
|
y: 0,
|
|
70
|
-
width: this._device.deviceXToScreen(this._device.drawingBufferWidth),
|
|
70
|
+
width: this._device.drawingBufferWidth > 0 ? this._device.deviceXToScreen(this._device.drawingBufferWidth) : 1,
|
|
71
71
|
height: this._device.deviceYToScreen(this._device.drawingBufferHeight),
|
|
72
72
|
default: true
|
|
73
73
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderpass_webgpu.js","sources":["../src/renderpass_webgpu.ts"],"sourcesContent":["import type { Immutable, Nullable, TypedArray, Vector4 } from '@zephyr3d/base';\r\nimport type { PrimitiveType, DeviceViewport } from '@zephyr3d/device';\r\nimport {\r\n hasStencilChannel,\r\n PBPrimitiveTypeInfo,\r\n PBPrimitiveType,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPUIndexBuffer } from './indexbuffer_webgpu';\r\nimport type { FrameBufferInfo } from './pipeline_cache';\r\nimport { textureFormatInvMap } from './constants_webgpu';\r\nimport { WebGPUClearQuad } from './utils_webgpu';\r\n\r\nconst VALIDATION_NEED_NEW_PASS = 1 << 0;\r\nconst VALIDATION_FAILED = 1 << 1;\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\n\r\nexport class WebGPURenderPass {\r\n private readonly _device: WebGPUDevice;\r\n private _renderCommandEncoder: Nullable<GPUCommandEncoder>;\r\n private _renderPassEncoder: Nullable<GPURenderPassEncoder>;\r\n private _fbBindFlag: Nullable<number>;\r\n private _currentViewport: Nullable<DeviceViewport>;\r\n private _currentScissor: Nullable<DeviceViewport>;\r\n private _frameBufferInfo: FrameBufferInfo;\r\n private _deferredMipmapTextures: WebGPUBaseTexture[];\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._renderCommandEncoder = null;\r\n this._renderPassEncoder = null;\r\n this._fbBindFlag = null;\r\n this._currentViewport = null;\r\n this._currentScissor = null;\r\n this._frameBufferInfo = this.createFrameBufferInfo(null);\r\n this._deferredMipmapTextures = [];\r\n }\r\n get active() {\r\n return !!this._renderPassEncoder;\r\n }\r\n private createFrameBufferInfo(fb: Nullable<WebGPUFrameBuffer>) {\r\n const info: FrameBufferInfo = !fb\r\n ? {\r\n frameBuffer: null,\r\n colorFormats: [this._device.backbufferFormat],\r\n depthFormat: this._device.backbufferDepthFormat,\r\n sampleCount: this._device.sampleCount,\r\n hash: null,\r\n clearHash: 'f'\r\n }\r\n : {\r\n frameBuffer: fb,\r\n colorFormats: fb.getColorAttachments().map((val) => (val as WebGPUBaseTexture).gpuFormat!),\r\n depthFormat: (fb.getDepthAttachment() as WebGPUBaseTexture)?.gpuFormat!,\r\n sampleCount: fb.getOptions().sampleCount ?? 1,\r\n hash: null,\r\n clearHash: fb\r\n .getColorAttachments()\r\n .map((val) => {\r\n const fmt = textureFormatInvMap[(val as WebGPUBaseTexture).gpuFormat!];\r\n return isIntegerTextureFormat(fmt) ? (isSignedTextureFormat(fmt) ? 'i' : 'u') : 'f';\r\n })\r\n .join('')\r\n };\r\n info.hash = `${info.colorFormats.join('-')}:${info.depthFormat}:${info.sampleCount}`;\r\n return info;\r\n }\r\n setFramebuffer(fb: WebGPUFrameBuffer) {\r\n if (this._frameBufferInfo.frameBuffer !== fb) {\r\n this.end();\r\n this._frameBufferInfo = this.createFrameBufferInfo(fb);\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n }\r\n }\r\n getFramebuffer() {\r\n return this._frameBufferInfo.frameBuffer;\r\n }\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (!vp || (!Array.isArray(vp) && (vp as DeviceViewport).default)) {\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this._device.deviceXToScreen(this._device.drawingBufferWidth),\r\n height: this._device.deviceYToScreen(this._device.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(vp)) {\r\n this._currentViewport = {\r\n x: vp[0],\r\n y: vp[1],\r\n width: vp[2],\r\n height: vp[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentViewport = Object.assign({ default: false }, vp as DeviceViewport);\r\n }\r\n }\r\n const vx = this._device.screenXToDevice(this._currentViewport.x);\r\n const vy = this._device.screenYToDevice(this._currentViewport.y);\r\n const vw = this._device.screenXToDevice(this._currentViewport.width);\r\n const vh = this._device.screenYToDevice(this._currentViewport.height);\r\n /*\r\n if (vx < 0 || vy < 0 || vw > this._device.drawingBufferWidth || vh > this._device.drawingBufferHeight) {\r\n console.error(\r\n `** VIEWPORT ERROR **: (${vx}, ${vy}, ${vw}, ${vh}) => (0, 0, ${this._device.drawingBufferWidth}, ${this._device.drawingBufferHeight})`\r\n );\r\n }\r\n */\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setViewport(vx, this._device.drawingBufferHeight - vy - vh, vw, vh, 0, 1);\r\n }\r\n }\r\n getViewport() {\r\n return Object.assign({}, this._currentViewport);\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n const backBufferWidth = this._device.deviceXToScreen(this._device.drawingBufferWidth);\r\n const backBufferHeight = this._device.deviceYToScreen(this._device.drawingBufferHeight);\r\n if (\r\n scissor === null ||\r\n scissor === undefined ||\r\n (!Array.isArray(scissor) && (scissor as DeviceViewport).default)\r\n ) {\r\n this._currentScissor = {\r\n x: 0,\r\n y: 0,\r\n width: backBufferWidth,\r\n height: backBufferHeight,\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(scissor)) {\r\n this._currentScissor = {\r\n x: scissor[0],\r\n y: scissor[1],\r\n width: scissor[2],\r\n height: scissor[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentScissor = Object.assign({ default: false }, scissor as DeviceViewport);\r\n }\r\n }\r\n let vx = this._device.screenXToDevice(this._currentScissor.x);\r\n let vy = this._device.screenYToDevice(this._currentScissor.y);\r\n let vw = this._device.screenXToDevice(this._currentScissor.width);\r\n let vh = this._device.screenYToDevice(this._currentScissor.height);\r\n // Clip scissor region to screen\r\n if (vx < 0) {\r\n vw += vx;\r\n vx = 0;\r\n }\r\n if (vy < 0) {\r\n vh += vy;\r\n vy = 0;\r\n }\r\n vw = Math.min(this._device.screenXToDevice(backBufferWidth) - vx, vw);\r\n vh = Math.min(this._device.screenYToDevice(backBufferHeight) - vy, vh);\r\n if (vw < 0 || vh < 0) {\r\n vx = 0;\r\n vy = 0;\r\n vw = 0;\r\n vh = 0;\r\n }\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setScissorRect(vx, this._device.drawingBufferHeight - vy - vh, vw, vh);\r\n }\r\n }\r\n getScissor() {\r\n return Object.assign({}, this._currentScissor);\r\n }\r\n executeRenderBundle(renderBundle: GPURenderBundle) {\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.executeBundles([renderBundle]);\r\n }\r\n draw(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n if (this.hasDeferredMipmapsForBindGroups(bindGroups)) {\r\n this.end();\r\n this.flushDeferredMipmapsForBindGroups(bindGroups);\r\n }\r\n if (validation & VALIDATION_NEED_NEW_PASS) {\r\n this.end();\r\n }\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n clear(color: Nullable<Vector4>, depth: Nullable<number>, stencil: Nullable<number>) {\r\n if (!this._currentScissor) {\r\n this.end();\r\n this.begin(color, depth, stencil);\r\n } else {\r\n if (!this._renderPassEncoder) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.insertDebugMarker('clear');\r\n WebGPUClearQuad.drawClearQuad(this, color, depth, stencil);\r\n this._renderPassEncoder!.insertDebugMarker('end clear');\r\n }\r\n }\r\n getDevice() {\r\n return this._device;\r\n }\r\n getFrameBufferInfo() {\r\n return this._frameBufferInfo;\r\n }\r\n begin(color?: Nullable<TypedArray>, depth?: Nullable<number>, stencil?: Nullable<number>) {\r\n if (this.active) {\r\n console.error('WebGPURenderPass.begin() failed: begin() has already been called');\r\n return;\r\n }\r\n this._renderCommandEncoder = this._device.commandQueue.getEncoder();\r\n const frameBuffer = this._frameBufferInfo.frameBuffer;\r\n if (!frameBuffer) {\r\n const mainPassDesc = this._device.defaultRenderPassDesc;\r\n const colorAttachmentDesc = (\r\n this._device.defaultRenderPassDesc.colorAttachments as GPURenderPassColorAttachment[]\r\n )[0];\r\n if (this._frameBufferInfo.sampleCount > 1) {\r\n colorAttachmentDesc.resolveTarget = this._device.context!.getCurrentTexture().createView();\r\n } else {\r\n colorAttachmentDesc.view = this._device.context!.getCurrentTexture().createView();\r\n }\r\n colorAttachmentDesc.loadOp = color ? 'clear' : 'load';\r\n // TODO: GPUColor type in @webgpu/types conficts with lib.dom,use `any` type to make ts-server happy\r\n colorAttachmentDesc.clearValue = (color as any) ?? undefined;\r\n const depthAttachmentDesc = this._device.defaultRenderPassDesc.depthStencilAttachment;\r\n depthAttachmentDesc!.depthLoadOp = typeof depth === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.depthClearValue = depth ?? undefined;\r\n depthAttachmentDesc!.stencilLoadOp = typeof stencil === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.stencilClearValue = stencil ?? undefined;\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(mainPassDesc);\r\n } else {\r\n const depthAttachmentTexture = frameBuffer.getDepthAttachment() as WebGPUBaseTexture;\r\n let depthTextureView: GPUTextureView;\r\n if (depthAttachmentTexture) {\r\n depthAttachmentTexture._markAsCurrentFB(true);\r\n const attachment = frameBuffer.getOptions().depthAttachment;\r\n const layer =\r\n depthAttachmentTexture.isTexture2DArray() || depthAttachmentTexture.isTexture3D()\r\n ? attachment!.layer\r\n : depthAttachmentTexture.isTextureCube()\r\n ? attachment!.face\r\n : 0;\r\n depthTextureView = depthAttachmentTexture.getView(0, layer ?? 0, 1);\r\n }\r\n this._fbBindFlag = frameBuffer.bindFlag;\r\n\r\n const passDesc: GPURenderPassDescriptor = {\r\n label: `customRenderPass:${this._frameBufferInfo.hash}`,\r\n colorAttachments:\r\n frameBuffer.getOptions().colorAttachments?.map((attachment, index) => {\r\n const tex = attachment.texture as WebGPUBaseTexture;\r\n if (tex) {\r\n tex._markAsCurrentFB(true);\r\n const layer =\r\n tex.isTexture2DArray() || tex.isTexture3D()\r\n ? attachment.layer\r\n : tex.isTextureCube()\r\n ? attachment.face\r\n : 0;\r\n if (frameBuffer.getOptions().sampleCount === 1) {\r\n return {\r\n view: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n } else {\r\n const msaaTexture = frameBuffer.getMSAAColorAttacments()![index];\r\n const msaaView = this._device.gpuCreateTextureView(msaaTexture, {\r\n dimension: '2d',\r\n baseMipLevel: attachment.level ?? 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: 0,\r\n arrayLayerCount: 1\r\n });\r\n return {\r\n view: msaaView,\r\n resolveTarget: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }) ?? [],\r\n depthStencilAttachment: depthAttachmentTexture\r\n ? frameBuffer.getOptions().sampleCount === 1\r\n ? {\r\n view: depthTextureView!,\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : {\r\n view: frameBuffer.getMSAADepthAttachment()!.createView(),\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : undefined\r\n };\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(passDesc);\r\n }\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissor);\r\n }\r\n end(generateMipmaps = true) {\r\n if (!this.active) {\r\n return;\r\n }\r\n // finish current render pass command\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.end();\r\n this._renderPassEncoder = null;\r\n }\r\n this._renderCommandEncoder = null;\r\n // unmark render target flags and generate render target mipmaps if needed\r\n if (this._frameBufferInfo.frameBuffer) {\r\n const options = this._frameBufferInfo.frameBuffer.getOptions();\r\n if (options.colorAttachments) {\r\n for (const attachment of options.colorAttachments) {\r\n const texture = attachment.texture as WebGPUBaseTexture;\r\n texture._markAsCurrentFB(false);\r\n this.handleColorAttachmentMipmap(texture, !!attachment.generateMipmaps, generateMipmaps);\r\n }\r\n }\r\n (options.depthAttachment?.texture as WebGPUBaseTexture)?._markAsCurrentFB(false);\r\n }\r\n }\r\n hasDeferredMipmapsForBindGroups(bindGroups: WebGPUBindGroup[]) {\r\n return bindGroups?.some((bindGroup) => {\r\n return bindGroup?.textureList.some((texture) => this._deferredMipmapTextures.indexOf(texture) >= 0);\r\n });\r\n }\r\n flushDeferredMipmapsForBindGroups(bindGroups?: WebGPUBindGroup[]): void {\r\n if (!bindGroups) {\r\n this.flushDeferredMipmaps();\r\n return;\r\n }\r\n for (const bindGroup of bindGroups) {\r\n for (const texture of bindGroup?.textureList ?? []) {\r\n this.flushDeferredMipmap(texture);\r\n }\r\n }\r\n }\r\n flushDeferredMipmaps(): void {\r\n const textures = this._deferredMipmapTextures.splice(0);\r\n for (const texture of textures) {\r\n if (!texture.disposed) {\r\n texture.generateMipmaps();\r\n }\r\n }\r\n }\r\n capture(\r\n renderBundleEncoder: GPURenderBundleEncoder,\r\n program: WebGPUProgram,\r\n vertexData: WebGPUVertexLayout,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n renderBundleEncoder\r\n );\r\n }\r\n private drawInternal(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (\r\n this.setBindGroupsForRender(\r\n renderPassEncoder,\r\n program,\r\n bindGroups,\r\n bindGroupOffsets,\r\n renderBundleEncoder\r\n )\r\n ) {\r\n const pipeline = this._device.pipelineCache.fetchRenderPipeline(\r\n program,\r\n vertexData,\r\n stateSet,\r\n primitiveType,\r\n this._frameBufferInfo\r\n );\r\n if (pipeline) {\r\n renderPassEncoder.setPipeline(pipeline);\r\n renderBundleEncoder?.setPipeline(pipeline);\r\n const stencilState = stateSet?.stencilState;\r\n if (stencilState) {\r\n renderPassEncoder.setStencilReference(stencilState.ref);\r\n }\r\n if (vertexData) {\r\n const vertexBuffers = vertexData.getLayouts(program.vertexAttributes)?.buffers;\r\n vertexBuffers?.forEach((val, index) => {\r\n renderPassEncoder.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n renderBundleEncoder?.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n });\r\n const indexBuffer = vertexData.getIndexBuffer() as unknown as WebGPUIndexBuffer;\r\n if (indexBuffer) {\r\n renderPassEncoder.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderBundleEncoder?.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderPassEncoder.drawIndexed(count, numInstances, first);\r\n renderBundleEncoder?.drawIndexed(count, numInstances, first);\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n }\r\n }\r\n }\r\n private validateDraw(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n let validation = 0;\r\n const colorTargetCount = this._frameBufferInfo.colorFormats.length;\r\n if (colorTargetCount !== 0 && program.fragmentOutputCount !== colorTargetCount) {\r\n if (\r\n !stateSet?.colorState ||\r\n stateSet.colorState.redMask ||\r\n stateSet.colorState.greenMask ||\r\n stateSet.colorState.blueMask ||\r\n stateSet.colorState.alphaMask\r\n ) {\r\n const framebuffer = this._frameBufferInfo.frameBuffer;\r\n const colorAttachments = framebuffer?.getColorAttachments().map((texture, index) => ({\r\n index,\r\n name: texture?.name,\r\n uid: texture?.uid,\r\n format: texture?.format\r\n })) ?? [{ index: 0, name: '<backbuffer>', uid: 0, format: this._frameBufferInfo.colorFormats[0] }];\r\n console.error('WebGPU draw validation failed: fragment color output count mismatch', {\r\n programName: program.name,\r\n programLabel: program.label,\r\n programHash: program.hash,\r\n fragmentOutputCount: program.fragmentOutputCount,\r\n colorTargetCount,\r\n colorFormats: this._frameBufferInfo.colorFormats,\r\n depthFormat: this._frameBufferInfo.depthFormat,\r\n framebufferName: framebuffer?.name ?? '<backbuffer>',\r\n framebufferHash: this._frameBufferInfo.hash,\r\n colorAttachments,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n stack: new Error().stack\r\n });\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n if (bindGroups) {\r\n for (let i = 0; i < program.bindGroupLayouts.length; i++) {\r\n const bindGroup = bindGroups[i];\r\n if (bindGroup) {\r\n if (bindGroup.bindGroup) {\r\n for (const ubo of bindGroup.bufferList) {\r\n if (ubo.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n for (const tex of bindGroup.textureList) {\r\n if (tex.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n if (tex._isMarkedAsCurrentFB()) {\r\n console.error('bind resource texture can not be current render target');\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(`Missing bind group (${i}) when drawing with program '${program.name}'`);\r\n return VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n if (\r\n this._frameBufferInfo.frameBuffer &&\r\n this._frameBufferInfo.frameBuffer.bindFlag !== this._fbBindFlag\r\n ) {\r\n validation |= VALIDATION_NEED_NEW_PASS;\r\n }\r\n return validation;\r\n }\r\n private handleColorAttachmentMipmap(\r\n texture: WebGPUBaseTexture,\r\n attachmentGenerateMipmaps: boolean,\r\n generateMipmaps: boolean\r\n ): void {\r\n if (!attachmentGenerateMipmaps || texture.mipLevelCount <= 1) {\r\n return;\r\n }\r\n if (generateMipmaps) {\r\n this.removeDeferredMipmap(texture);\r\n texture.generateMipmaps();\r\n } else if (this._deferredMipmapTextures.indexOf(texture) < 0) {\r\n this._deferredMipmapTextures.push(texture);\r\n }\r\n }\r\n private flushDeferredMipmap(texture: WebGPUBaseTexture): void {\r\n if (this.removeDeferredMipmap(texture) && !texture.disposed) {\r\n texture.generateMipmaps();\r\n }\r\n }\r\n private removeDeferredMipmap(texture: WebGPUBaseTexture): boolean {\r\n const index = this._deferredMipmapTextures.indexOf(texture);\r\n if (index >= 0) {\r\n this._deferredMipmapTextures.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n private setBindGroupsForRender(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (bindGroups) {\r\n for (let i = 0; i < 4; i++) {\r\n if (i < program.bindGroupLayouts.length) {\r\n const bindGroup = bindGroups[i].bindGroup;\r\n if (!bindGroup) {\r\n return false;\r\n }\r\n const bindGroupOffset = bindGroups[i].getDynamicOffsets() ?? bindGroupOffsets?.[i];\r\n if (bindGroupOffset) {\r\n renderPassEncoder.setBindGroup(i, bindGroup, bindGroupOffset);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup, bindGroupOffset);\r\n } else {\r\n renderPassEncoder.setBindGroup(i, bindGroup);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup);\r\n }\r\n } else {\r\n renderPassEncoder.setBindGroup(i, this._device.emptyBindGroup);\r\n renderBundleEncoder?.setBindGroup(i, this._device.emptyBindGroup);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n"],"names":["VALIDATION_NEED_NEW_PASS","VALIDATION_FAILED","typeU16","PBPrimitiveTypeInfo","getCachedTypeInfo","PBPrimitiveType","U16","WebGPURenderPass","_device","_renderCommandEncoder","_renderPassEncoder","_fbBindFlag","_currentViewport","_currentScissor","_frameBufferInfo","_deferredMipmapTextures","device","createFrameBufferInfo","active","fb","info","frameBuffer","colorFormats","backbufferFormat","depthFormat","backbufferDepthFormat","sampleCount","hash","clearHash","getColorAttachments","map","val","gpuFormat","getDepthAttachment","getOptions","fmt","textureFormatInvMap","isIntegerTextureFormat","isSignedTextureFormat","join","setFramebuffer","end","setViewport","setScissor","getFramebuffer","vp","Array","isArray","default","x","y","width","deviceXToScreen","drawingBufferWidth","height","deviceYToScreen","drawingBufferHeight","Object","assign","vx","screenXToDevice","vy","screenYToDevice","vw","vh","getViewport","scissor","backBufferWidth","backBufferHeight","undefined","Math","min","setScissorRect","getScissor","executeRenderBundle","renderBundle","begin","executeBundles","draw","program","vertexData","stateSet","bindGroups","bindGroupOffsets","primitiveType","first","count","numInstances","validation","validateDraw","hasDeferredMipmapsForBindGroups","flushDeferredMipmapsForBindGroups","drawInternal","clear","color","depth","stencil","insertDebugMarker","WebGPUClearQuad","drawClearQuad","getDevice","getFrameBufferInfo","console","error","commandQueue","getEncoder","mainPassDesc","defaultRenderPassDesc","colorAttachmentDesc","colorAttachments","resolveTarget","context","getCurrentTexture","createView","view","loadOp","clearValue","depthAttachmentDesc","depthStencilAttachment","depthLoadOp","depthClearValue","stencilLoadOp","stencilClearValue","beginRenderPass","depthAttachmentTexture","depthTextureView","_markAsCurrentFB","attachment","depthAttachment","layer","isTexture2DArray","isTexture3D","isTextureCube","face","getView","bindFlag","passDesc","label","index","tex","texture","level","storeOp","msaaTexture","getMSAAColorAttacments","msaaView","gpuCreateTextureView","dimension","baseMipLevel","mipLevelCount","baseArrayLayer","arrayLayerCount","depthStoreOp","hasStencilChannel","format","stencilStoreOp","getMSAADepthAttachment","generateMipmaps","options","handleColorAttachmentMipmap","some","bindGroup","textureList","indexOf","flushDeferredMipmaps","flushDeferredMipmap","textures","splice","disposed","capture","renderBundleEncoder","renderPassEncoder","setBindGroupsForRender","pipeline","pipelineCache","fetchRenderPipeline","setPipeline","stencilState","setStencilReference","ref","vertexBuffers","getLayouts","vertexAttributes","buffers","forEach","setVertexBuffer","buffer","object","drawOffset","indexBuffer","getIndexBuffer","setIndexBuffer","indexType","drawIndexed","colorTargetCount","length","fragmentOutputCount","colorState","redMask","greenMask","blueMask","alphaMask","framebuffer","name","uid","programName","programLabel","programHash","framebufferName","framebufferHash","stack","Error","i","bindGroupLayouts","ubo","bufferList","_isMarkedAsCurrentFB","attachmentGenerateMipmaps","removeDeferredMipmap","push","bindGroupOffset","getDynamicOffsets","setBindGroup","emptyBindGroup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderpass_webgpu.js","sources":["../src/renderpass_webgpu.ts"],"sourcesContent":["import type { Immutable, Nullable, TypedArray, Vector4 } from '@zephyr3d/base';\r\nimport type { PrimitiveType, DeviceViewport } from '@zephyr3d/device';\r\nimport {\r\n hasStencilChannel,\r\n PBPrimitiveTypeInfo,\r\n PBPrimitiveType,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPUIndexBuffer } from './indexbuffer_webgpu';\r\nimport type { FrameBufferInfo } from './pipeline_cache';\r\nimport { textureFormatInvMap } from './constants_webgpu';\r\nimport { WebGPUClearQuad } from './utils_webgpu';\r\n\r\nconst VALIDATION_NEED_NEW_PASS = 1 << 0;\r\nconst VALIDATION_FAILED = 1 << 1;\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\n\r\nexport class WebGPURenderPass {\r\n private readonly _device: WebGPUDevice;\r\n private _renderCommandEncoder: Nullable<GPUCommandEncoder>;\r\n private _renderPassEncoder: Nullable<GPURenderPassEncoder>;\r\n private _fbBindFlag: Nullable<number>;\r\n private _currentViewport: Nullable<DeviceViewport>;\r\n private _currentScissor: Nullable<DeviceViewport>;\r\n private _frameBufferInfo: FrameBufferInfo;\r\n private _deferredMipmapTextures: WebGPUBaseTexture[];\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._renderCommandEncoder = null;\r\n this._renderPassEncoder = null;\r\n this._fbBindFlag = null;\r\n this._currentViewport = null;\r\n this._currentScissor = null;\r\n this._frameBufferInfo = this.createFrameBufferInfo(null);\r\n this._deferredMipmapTextures = [];\r\n }\r\n get active() {\r\n return !!this._renderPassEncoder;\r\n }\r\n private createFrameBufferInfo(fb: Nullable<WebGPUFrameBuffer>) {\r\n const info: FrameBufferInfo = !fb\r\n ? {\r\n frameBuffer: null,\r\n colorFormats: [this._device.backbufferFormat],\r\n depthFormat: this._device.backbufferDepthFormat,\r\n sampleCount: this._device.sampleCount,\r\n hash: null,\r\n clearHash: 'f'\r\n }\r\n : {\r\n frameBuffer: fb,\r\n colorFormats: fb.getColorAttachments().map((val) => (val as WebGPUBaseTexture).gpuFormat!),\r\n depthFormat: (fb.getDepthAttachment() as WebGPUBaseTexture)?.gpuFormat!,\r\n sampleCount: fb.getOptions().sampleCount ?? 1,\r\n hash: null,\r\n clearHash: fb\r\n .getColorAttachments()\r\n .map((val) => {\r\n const fmt = textureFormatInvMap[(val as WebGPUBaseTexture).gpuFormat!];\r\n return isIntegerTextureFormat(fmt) ? (isSignedTextureFormat(fmt) ? 'i' : 'u') : 'f';\r\n })\r\n .join('')\r\n };\r\n info.hash = `${info.colorFormats.join('-')}:${info.depthFormat}:${info.sampleCount}`;\r\n return info;\r\n }\r\n setFramebuffer(fb: WebGPUFrameBuffer) {\r\n if (this._frameBufferInfo.frameBuffer !== fb) {\r\n this.end();\r\n this._frameBufferInfo = this.createFrameBufferInfo(fb);\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n }\r\n }\r\n getFramebuffer() {\r\n return this._frameBufferInfo.frameBuffer;\r\n }\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (!vp || (!Array.isArray(vp) && (vp as DeviceViewport).default)) {\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width:\r\n this._device.drawingBufferWidth > 0\r\n ? this._device.deviceXToScreen(this._device.drawingBufferWidth)\r\n : 1,\r\n height: this._device.deviceYToScreen(this._device.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(vp)) {\r\n this._currentViewport = {\r\n x: vp[0],\r\n y: vp[1],\r\n width: vp[2],\r\n height: vp[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentViewport = Object.assign({ default: false }, vp as DeviceViewport);\r\n }\r\n }\r\n const vx = this._device.screenXToDevice(this._currentViewport.x);\r\n const vy = this._device.screenYToDevice(this._currentViewport.y);\r\n const vw = this._device.screenXToDevice(this._currentViewport.width);\r\n const vh = this._device.screenYToDevice(this._currentViewport.height);\r\n /*\r\n if (vx < 0 || vy < 0 || vw > this._device.drawingBufferWidth || vh > this._device.drawingBufferHeight) {\r\n console.error(\r\n `** VIEWPORT ERROR **: (${vx}, ${vy}, ${vw}, ${vh}) => (0, 0, ${this._device.drawingBufferWidth}, ${this._device.drawingBufferHeight})`\r\n );\r\n }\r\n */\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setViewport(vx, this._device.drawingBufferHeight - vy - vh, vw, vh, 0, 1);\r\n }\r\n }\r\n getViewport() {\r\n return Object.assign({}, this._currentViewport);\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n const backBufferWidth = this._device.deviceXToScreen(this._device.drawingBufferWidth);\r\n const backBufferHeight = this._device.deviceYToScreen(this._device.drawingBufferHeight);\r\n if (\r\n scissor === null ||\r\n scissor === undefined ||\r\n (!Array.isArray(scissor) && (scissor as DeviceViewport).default)\r\n ) {\r\n this._currentScissor = {\r\n x: 0,\r\n y: 0,\r\n width: backBufferWidth,\r\n height: backBufferHeight,\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(scissor)) {\r\n this._currentScissor = {\r\n x: scissor[0],\r\n y: scissor[1],\r\n width: scissor[2],\r\n height: scissor[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentScissor = Object.assign({ default: false }, scissor as DeviceViewport);\r\n }\r\n }\r\n let vx = this._device.screenXToDevice(this._currentScissor.x);\r\n let vy = this._device.screenYToDevice(this._currentScissor.y);\r\n let vw = this._device.screenXToDevice(this._currentScissor.width);\r\n let vh = this._device.screenYToDevice(this._currentScissor.height);\r\n // Clip scissor region to screen\r\n if (vx < 0) {\r\n vw += vx;\r\n vx = 0;\r\n }\r\n if (vy < 0) {\r\n vh += vy;\r\n vy = 0;\r\n }\r\n vw = Math.min(this._device.screenXToDevice(backBufferWidth) - vx, vw);\r\n vh = Math.min(this._device.screenYToDevice(backBufferHeight) - vy, vh);\r\n if (vw < 0 || vh < 0) {\r\n vx = 0;\r\n vy = 0;\r\n vw = 0;\r\n vh = 0;\r\n }\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setScissorRect(vx, this._device.drawingBufferHeight - vy - vh, vw, vh);\r\n }\r\n }\r\n getScissor() {\r\n return Object.assign({}, this._currentScissor);\r\n }\r\n executeRenderBundle(renderBundle: GPURenderBundle) {\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.executeBundles([renderBundle]);\r\n }\r\n draw(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n if (this.hasDeferredMipmapsForBindGroups(bindGroups)) {\r\n this.end();\r\n this.flushDeferredMipmapsForBindGroups(bindGroups);\r\n }\r\n if (validation & VALIDATION_NEED_NEW_PASS) {\r\n this.end();\r\n }\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n clear(color: Nullable<Vector4>, depth: Nullable<number>, stencil: Nullable<number>) {\r\n if (!this._currentScissor) {\r\n this.end();\r\n this.begin(color, depth, stencil);\r\n } else {\r\n if (!this._renderPassEncoder) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.insertDebugMarker('clear');\r\n WebGPUClearQuad.drawClearQuad(this, color, depth, stencil);\r\n this._renderPassEncoder!.insertDebugMarker('end clear');\r\n }\r\n }\r\n getDevice() {\r\n return this._device;\r\n }\r\n getFrameBufferInfo() {\r\n return this._frameBufferInfo;\r\n }\r\n begin(color?: Nullable<TypedArray>, depth?: Nullable<number>, stencil?: Nullable<number>) {\r\n if (this.active) {\r\n console.error('WebGPURenderPass.begin() failed: begin() has already been called');\r\n return;\r\n }\r\n this._renderCommandEncoder = this._device.commandQueue.getEncoder();\r\n const frameBuffer = this._frameBufferInfo.frameBuffer;\r\n if (!frameBuffer) {\r\n const mainPassDesc = this._device.defaultRenderPassDesc;\r\n const colorAttachmentDesc = (\r\n this._device.defaultRenderPassDesc.colorAttachments as GPURenderPassColorAttachment[]\r\n )[0];\r\n if (this._frameBufferInfo.sampleCount > 1) {\r\n colorAttachmentDesc.resolveTarget = this._device.context!.getCurrentTexture().createView();\r\n } else {\r\n colorAttachmentDesc.view = this._device.context!.getCurrentTexture().createView();\r\n }\r\n colorAttachmentDesc.loadOp = color ? 'clear' : 'load';\r\n // TODO: GPUColor type in @webgpu/types conficts with lib.dom,use `any` type to make ts-server happy\r\n colorAttachmentDesc.clearValue = (color as any) ?? undefined;\r\n const depthAttachmentDesc = this._device.defaultRenderPassDesc.depthStencilAttachment;\r\n depthAttachmentDesc!.depthLoadOp = typeof depth === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.depthClearValue = depth ?? undefined;\r\n depthAttachmentDesc!.stencilLoadOp = typeof stencil === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.stencilClearValue = stencil ?? undefined;\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(mainPassDesc);\r\n } else {\r\n const depthAttachmentTexture = frameBuffer.getDepthAttachment() as WebGPUBaseTexture;\r\n let depthTextureView: GPUTextureView;\r\n if (depthAttachmentTexture) {\r\n depthAttachmentTexture._markAsCurrentFB(true);\r\n const attachment = frameBuffer.getOptions().depthAttachment;\r\n const layer =\r\n depthAttachmentTexture.isTexture2DArray() || depthAttachmentTexture.isTexture3D()\r\n ? attachment!.layer\r\n : depthAttachmentTexture.isTextureCube()\r\n ? attachment!.face\r\n : 0;\r\n depthTextureView = depthAttachmentTexture.getView(0, layer ?? 0, 1);\r\n }\r\n this._fbBindFlag = frameBuffer.bindFlag;\r\n\r\n const passDesc: GPURenderPassDescriptor = {\r\n label: `customRenderPass:${this._frameBufferInfo.hash}`,\r\n colorAttachments:\r\n frameBuffer.getOptions().colorAttachments?.map((attachment, index) => {\r\n const tex = attachment.texture as WebGPUBaseTexture;\r\n if (tex) {\r\n tex._markAsCurrentFB(true);\r\n const layer =\r\n tex.isTexture2DArray() || tex.isTexture3D()\r\n ? attachment.layer\r\n : tex.isTextureCube()\r\n ? attachment.face\r\n : 0;\r\n if (frameBuffer.getOptions().sampleCount === 1) {\r\n return {\r\n view: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n } else {\r\n const msaaTexture = frameBuffer.getMSAAColorAttacments()![index];\r\n const msaaView = this._device.gpuCreateTextureView(msaaTexture, {\r\n dimension: '2d',\r\n baseMipLevel: attachment.level ?? 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: 0,\r\n arrayLayerCount: 1\r\n });\r\n return {\r\n view: msaaView,\r\n resolveTarget: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }) ?? [],\r\n depthStencilAttachment: depthAttachmentTexture\r\n ? frameBuffer.getOptions().sampleCount === 1\r\n ? {\r\n view: depthTextureView!,\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : {\r\n view: frameBuffer.getMSAADepthAttachment()!.createView(),\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : undefined\r\n };\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(passDesc);\r\n }\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissor);\r\n }\r\n end(generateMipmaps = true) {\r\n if (!this.active) {\r\n return;\r\n }\r\n // finish current render pass command\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.end();\r\n this._renderPassEncoder = null;\r\n }\r\n this._renderCommandEncoder = null;\r\n // unmark render target flags and generate render target mipmaps if needed\r\n if (this._frameBufferInfo.frameBuffer) {\r\n const options = this._frameBufferInfo.frameBuffer.getOptions();\r\n if (options.colorAttachments) {\r\n for (const attachment of options.colorAttachments) {\r\n const texture = attachment.texture as WebGPUBaseTexture;\r\n texture._markAsCurrentFB(false);\r\n this.handleColorAttachmentMipmap(texture, !!attachment.generateMipmaps, generateMipmaps);\r\n }\r\n }\r\n (options.depthAttachment?.texture as WebGPUBaseTexture)?._markAsCurrentFB(false);\r\n }\r\n }\r\n hasDeferredMipmapsForBindGroups(bindGroups: WebGPUBindGroup[]) {\r\n return bindGroups?.some((bindGroup) => {\r\n return bindGroup?.textureList.some((texture) => this._deferredMipmapTextures.indexOf(texture) >= 0);\r\n });\r\n }\r\n flushDeferredMipmapsForBindGroups(bindGroups?: WebGPUBindGroup[]): void {\r\n if (!bindGroups) {\r\n this.flushDeferredMipmaps();\r\n return;\r\n }\r\n for (const bindGroup of bindGroups) {\r\n for (const texture of bindGroup?.textureList ?? []) {\r\n this.flushDeferredMipmap(texture);\r\n }\r\n }\r\n }\r\n flushDeferredMipmaps(): void {\r\n const textures = this._deferredMipmapTextures.splice(0);\r\n for (const texture of textures) {\r\n if (!texture.disposed) {\r\n texture.generateMipmaps();\r\n }\r\n }\r\n }\r\n capture(\r\n renderBundleEncoder: GPURenderBundleEncoder,\r\n program: WebGPUProgram,\r\n vertexData: WebGPUVertexLayout,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n renderBundleEncoder\r\n );\r\n }\r\n private drawInternal(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (\r\n this.setBindGroupsForRender(\r\n renderPassEncoder,\r\n program,\r\n bindGroups,\r\n bindGroupOffsets,\r\n renderBundleEncoder\r\n )\r\n ) {\r\n const pipeline = this._device.pipelineCache.fetchRenderPipeline(\r\n program,\r\n vertexData,\r\n stateSet,\r\n primitiveType,\r\n this._frameBufferInfo\r\n );\r\n if (pipeline) {\r\n renderPassEncoder.setPipeline(pipeline);\r\n renderBundleEncoder?.setPipeline(pipeline);\r\n const stencilState = stateSet?.stencilState;\r\n if (stencilState) {\r\n renderPassEncoder.setStencilReference(stencilState.ref);\r\n }\r\n if (vertexData) {\r\n const vertexBuffers = vertexData.getLayouts(program.vertexAttributes)?.buffers;\r\n vertexBuffers?.forEach((val, index) => {\r\n renderPassEncoder.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n renderBundleEncoder?.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n });\r\n const indexBuffer = vertexData.getIndexBuffer() as unknown as WebGPUIndexBuffer;\r\n if (indexBuffer) {\r\n renderPassEncoder.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderBundleEncoder?.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderPassEncoder.drawIndexed(count, numInstances, first);\r\n renderBundleEncoder?.drawIndexed(count, numInstances, first);\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n }\r\n }\r\n }\r\n private validateDraw(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n let validation = 0;\r\n const colorTargetCount = this._frameBufferInfo.colorFormats.length;\r\n if (colorTargetCount !== 0 && program.fragmentOutputCount !== colorTargetCount) {\r\n if (\r\n !stateSet?.colorState ||\r\n stateSet.colorState.redMask ||\r\n stateSet.colorState.greenMask ||\r\n stateSet.colorState.blueMask ||\r\n stateSet.colorState.alphaMask\r\n ) {\r\n const framebuffer = this._frameBufferInfo.frameBuffer;\r\n const colorAttachments = framebuffer?.getColorAttachments().map((texture, index) => ({\r\n index,\r\n name: texture?.name,\r\n uid: texture?.uid,\r\n format: texture?.format\r\n })) ?? [{ index: 0, name: '<backbuffer>', uid: 0, format: this._frameBufferInfo.colorFormats[0] }];\r\n console.error('WebGPU draw validation failed: fragment color output count mismatch', {\r\n programName: program.name,\r\n programLabel: program.label,\r\n programHash: program.hash,\r\n fragmentOutputCount: program.fragmentOutputCount,\r\n colorTargetCount,\r\n colorFormats: this._frameBufferInfo.colorFormats,\r\n depthFormat: this._frameBufferInfo.depthFormat,\r\n framebufferName: framebuffer?.name ?? '<backbuffer>',\r\n framebufferHash: this._frameBufferInfo.hash,\r\n colorAttachments,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n stack: new Error().stack\r\n });\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n if (bindGroups) {\r\n for (let i = 0; i < program.bindGroupLayouts.length; i++) {\r\n const bindGroup = bindGroups[i];\r\n if (bindGroup) {\r\n if (bindGroup.bindGroup) {\r\n for (const ubo of bindGroup.bufferList) {\r\n if (ubo.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n for (const tex of bindGroup.textureList) {\r\n if (tex.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n if (tex._isMarkedAsCurrentFB()) {\r\n console.error('bind resource texture can not be current render target');\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(`Missing bind group (${i}) when drawing with program '${program.name}'`);\r\n return VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n if (\r\n this._frameBufferInfo.frameBuffer &&\r\n this._frameBufferInfo.frameBuffer.bindFlag !== this._fbBindFlag\r\n ) {\r\n validation |= VALIDATION_NEED_NEW_PASS;\r\n }\r\n return validation;\r\n }\r\n private handleColorAttachmentMipmap(\r\n texture: WebGPUBaseTexture,\r\n attachmentGenerateMipmaps: boolean,\r\n generateMipmaps: boolean\r\n ): void {\r\n if (!attachmentGenerateMipmaps || texture.mipLevelCount <= 1) {\r\n return;\r\n }\r\n if (generateMipmaps) {\r\n this.removeDeferredMipmap(texture);\r\n texture.generateMipmaps();\r\n } else if (this._deferredMipmapTextures.indexOf(texture) < 0) {\r\n this._deferredMipmapTextures.push(texture);\r\n }\r\n }\r\n private flushDeferredMipmap(texture: WebGPUBaseTexture): void {\r\n if (this.removeDeferredMipmap(texture) && !texture.disposed) {\r\n texture.generateMipmaps();\r\n }\r\n }\r\n private removeDeferredMipmap(texture: WebGPUBaseTexture): boolean {\r\n const index = this._deferredMipmapTextures.indexOf(texture);\r\n if (index >= 0) {\r\n this._deferredMipmapTextures.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n private setBindGroupsForRender(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (bindGroups) {\r\n for (let i = 0; i < 4; i++) {\r\n if (i < program.bindGroupLayouts.length) {\r\n const bindGroup = bindGroups[i].bindGroup;\r\n if (!bindGroup) {\r\n return false;\r\n }\r\n const bindGroupOffset = bindGroups[i].getDynamicOffsets() ?? bindGroupOffsets?.[i];\r\n if (bindGroupOffset) {\r\n renderPassEncoder.setBindGroup(i, bindGroup, bindGroupOffset);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup, bindGroupOffset);\r\n } else {\r\n renderPassEncoder.setBindGroup(i, bindGroup);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup);\r\n }\r\n } else {\r\n renderPassEncoder.setBindGroup(i, this._device.emptyBindGroup);\r\n renderBundleEncoder?.setBindGroup(i, this._device.emptyBindGroup);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n"],"names":["VALIDATION_NEED_NEW_PASS","VALIDATION_FAILED","typeU16","PBPrimitiveTypeInfo","getCachedTypeInfo","PBPrimitiveType","U16","WebGPURenderPass","_device","_renderCommandEncoder","_renderPassEncoder","_fbBindFlag","_currentViewport","_currentScissor","_frameBufferInfo","_deferredMipmapTextures","device","createFrameBufferInfo","active","fb","info","frameBuffer","colorFormats","backbufferFormat","depthFormat","backbufferDepthFormat","sampleCount","hash","clearHash","getColorAttachments","map","val","gpuFormat","getDepthAttachment","getOptions","fmt","textureFormatInvMap","isIntegerTextureFormat","isSignedTextureFormat","join","setFramebuffer","end","setViewport","setScissor","getFramebuffer","vp","Array","isArray","default","x","y","width","drawingBufferWidth","deviceXToScreen","height","deviceYToScreen","drawingBufferHeight","Object","assign","vx","screenXToDevice","vy","screenYToDevice","vw","vh","getViewport","scissor","backBufferWidth","backBufferHeight","undefined","Math","min","setScissorRect","getScissor","executeRenderBundle","renderBundle","begin","executeBundles","draw","program","vertexData","stateSet","bindGroups","bindGroupOffsets","primitiveType","first","count","numInstances","validation","validateDraw","hasDeferredMipmapsForBindGroups","flushDeferredMipmapsForBindGroups","drawInternal","clear","color","depth","stencil","insertDebugMarker","WebGPUClearQuad","drawClearQuad","getDevice","getFrameBufferInfo","console","error","commandQueue","getEncoder","mainPassDesc","defaultRenderPassDesc","colorAttachmentDesc","colorAttachments","resolveTarget","context","getCurrentTexture","createView","view","loadOp","clearValue","depthAttachmentDesc","depthStencilAttachment","depthLoadOp","depthClearValue","stencilLoadOp","stencilClearValue","beginRenderPass","depthAttachmentTexture","depthTextureView","_markAsCurrentFB","attachment","depthAttachment","layer","isTexture2DArray","isTexture3D","isTextureCube","face","getView","bindFlag","passDesc","label","index","tex","texture","level","storeOp","msaaTexture","getMSAAColorAttacments","msaaView","gpuCreateTextureView","dimension","baseMipLevel","mipLevelCount","baseArrayLayer","arrayLayerCount","depthStoreOp","hasStencilChannel","format","stencilStoreOp","getMSAADepthAttachment","generateMipmaps","options","handleColorAttachmentMipmap","some","bindGroup","textureList","indexOf","flushDeferredMipmaps","flushDeferredMipmap","textures","splice","disposed","capture","renderBundleEncoder","renderPassEncoder","setBindGroupsForRender","pipeline","pipelineCache","fetchRenderPipeline","setPipeline","stencilState","setStencilReference","ref","vertexBuffers","getLayouts","vertexAttributes","buffers","forEach","setVertexBuffer","buffer","object","drawOffset","indexBuffer","getIndexBuffer","setIndexBuffer","indexType","drawIndexed","colorTargetCount","length","fragmentOutputCount","colorState","redMask","greenMask","blueMask","alphaMask","framebuffer","name","uid","programName","programLabel","programHash","framebufferName","framebufferHash","stack","Error","i","bindGroupLayouts","ubo","bufferList","_isMarkedAsCurrentFB","attachmentGenerateMipmaps","removeDeferredMipmap","push","bindGroupOffset","getDynamicOffsets","setBindGroup","emptyBindGroup"],"mappings":"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"}
|
|
@@ -194,10 +194,10 @@ class ResizeHandler {
|
|
|
194
194
|
}, this._dpr);
|
|
195
195
|
}
|
|
196
196
|
getScaleX() {
|
|
197
|
-
return this._canvas.clientWidth === 0 ?
|
|
197
|
+
return this._canvas.clientWidth === 0 ? 1 : this._canvas.width / this._canvas.clientWidth;
|
|
198
198
|
}
|
|
199
199
|
getScaleY() {
|
|
200
|
-
return this._canvas.clientHeight === 0 ?
|
|
200
|
+
return this._canvas.clientHeight === 0 ? 1 : this._canvas.height / this._canvas.clientHeight;
|
|
201
201
|
}
|
|
202
202
|
get backend() {
|
|
203
203
|
return this._backend;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable, Rect, Vector3 } from '@zephyr3d/base';\r\nimport { 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 DrawTextLayoutOptions,\r\n TimestampQueryFilter,\r\n TimestampQueryHandle,\r\n TimestampQueryOptions,\r\n TimestampQueryResult\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(): Promise<boolean>;\r\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;\r\n}\r\n\r\ntype DeviceState = {\r\n framebuffer: Nullable<FrameBuffer>;\r\n windowOrderReversed: boolean;\r\n viewport: DeviceViewport;\r\n scissor: DeviceViewport;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n program: Nullable<GPUProgram>;\r\n vertexLayout: Nullable<VertexLayout>;\r\n bindGroups: [BindGroup, Nullable<Iterable<number>>][];\r\n};\r\n\r\ntype ResizeCallback = (\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n) => void;\r\n\r\nclass ResizeHandler {\r\n private readonly _canvas: HTMLCanvasElement;\r\n private readonly _dpr: number;\r\n private _cssWidth: number;\r\n private _cssHeight: number;\r\n private _deviceWidth: number;\r\n private _deviceHeight: number;\r\n\r\n private _resizeObserver!: ResizeObserver;\r\n private _mutationObserver!: MutationObserver;\r\n private _onResizeCallback: ResizeCallback;\r\n\r\n constructor(canvas: HTMLCanvasElement, onResize: ResizeCallback, dpr: number) {\r\n this._canvas = canvas;\r\n this._dpr = dpr;\r\n this._cssWidth = 0;\r\n this._cssHeight = 0;\r\n this._deviceWidth = 0;\r\n this._deviceHeight = 0;\r\n this._onResizeCallback = onResize;\r\n }\r\n\r\n init() {\r\n const canvas = this._canvas;\r\n if (window.ResizeObserver) {\r\n this._resizeObserver = new ResizeObserver((entries) => {\r\n const entry = entries[0];\r\n this._handleResizeEntry(entry);\r\n });\r\n try {\r\n (this._resizeObserver as any).observe(canvas);\r\n } catch {\r\n this._resizeObserver.observe(canvas);\r\n }\r\n } else {\r\n if (window.MutationObserver) {\r\n this._mutationObserver = new MutationObserver((mutations) => {\r\n if (mutations.length > 0) {\r\n this._handleLegacyResize();\r\n }\r\n });\r\n this._mutationObserver.observe(canvas, { attributes: true, attributeFilter: ['style'] });\r\n }\r\n window.addEventListener('resize', this._handleLegacyResize);\r\n this._handleLegacyResize();\r\n }\r\n }\r\n\r\n private _handleResizeEntry(_entry: ResizeObserverEntry) {\r\n // CSS pixel\r\n const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;\r\n const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;\r\n const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;\r\n\r\n // Device pixel\r\n /*\r\n let deviceWidth: number;\r\n let deviceHeight: number;\r\n\r\n const dpBox = (entry as any).devicePixelContentBoxSize?.[0];\r\n if (dpBox) {\r\n deviceWidth = dpBox.inlineSize;\r\n deviceHeight = dpBox.blockSize;\r\n } else {\r\n deviceWidth = Math.round(cssWidth * this._dpr);\r\n deviceHeight = Math.round(cssHeight * this._dpr);\r\n }\r\n */\r\n const deviceWidth = cssWidth * this._dpr;\r\n const deviceHeight = cssHeight * this._dpr;\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n\r\n private _handleLegacyResize = () => {\r\n const cssWidth = this._canvas.clientWidth;\r\n const cssHeight = this._canvas.clientHeight;\r\n const dpr = window.devicePixelRatio || 1;\r\n const deviceWidth = Math.round(cssWidth * dpr);\r\n const deviceHeight = Math.round(cssHeight * dpr);\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n };\r\n\r\n public dispose() {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n }\r\n window.removeEventListener('resize', this._handleLegacyResize);\r\n }\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 _dpr: number;\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: Nullable<ITimer>;\r\n protected _runningLoop: Nullable<number>;\r\n protected _fpsCounter: { time: number; frame: number };\r\n protected _runLoopFunc: Nullable<(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 _resizer: ResizeHandler;\r\n private readonly _stateStack: DeviceState[];\r\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number) {\r\n super();\r\n this._dpr = dpr ?? window.devicePixelRatio ?? 1;\r\n this._backend = backend;\r\n this._gpuObjectList = {\r\n stacks: new Map(),\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 this._resizer = new ResizeHandler(\r\n this._canvas,\r\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\r\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n },\r\n this._dpr\r\n );\r\n }\r\n getScaleX() {\r\n return this._canvas.clientWidth === 0 ? 0 : this._canvas.width / this._canvas.clientWidth;\r\n }\r\n getScaleY() {\r\n return this._canvas.clientHeight === 0 ? 0 : this._canvas.height / this._canvas.clientHeight;\r\n }\r\n abstract getAdapterInfo(): any;\r\n abstract getFrameBufferSampleCount(): number;\r\n abstract isContextLost(): boolean;\r\n abstract getDrawingBufferWidth(): number;\r\n abstract getDrawingBufferHeight(): number;\r\n abstract getBackBufferWidth(): number;\r\n abstract getBackBufferHeight(): number;\r\n abstract getDeviceCaps(): Immutable<DeviceCaps>;\r\n abstract initContext(): Promise<void>;\r\n abstract clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n abstract createGPUTimer(): Nullable<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 ): Nullable<T>;\r\n abstract createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<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 ): Nullable<Texture2DArray>;\r\n abstract createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<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 ): Nullable<Texture3D>;\r\n abstract createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<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): void;\r\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n // program\r\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n abstract createBindGroup(layout: Immutable<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 ): void;\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: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n // render related\r\n abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getViewport(): Immutable<DeviceViewport>;\r\n abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getScissor(): Immutable<DeviceViewport>;\r\n abstract setProgram(program: Nullable<GPUProgram>): void;\r\n abstract getProgram(): Nullable<GPUProgram>;\r\n abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n abstract getVertexLayout(): Nullable<VertexLayout>;\r\n abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n abstract getRenderStates(): Nullable<RenderStateSet>;\r\n abstract getFramebuffer(): Nullable<FrameBuffer>;\r\n abstract setBindGroup(\r\n index: number,\r\n bindGroup: BindGroup,\r\n dynamicOffsets?: Nullable<Iterable<number>>\r\n ): void;\r\n abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n abstract flush(): void;\r\n abstract nextFrame(callback: () => void): number;\r\n abstract cancelNextFrame(handle: number): void;\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() {\r\n return this._backend;\r\n }\r\n get videoMemoryUsage() {\r\n return this._gpuMemCost;\r\n }\r\n get frameInfo() {\r\n return this._frameInfo;\r\n }\r\n get isRendering() {\r\n return this._runningLoop !== null;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get type() {\r\n return this._backend.typeName();\r\n }\r\n get vSync() {\r\n return this._vSync;\r\n }\r\n set vSync(val) {\r\n this._vSync = !!val;\r\n }\r\n get pool() {\r\n return this._poolMap.get(this._defaultPoolKey)!;\r\n }\r\n get runLoopFunction() {\r\n return this._runLoopFunc;\r\n }\r\n get programBuilder() {\r\n return this._programBuilder;\r\n }\r\n poolExists(key: string | symbol) {\r\n return this._poolMap.has(key);\r\n }\r\n getPool(key: string | symbol) {\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: Nullable<string>) {\r\n DrawText.setFont(this, fontName);\r\n }\r\n setTextRenderStates(renderStates: Nullable<RenderStateSet>) {\r\n DrawText.setRenderStates(renderStates);\r\n }\r\n drawText(text: string, x: number, y: number, color: string | Vector3 | Vector4): void;\r\n drawText(\r\n text: string,\r\n rect: Immutable<Rect>,\r\n color: string | Vector3 | Vector4,\r\n options?: DrawTextLayoutOptions\r\n ): void;\r\n drawText(\r\n text: string,\r\n xOrRect: number | Immutable<Rect>,\r\n yOrColor: number | string | Vector3 | Vector4,\r\n colorOrOptions?: string | Vector3 | Vector4 | DrawTextLayoutOptions,\r\n options?: DrawTextLayoutOptions\r\n ) {\r\n if (typeof xOrRect === 'number') {\r\n DrawText.drawText(\r\n this,\r\n text,\r\n colorOrOptions as string | Vector3 | Vector4,\r\n xOrRect,\r\n yOrColor as number\r\n );\r\n } else {\r\n DrawText.drawText(\r\n this,\r\n text,\r\n yOrColor as string | Vector3 | Vector4,\r\n xOrRect,\r\n options ?? (colorOrOptions as DrawTextLayoutOptions)\r\n );\r\n }\r\n }\r\n setFramebuffer(rt: Nullable<FrameBuffer>): void;\r\n setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): void;\r\n setFramebuffer(\r\n colorOrRT: BaseTexture[] | Nullable<FrameBuffer>,\r\n depth?: BaseTexture,\r\n sampleCount?: number\r\n ) {\r\n let newRT: Nullable<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 && currentRT) {\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 beginTimestampQuery(_label?: string, _options?: TimestampQueryOptions): number {\r\n return 0;\r\n }\r\n endTimestampQuery(_id: number): void {\r\n return;\r\n }\r\n pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult> {\r\n return this.createUnsupportedTimestampQueryResult(query);\r\n }\r\n resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult> {\r\n return Promise.resolve(this.createUnsupportedTimestampQueryResult(query));\r\n }\r\n collectTimestampQueries(_filter?: TimestampQueryFilter): TimestampQueryResult[] {\r\n return [];\r\n }\r\n beginFrame() {\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() {\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(semantic: VertexSemantic, dataType: DataType, componentCount: number) {\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 ) {\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 if (!vertexBufferType) {\r\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\r\n return null;\r\n }\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(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions) {\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 if (!vertexBufferType) {\r\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\r\n return null;\r\n }\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) {\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) {\r\n this._frameInfo.drawCalls++;\r\n this._drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n executeRenderBundle(renderBundle: RenderBundle): void {\r\n this._frameInfo.drawCalls += this._executeRenderBundle(renderBundle);\r\n }\r\n compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number) {\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>) {\r\n return new Promise<void>((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() {\r\n return this._gpuObjectList;\r\n }\r\n getGPUObjectById(uid: number) {\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 screenXToDevice(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleX());\r\n }\r\n deviceXToScreen(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleX());\r\n }\r\n screenYToDevice(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleY());\r\n }\r\n deviceYToScreen(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleY());\r\n }\r\n buildRenderProgram(options: PBRenderOptions) {\r\n return this._programBuilder.buildRenderProgram(options);\r\n }\r\n buildComputeProgram(options: PBComputeOptions) {\r\n return this._programBuilder.buildComputeProgram(options);\r\n }\r\n getGPUObjectStack(obj: GPUObject): string {\r\n return this._gpuObjectList.stacks.get(obj) ?? '';\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._gpuObjectList.stacks.set(obj, new Error().stack ?? '');\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._gpuObjectList.stacks.delete(obj);\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: Nullable<FrameBuffer>): void;\r\n protected abstract _handleResize(\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n ): void;\r\n protected async initResizer() {\r\n return new Promise<void>((resolve) => {\r\n this.once(\r\n 'resize',\r\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\r\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n this.on(\r\n 'resize',\r\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\r\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n );\r\n resolve();\r\n }\r\n );\r\n this._resizer.init();\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) {\r\n let list: Nullable<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 private createUnsupportedTimestampQueryResult(query: TimestampQueryHandle): TimestampQueryResult {\r\n return {\r\n id: typeof query === 'number' ? query : 0,\r\n label: typeof query === 'string' ? query : '',\r\n frameId: this._frameInfo.frameCounter,\r\n durationMs: 0,\r\n start: 0n,\r\n end: 0n,\r\n status: 'unsupported',\r\n message: 'GPU timestamp queries are not supported by this device'\r\n };\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() {\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) {\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) {\r\n options = options ?? {};\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":["ResizeHandler","_canvas","_dpr","_cssWidth","_cssHeight","_deviceWidth","_deviceHeight","_resizeObserver","_mutationObserver","_onResizeCallback","canvas","onResize","dpr","init","window","ResizeObserver","entries","entry","_handleResizeEntry","observe","MutationObserver","mutations","length","_handleLegacyResize","attributes","attributeFilter","addEventListener","_entry","boxSize","Array","isArray","contentBoxSize","cssWidth","inlineSize","clientWidth","cssHeight","blockSize","clientHeight","deviceWidth","deviceHeight","devicePixelRatio","Math","round","dispose","disconnect","removeEventListener","BaseDevice","Observable","_canvasClientWidth","_canvasClientHeight","_gpuObjectList","_gpuMemCost","_disposeObjectList","_beginFrameTime","_endFrameTime","_frameInfo","_cpuTimer","_gpuTimer","_runningLoop","_fpsCounter","_runLoopFunc","_backend","_beginFrameCounter","_programBuilder","_poolMap","_defaultPoolKey","_temporalFramebuffer","_vSync","_resizer","_stateStack","cvs","backend","stacks","Map","textures","samplers","buffers","programs","framebuffers","vertexArrayObjects","bindGroups","setAttribute","frameCounter","frameTimestamp","elapsedTimeCPU","elapsedTimeGPU","elapsedFrame","elapsedOverall","FPS","drawCalls","computeCalls","nextFrameCall","nextFrameCallNext","ProgramBuilder","CPUTimer","time","frame","Symbol","set","Pool","dispatchEvent","getScaleX","width","getScaleY","height","videoMemoryUsage","frameInfo","isRendering","type","typeName","vSync","val","pool","get","runLoopFunction","programBuilder","poolExists","key","has","getPool","setFont","fontName","DrawText","setTextRenderStates","renderStates","setRenderStates","drawText","text","xOrRect","yOrColor","colorOrOptions","options","setFramebuffer","colorOrRT","depth","sampleCount","newRT","temporal","fetchTemporalFramebuffer","currentRT","getFramebuffer","releaseFrameBuffer","_setFramebuffer","disposeObject","obj","remove","removeGPUObject","isContextLost","destroy","push","restoreObject","disposed","restore","restoreHandler","enableGPUTimeRecording","enable","createGPUTimer","end","beginTimestampQuery","_label","_options","endTimestampQuery","_id","pollTimestampQuery","query","createUnsupportedTimestampQueryResult","resolveTimestampQuery","Promise","resolve","collectTimestampQueries","_filter","beginFrame","now","updateFrameInfo","forEach","autoRelease","onBeginFrame","endFrame","onEndFrame","getVertexAttribFormat","semantic","dataType","componentCount","createInterleavedVertexBuffer","attribFormats","data","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","p","then","exitLoop","cancelAnimationFrame","cancelNextFrame","runLoop","func","that","requestAnimationFrame","nextFrame","pushDeviceStates","windowOrderReversed","isWindingOrderReversed","framebuffer","viewport","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","top","pop","setViewport","setScissor","setProgram","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenXToDevice","deviceXToScreen","screenYToDevice","deviceYToScreen","buildRenderProgram","buildComputeProgram","getGPUObjectStack","addGPUObject","getGPUObjectList","indexOf","Error","stack","index","splice","delete","updateVideoMemoryCost","delta","initResizer","once","_handleResize","on","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","id","label","frameId","durationMs","start","status","message","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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"}
|
|
1
|
+
{"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable, Rect, Vector3 } from '@zephyr3d/base';\r\nimport { 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 DrawTextLayoutOptions,\r\n TimestampQueryFilter,\r\n TimestampQueryHandle,\r\n TimestampQueryOptions,\r\n TimestampQueryResult\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(): Promise<boolean>;\r\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;\r\n}\r\n\r\ntype DeviceState = {\r\n framebuffer: Nullable<FrameBuffer>;\r\n windowOrderReversed: boolean;\r\n viewport: DeviceViewport;\r\n scissor: DeviceViewport;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n program: Nullable<GPUProgram>;\r\n vertexLayout: Nullable<VertexLayout>;\r\n bindGroups: [BindGroup, Nullable<Iterable<number>>][];\r\n};\r\n\r\ntype ResizeCallback = (\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n) => void;\r\n\r\nclass ResizeHandler {\r\n private readonly _canvas: HTMLCanvasElement;\r\n private readonly _dpr: number;\r\n private _cssWidth: number;\r\n private _cssHeight: number;\r\n private _deviceWidth: number;\r\n private _deviceHeight: number;\r\n\r\n private _resizeObserver!: ResizeObserver;\r\n private _mutationObserver!: MutationObserver;\r\n private _onResizeCallback: ResizeCallback;\r\n\r\n constructor(canvas: HTMLCanvasElement, onResize: ResizeCallback, dpr: number) {\r\n this._canvas = canvas;\r\n this._dpr = dpr;\r\n this._cssWidth = 0;\r\n this._cssHeight = 0;\r\n this._deviceWidth = 0;\r\n this._deviceHeight = 0;\r\n this._onResizeCallback = onResize;\r\n }\r\n\r\n init() {\r\n const canvas = this._canvas;\r\n if (window.ResizeObserver) {\r\n this._resizeObserver = new ResizeObserver((entries) => {\r\n const entry = entries[0];\r\n this._handleResizeEntry(entry);\r\n });\r\n try {\r\n (this._resizeObserver as any).observe(canvas);\r\n } catch {\r\n this._resizeObserver.observe(canvas);\r\n }\r\n } else {\r\n if (window.MutationObserver) {\r\n this._mutationObserver = new MutationObserver((mutations) => {\r\n if (mutations.length > 0) {\r\n this._handleLegacyResize();\r\n }\r\n });\r\n this._mutationObserver.observe(canvas, { attributes: true, attributeFilter: ['style'] });\r\n }\r\n window.addEventListener('resize', this._handleLegacyResize);\r\n this._handleLegacyResize();\r\n }\r\n }\r\n\r\n private _handleResizeEntry(_entry: ResizeObserverEntry) {\r\n // CSS pixel\r\n const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;\r\n const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;\r\n const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;\r\n\r\n // Device pixel\r\n /*\r\n let deviceWidth: number;\r\n let deviceHeight: number;\r\n\r\n const dpBox = (entry as any).devicePixelContentBoxSize?.[0];\r\n if (dpBox) {\r\n deviceWidth = dpBox.inlineSize;\r\n deviceHeight = dpBox.blockSize;\r\n } else {\r\n deviceWidth = Math.round(cssWidth * this._dpr);\r\n deviceHeight = Math.round(cssHeight * this._dpr);\r\n }\r\n */\r\n const deviceWidth = cssWidth * this._dpr;\r\n const deviceHeight = cssHeight * this._dpr;\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n\r\n private _handleLegacyResize = () => {\r\n const cssWidth = this._canvas.clientWidth;\r\n const cssHeight = this._canvas.clientHeight;\r\n const dpr = window.devicePixelRatio || 1;\r\n const deviceWidth = Math.round(cssWidth * dpr);\r\n const deviceHeight = Math.round(cssHeight * dpr);\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n };\r\n\r\n public dispose() {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n }\r\n window.removeEventListener('resize', this._handleLegacyResize);\r\n }\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 _dpr: number;\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: Nullable<ITimer>;\r\n protected _runningLoop: Nullable<number>;\r\n protected _fpsCounter: { time: number; frame: number };\r\n protected _runLoopFunc: Nullable<(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 _resizer: ResizeHandler;\r\n private readonly _stateStack: DeviceState[];\r\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number) {\r\n super();\r\n this._dpr = dpr ?? window.devicePixelRatio ?? 1;\r\n this._backend = backend;\r\n this._gpuObjectList = {\r\n stacks: new Map(),\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 this._resizer = new ResizeHandler(\r\n this._canvas,\r\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\r\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n },\r\n this._dpr\r\n );\r\n }\r\n getScaleX() {\r\n return this._canvas.clientWidth === 0 ? 1 : this._canvas.width / this._canvas.clientWidth;\r\n }\r\n getScaleY() {\r\n return this._canvas.clientHeight === 0 ? 1 : this._canvas.height / this._canvas.clientHeight;\r\n }\r\n abstract getAdapterInfo(): any;\r\n abstract getFrameBufferSampleCount(): number;\r\n abstract isContextLost(): boolean;\r\n abstract getDrawingBufferWidth(): number;\r\n abstract getDrawingBufferHeight(): number;\r\n abstract getBackBufferWidth(): number;\r\n abstract getBackBufferHeight(): number;\r\n abstract getDeviceCaps(): Immutable<DeviceCaps>;\r\n abstract initContext(): Promise<void>;\r\n abstract clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n abstract createGPUTimer(): Nullable<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 ): Nullable<T>;\r\n abstract createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<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 ): Nullable<Texture2DArray>;\r\n abstract createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<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 ): Nullable<Texture3D>;\r\n abstract createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<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): void;\r\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n // program\r\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n abstract createBindGroup(layout: Immutable<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 ): void;\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: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n // render related\r\n abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getViewport(): Immutable<DeviceViewport>;\r\n abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getScissor(): Immutable<DeviceViewport>;\r\n abstract setProgram(program: Nullable<GPUProgram>): void;\r\n abstract getProgram(): Nullable<GPUProgram>;\r\n abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n abstract getVertexLayout(): Nullable<VertexLayout>;\r\n abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n abstract getRenderStates(): Nullable<RenderStateSet>;\r\n abstract getFramebuffer(): Nullable<FrameBuffer>;\r\n abstract setBindGroup(\r\n index: number,\r\n bindGroup: BindGroup,\r\n dynamicOffsets?: Nullable<Iterable<number>>\r\n ): void;\r\n abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n abstract flush(): void;\r\n abstract nextFrame(callback: () => void): number;\r\n abstract cancelNextFrame(handle: number): void;\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() {\r\n return this._backend;\r\n }\r\n get videoMemoryUsage() {\r\n return this._gpuMemCost;\r\n }\r\n get frameInfo() {\r\n return this._frameInfo;\r\n }\r\n get isRendering() {\r\n return this._runningLoop !== null;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get type() {\r\n return this._backend.typeName();\r\n }\r\n get vSync() {\r\n return this._vSync;\r\n }\r\n set vSync(val) {\r\n this._vSync = !!val;\r\n }\r\n get pool() {\r\n return this._poolMap.get(this._defaultPoolKey)!;\r\n }\r\n get runLoopFunction() {\r\n return this._runLoopFunc;\r\n }\r\n get programBuilder() {\r\n return this._programBuilder;\r\n }\r\n poolExists(key: string | symbol) {\r\n return this._poolMap.has(key);\r\n }\r\n getPool(key: string | symbol) {\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: Nullable<string>) {\r\n DrawText.setFont(this, fontName);\r\n }\r\n setTextRenderStates(renderStates: Nullable<RenderStateSet>) {\r\n DrawText.setRenderStates(renderStates);\r\n }\r\n drawText(text: string, x: number, y: number, color: string | Vector3 | Vector4): void;\r\n drawText(\r\n text: string,\r\n rect: Immutable<Rect>,\r\n color: string | Vector3 | Vector4,\r\n options?: DrawTextLayoutOptions\r\n ): void;\r\n drawText(\r\n text: string,\r\n xOrRect: number | Immutable<Rect>,\r\n yOrColor: number | string | Vector3 | Vector4,\r\n colorOrOptions?: string | Vector3 | Vector4 | DrawTextLayoutOptions,\r\n options?: DrawTextLayoutOptions\r\n ) {\r\n if (typeof xOrRect === 'number') {\r\n DrawText.drawText(\r\n this,\r\n text,\r\n colorOrOptions as string | Vector3 | Vector4,\r\n xOrRect,\r\n yOrColor as number\r\n );\r\n } else {\r\n DrawText.drawText(\r\n this,\r\n text,\r\n yOrColor as string | Vector3 | Vector4,\r\n xOrRect,\r\n options ?? (colorOrOptions as DrawTextLayoutOptions)\r\n );\r\n }\r\n }\r\n setFramebuffer(rt: Nullable<FrameBuffer>): void;\r\n setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): void;\r\n setFramebuffer(\r\n colorOrRT: BaseTexture[] | Nullable<FrameBuffer>,\r\n depth?: BaseTexture,\r\n sampleCount?: number\r\n ) {\r\n let newRT: Nullable<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 && currentRT) {\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 beginTimestampQuery(_label?: string, _options?: TimestampQueryOptions): number {\r\n return 0;\r\n }\r\n endTimestampQuery(_id: number): void {\r\n return;\r\n }\r\n pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult> {\r\n return this.createUnsupportedTimestampQueryResult(query);\r\n }\r\n resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult> {\r\n return Promise.resolve(this.createUnsupportedTimestampQueryResult(query));\r\n }\r\n collectTimestampQueries(_filter?: TimestampQueryFilter): TimestampQueryResult[] {\r\n return [];\r\n }\r\n beginFrame() {\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() {\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(semantic: VertexSemantic, dataType: DataType, componentCount: number) {\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 ) {\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 if (!vertexBufferType) {\r\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\r\n return null;\r\n }\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(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions) {\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 if (!vertexBufferType) {\r\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\r\n return null;\r\n }\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) {\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) {\r\n this._frameInfo.drawCalls++;\r\n this._drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n executeRenderBundle(renderBundle: RenderBundle): void {\r\n this._frameInfo.drawCalls += this._executeRenderBundle(renderBundle);\r\n }\r\n compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number) {\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>) {\r\n return new Promise<void>((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() {\r\n return this._gpuObjectList;\r\n }\r\n getGPUObjectById(uid: number) {\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 screenXToDevice(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleX());\r\n }\r\n deviceXToScreen(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleX());\r\n }\r\n screenYToDevice(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleY());\r\n }\r\n deviceYToScreen(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleY());\r\n }\r\n buildRenderProgram(options: PBRenderOptions) {\r\n return this._programBuilder.buildRenderProgram(options);\r\n }\r\n buildComputeProgram(options: PBComputeOptions) {\r\n return this._programBuilder.buildComputeProgram(options);\r\n }\r\n getGPUObjectStack(obj: GPUObject): string {\r\n return this._gpuObjectList.stacks.get(obj) ?? '';\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._gpuObjectList.stacks.set(obj, new Error().stack ?? '');\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._gpuObjectList.stacks.delete(obj);\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: Nullable<FrameBuffer>): void;\r\n protected abstract _handleResize(\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n ): void;\r\n protected async initResizer() {\r\n return new Promise<void>((resolve) => {\r\n this.once(\r\n 'resize',\r\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\r\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n this.on(\r\n 'resize',\r\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\r\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n );\r\n resolve();\r\n }\r\n );\r\n this._resizer.init();\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) {\r\n let list: Nullable<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 private createUnsupportedTimestampQueryResult(query: TimestampQueryHandle): TimestampQueryResult {\r\n return {\r\n id: typeof query === 'number' ? query : 0,\r\n label: typeof query === 'string' ? query : '',\r\n frameId: this._frameInfo.frameCounter,\r\n durationMs: 0,\r\n start: 0n,\r\n end: 0n,\r\n status: 'unsupported',\r\n message: 'GPU timestamp queries are not supported by this device'\r\n };\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() {\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) {\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) {\r\n options = options ?? {};\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":["ResizeHandler","_canvas","_dpr","_cssWidth","_cssHeight","_deviceWidth","_deviceHeight","_resizeObserver","_mutationObserver","_onResizeCallback","canvas","onResize","dpr","init","window","ResizeObserver","entries","entry","_handleResizeEntry","observe","MutationObserver","mutations","length","_handleLegacyResize","attributes","attributeFilter","addEventListener","_entry","boxSize","Array","isArray","contentBoxSize","cssWidth","inlineSize","clientWidth","cssHeight","blockSize","clientHeight","deviceWidth","deviceHeight","devicePixelRatio","Math","round","dispose","disconnect","removeEventListener","BaseDevice","Observable","_canvasClientWidth","_canvasClientHeight","_gpuObjectList","_gpuMemCost","_disposeObjectList","_beginFrameTime","_endFrameTime","_frameInfo","_cpuTimer","_gpuTimer","_runningLoop","_fpsCounter","_runLoopFunc","_backend","_beginFrameCounter","_programBuilder","_poolMap","_defaultPoolKey","_temporalFramebuffer","_vSync","_resizer","_stateStack","cvs","backend","stacks","Map","textures","samplers","buffers","programs","framebuffers","vertexArrayObjects","bindGroups","setAttribute","frameCounter","frameTimestamp","elapsedTimeCPU","elapsedTimeGPU","elapsedFrame","elapsedOverall","FPS","drawCalls","computeCalls","nextFrameCall","nextFrameCallNext","ProgramBuilder","CPUTimer","time","frame","Symbol","set","Pool","dispatchEvent","getScaleX","width","getScaleY","height","videoMemoryUsage","frameInfo","isRendering","type","typeName","vSync","val","pool","get","runLoopFunction","programBuilder","poolExists","key","has","getPool","setFont","fontName","DrawText","setTextRenderStates","renderStates","setRenderStates","drawText","text","xOrRect","yOrColor","colorOrOptions","options","setFramebuffer","colorOrRT","depth","sampleCount","newRT","temporal","fetchTemporalFramebuffer","currentRT","getFramebuffer","releaseFrameBuffer","_setFramebuffer","disposeObject","obj","remove","removeGPUObject","isContextLost","destroy","push","restoreObject","disposed","restore","restoreHandler","enableGPUTimeRecording","enable","createGPUTimer","end","beginTimestampQuery","_label","_options","endTimestampQuery","_id","pollTimestampQuery","query","createUnsupportedTimestampQueryResult","resolveTimestampQuery","Promise","resolve","collectTimestampQueries","_filter","beginFrame","now","updateFrameInfo","forEach","autoRelease","onBeginFrame","endFrame","onEndFrame","getVertexAttribFormat","semantic","dataType","componentCount","createInterleavedVertexBuffer","attribFormats","data","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","p","then","exitLoop","cancelAnimationFrame","cancelNextFrame","runLoop","func","that","requestAnimationFrame","nextFrame","pushDeviceStates","windowOrderReversed","isWindingOrderReversed","framebuffer","viewport","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","top","pop","setViewport","setScissor","setProgram","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenXToDevice","deviceXToScreen","screenYToDevice","deviceYToScreen","buildRenderProgram","buildComputeProgram","getGPUObjectStack","addGPUObject","getGPUObjectList","indexOf","Error","stack","index","splice","delete","updateVideoMemoryCost","delta","initResizer","once","_handleResize","on","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","id","label","frameId","durationMs","start","status","message","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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"}
|