0c12786e5bc6c7ba0a58695952762f9e0bd51c0a795aa7bd8ce54fe65c4e2e4d.json 47 KB

1
  1. {"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { VertexBuffer } from \"../Buffers/buffer.js\";\nimport { Mesh } from \"../Meshes/mesh.js\";\nimport { Scene } from \"../scene.js\";\nimport { SceneComponentConstants } from \"../sceneComponent.js\";\nimport { DrawWrapper } from \"../Materials/drawWrapper.js\";\nimport { addClipPlaneUniforms, bindClipPlane, prepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper.js\";\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareAttributesForMorphTargetsInfluencers, PushAttributesForInstances } from \"../Materials/materialHelper.functions.js\";\nimport { EffectFallbacks } from \"../Materials/effectFallbacks.js\";\n/**\n * Gets the outline renderer associated with the scene\n * @returns a OutlineRenderer\n */\nScene.prototype.getOutlineRenderer = function () {\n if (!this._outlineRenderer) {\n this._outlineRenderer = new OutlineRenderer(this);\n }\n return this._outlineRenderer;\n};\nObject.defineProperty(Mesh.prototype, \"renderOutline\", {\n get: function () {\n return this._renderOutline;\n },\n set: function (value) {\n if (value) {\n // Lazy Load the component.\n this.getScene().getOutlineRenderer();\n }\n this._renderOutline = value;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(Mesh.prototype, \"renderOverlay\", {\n get: function () {\n return this._renderOverlay;\n },\n set: function (value) {\n if (value) {\n // Lazy Load the component.\n this.getScene().getOutlineRenderer();\n }\n this._renderOverlay = value;\n },\n enumerable: true,\n configurable: true\n});\n/**\n * This class is responsible to draw the outline/overlay of meshes.\n * It should not be used directly but through the available method on mesh.\n */\nexport class OutlineRenderer {\n /**\n * Gets the shader language used in the Outline renderer.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Instantiates a new outline renderer. (There could be only one per scene).\n * @param scene Defines the scene it belongs to\n */\n constructor(scene) {\n /**\n * The name of the component. Each component must have a unique name.\n */\n this.name = SceneComponentConstants.NAME_OUTLINERENDERER;\n /**\n * Defines a zOffset default Factor to prevent zFighting between the overlay and the mesh.\n */\n this.zOffset = 1;\n /**\n * Defines a zOffset default Unit to prevent zFighting between the overlay and the mesh.\n */\n this.zOffsetUnits = 4; // 4 to account for projection a bit by default\n /** Shader language used by the Outline renderer. */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this.scene = scene;\n this._engine = scene.getEngine();\n this.scene._addComponent(this);\n this._passIdForDrawWrapper = [];\n for (let i = 0; i < 4; ++i) {\n this._passIdForDrawWrapper[i] = this._engine.createRenderPassId(`Outline Renderer (${i})`);\n }\n const engine = this._engine;\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n }\n /**\n * Register the component to one instance of a scene.\n */\n register() {\n this.scene._beforeRenderingMeshStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERINGMESH_OUTLINE, this, this._beforeRenderingMesh);\n this.scene._afterRenderingMeshStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGMESH_OUTLINE, this, this._afterRenderingMesh);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n // Nothing to do here.\n }\n /**\n * Disposes the component and the associated resources.\n */\n dispose() {\n for (let i = 0; i < this._passIdForDrawWrapper.length; ++i) {\n this._engine.releaseRenderPassId(this._passIdForDrawWrapper[i]);\n }\n }\n /**\n * Renders the outline in the canvas.\n * @param subMesh Defines the sumesh to render\n * @param batch Defines the batch of meshes in case of instances\n * @param useOverlay Defines if the rendering is for the overlay or the outline\n * @param renderPassId Render pass id to use to render the mesh\n */\n render(subMesh, batch, useOverlay = false, renderPassId) {\n var _renderPassId;\n renderPassId = (_renderPassId = renderPassId) !== null && _renderPassId !== void 0 ? _renderPassId : this._passIdForDrawWrapper[0];\n const scene = this.scene;\n const engine = scene.getEngine();\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined || subMesh.getRenderingMesh().hasThinInstances);\n if (!this.isReady(subMesh, hardwareInstancedRendering, renderPassId)) {\n return;\n }\n const ownerMesh = subMesh.getMesh();\n const replacementMesh = ownerMesh._internalAbstractMeshDataInfo._actAsRegularMesh ? ownerMesh : null;\n const renderingMesh = subMesh.getRenderingMesh();\n const effectiveMesh = replacementMesh ? replacementMesh : renderingMesh;\n const material = subMesh.getMaterial();\n if (!material || !scene.activeCamera) {\n return;\n }\n const drawWrapper = subMesh._getDrawWrapper(renderPassId);\n const effect = DrawWrapper.GetEffect(drawWrapper);\n engine.enableEffect(drawWrapper);\n // Logarithmic depth\n if (material.useLogarithmicDepth) {\n effect.setFloat(\"logarithmicDepthConstant\", 2.0 / (Math.log(scene.activeCamera.maxZ + 1.0) / Math.LN2));\n }\n effect.setFloat(\"offset\", useOverlay ? 0 : renderingMesh.outlineWidth);\n effect.setColor4(\"color\", useOverlay ? renderingMesh.overlayColor : renderingMesh.outlineColor, useOverlay ? renderingMesh.overlayAlpha : material.alpha);\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\n // Bones\n BindBonesParameters(renderingMesh, effect);\n // Morph targets\n BindMorphTargetParameters(renderingMesh, effect);\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\n renderingMesh.morphTargetManager._bind(effect);\n }\n if (!hardwareInstancedRendering) {\n renderingMesh._bind(subMesh, effect, material.fillMode);\n }\n // Baked vertex animations\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n bvaManager.bind(effect, hardwareInstancedRendering);\n }\n // Alpha test\n if (material && material.needAlphaTesting()) {\n const alphaTexture = material.getAlphaTestTexture();\n if (alphaTexture) {\n effect.setTexture(\"diffuseSampler\", alphaTexture);\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\n }\n }\n // Clip plane\n bindClipPlane(effect, material, scene);\n engine.setZOffset(-this.zOffset);\n engine.setZOffsetUnits(-this.zOffsetUnits);\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\n effect.setMatrix(\"world\", world);\n });\n engine.setZOffset(0);\n engine.setZOffsetUnits(0);\n }\n /**\n * Returns whether or not the outline renderer is ready for a given submesh.\n * All the dependencies e.g. submeshes, texture, effect... mus be ready\n * @param subMesh Defines the submesh to check readiness for\n * @param useInstances Defines whether wee are trying to render instances or not\n * @param renderPassId Render pass id to use to render the mesh\n * @returns true if ready otherwise false\n */\n isReady(subMesh, useInstances, renderPassId) {\n var _renderPassId2,\n _this = this;\n renderPassId = (_renderPassId2 = renderPassId) !== null && _renderPassId2 !== void 0 ? _renderPassId2 : this._passIdForDrawWrapper[0];\n const defines = [];\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\n const mesh = subMesh.getMesh();\n const material = subMesh.getMaterial();\n if (!material) {\n return false;\n }\n const scene = mesh.getScene();\n // Alpha test\n if (material.needAlphaTesting()) {\n defines.push(\"#define ALPHATEST\");\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\n attribs.push(VertexBuffer.UVKind);\n defines.push(\"#define UV1\");\n }\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\n attribs.push(VertexBuffer.UV2Kind);\n defines.push(\"#define UV2\");\n }\n }\n //Logarithmic depth\n if (material.useLogarithmicDepth) {\n defines.push(\"#define LOGARITHMICDEPTH\");\n }\n // Clip planes\n prepareStringDefinesForClipPlanes(material, scene, defines);\n // Bones\n const fallbacks = new EffectFallbacks();\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\n attribs.push(VertexBuffer.MatricesIndicesKind);\n attribs.push(VertexBuffer.MatricesWeightsKind);\n if (mesh.numBoneInfluencers > 4) {\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\n }\n const skeleton = mesh.skeleton;\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n if (mesh.numBoneInfluencers > 0) {\n fallbacks.addCPUSkinningFallback(0, mesh);\n }\n if (skeleton.isUsingTextureForMatrices) {\n defines.push(\"#define BONETEXTURE\");\n } else {\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\n }\n } else {\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\n }\n // Morph targets\n const morphTargetManager = mesh.morphTargetManager;\n let numMorphInfluencers = 0;\n if (morphTargetManager) {\n numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\n if (numMorphInfluencers > 0) {\n defines.push(\"#define MORPHTARGETS\");\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\n if (morphTargetManager.isUsingTextureForTargets) {\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\n }\n PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\n }\n }\n // Instances\n if (useInstances) {\n defines.push(\"#define INSTANCES\");\n PushAttributesForInstances(attribs);\n if (subMesh.getRenderingMesh().hasThinInstances) {\n defines.push(\"#define THIN_INSTANCES\");\n }\n }\n // Baked vertex animations\n const bvaManager = mesh.bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\n if (useInstances) {\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\n }\n }\n // Get correct effect\n const drawWrapper = subMesh._getDrawWrapper(renderPassId, true);\n const cachedDefines = drawWrapper.defines;\n const join = defines.join(\"\\n\");\n if (cachedDefines !== join) {\n const uniforms = [\"world\", \"mBones\", \"viewProjection\", \"diffuseMatrix\", \"offset\", \"color\", \"logarithmicDepthConstant\", \"morphTargetInfluences\", \"boneTextureWidth\", \"morphTargetCount\", \"morphTargetTextureInfo\", \"morphTargetTextureIndices\", \"bakedVertexAnimationSettings\", \"bakedVertexAnimationTextureSizeInverted\", \"bakedVertexAnimationTime\", \"bakedVertexAnimationTexture\"];\n const samplers = [\"diffuseSampler\", \"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"];\n addClipPlaneUniforms(uniforms);\n drawWrapper.setEffect(this.scene.getEngine().createEffect(\"outline\", {\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: [],\n samplers: samplers,\n defines: join,\n fallbacks: fallbacks,\n onCompiled: null,\n onError: null,\n indexParameters: {\n maxSimultaneousMorphTargets: numMorphInfluencers\n },\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/outline.fragment.js\"), import(\"../ShadersWGSL/outline.vertex.js\")]);\n } else {\n yield Promise.all([import(\"../Shaders/outline.fragment.js\"), import(\"../Shaders/outline.vertex.js\")]);\n }\n });\n return function extraInitializationsAsync() {\n return _ref.apply(this, arguments);\n };\n }()\n }, this.scene.getEngine()), join);\n }\n return drawWrapper.effect.isReady();\n }\n _beforeRenderingMesh(mesh, subMesh, batch) {\n // Outline - step 1\n this._savedDepthWrite = this._engine.getDepthWrite();\n if (mesh.renderOutline) {\n const material = subMesh.getMaterial();\n if (material && material.needAlphaBlendingForMesh(mesh)) {\n this._engine.cacheStencilState();\n // Draw only to stencil buffer for the original mesh\n // The resulting stencil buffer will be used so the outline is not visible inside the mesh when the mesh is transparent\n this._engine.setDepthWrite(false);\n this._engine.setColorWrite(false);\n this._engine.setStencilBuffer(true);\n this._engine.setStencilOperationPass(7681);\n this._engine.setStencilFunction(519);\n this._engine.setStencilMask(OutlineRenderer._StencilReference);\n this._engine.setStencilFunctionReference(OutlineRenderer._StencilReference);\n this._engine.stencilStateComposer.useStencilGlobalOnly = true;\n this.render(subMesh, batch, /* This sets offset to 0 */true, this._passIdForDrawWrapper[1]);\n this._engine.setColorWrite(true);\n this._engine.setStencilFunction(517);\n }\n // Draw the outline using the above stencil if needed to avoid drawing within the mesh\n this._engine.setDepthWrite(false);\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[0]);\n this._engine.setDepthWrite(this._savedDepthWrite);\n if (material && material.needAlphaBlendingForMesh(mesh)) {\n this._engine.stencilStateComposer.useStencilGlobalOnly = false;\n this._engine.restoreStencilState();\n }\n }\n }\n _afterRenderingMesh(mesh, subMesh, batch) {\n // Overlay\n if (mesh.renderOverlay) {\n const currentMode = this._engine.getAlphaMode();\n const alphaBlendState = this._engine.alphaState.alphaBlend;\n this._engine.setAlphaMode(2);\n this.render(subMesh, batch, true, this._passIdForDrawWrapper[3]);\n this._engine.setAlphaMode(currentMode);\n this._engine.setDepthWrite(this._savedDepthWrite);\n this._engine.alphaState.alphaBlend = alphaBlendState;\n }\n // Outline - step 2\n if (mesh.renderOutline && this._savedDepthWrite) {\n this._engine.setDepthWrite(true);\n this._engine.setColorWrite(false);\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[2]);\n this._engine.setColorWrite(true);\n }\n }\n}\n/**\n * Stencil value used to avoid outline being seen within the mesh when the mesh is transparent\n */\nOutlineRenderer._StencilReference = 0x04;","map":{"version":3,"names":["VertexBuffer","Mesh","Scene","SceneComponentConstants","DrawWrapper","addClipPlaneUniforms","bindClipPlane","prepareStringDefinesForClipPlanes","BindBonesParameters","BindMorphTargetParameters","PrepareAttributesForMorphTargetsInfluencers","PushAttributesForInstances","EffectFallbacks","prototype","getOutlineRenderer","_outlineRenderer","OutlineRenderer","Object","defineProperty","get","_renderOutline","set","value","getScene","enumerable","configurable","_renderOverlay","shaderLanguage","_shaderLanguage","constructor","scene","name","NAME_OUTLINERENDERER","zOffset","zOffsetUnits","_engine","getEngine","_addComponent","_passIdForDrawWrapper","i","createRenderPassId","engine","isWebGPU","register","_beforeRenderingMeshStage","registerStep","STEP_BEFORERENDERINGMESH_OUTLINE","_beforeRenderingMesh","_afterRenderingMeshStage","STEP_AFTERRENDERINGMESH_OUTLINE","_afterRenderingMesh","rebuild","dispose","length","releaseRenderPassId","render","subMesh","batch","useOverlay","renderPassId","_renderPassId","hardwareInstancedRendering","getCaps","instancedArrays","visibleInstances","_id","undefined","getRenderingMesh","hasThinInstances","isReady","ownerMesh","getMesh","replacementMesh","_internalAbstractMeshDataInfo","_actAsRegularMesh","renderingMesh","effectiveMesh","material","getMaterial","activeCamera","drawWrapper","_getDrawWrapper","effect","GetEffect","enableEffect","useLogarithmicDepth","setFloat","Math","log","maxZ","LN2","outlineWidth","setColor4","overlayColor","outlineColor","overlayAlpha","alpha","setMatrix","getTransformMatrix","getWorldMatrix","morphTargetManager","isUsingTextureForTargets","_bind","fillMode","bvaManager","bakedVertexAnimationManager","isEnabled","bind","needAlphaTesting","alphaTexture","getAlphaTestTexture","setTexture","getTextureMatrix","setZOffset","setZOffsetUnits","_processRendering","isInstance","world","useInstances","_renderPassId2","_this","defines","attribs","PositionKind","NormalKind","mesh","push","isVerticesDataPresent","UVKind","UV2Kind","fallbacks","useBones","computeBonesUsingShaders","skeleton","MatricesIndicesKind","MatricesWeightsKind","numBoneInfluencers","MatricesIndicesExtraKind","MatricesWeightsExtraKind","addCPUSkinningFallback","isUsingTextureForMatrices","bones","numMorphInfluencers","numMaxInfluencers","numInfluencers","cachedDefines","join","uniforms","samplers","setEffect","createEffect","attributes","uniformsNames","uniformBuffersNames","onCompiled","onError","indexParameters","maxSimultaneousMorphTargets","extraInitializationsAsync","_ref","_asyncToGenerator","Promise","all","apply","arguments","_savedDepthWrite","getDepthWrite","renderOutline","needAlphaBlendingForMesh","cacheStencilState","setDepthWrite","setColorWrite","setStencilBuffer","setStencilOperationPass","setStencilFunction","setStencilMask","_StencilReference","setStencilFunctionReference","stencilStateComposer","useStencilGlobalOnly","restoreStencilState","renderOverlay","currentMode","getAlphaMode","alphaBlendState","alphaState","alphaBlend","setAlphaMode"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Rendering/outlineRenderer.js"],"sourcesContent":["import { VertexBuffer } from \"../Buffers/buffer.js\";\nimport { Mesh } from \"../Meshes/mesh.js\";\nimport { Scene } from \"../scene.js\";\n\nimport { SceneComponentConstants } from \"../sceneComponent.js\";\nimport { DrawWrapper } from \"../Materials/drawWrapper.js\";\nimport { addClipPlaneUniforms, bindClipPlane, prepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper.js\";\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareAttributesForMorphTargetsInfluencers, PushAttributesForInstances } from \"../Materials/materialHelper.functions.js\";\nimport { EffectFallbacks } from \"../Materials/effectFallbacks.js\";\n/**\n * Gets the outline renderer associated with the scene\n * @returns a OutlineRenderer\n */\nScene.prototype.getOutlineRenderer = function () {\n if (!this._outlineRenderer) {\n this._outlineRenderer = new OutlineRenderer(this);\n }\n return this._outlineRenderer;\n};\nObject.defineProperty(Mesh.prototype, \"renderOutline\", {\n get: function () {\n return this._renderOutline;\n },\n set: function (value) {\n if (value) {\n // Lazy Load the component.\n this.getScene().getOutlineRenderer();\n }\n this._renderOutline = value;\n },\n enumerable: true,\n configurable: true,\n});\nObject.defineProperty(Mesh.prototype, \"renderOverlay\", {\n get: function () {\n return this._renderOverlay;\n },\n set: function (value) {\n if (value) {\n // Lazy Load the component.\n this.getScene().getOutlineRenderer();\n }\n this._renderOverlay = value;\n },\n enumerable: true,\n configurable: true,\n});\n/**\n * This class is responsible to draw the outline/overlay of meshes.\n * It should not be used directly but through the available method on mesh.\n */\nexport class OutlineRenderer {\n /**\n * Gets the shader language used in the Outline renderer.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Instantiates a new outline renderer. (There could be only one per scene).\n * @param scene Defines the scene it belongs to\n */\n constructor(scene) {\n /**\n * The name of the component. Each component must have a unique name.\n */\n this.name = SceneComponentConstants.NAME_OUTLINERENDERER;\n /**\n * Defines a zOffset default Factor to prevent zFighting between the overlay and the mesh.\n */\n this.zOffset = 1;\n /**\n * Defines a zOffset default Unit to prevent zFighting between the overlay and the mesh.\n */\n this.zOffsetUnits = 4; // 4 to account for projection a bit by default\n /** Shader language used by the Outline renderer. */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this.scene = scene;\n this._engine = scene.getEngine();\n this.scene._addComponent(this);\n this._passIdForDrawWrapper = [];\n for (let i = 0; i < 4; ++i) {\n this._passIdForDrawWrapper[i] = this._engine.createRenderPassId(`Outline Renderer (${i})`);\n }\n const engine = this._engine;\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n }\n /**\n * Register the component to one instance of a scene.\n */\n register() {\n this.scene._beforeRenderingMeshStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERINGMESH_OUTLINE, this, this._beforeRenderingMesh);\n this.scene._afterRenderingMeshStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGMESH_OUTLINE, this, this._afterRenderingMesh);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n // Nothing to do here.\n }\n /**\n * Disposes the component and the associated resources.\n */\n dispose() {\n for (let i = 0; i < this._passIdForDrawWrapper.length; ++i) {\n this._engine.releaseRenderPassId(this._passIdForDrawWrapper[i]);\n }\n }\n /**\n * Renders the outline in the canvas.\n * @param subMesh Defines the sumesh to render\n * @param batch Defines the batch of meshes in case of instances\n * @param useOverlay Defines if the rendering is for the overlay or the outline\n * @param renderPassId Render pass id to use to render the mesh\n */\n render(subMesh, batch, useOverlay = false, renderPassId) {\n renderPassId = renderPassId ?? this._passIdForDrawWrapper[0];\n const scene = this.scene;\n const engine = scene.getEngine();\n const hardwareInstancedRendering = engine.getCaps().instancedArrays &&\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || subMesh.getRenderingMesh().hasThinInstances);\n if (!this.isReady(subMesh, hardwareInstancedRendering, renderPassId)) {\n return;\n }\n const ownerMesh = subMesh.getMesh();\n const replacementMesh = ownerMesh._internalAbstractMeshDataInfo._actAsRegularMesh ? ownerMesh : null;\n const renderingMesh = subMesh.getRenderingMesh();\n const effectiveMesh = replacementMesh ? replacementMesh : renderingMesh;\n const material = subMesh.getMaterial();\n if (!material || !scene.activeCamera) {\n return;\n }\n const drawWrapper = subMesh._getDrawWrapper(renderPassId);\n const effect = DrawWrapper.GetEffect(drawWrapper);\n engine.enableEffect(drawWrapper);\n // Logarithmic depth\n if (material.useLogarithmicDepth) {\n effect.setFloat(\"logarithmicDepthConstant\", 2.0 / (Math.log(scene.activeCamera.maxZ + 1.0) / Math.LN2));\n }\n effect.setFloat(\"offset\", useOverlay ? 0 : renderingMesh.outlineWidth);\n effect.setColor4(\"color\", useOverlay ? renderingMesh.overlayColor : renderingMesh.outlineColor, useOverlay ? renderingMesh.overlayAlpha : material.alpha);\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\n // Bones\n BindBonesParameters(renderingMesh, effect);\n // Morph targets\n BindMorphTargetParameters(renderingMesh, effect);\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\n renderingMesh.morphTargetManager._bind(effect);\n }\n if (!hardwareInstancedRendering) {\n renderingMesh._bind(subMesh, effect, material.fillMode);\n }\n // Baked vertex animations\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n bvaManager.bind(effect, hardwareInstancedRendering);\n }\n // Alpha test\n if (material && material.needAlphaTesting()) {\n const alphaTexture = material.getAlphaTestTexture();\n if (alphaTexture) {\n effect.setTexture(\"diffuseSampler\", alphaTexture);\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\n }\n }\n // Clip plane\n bindClipPlane(effect, material, scene);\n engine.setZOffset(-this.zOffset);\n engine.setZOffsetUnits(-this.zOffsetUnits);\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\n effect.setMatrix(\"world\", world);\n });\n engine.setZOffset(0);\n engine.setZOffsetUnits(0);\n }\n /**\n * Returns whether or not the outline renderer is ready for a given submesh.\n * All the dependencies e.g. submeshes, texture, effect... mus be ready\n * @param subMesh Defines the submesh to check readiness for\n * @param useInstances Defines whether wee are trying to render instances or not\n * @param renderPassId Render pass id to use to render the mesh\n * @returns true if ready otherwise false\n */\n isReady(subMesh, useInstances, renderPassId) {\n renderPassId = renderPassId ?? this._passIdForDrawWrapper[0];\n const defines = [];\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\n const mesh = subMesh.getMesh();\n const material = subMesh.getMaterial();\n if (!material) {\n return false;\n }\n const scene = mesh.getScene();\n // Alpha test\n if (material.needAlphaTesting()) {\n defines.push(\"#define ALPHATEST\");\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\n attribs.push(VertexBuffer.UVKind);\n defines.push(\"#define UV1\");\n }\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\n attribs.push(VertexBuffer.UV2Kind);\n defines.push(\"#define UV2\");\n }\n }\n //Logarithmic depth\n if (material.useLogarithmicDepth) {\n defines.push(\"#define LOGARITHMICDEPTH\");\n }\n // Clip planes\n prepareStringDefinesForClipPlanes(material, scene, defines);\n // Bones\n const fallbacks = new EffectFallbacks();\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\n attribs.push(VertexBuffer.MatricesIndicesKind);\n attribs.push(VertexBuffer.MatricesWeightsKind);\n if (mesh.numBoneInfluencers > 4) {\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\n }\n const skeleton = mesh.skeleton;\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n if (mesh.numBoneInfluencers > 0) {\n fallbacks.addCPUSkinningFallback(0, mesh);\n }\n if (skeleton.isUsingTextureForMatrices) {\n defines.push(\"#define BONETEXTURE\");\n }\n else {\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\n }\n }\n else {\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\n }\n // Morph targets\n const morphTargetManager = mesh.morphTargetManager;\n let numMorphInfluencers = 0;\n if (morphTargetManager) {\n numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\n if (numMorphInfluencers > 0) {\n defines.push(\"#define MORPHTARGETS\");\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\n if (morphTargetManager.isUsingTextureForTargets) {\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\n }\n PrepareAttributesForMorphTargetsInfluencers(attribs, mesh, numMorphInfluencers);\n }\n }\n // Instances\n if (useInstances) {\n defines.push(\"#define INSTANCES\");\n PushAttributesForInstances(attribs);\n if (subMesh.getRenderingMesh().hasThinInstances) {\n defines.push(\"#define THIN_INSTANCES\");\n }\n }\n // Baked vertex animations\n const bvaManager = mesh.bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\n if (useInstances) {\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\n }\n }\n // Get correct effect\n const drawWrapper = subMesh._getDrawWrapper(renderPassId, true);\n const cachedDefines = drawWrapper.defines;\n const join = defines.join(\"\\n\");\n if (cachedDefines !== join) {\n const uniforms = [\n \"world\",\n \"mBones\",\n \"viewProjection\",\n \"diffuseMatrix\",\n \"offset\",\n \"color\",\n \"logarithmicDepthConstant\",\n \"morphTargetInfluences\",\n \"boneTextureWidth\",\n \"morphTargetCount\",\n \"morphTargetTextureInfo\",\n \"morphTargetTextureIndices\",\n \"bakedVertexAnimationSettings\",\n \"bakedVertexAnimationTextureSizeInverted\",\n \"bakedVertexAnimationTime\",\n \"bakedVertexAnimationTexture\",\n ];\n const samplers = [\"diffuseSampler\", \"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"];\n addClipPlaneUniforms(uniforms);\n drawWrapper.setEffect(this.scene.getEngine().createEffect(\"outline\", {\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: [],\n samplers: samplers,\n defines: join,\n fallbacks: fallbacks,\n onCompiled: null,\n onError: null,\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: async () => {\n if (this._shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n await Promise.all([import(\"../ShadersWGSL/outline.fragment.js\"), import(\"../ShadersWGSL/outline.vertex.js\")]);\n }\n else {\n await Promise.all([import(\"../Shaders/outline.fragment.js\"), import(\"../Shaders/outline.vertex.js\")]);\n }\n },\n }, this.scene.getEngine()), join);\n }\n return drawWrapper.effect.isReady();\n }\n _beforeRenderingMesh(mesh, subMesh, batch) {\n // Outline - step 1\n this._savedDepthWrite = this._engine.getDepthWrite();\n if (mesh.renderOutline) {\n const material = subMesh.getMaterial();\n if (material && material.needAlphaBlendingForMesh(mesh)) {\n this._engine.cacheStencilState();\n // Draw only to stencil buffer for the original mesh\n // The resulting stencil buffer will be used so the outline is not visible inside the mesh when the mesh is transparent\n this._engine.setDepthWrite(false);\n this._engine.setColorWrite(false);\n this._engine.setStencilBuffer(true);\n this._engine.setStencilOperationPass(7681);\n this._engine.setStencilFunction(519);\n this._engine.setStencilMask(OutlineRenderer._StencilReference);\n this._engine.setStencilFunctionReference(OutlineRenderer._StencilReference);\n this._engine.stencilStateComposer.useStencilGlobalOnly = true;\n this.render(subMesh, batch, /* This sets offset to 0 */ true, this._passIdForDrawWrapper[1]);\n this._engine.setColorWrite(true);\n this._engine.setStencilFunction(517);\n }\n // Draw the outline using the above stencil if needed to avoid drawing within the mesh\n this._engine.setDepthWrite(false);\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[0]);\n this._engine.setDepthWrite(this._savedDepthWrite);\n if (material && material.needAlphaBlendingForMesh(mesh)) {\n this._engine.stencilStateComposer.useStencilGlobalOnly = false;\n this._engine.restoreStencilState();\n }\n }\n }\n _afterRenderingMesh(mesh, subMesh, batch) {\n // Overlay\n if (mesh.renderOverlay) {\n const currentMode = this._engine.getAlphaMode();\n const alphaBlendState = this._engine.alphaState.alphaBlend;\n this._engine.setAlphaMode(2);\n this.render(subMesh, batch, true, this._passIdForDrawWrapper[3]);\n this._engine.setAlphaMode(currentMode);\n this._engine.setDepthWrite(this._savedDepthWrite);\n this._engine.alphaState.alphaBlend = alphaBlendState;\n }\n // Outline - step 2\n if (mesh.renderOutline && this._savedDepthWrite) {\n this._engine.setDepthWrite(true);\n this._engine.setColorWrite(false);\n this.render(subMesh, batch, false, this._passIdForDrawWrapper[2]);\n this._engine.setColorWrite(true);\n }\n }\n}\n/**\n * Stencil value used to avoid outline being seen within the mesh when the mesh is transparent\n */\nOutlineRenderer._StencilReference = 0x04;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}