{"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { Scene } from \"../scene.js\";\nimport { VertexBuffer } from \"../Buffers/buffer.js\";\nimport { AbstractMesh } from \"../Meshes/abstractMesh.js\";\nimport { Matrix } from \"../Maths/math.vector.js\";\nimport { SmartArray } from \"../Misc/smartArray.js\";\nimport { SceneComponentConstants } from \"../sceneComponent.js\";\nimport { Material } from \"../Materials/material.js\";\nimport { ShaderMaterial } from \"../Materials/shaderMaterial.js\";\nimport { Color3 } from \"../Maths/math.color.js\";\nimport { Observable } from \"../Misc/observable.js\";\nimport { DrawWrapper } from \"../Materials/drawWrapper.js\";\nimport { UniformBuffer } from \"../Materials/uniformBuffer.js\";\nimport { CreateBoxVertexData } from \"../Meshes/Builders/boxBuilder.js\";\nObject.defineProperty(Scene.prototype, \"forceShowBoundingBoxes\", {\n get: function () {\n return this._forceShowBoundingBoxes || false;\n },\n set: function (value) {\n this._forceShowBoundingBoxes = value;\n // Lazyly creates a BB renderer if needed.\n if (value) {\n this.getBoundingBoxRenderer();\n }\n },\n enumerable: true,\n configurable: true\n});\nScene.prototype.getBoundingBoxRenderer = function () {\n if (!this._boundingBoxRenderer) {\n this._boundingBoxRenderer = new BoundingBoxRenderer(this);\n }\n return this._boundingBoxRenderer;\n};\nObject.defineProperty(AbstractMesh.prototype, \"showBoundingBox\", {\n get: function () {\n return this._showBoundingBox || false;\n },\n set: function (value) {\n this._showBoundingBox = value;\n // Lazyly creates a BB renderer if needed.\n if (value) {\n this.getScene().getBoundingBoxRenderer();\n }\n },\n enumerable: true,\n configurable: true\n});\n/**\n * Component responsible of rendering the bounding box of the meshes in a scene.\n * This is usually used through the mesh.showBoundingBox or the scene.forceShowBoundingBoxes properties\n */\nexport class BoundingBoxRenderer {\n /**\n * Gets the shader language used in this renderer.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Instantiates a new bounding box renderer in a scene.\n * @param scene the scene the renderer renders in\n */\n constructor(scene) {\n /**\n * The component name helpful to identify the component in the list of scene components.\n */\n this.name = SceneComponentConstants.NAME_BOUNDINGBOXRENDERER;\n /**\n * Color of the bounding box lines placed in front of an object\n */\n this.frontColor = new Color3(1, 1, 1);\n /**\n * Color of the bounding box lines placed behind an object\n */\n this.backColor = new Color3(0.1, 0.1, 0.1);\n /**\n * Defines if the renderer should show the back lines or not\n */\n this.showBackLines = true;\n /**\n * Observable raised before rendering a bounding box\n */\n this.onBeforeBoxRenderingObservable = new Observable();\n /**\n * Observable raised after rendering a bounding box\n */\n this.onAfterBoxRenderingObservable = new Observable();\n /**\n * Observable raised after resources are created\n */\n this.onResourcesReadyObservable = new Observable();\n /**\n * When false, no bounding boxes will be rendered\n */\n this.enabled = true;\n /** Shader language used by the renderer */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n /**\n * @internal\n */\n this.renderList = new SmartArray(32);\n this._vertexBuffers = {};\n this._fillIndexBuffer = null;\n this._fillIndexData = null;\n this.scene = scene;\n const engine = this.scene.getEngine();\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n scene._addComponent(this);\n this._uniformBufferFront = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererFront\", true);\n this._buildUniformLayout(this._uniformBufferFront);\n this._uniformBufferBack = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererBack\", true);\n this._buildUniformLayout(this._uniformBufferBack);\n }\n _buildUniformLayout(ubo) {\n ubo.addUniform(\"color\", 4);\n ubo.addUniform(\"world\", 16);\n ubo.addUniform(\"viewProjection\", 16);\n ubo.addUniform(\"viewProjectionR\", 16);\n ubo.create();\n }\n /**\n * Registers the component in a given scene\n */\n register() {\n this.scene._beforeEvaluateActiveMeshStage.registerStep(SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset);\n this.scene._preActiveMeshStage.registerStep(SceneComponentConstants.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER, this, this._preActiveMesh);\n this.scene._evaluateSubMeshStage.registerStep(SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh);\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render);\n }\n _evaluateSubMesh(mesh, subMesh) {\n if (mesh.showSubMeshesBoundingBox) {\n const boundingInfo = subMesh.getBoundingInfo();\n if (boundingInfo !== null && boundingInfo !== undefined) {\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\n this.renderList.push(boundingInfo.boundingBox);\n }\n }\n }\n _preActiveMesh(mesh) {\n if (mesh.showBoundingBox || this.scene.forceShowBoundingBoxes) {\n const boundingInfo = mesh.getBoundingInfo();\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\n this.renderList.push(boundingInfo.boundingBox);\n }\n }\n _prepareResources() {\n var _this = this;\n if (this._colorShader) {\n return;\n }\n this._colorShader = new ShaderMaterial(\"colorShader\", this.scene, \"boundingBoxRenderer\", {\n attributes: [VertexBuffer.PositionKind],\n uniforms: [\"world\", \"viewProjection\", \"viewProjectionR\", \"color\"],\n uniformBuffers: [\"BoundingBoxRenderer\"],\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: function () {\n var _ref = _asyncToGenerator(function* () {\n if (_this._shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n yield Promise.all([import(\"../ShadersWGSL/boundingBoxRenderer.vertex.js\"), import(\"../ShadersWGSL/boundingBoxRenderer.fragment.js\")]);\n } else {\n yield Promise.all([import(\"../Shaders/boundingBoxRenderer.vertex.js\"), import(\"../Shaders/boundingBoxRenderer.fragment.js\")]);\n }\n });\n return function extraInitializationsAsync() {\n return _ref.apply(this, arguments);\n };\n }()\n }, false);\n this._colorShader.doNotSerialize = true;\n this._colorShader.reservedDataStore = {\n hidden: true\n };\n this._colorShaderForOcclusionQuery = new ShaderMaterial(\"colorShaderOccQuery\", this.scene, \"boundingBoxRenderer\", {\n attributes: [VertexBuffer.PositionKind],\n uniforms: [\"world\", \"viewProjection\", \"viewProjectionR\", \"color\"],\n uniformBuffers: [\"BoundingBoxRenderer\"],\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: function () {\n var _ref2 = _asyncToGenerator(function* () {\n if (_this._shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n yield Promise.all([import(\"../ShadersWGSL/boundingBoxRenderer.vertex.js\"), import(\"../ShadersWGSL/boundingBoxRenderer.fragment.js\")]);\n } else {\n yield Promise.all([import(\"../Shaders/boundingBoxRenderer.vertex.js\"), import(\"../Shaders/boundingBoxRenderer.fragment.js\")]);\n }\n });\n return function extraInitializationsAsync() {\n return _ref2.apply(this, arguments);\n };\n }()\n }, true);\n this._colorShaderForOcclusionQuery.doNotSerialize = true;\n this._colorShaderForOcclusionQuery.reservedDataStore = {\n hidden: true\n };\n const engine = this.scene.getEngine();\n const boxdata = CreateBoxVertexData({\n size: 1.0\n });\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, boxdata.positions, VertexBuffer.PositionKind, false);\n this._createIndexBuffer();\n this._fillIndexData = boxdata.indices;\n this.onResourcesReadyObservable.notifyObservers(this);\n }\n _createIndexBuffer() {\n const engine = this.scene.getEngine();\n this._indexBuffer = engine.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4]);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\n if (vb) {\n vb._rebuild();\n }\n this._createIndexBuffer();\n }\n /**\n * @internal\n */\n reset() {\n this.renderList.reset();\n }\n /**\n * Render the bounding boxes of a specific rendering group\n * @param renderingGroupId defines the rendering group to render\n */\n render(renderingGroupId) {\n if (this.renderList.length === 0 || !this.enabled) {\n return;\n }\n this._prepareResources();\n if (!this._colorShader.isReady()) {\n return;\n }\n const engine = this.scene.getEngine();\n engine.setDepthWrite(false);\n const transformMatrix = this.scene.getTransformMatrix();\n for (let boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {\n var _boundingBox$_drawWra2;\n const boundingBox = this.renderList.data[boundingBoxIndex];\n if (boundingBox._tag !== renderingGroupId) {\n continue;\n }\n this._createWrappersForBoundingBox(boundingBox);\n this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);\n const min = boundingBox.minimum;\n const max = boundingBox.maximum;\n const diff = max.subtract(min);\n const median = min.add(diff.scale(0.5));\n const worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z).multiply(Matrix.Translation(median.x, median.y, median.z)).multiply(boundingBox.getWorldMatrix());\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\n if (this.showBackLines) {\n var _boundingBox$_drawWra;\n const drawWrapperBack = (_boundingBox$_drawWra = boundingBox._drawWrapperBack) !== null && _boundingBox$_drawWra !== void 0 ? _boundingBox$_drawWra : this._colorShader._getDrawWrapper();\n this._colorShader._preBind(drawWrapperBack);\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());\n // Back\n if (useReverseDepthBuffer) {\n engine.setDepthFunctionToLessOrEqual();\n } else {\n engine.setDepthFunctionToGreaterOrEqual();\n }\n this._uniformBufferBack.bindToEffect(drawWrapperBack.effect, \"BoundingBoxRenderer\");\n this._uniformBufferBack.updateColor4(\"color\", this.backColor, 1);\n this._uniformBufferBack.updateMatrix(\"world\", worldMatrix);\n this._uniformBufferBack.updateMatrix(\"viewProjection\", transformMatrix);\n this._uniformBufferBack.update();\n // Draw order\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\n }\n const drawWrapperFront = (_boundingBox$_drawWra2 = boundingBox._drawWrapperFront) !== null && _boundingBox$_drawWra2 !== void 0 ? _boundingBox$_drawWra2 : this._colorShader._getDrawWrapper();\n this._colorShader._preBind(drawWrapperFront);\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());\n // Front\n if (useReverseDepthBuffer) {\n engine.setDepthFunctionToGreater();\n } else {\n engine.setDepthFunctionToLess();\n }\n this._uniformBufferFront.bindToEffect(drawWrapperFront.effect, \"BoundingBoxRenderer\");\n this._uniformBufferFront.updateColor4(\"color\", this.frontColor, 1);\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\n this._uniformBufferFront.updateMatrix(\"viewProjection\", transformMatrix);\n this._uniformBufferFront.update();\n // Draw order\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\n this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);\n }\n this._colorShader.unbind();\n engine.setDepthFunctionToLessOrEqual();\n engine.setDepthWrite(true);\n }\n _createWrappersForBoundingBox(boundingBox) {\n if (!boundingBox._drawWrapperFront) {\n const engine = this.scene.getEngine();\n boundingBox._drawWrapperFront = new DrawWrapper(engine);\n boundingBox._drawWrapperBack = new DrawWrapper(engine);\n boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());\n boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());\n }\n }\n /**\n * In case of occlusion queries, we can render the occlusion bounding box through this method\n * @param mesh Define the mesh to render the occlusion bounding box for\n */\n renderOcclusionBoundingBox(mesh) {\n const engine = this.scene.getEngine();\n if (this._renderPassIdForOcclusionQuery === undefined) {\n this._renderPassIdForOcclusionQuery = engine.createRenderPassId(`Render pass for occlusion query`);\n }\n const currentRenderPassId = engine.currentRenderPassId;\n engine.currentRenderPassId = this._renderPassIdForOcclusionQuery;\n this._prepareResources();\n const subMesh = mesh.subMeshes[0];\n if (!this._colorShaderForOcclusionQuery.isReady(mesh, undefined, subMesh) || !mesh.hasBoundingInfo) {\n engine.currentRenderPassId = currentRenderPassId;\n return;\n }\n if (!this._fillIndexBuffer) {\n this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData);\n }\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\n engine.setDepthWrite(false);\n engine.setColorWrite(false);\n const boundingBox = mesh.getBoundingInfo().boundingBox;\n const min = boundingBox.minimum;\n const max = boundingBox.maximum;\n const diff = max.subtract(min);\n const median = min.add(diff.scale(0.5));\n const worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z).multiply(Matrix.Translation(median.x, median.y, median.z)).multiply(boundingBox.getWorldMatrix());\n const drawWrapper = subMesh._drawWrapper;\n this._colorShaderForOcclusionQuery._preBind(drawWrapper);\n engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, drawWrapper.effect);\n if (useReverseDepthBuffer) {\n engine.setDepthFunctionToGreater();\n } else {\n engine.setDepthFunctionToLess();\n }\n this.scene.resetCachedMaterial();\n this._uniformBufferFront.bindToEffect(drawWrapper.effect, \"BoundingBoxRenderer\");\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\n this._uniformBufferFront.updateMatrix(\"viewProjection\", this.scene.getTransformMatrix());\n this._uniformBufferFront.update();\n engine.drawElementsType(Material.TriangleFillMode, 0, 36);\n this._colorShaderForOcclusionQuery.unbind();\n engine.setDepthFunctionToLessOrEqual();\n engine.setDepthWrite(true);\n engine.setColorWrite(true);\n engine.currentRenderPassId = currentRenderPassId;\n }\n /**\n * Dispose and release the resources attached to this renderer.\n */\n dispose() {\n if (this._renderPassIdForOcclusionQuery !== undefined) {\n this.scene.getEngine().releaseRenderPassId(this._renderPassIdForOcclusionQuery);\n this._renderPassIdForOcclusionQuery = undefined;\n }\n if (!this._colorShader) {\n return;\n }\n this.onBeforeBoxRenderingObservable.clear();\n this.onAfterBoxRenderingObservable.clear();\n this.onResourcesReadyObservable.clear();\n this.renderList.dispose();\n this._colorShader.dispose();\n this._colorShaderForOcclusionQuery.dispose();\n this._uniformBufferFront.dispose();\n this._uniformBufferBack.dispose();\n const buffer = this._vertexBuffers[VertexBuffer.PositionKind];\n if (buffer) {\n buffer.dispose();\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\n }\n this.scene.getEngine()._releaseBuffer(this._indexBuffer);\n if (this._fillIndexBuffer) {\n this.scene.getEngine()._releaseBuffer(this._fillIndexBuffer);\n this._fillIndexBuffer = null;\n }\n }\n}","map":{"version":3,"names":["Scene","VertexBuffer","AbstractMesh","Matrix","SmartArray","SceneComponentConstants","Material","ShaderMaterial","Color3","Observable","DrawWrapper","UniformBuffer","CreateBoxVertexData","Object","defineProperty","prototype","get","_forceShowBoundingBoxes","set","value","getBoundingBoxRenderer","enumerable","configurable","_boundingBoxRenderer","BoundingBoxRenderer","_showBoundingBox","getScene","shaderLanguage","_shaderLanguage","constructor","scene","name","NAME_BOUNDINGBOXRENDERER","frontColor","backColor","showBackLines","onBeforeBoxRenderingObservable","onAfterBoxRenderingObservable","onResourcesReadyObservable","enabled","renderList","_vertexBuffers","_fillIndexBuffer","_fillIndexData","engine","getEngine","isWebGPU","_addComponent","_uniformBufferFront","undefined","_buildUniformLayout","_uniformBufferBack","ubo","addUniform","create","register","_beforeEvaluateActiveMeshStage","registerStep","STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER","reset","_preActiveMeshStage","STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER","_preActiveMesh","_evaluateSubMeshStage","STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER","_evaluateSubMesh","_afterRenderingGroupDrawStage","STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER","render","mesh","subMesh","showSubMeshesBoundingBox","boundingInfo","getBoundingInfo","boundingBox","_tag","renderingGroupId","push","showBoundingBox","forceShowBoundingBoxes","_prepareResources","_this","_colorShader","attributes","PositionKind","uniforms","uniformBuffers","extraInitializationsAsync","_ref","_asyncToGenerator","Promise","all","apply","arguments","doNotSerialize","reservedDataStore","hidden","_colorShaderForOcclusionQuery","_ref2","boxdata","size","positions","_createIndexBuffer","indices","notifyObservers","_indexBuffer","createIndexBuffer","rebuild","vb","_rebuild","length","isReady","setDepthWrite","transformMatrix","getTransformMatrix","boundingBoxIndex","_boundingBox$_drawWra2","data","_createWrappersForBoundingBox","min","minimum","max","maximum","diff","subtract","median","add","scale","worldMatrix","Scaling","x","y","z","multiply","Translation","getWorldMatrix","useReverseDepthBuffer","_boundingBox$_drawWra","drawWrapperBack","_drawWrapperBack","_getDrawWrapper","_preBind","bindBuffers","getEffect","setDepthFunctionToLessOrEqual","setDepthFunctionToGreaterOrEqual","bindToEffect","effect","updateColor4","updateMatrix","update","drawElementsType","LineListDrawMode","drawWrapperFront","_drawWrapperFront","setDepthFunctionToGreater","setDepthFunctionToLess","unbind","setEffect","renderOcclusionBoundingBox","_renderPassIdForOcclusionQuery","createRenderPassId","currentRenderPassId","subMeshes","hasBoundingInfo","setColorWrite","drawWrapper","_drawWrapper","resetCachedMaterial","TriangleFillMode","dispose","releaseRenderPassId","clear","buffer","_releaseBuffer"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Rendering/boundingBoxRenderer.js"],"sourcesContent":["import { Scene } from \"../scene.js\";\nimport { VertexBuffer } from \"../Buffers/buffer.js\";\nimport { AbstractMesh } from \"../Meshes/abstractMesh.js\";\nimport { Matrix } from \"../Maths/math.vector.js\";\nimport { SmartArray } from \"../Misc/smartArray.js\";\nimport { SceneComponentConstants } from \"../sceneComponent.js\";\nimport { Material } from \"../Materials/material.js\";\nimport { ShaderMaterial } from \"../Materials/shaderMaterial.js\";\nimport { Color3 } from \"../Maths/math.color.js\";\nimport { Observable } from \"../Misc/observable.js\";\nimport { DrawWrapper } from \"../Materials/drawWrapper.js\";\nimport { UniformBuffer } from \"../Materials/uniformBuffer.js\";\nimport { CreateBoxVertexData } from \"../Meshes/Builders/boxBuilder.js\";\nObject.defineProperty(Scene.prototype, \"forceShowBoundingBoxes\", {\n get: function () {\n return this._forceShowBoundingBoxes || false;\n },\n set: function (value) {\n this._forceShowBoundingBoxes = value;\n // Lazyly creates a BB renderer if needed.\n if (value) {\n this.getBoundingBoxRenderer();\n }\n },\n enumerable: true,\n configurable: true,\n});\nScene.prototype.getBoundingBoxRenderer = function () {\n if (!this._boundingBoxRenderer) {\n this._boundingBoxRenderer = new BoundingBoxRenderer(this);\n }\n return this._boundingBoxRenderer;\n};\nObject.defineProperty(AbstractMesh.prototype, \"showBoundingBox\", {\n get: function () {\n return this._showBoundingBox || false;\n },\n set: function (value) {\n this._showBoundingBox = value;\n // Lazyly creates a BB renderer if needed.\n if (value) {\n this.getScene().getBoundingBoxRenderer();\n }\n },\n enumerable: true,\n configurable: true,\n});\n/**\n * Component responsible of rendering the bounding box of the meshes in a scene.\n * This is usually used through the mesh.showBoundingBox or the scene.forceShowBoundingBoxes properties\n */\nexport class BoundingBoxRenderer {\n /**\n * Gets the shader language used in this renderer.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Instantiates a new bounding box renderer in a scene.\n * @param scene the scene the renderer renders in\n */\n constructor(scene) {\n /**\n * The component name helpful to identify the component in the list of scene components.\n */\n this.name = SceneComponentConstants.NAME_BOUNDINGBOXRENDERER;\n /**\n * Color of the bounding box lines placed in front of an object\n */\n this.frontColor = new Color3(1, 1, 1);\n /**\n * Color of the bounding box lines placed behind an object\n */\n this.backColor = new Color3(0.1, 0.1, 0.1);\n /**\n * Defines if the renderer should show the back lines or not\n */\n this.showBackLines = true;\n /**\n * Observable raised before rendering a bounding box\n */\n this.onBeforeBoxRenderingObservable = new Observable();\n /**\n * Observable raised after rendering a bounding box\n */\n this.onAfterBoxRenderingObservable = new Observable();\n /**\n * Observable raised after resources are created\n */\n this.onResourcesReadyObservable = new Observable();\n /**\n * When false, no bounding boxes will be rendered\n */\n this.enabled = true;\n /** Shader language used by the renderer */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n /**\n * @internal\n */\n this.renderList = new SmartArray(32);\n this._vertexBuffers = {};\n this._fillIndexBuffer = null;\n this._fillIndexData = null;\n this.scene = scene;\n const engine = this.scene.getEngine();\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n scene._addComponent(this);\n this._uniformBufferFront = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererFront\", true);\n this._buildUniformLayout(this._uniformBufferFront);\n this._uniformBufferBack = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererBack\", true);\n this._buildUniformLayout(this._uniformBufferBack);\n }\n _buildUniformLayout(ubo) {\n ubo.addUniform(\"color\", 4);\n ubo.addUniform(\"world\", 16);\n ubo.addUniform(\"viewProjection\", 16);\n ubo.addUniform(\"viewProjectionR\", 16);\n ubo.create();\n }\n /**\n * Registers the component in a given scene\n */\n register() {\n this.scene._beforeEvaluateActiveMeshStage.registerStep(SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset);\n this.scene._preActiveMeshStage.registerStep(SceneComponentConstants.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER, this, this._preActiveMesh);\n this.scene._evaluateSubMeshStage.registerStep(SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh);\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render);\n }\n _evaluateSubMesh(mesh, subMesh) {\n if (mesh.showSubMeshesBoundingBox) {\n const boundingInfo = subMesh.getBoundingInfo();\n if (boundingInfo !== null && boundingInfo !== undefined) {\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\n this.renderList.push(boundingInfo.boundingBox);\n }\n }\n }\n _preActiveMesh(mesh) {\n if (mesh.showBoundingBox || this.scene.forceShowBoundingBoxes) {\n const boundingInfo = mesh.getBoundingInfo();\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\n this.renderList.push(boundingInfo.boundingBox);\n }\n }\n _prepareResources() {\n if (this._colorShader) {\n return;\n }\n this._colorShader = new ShaderMaterial(\"colorShader\", this.scene, \"boundingBoxRenderer\", {\n attributes: [VertexBuffer.PositionKind],\n uniforms: [\"world\", \"viewProjection\", \"viewProjectionR\", \"color\"],\n uniformBuffers: [\"BoundingBoxRenderer\"],\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: async () => {\n if (this._shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n await Promise.all([import(\"../ShadersWGSL/boundingBoxRenderer.vertex.js\"), import(\"../ShadersWGSL/boundingBoxRenderer.fragment.js\")]);\n }\n else {\n await Promise.all([import(\"../Shaders/boundingBoxRenderer.vertex.js\"), import(\"../Shaders/boundingBoxRenderer.fragment.js\")]);\n }\n },\n }, false);\n this._colorShader.doNotSerialize = true;\n this._colorShader.reservedDataStore = {\n hidden: true,\n };\n this._colorShaderForOcclusionQuery = new ShaderMaterial(\"colorShaderOccQuery\", this.scene, \"boundingBoxRenderer\", {\n attributes: [VertexBuffer.PositionKind],\n uniforms: [\"world\", \"viewProjection\", \"viewProjectionR\", \"color\"],\n uniformBuffers: [\"BoundingBoxRenderer\"],\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: async () => {\n if (this._shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n await Promise.all([import(\"../ShadersWGSL/boundingBoxRenderer.vertex.js\"), import(\"../ShadersWGSL/boundingBoxRenderer.fragment.js\")]);\n }\n else {\n await Promise.all([import(\"../Shaders/boundingBoxRenderer.vertex.js\"), import(\"../Shaders/boundingBoxRenderer.fragment.js\")]);\n }\n },\n }, true);\n this._colorShaderForOcclusionQuery.doNotSerialize = true;\n this._colorShaderForOcclusionQuery.reservedDataStore = {\n hidden: true,\n };\n const engine = this.scene.getEngine();\n const boxdata = CreateBoxVertexData({ size: 1.0 });\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, boxdata.positions, VertexBuffer.PositionKind, false);\n this._createIndexBuffer();\n this._fillIndexData = boxdata.indices;\n this.onResourcesReadyObservable.notifyObservers(this);\n }\n _createIndexBuffer() {\n const engine = this.scene.getEngine();\n this._indexBuffer = engine.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4]);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\n if (vb) {\n vb._rebuild();\n }\n this._createIndexBuffer();\n }\n /**\n * @internal\n */\n reset() {\n this.renderList.reset();\n }\n /**\n * Render the bounding boxes of a specific rendering group\n * @param renderingGroupId defines the rendering group to render\n */\n render(renderingGroupId) {\n if (this.renderList.length === 0 || !this.enabled) {\n return;\n }\n this._prepareResources();\n if (!this._colorShader.isReady()) {\n return;\n }\n const engine = this.scene.getEngine();\n engine.setDepthWrite(false);\n const transformMatrix = this.scene.getTransformMatrix();\n for (let boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {\n const boundingBox = this.renderList.data[boundingBoxIndex];\n if (boundingBox._tag !== renderingGroupId) {\n continue;\n }\n this._createWrappersForBoundingBox(boundingBox);\n this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);\n const min = boundingBox.minimum;\n const max = boundingBox.maximum;\n const diff = max.subtract(min);\n const median = min.add(diff.scale(0.5));\n const worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\n .multiply(Matrix.Translation(median.x, median.y, median.z))\n .multiply(boundingBox.getWorldMatrix());\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\n if (this.showBackLines) {\n const drawWrapperBack = boundingBox._drawWrapperBack ?? this._colorShader._getDrawWrapper();\n this._colorShader._preBind(drawWrapperBack);\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());\n // Back\n if (useReverseDepthBuffer) {\n engine.setDepthFunctionToLessOrEqual();\n }\n else {\n engine.setDepthFunctionToGreaterOrEqual();\n }\n this._uniformBufferBack.bindToEffect(drawWrapperBack.effect, \"BoundingBoxRenderer\");\n this._uniformBufferBack.updateColor4(\"color\", this.backColor, 1);\n this._uniformBufferBack.updateMatrix(\"world\", worldMatrix);\n this._uniformBufferBack.updateMatrix(\"viewProjection\", transformMatrix);\n this._uniformBufferBack.update();\n // Draw order\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\n }\n const drawWrapperFront = boundingBox._drawWrapperFront ?? this._colorShader._getDrawWrapper();\n this._colorShader._preBind(drawWrapperFront);\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());\n // Front\n if (useReverseDepthBuffer) {\n engine.setDepthFunctionToGreater();\n }\n else {\n engine.setDepthFunctionToLess();\n }\n this._uniformBufferFront.bindToEffect(drawWrapperFront.effect, \"BoundingBoxRenderer\");\n this._uniformBufferFront.updateColor4(\"color\", this.frontColor, 1);\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\n this._uniformBufferFront.updateMatrix(\"viewProjection\", transformMatrix);\n this._uniformBufferFront.update();\n // Draw order\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\n this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);\n }\n this._colorShader.unbind();\n engine.setDepthFunctionToLessOrEqual();\n engine.setDepthWrite(true);\n }\n _createWrappersForBoundingBox(boundingBox) {\n if (!boundingBox._drawWrapperFront) {\n const engine = this.scene.getEngine();\n boundingBox._drawWrapperFront = new DrawWrapper(engine);\n boundingBox._drawWrapperBack = new DrawWrapper(engine);\n boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());\n boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());\n }\n }\n /**\n * In case of occlusion queries, we can render the occlusion bounding box through this method\n * @param mesh Define the mesh to render the occlusion bounding box for\n */\n renderOcclusionBoundingBox(mesh) {\n const engine = this.scene.getEngine();\n if (this._renderPassIdForOcclusionQuery === undefined) {\n this._renderPassIdForOcclusionQuery = engine.createRenderPassId(`Render pass for occlusion query`);\n }\n const currentRenderPassId = engine.currentRenderPassId;\n engine.currentRenderPassId = this._renderPassIdForOcclusionQuery;\n this._prepareResources();\n const subMesh = mesh.subMeshes[0];\n if (!this._colorShaderForOcclusionQuery.isReady(mesh, undefined, subMesh) || !mesh.hasBoundingInfo) {\n engine.currentRenderPassId = currentRenderPassId;\n return;\n }\n if (!this._fillIndexBuffer) {\n this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData);\n }\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\n engine.setDepthWrite(false);\n engine.setColorWrite(false);\n const boundingBox = mesh.getBoundingInfo().boundingBox;\n const min = boundingBox.minimum;\n const max = boundingBox.maximum;\n const diff = max.subtract(min);\n const median = min.add(diff.scale(0.5));\n const worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\n .multiply(Matrix.Translation(median.x, median.y, median.z))\n .multiply(boundingBox.getWorldMatrix());\n const drawWrapper = subMesh._drawWrapper;\n this._colorShaderForOcclusionQuery._preBind(drawWrapper);\n engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, drawWrapper.effect);\n if (useReverseDepthBuffer) {\n engine.setDepthFunctionToGreater();\n }\n else {\n engine.setDepthFunctionToLess();\n }\n this.scene.resetCachedMaterial();\n this._uniformBufferFront.bindToEffect(drawWrapper.effect, \"BoundingBoxRenderer\");\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\n this._uniformBufferFront.updateMatrix(\"viewProjection\", this.scene.getTransformMatrix());\n this._uniformBufferFront.update();\n engine.drawElementsType(Material.TriangleFillMode, 0, 36);\n this._colorShaderForOcclusionQuery.unbind();\n engine.setDepthFunctionToLessOrEqual();\n engine.setDepthWrite(true);\n engine.setColorWrite(true);\n engine.currentRenderPassId = currentRenderPassId;\n }\n /**\n * Dispose and release the resources attached to this renderer.\n */\n dispose() {\n if (this._renderPassIdForOcclusionQuery !== undefined) {\n this.scene.getEngine().releaseRenderPassId(this._renderPassIdForOcclusionQuery);\n this._renderPassIdForOcclusionQuery = undefined;\n }\n if (!this._colorShader) {\n return;\n }\n this.onBeforeBoxRenderingObservable.clear();\n this.onAfterBoxRenderingObservable.clear();\n this.onResourcesReadyObservable.clear();\n this.renderList.dispose();\n this._colorShader.dispose();\n this._colorShaderForOcclusionQuery.dispose();\n this._uniformBufferFront.dispose();\n this._uniformBufferBack.dispose();\n const buffer = this._vertexBuffers[VertexBuffer.PositionKind];\n if (buffer) {\n buffer.dispose();\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\n }\n this.scene.getEngine()._releaseBuffer(this._indexBuffer);\n if (this._fillIndexBuffer) {\n this.scene.getEngine()._releaseBuffer(this._fillIndexBuffer);\n this._fillIndexBuffer = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}