1 |
- {"ast":null,"code":"import { BindMorphTargetParameters } from \"../Materials/materialHelper.functions.js\";\n/**\n * A helper class to simplify work with FAST snapshot mode (WebGPU only - can be used in WebGL too, but won't do anything).\n */\nexport class SnapshotRenderingHelper {\n /**\n * Creates a new snapshot rendering helper\n * Note that creating an instance of the helper will set the snapshot rendering mode to SNAPSHOTRENDERING_FAST but will not enable snapshot rendering (engine.snapshotRendering is not updated).\n * Note also that fixMeshes() is called as part of the construction\n * @param scene The scene to use the helper in\n * @param options The options for the helper\n */\n constructor(scene, options) {\n this._disableRenderingRefCount = 0;\n this._currentPerformancePriorityMode = 0 /* ScenePerformancePriority.BackwardCompatible */;\n this._scene = scene;\n this._engine = scene.getEngine();\n if (!this._engine.isWebGPU) {\n return;\n }\n this._options = {\n morphTargetsNumMaxInfluences: 20,\n ...options\n };\n this._engine.snapshotRenderingMode = 1;\n this.fixMeshes();\n this._onResizeObserver = this._engine.onResizeObservable.add(() => {\n // enableSnapshotRendering() will delay the actual enabling of snapshot rendering by at least a frame, so these two lines are not redundant!\n this.disableSnapshotRendering();\n this.enableSnapshotRendering();\n });\n this._scene.onBeforeRenderObservable.add(() => {\n if (!this._fastSnapshotRenderingEnabled) {\n return;\n }\n // Animate skeletons\n scene.skeletons.forEach(skeleton => skeleton.prepare(true));\n for (const mesh of scene.meshes) {\n if (mesh.infiniteDistance) {\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\n }\n if (mesh.skeleton) {\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\n }\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\n mesh._postToWorker();\n }\n if (mesh.morphTargetManager && mesh.subMeshes) {\n // Make sure morph target animations work\n for (const subMesh of mesh.subMeshes) {\n const dw = subMesh._drawWrapper;\n const effect = dw.effect;\n if (effect) {\n var _effect$_pipelineCont;\n const dataBuffer = dw.drawContext.buffers[\"LeftOver\"];\n const ubLeftOver = (_effect$_pipelineCont = effect._pipelineContext) === null || _effect$_pipelineCont === void 0 ? void 0 : _effect$_pipelineCont.uniformBuffer;\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\n mesh.morphTargetManager._bind(effect);\n BindMorphTargetParameters(mesh, effect);\n ubLeftOver.update();\n }\n }\n }\n }\n }\n });\n }\n /**\n * Enable snapshot rendering\n * Use this method instead of engine.snapshotRendering=true, to make sure everything is ready before enabling snapshot rendering.\n * Note that this method is ref-counted and works in pair with disableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\n */\n enableSnapshotRendering() {\n var _this$_pendingCurrent;\n if (!this._engine.isWebGPU) {\n return;\n }\n if (--this._disableRenderingRefCount > 0) {\n return;\n }\n this._disableRenderingRefCount = 0;\n this._currentPerformancePriorityMode = (_this$_pendingCurrent = this._pendingCurrentPerformancePriorityMode) !== null && _this$_pendingCurrent !== void 0 ? _this$_pendingCurrent : this._scene.performancePriority;\n this._pendingCurrentPerformancePriorityMode = undefined;\n this._scene.performancePriority = 0 /* ScenePerformancePriority.BackwardCompatible */;\n this._scene.executeWhenReady(() => {\n if (this._disableRenderingRefCount > 0) {\n return;\n }\n // Make sure a full frame is rendered before enabling snapshot rendering, so use \"+2\" instead of \"+1\"\n this._executeAtFrame(this._engine.frameId + 2, () => {\n this._engine.snapshotRendering = true;\n });\n });\n }\n /**\n * Disable snapshot rendering\n * Note that this method is ref-counted and works in pair with disableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\n */\n disableSnapshotRendering() {\n if (!this._engine.isWebGPU) {\n return;\n }\n if (this._disableRenderingRefCount === 0) {\n // Snapshot rendering switches from enabled to disabled\n // We reset the performance priority mode to that which it was before enabling snapshot rendering, but first set it to “BackwardCompatible” to allow the system to regenerate resources that may have been optimized for snapshot rendering.\n // We'll then restore the original mode at the next frame.\n this._scene.performancePriority = 0 /* ScenePerformancePriority.BackwardCompatible */;\n if (this._currentPerformancePriorityMode !== 0 /* ScenePerformancePriority.BackwardCompatible */) {\n this._pendingCurrentPerformancePriorityMode = this._currentPerformancePriorityMode;\n this._scene.executeWhenReady(() => {\n this._executeAtFrame(this._engine.frameId + 2, () => {\n // if this._disableRenderingRefCount === 0, snapshot rendering has been enabled in the meantime, so do nothing\n if (this._disableRenderingRefCount > 0 && this._pendingCurrentPerformancePriorityMode !== undefined) {\n this._scene.performancePriority = this._pendingCurrentPerformancePriorityMode;\n }\n this._pendingCurrentPerformancePriorityMode = undefined;\n }, true);\n });\n }\n }\n this._engine.snapshotRendering = false;\n this._disableRenderingRefCount++;\n }\n /**\n * Fix meshes for snapshot rendering.\n * This method will make sure that some features are disabled or fixed to make sure snapshot rendering works correctly.\n * @param meshes List of meshes to fix. If not provided, all meshes in the scene will be fixed.\n */\n fixMeshes(meshes) {\n if (!this._engine.isWebGPU) {\n return;\n }\n meshes = meshes || this._scene.meshes;\n for (const mesh of meshes) {\n mesh.ignoreCameraMaxZ = false;\n if (mesh.morphTargetManager) {\n mesh.morphTargetManager.numMaxInfluencers = Math.min(mesh.morphTargetManager.numTargets, this._options.morphTargetsNumMaxInfluences);\n }\n }\n }\n /**\n * Call this method to update a mesh on the GPU after some properties have changed (position, rotation, scaling, visibility).\n * @param mesh The mesh to update. Can be a single mesh or an array of meshes to update.\n */\n updateMesh(mesh) {\n if (!this._fastSnapshotRenderingEnabled) {\n return;\n }\n if (Array.isArray(mesh)) {\n for (const m of mesh) {\n m.transferToEffect(m.computeWorldMatrix(true));\n }\n return;\n }\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\n }\n /**\n * Update the meshes used in an effect layer to ensure that snapshot rendering works correctly for these meshes in this layer.\n * @param effectLayer The effect layer\n * @param autoUpdate If true, the helper will automatically update the effect layer meshes with each frame. If false, you'll need to call this method manually when the camera or layer meshes move or rotate.\n */\n updateMeshesForEffectLayer(effectLayer, autoUpdate = true) {\n if (!this._engine.isWebGPU) {\n return;\n }\n const renderPassId = effectLayer.mainTexture.renderPassId;\n if (autoUpdate) {\n this._onBeforeRenderObserverUpdateLayer = this._scene.onBeforeRenderObservable.add(() => {\n this._updateMeshMatricesForRenderPassId(renderPassId);\n });\n } else {\n this._updateMeshMatricesForRenderPassId(renderPassId);\n }\n }\n /**\n * Dispose the helper\n */\n dispose() {\n if (!this._engine.isWebGPU) {\n return;\n }\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserverUpdateLayer);\n this._engine.onResizeObservable.remove(this._onResizeObserver);\n }\n get _fastSnapshotRenderingEnabled() {\n return this._engine.snapshotRendering && this._engine.snapshotRenderingMode === 1;\n }\n _updateMeshMatricesForRenderPassId(renderPassId) {\n if (!this._fastSnapshotRenderingEnabled) {\n return;\n }\n const sceneTransformationMatrix = this._scene.getTransformMatrix();\n for (let i = 0; i < this._scene.meshes.length; ++i) {\n const mesh = this._scene.meshes[i];\n if (!mesh.subMeshes) {\n continue;\n }\n for (let j = 0; j < mesh.subMeshes.length; ++j) {\n const dw = mesh.subMeshes[j]._getDrawWrapper(renderPassId);\n const effect = dw === null || dw === void 0 ? void 0 : dw.effect;\n if (effect) {\n var _effect$_pipelineCont2;\n const dataBuffer = dw.drawContext.buffers[\"LeftOver\"];\n const ubLeftOver = (_effect$_pipelineCont2 = effect._pipelineContext) === null || _effect$_pipelineCont2 === void 0 ? void 0 : _effect$_pipelineCont2.uniformBuffer;\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\n effect.setMatrix(\"viewProjection\", sceneTransformationMatrix);\n effect.setMatrix(\"world\", mesh.computeWorldMatrix());\n ubLeftOver.update();\n }\n }\n }\n }\n }\n _executeAtFrame(frameId, func, executeWhenModeIsDisabled = false) {\n const obs = this._engine.onEndFrameObservable.add(() => {\n if (this._disableRenderingRefCount > 0 && !executeWhenModeIsDisabled || this._disableRenderingRefCount === 0 && executeWhenModeIsDisabled) {\n this._engine.onEndFrameObservable.remove(obs);\n return;\n }\n if (this._engine.frameId >= frameId) {\n this._engine.onEndFrameObservable.remove(obs);\n func();\n }\n });\n }\n}","map":{"version":3,"names":["BindMorphTargetParameters","SnapshotRenderingHelper","constructor","scene","options","_disableRenderingRefCount","_currentPerformancePriorityMode","_scene","_engine","getEngine","isWebGPU","_options","morphTargetsNumMaxInfluences","snapshotRenderingMode","fixMeshes","_onResizeObserver","onResizeObservable","add","disableSnapshotRendering","enableSnapshotRendering","onBeforeRenderObservable","_fastSnapshotRenderingEnabled","skeletons","forEach","skeleton","prepare","mesh","meshes","infiniteDistance","transferToEffect","computeWorldMatrix","getClassName","_postToWorker","morphTargetManager","subMeshes","subMesh","dw","_drawWrapper","effect","_effect$_pipelineCont","dataBuffer","drawContext","buffers","ubLeftOver","_pipelineContext","uniformBuffer","setDataBuffer","_bind","update","_this$_pendingCurrent","_pendingCurrentPerformancePriorityMode","performancePriority","undefined","executeWhenReady","_executeAtFrame","frameId","snapshotRendering","ignoreCameraMaxZ","numMaxInfluencers","Math","min","numTargets","updateMesh","Array","isArray","m","updateMeshesForEffectLayer","effectLayer","autoUpdate","renderPassId","mainTexture","_onBeforeRenderObserverUpdateLayer","_updateMeshMatricesForRenderPassId","dispose","remove","_onBeforeRenderObserver","sceneTransformationMatrix","getTransformMatrix","i","length","j","_getDrawWrapper","_effect$_pipelineCont2","setMatrix","func","executeWhenModeIsDisabled","obs","onEndFrameObservable"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/snapshotRenderingHelper.js"],"sourcesContent":["\nimport { BindMorphTargetParameters } from \"../Materials/materialHelper.functions.js\";\n/**\n * A helper class to simplify work with FAST snapshot mode (WebGPU only - can be used in WebGL too, but won't do anything).\n */\nexport class SnapshotRenderingHelper {\n /**\n * Creates a new snapshot rendering helper\n * Note that creating an instance of the helper will set the snapshot rendering mode to SNAPSHOTRENDERING_FAST but will not enable snapshot rendering (engine.snapshotRendering is not updated).\n * Note also that fixMeshes() is called as part of the construction\n * @param scene The scene to use the helper in\n * @param options The options for the helper\n */\n constructor(scene, options) {\n this._disableRenderingRefCount = 0;\n this._currentPerformancePriorityMode = 0 /* ScenePerformancePriority.BackwardCompatible */;\n this._scene = scene;\n this._engine = scene.getEngine();\n if (!this._engine.isWebGPU) {\n return;\n }\n this._options = {\n morphTargetsNumMaxInfluences: 20,\n ...options,\n };\n this._engine.snapshotRenderingMode = 1;\n this.fixMeshes();\n this._onResizeObserver = this._engine.onResizeObservable.add(() => {\n // enableSnapshotRendering() will delay the actual enabling of snapshot rendering by at least a frame, so these two lines are not redundant!\n this.disableSnapshotRendering();\n this.enableSnapshotRendering();\n });\n this._scene.onBeforeRenderObservable.add(() => {\n if (!this._fastSnapshotRenderingEnabled) {\n return;\n }\n // Animate skeletons\n scene.skeletons.forEach((skeleton) => skeleton.prepare(true));\n for (const mesh of scene.meshes) {\n if (mesh.infiniteDistance) {\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\n }\n if (mesh.skeleton) {\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\n }\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\n mesh._postToWorker();\n }\n if (mesh.morphTargetManager && mesh.subMeshes) {\n // Make sure morph target animations work\n for (const subMesh of mesh.subMeshes) {\n const dw = subMesh._drawWrapper;\n const effect = dw.effect;\n if (effect) {\n const dataBuffer = dw.drawContext.buffers[\"LeftOver\"];\n const ubLeftOver = effect._pipelineContext?.uniformBuffer;\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\n mesh.morphTargetManager._bind(effect);\n BindMorphTargetParameters(mesh, effect);\n ubLeftOver.update();\n }\n }\n }\n }\n }\n });\n }\n /**\n * Enable snapshot rendering\n * Use this method instead of engine.snapshotRendering=true, to make sure everything is ready before enabling snapshot rendering.\n * Note that this method is ref-counted and works in pair with disableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\n */\n enableSnapshotRendering() {\n if (!this._engine.isWebGPU) {\n return;\n }\n if (--this._disableRenderingRefCount > 0) {\n return;\n }\n this._disableRenderingRefCount = 0;\n this._currentPerformancePriorityMode = this._pendingCurrentPerformancePriorityMode ?? this._scene.performancePriority;\n this._pendingCurrentPerformancePriorityMode = undefined;\n this._scene.performancePriority = 0 /* ScenePerformancePriority.BackwardCompatible */;\n this._scene.executeWhenReady(() => {\n if (this._disableRenderingRefCount > 0) {\n return;\n }\n // Make sure a full frame is rendered before enabling snapshot rendering, so use \"+2\" instead of \"+1\"\n this._executeAtFrame(this._engine.frameId + 2, () => {\n this._engine.snapshotRendering = true;\n });\n });\n }\n /**\n * Disable snapshot rendering\n * Note that this method is ref-counted and works in pair with disableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\n */\n disableSnapshotRendering() {\n if (!this._engine.isWebGPU) {\n return;\n }\n if (this._disableRenderingRefCount === 0) {\n // Snapshot rendering switches from enabled to disabled\n // We reset the performance priority mode to that which it was before enabling snapshot rendering, but first set it to “BackwardCompatible” to allow the system to regenerate resources that may have been optimized for snapshot rendering.\n // We'll then restore the original mode at the next frame.\n this._scene.performancePriority = 0 /* ScenePerformancePriority.BackwardCompatible */;\n if (this._currentPerformancePriorityMode !== 0 /* ScenePerformancePriority.BackwardCompatible */) {\n this._pendingCurrentPerformancePriorityMode = this._currentPerformancePriorityMode;\n this._scene.executeWhenReady(() => {\n this._executeAtFrame(this._engine.frameId + 2, () => {\n // if this._disableRenderingRefCount === 0, snapshot rendering has been enabled in the meantime, so do nothing\n if (this._disableRenderingRefCount > 0 && this._pendingCurrentPerformancePriorityMode !== undefined) {\n this._scene.performancePriority = this._pendingCurrentPerformancePriorityMode;\n }\n this._pendingCurrentPerformancePriorityMode = undefined;\n }, true);\n });\n }\n }\n this._engine.snapshotRendering = false;\n this._disableRenderingRefCount++;\n }\n /**\n * Fix meshes for snapshot rendering.\n * This method will make sure that some features are disabled or fixed to make sure snapshot rendering works correctly.\n * @param meshes List of meshes to fix. If not provided, all meshes in the scene will be fixed.\n */\n fixMeshes(meshes) {\n if (!this._engine.isWebGPU) {\n return;\n }\n meshes = meshes || this._scene.meshes;\n for (const mesh of meshes) {\n mesh.ignoreCameraMaxZ = false;\n if (mesh.morphTargetManager) {\n mesh.morphTargetManager.numMaxInfluencers = Math.min(mesh.morphTargetManager.numTargets, this._options.morphTargetsNumMaxInfluences);\n }\n }\n }\n /**\n * Call this method to update a mesh on the GPU after some properties have changed (position, rotation, scaling, visibility).\n * @param mesh The mesh to update. Can be a single mesh or an array of meshes to update.\n */\n updateMesh(mesh) {\n if (!this._fastSnapshotRenderingEnabled) {\n return;\n }\n if (Array.isArray(mesh)) {\n for (const m of mesh) {\n m.transferToEffect(m.computeWorldMatrix(true));\n }\n return;\n }\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\n }\n /**\n * Update the meshes used in an effect layer to ensure that snapshot rendering works correctly for these meshes in this layer.\n * @param effectLayer The effect layer\n * @param autoUpdate If true, the helper will automatically update the effect layer meshes with each frame. If false, you'll need to call this method manually when the camera or layer meshes move or rotate.\n */\n updateMeshesForEffectLayer(effectLayer, autoUpdate = true) {\n if (!this._engine.isWebGPU) {\n return;\n }\n const renderPassId = effectLayer.mainTexture.renderPassId;\n if (autoUpdate) {\n this._onBeforeRenderObserverUpdateLayer = this._scene.onBeforeRenderObservable.add(() => {\n this._updateMeshMatricesForRenderPassId(renderPassId);\n });\n }\n else {\n this._updateMeshMatricesForRenderPassId(renderPassId);\n }\n }\n /**\n * Dispose the helper\n */\n dispose() {\n if (!this._engine.isWebGPU) {\n return;\n }\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserverUpdateLayer);\n this._engine.onResizeObservable.remove(this._onResizeObserver);\n }\n get _fastSnapshotRenderingEnabled() {\n return this._engine.snapshotRendering && this._engine.snapshotRenderingMode === 1;\n }\n _updateMeshMatricesForRenderPassId(renderPassId) {\n if (!this._fastSnapshotRenderingEnabled) {\n return;\n }\n const sceneTransformationMatrix = this._scene.getTransformMatrix();\n for (let i = 0; i < this._scene.meshes.length; ++i) {\n const mesh = this._scene.meshes[i];\n if (!mesh.subMeshes) {\n continue;\n }\n for (let j = 0; j < mesh.subMeshes.length; ++j) {\n const dw = mesh.subMeshes[j]._getDrawWrapper(renderPassId);\n const effect = dw?.effect;\n if (effect) {\n const dataBuffer = dw.drawContext.buffers[\"LeftOver\"];\n const ubLeftOver = effect._pipelineContext?.uniformBuffer;\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\n effect.setMatrix(\"viewProjection\", sceneTransformationMatrix);\n effect.setMatrix(\"world\", mesh.computeWorldMatrix());\n ubLeftOver.update();\n }\n }\n }\n }\n }\n _executeAtFrame(frameId, func, executeWhenModeIsDisabled = false) {\n const obs = this._engine.onEndFrameObservable.add(() => {\n if ((this._disableRenderingRefCount > 0 && !executeWhenModeIsDisabled) || (this._disableRenderingRefCount === 0 && executeWhenModeIsDisabled)) {\n this._engine.onEndFrameObservable.remove(obs);\n return;\n }\n if (this._engine.frameId >= frameId) {\n this._engine.onEndFrameObservable.remove(obs);\n func();\n }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|