a155722f724e05dffa95c8d166e021a74d0fc2e93f548241f5ea39f986114fdc.json 42 KB

1
  1. {"ast":null,"code":"import { SmartArray, SmartArrayNoDuplicate } from \"../Misc/smartArray.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\n\n/**\n * This represents the object necessary to create a rendering group.\n * This is exclusively used and created by the rendering manager.\n * To modify the behavior, you use the available helpers in your scene or meshes.\n * @internal\n */\nexport class RenderingGroup {\n /**\n * Set the opaque sort comparison function.\n * If null the sub meshes will be render in the order they were created\n */\n set opaqueSortCompareFn(value) {\n if (value) {\n this._opaqueSortCompareFn = value;\n } else {\n this._opaqueSortCompareFn = RenderingGroup.PainterSortCompare;\n }\n this._renderOpaque = this._renderOpaqueSorted;\n }\n /**\n * Set the alpha test sort comparison function.\n * If null the sub meshes will be render in the order they were created\n */\n set alphaTestSortCompareFn(value) {\n if (value) {\n this._alphaTestSortCompareFn = value;\n } else {\n this._alphaTestSortCompareFn = RenderingGroup.PainterSortCompare;\n }\n this._renderAlphaTest = this._renderAlphaTestSorted;\n }\n /**\n * Set the transparent sort comparison function.\n * If null the sub meshes will be render in the order they were created\n */\n set transparentSortCompareFn(value) {\n if (value) {\n this._transparentSortCompareFn = value;\n } else {\n this._transparentSortCompareFn = RenderingGroup.defaultTransparentSortCompare;\n }\n this._renderTransparent = this._renderTransparentSorted;\n }\n /**\n * Creates a new rendering group.\n * @param index The rendering group index\n * @param scene\n * @param opaqueSortCompareFn The opaque sort comparison function. If null no order is applied\n * @param alphaTestSortCompareFn The alpha test sort comparison function. If null no order is applied\n * @param transparentSortCompareFn The transparent sort comparison function. If null back to front + alpha index sort is applied\n */\n constructor(index, scene, opaqueSortCompareFn = null, alphaTestSortCompareFn = null, transparentSortCompareFn = null) {\n this.index = index;\n this._opaqueSubMeshes = new SmartArray(256);\n this._transparentSubMeshes = new SmartArray(256);\n this._alphaTestSubMeshes = new SmartArray(256);\n this._depthOnlySubMeshes = new SmartArray(256);\n this._particleSystems = new SmartArray(256);\n this._spriteManagers = new SmartArray(256);\n /** @internal */\n this._empty = true;\n /** @internal */\n this._edgesRenderers = new SmartArrayNoDuplicate(16);\n this._scene = scene;\n this.opaqueSortCompareFn = opaqueSortCompareFn;\n this.alphaTestSortCompareFn = alphaTestSortCompareFn;\n this.transparentSortCompareFn = transparentSortCompareFn;\n }\n /**\n * Render all the sub meshes contained in the group.\n * @param customRenderFunction Used to override the default render behaviour of the group.\n * @param renderSprites\n * @param renderParticles\n * @param activeMeshes\n */\n render(customRenderFunction, renderSprites, renderParticles, activeMeshes) {\n if (customRenderFunction) {\n customRenderFunction(this._opaqueSubMeshes, this._alphaTestSubMeshes, this._transparentSubMeshes, this._depthOnlySubMeshes);\n return;\n }\n const engine = this._scene.getEngine();\n // Depth only\n if (this._depthOnlySubMeshes.length !== 0) {\n engine.setColorWrite(false);\n this._renderAlphaTest(this._depthOnlySubMeshes);\n engine.setColorWrite(true);\n }\n // Opaque\n if (this._opaqueSubMeshes.length !== 0) {\n this._renderOpaque(this._opaqueSubMeshes);\n }\n // Alpha test\n if (this._alphaTestSubMeshes.length !== 0) {\n this._renderAlphaTest(this._alphaTestSubMeshes);\n }\n const stencilState = engine.getStencilBuffer();\n engine.setStencilBuffer(false);\n // Sprites\n if (renderSprites) {\n this._renderSprites();\n }\n // Particles\n if (renderParticles) {\n this._renderParticles(activeMeshes);\n }\n if (this.onBeforeTransparentRendering) {\n this.onBeforeTransparentRendering();\n }\n // Transparent\n if (this._transparentSubMeshes.length !== 0 || this._scene.useOrderIndependentTransparency) {\n engine.setStencilBuffer(stencilState);\n if (this._scene.useOrderIndependentTransparency) {\n const excludedMeshes = this._scene.depthPeelingRenderer.render(this._transparentSubMeshes);\n if (excludedMeshes.length) {\n // Render leftover meshes that could not be processed by depth peeling\n this._renderTransparent(excludedMeshes);\n }\n } else {\n this._renderTransparent(this._transparentSubMeshes);\n }\n engine.setAlphaMode(0);\n }\n // Set back stencil to false in case it changes before the edge renderer.\n engine.setStencilBuffer(false);\n // Edges\n if (this._edgesRenderers.length) {\n for (let edgesRendererIndex = 0; edgesRendererIndex < this._edgesRenderers.length; edgesRendererIndex++) {\n this._edgesRenderers.data[edgesRendererIndex].render();\n }\n engine.setAlphaMode(0);\n }\n // Restore Stencil state.\n engine.setStencilBuffer(stencilState);\n }\n /**\n * Renders the opaque submeshes in the order from the opaqueSortCompareFn.\n * @param subMeshes The submeshes to render\n */\n _renderOpaqueSorted(subMeshes) {\n RenderingGroup._RenderSorted(subMeshes, this._opaqueSortCompareFn, this._scene.activeCamera, false);\n }\n /**\n * Renders the opaque submeshes in the order from the alphatestSortCompareFn.\n * @param subMeshes The submeshes to render\n */\n _renderAlphaTestSorted(subMeshes) {\n RenderingGroup._RenderSorted(subMeshes, this._alphaTestSortCompareFn, this._scene.activeCamera, false);\n }\n /**\n * Renders the opaque submeshes in the order from the transparentSortCompareFn.\n * @param subMeshes The submeshes to render\n */\n _renderTransparentSorted(subMeshes) {\n RenderingGroup._RenderSorted(subMeshes, this._transparentSortCompareFn, this._scene.activeCamera, true);\n }\n /**\n * Renders the submeshes in a specified order.\n * @param subMeshes The submeshes to sort before render\n * @param sortCompareFn The comparison function use to sort\n * @param camera The camera position use to preprocess the submeshes to help sorting\n * @param transparent Specifies to activate blending if true\n */\n static _RenderSorted(subMeshes, sortCompareFn, camera, transparent) {\n let subIndex = 0;\n let subMesh;\n const cameraPosition = camera ? camera.globalPosition : RenderingGroup._ZeroVector;\n if (transparent) {\n for (; subIndex < subMeshes.length; subIndex++) {\n subMesh = subMeshes.data[subIndex];\n subMesh._alphaIndex = subMesh.getMesh().alphaIndex;\n subMesh._distanceToCamera = Vector3.Distance(subMesh.getBoundingInfo().boundingSphere.centerWorld, cameraPosition);\n }\n }\n const sortedArray = subMeshes.length === subMeshes.data.length ? subMeshes.data : subMeshes.data.slice(0, subMeshes.length);\n if (sortCompareFn) {\n sortedArray.sort(sortCompareFn);\n }\n const scene = sortedArray[0].getMesh().getScene();\n for (subIndex = 0; subIndex < sortedArray.length; subIndex++) {\n subMesh = sortedArray[subIndex];\n if (scene._activeMeshesFrozenButKeepClipping && !subMesh.isInFrustum(scene._frustumPlanes)) {\n continue;\n }\n if (transparent) {\n const material = subMesh.getMaterial();\n if (material && material.needDepthPrePass) {\n const engine = material.getScene().getEngine();\n engine.setColorWrite(false);\n engine.setAlphaMode(0);\n subMesh.render(false);\n engine.setColorWrite(true);\n }\n }\n subMesh.render(transparent);\n }\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are rendered back to front if in the same alpha index.\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static defaultTransparentSortCompare(a, b) {\n // Alpha index first\n if (a._alphaIndex > b._alphaIndex) {\n return 1;\n }\n if (a._alphaIndex < b._alphaIndex) {\n return -1;\n }\n // Then distance to camera\n return RenderingGroup.backToFrontSortCompare(a, b);\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are rendered back to front.\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static backToFrontSortCompare(a, b) {\n // Then distance to camera\n if (a._distanceToCamera < b._distanceToCamera) {\n return 1;\n }\n if (a._distanceToCamera > b._distanceToCamera) {\n return -1;\n }\n return 0;\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are rendered front to back (prevent overdraw).\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static frontToBackSortCompare(a, b) {\n // Then distance to camera\n if (a._distanceToCamera < b._distanceToCamera) {\n return -1;\n }\n if (a._distanceToCamera > b._distanceToCamera) {\n return 1;\n }\n return 0;\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are grouped by material then geometry.\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n static PainterSortCompare(a, b) {\n const meshA = a.getMesh();\n const meshB = b.getMesh();\n if (meshA.material && meshB.material) {\n return meshA.material.uniqueId - meshB.material.uniqueId;\n }\n return meshA.uniqueId - meshB.uniqueId;\n }\n /**\n * Resets the different lists of submeshes to prepare a new frame.\n */\n prepare() {\n this._opaqueSubMeshes.reset();\n this._transparentSubMeshes.reset();\n this._alphaTestSubMeshes.reset();\n this._depthOnlySubMeshes.reset();\n this._particleSystems.reset();\n this.prepareSprites();\n this._edgesRenderers.reset();\n this._empty = true;\n }\n /**\n * Resets the different lists of sprites to prepare a new frame.\n */\n prepareSprites() {\n this._spriteManagers.reset();\n }\n dispose() {\n this._opaqueSubMeshes.dispose();\n this._transparentSubMeshes.dispose();\n this._alphaTestSubMeshes.dispose();\n this._depthOnlySubMeshes.dispose();\n this._particleSystems.dispose();\n this._spriteManagers.dispose();\n this._edgesRenderers.dispose();\n }\n /**\n * Inserts the submesh in its correct queue depending on its material.\n * @param subMesh The submesh to dispatch\n * @param [mesh] Optional reference to the submeshes's mesh. Provide if you have an exiting reference to improve performance.\n * @param [material] Optional reference to the submeshes's material. Provide if you have an exiting reference to improve performance.\n */\n dispatch(subMesh, mesh, material) {\n // Get mesh and materials if not provided\n if (mesh === undefined) {\n mesh = subMesh.getMesh();\n }\n if (material === undefined) {\n material = subMesh.getMaterial();\n }\n if (material === null || material === undefined) {\n return;\n }\n if (material.needAlphaBlendingForMesh(mesh)) {\n // Transparent\n this._transparentSubMeshes.push(subMesh);\n } else if (material.needAlphaTesting()) {\n // Alpha test\n if (material.needDepthPrePass) {\n this._depthOnlySubMeshes.push(subMesh);\n }\n this._alphaTestSubMeshes.push(subMesh);\n } else {\n if (material.needDepthPrePass) {\n this._depthOnlySubMeshes.push(subMesh);\n }\n this._opaqueSubMeshes.push(subMesh); // Opaque\n }\n mesh._renderingGroup = this;\n if (mesh._edgesRenderer && mesh.isEnabled() && mesh.isVisible && mesh._edgesRenderer.isEnabled) {\n this._edgesRenderers.pushNoDuplicate(mesh._edgesRenderer);\n }\n this._empty = false;\n }\n dispatchSprites(spriteManager) {\n this._spriteManagers.push(spriteManager);\n this._empty = false;\n }\n dispatchParticles(particleSystem) {\n this._particleSystems.push(particleSystem);\n this._empty = false;\n }\n _renderParticles(activeMeshes) {\n if (this._particleSystems.length === 0) {\n return;\n }\n // Particles\n const activeCamera = this._scene.activeCamera;\n this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);\n for (let particleIndex = 0; particleIndex < this._particleSystems.length; particleIndex++) {\n const particleSystem = this._particleSystems.data[particleIndex];\n if ((activeCamera && activeCamera.layerMask & particleSystem.layerMask) === 0) {\n continue;\n }\n const emitter = particleSystem.emitter;\n if (!emitter.position || !activeMeshes || activeMeshes.indexOf(emitter) !== -1) {\n this._scene._activeParticles.addCount(particleSystem.render(), false);\n }\n }\n this._scene.onAfterParticlesRenderingObservable.notifyObservers(this._scene);\n }\n _renderSprites() {\n if (!this._scene.spritesEnabled || this._spriteManagers.length === 0) {\n return;\n }\n // Sprites\n const activeCamera = this._scene.activeCamera;\n this._scene.onBeforeSpritesRenderingObservable.notifyObservers(this._scene);\n for (let id = 0; id < this._spriteManagers.length; id++) {\n const spriteManager = this._spriteManagers.data[id];\n if ((activeCamera && activeCamera.layerMask & spriteManager.layerMask) !== 0) {\n spriteManager.render();\n }\n }\n this._scene.onAfterSpritesRenderingObservable.notifyObservers(this._scene);\n }\n}\nRenderingGroup._ZeroVector = Vector3.Zero();","map":{"version":3,"names":["SmartArray","SmartArrayNoDuplicate","Vector3","RenderingGroup","opaqueSortCompareFn","value","_opaqueSortCompareFn","PainterSortCompare","_renderOpaque","_renderOpaqueSorted","alphaTestSortCompareFn","_alphaTestSortCompareFn","_renderAlphaTest","_renderAlphaTestSorted","transparentSortCompareFn","_transparentSortCompareFn","defaultTransparentSortCompare","_renderTransparent","_renderTransparentSorted","constructor","index","scene","_opaqueSubMeshes","_transparentSubMeshes","_alphaTestSubMeshes","_depthOnlySubMeshes","_particleSystems","_spriteManagers","_empty","_edgesRenderers","_scene","render","customRenderFunction","renderSprites","renderParticles","activeMeshes","engine","getEngine","length","setColorWrite","stencilState","getStencilBuffer","setStencilBuffer","_renderSprites","_renderParticles","onBeforeTransparentRendering","useOrderIndependentTransparency","excludedMeshes","depthPeelingRenderer","setAlphaMode","edgesRendererIndex","data","subMeshes","_RenderSorted","activeCamera","sortCompareFn","camera","transparent","subIndex","subMesh","cameraPosition","globalPosition","_ZeroVector","_alphaIndex","getMesh","alphaIndex","_distanceToCamera","Distance","getBoundingInfo","boundingSphere","centerWorld","sortedArray","slice","sort","getScene","_activeMeshesFrozenButKeepClipping","isInFrustum","_frustumPlanes","material","getMaterial","needDepthPrePass","a","b","backToFrontSortCompare","frontToBackSortCompare","meshA","meshB","uniqueId","prepare","reset","prepareSprites","dispose","dispatch","mesh","undefined","needAlphaBlendingForMesh","push","needAlphaTesting","_renderingGroup","_edgesRenderer","isEnabled","isVisible","pushNoDuplicate","dispatchSprites","spriteManager","dispatchParticles","particleSystem","onBeforeParticlesRenderingObservable","notifyObservers","particleIndex","layerMask","emitter","position","indexOf","_activeParticles","addCount","onAfterParticlesRenderingObservable","spritesEnabled","onBeforeSpritesRenderingObservable","id","onAfterSpritesRenderingObservable","Zero"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Rendering/renderingGroup.js"],"sourcesContent":["import { SmartArray, SmartArrayNoDuplicate } from \"../Misc/smartArray.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\n\n/**\n * This represents the object necessary to create a rendering group.\n * This is exclusively used and created by the rendering manager.\n * To modify the behavior, you use the available helpers in your scene or meshes.\n * @internal\n */\nexport class RenderingGroup {\n /**\n * Set the opaque sort comparison function.\n * If null the sub meshes will be render in the order they were created\n */\n set opaqueSortCompareFn(value) {\n if (value) {\n this._opaqueSortCompareFn = value;\n }\n else {\n this._opaqueSortCompareFn = RenderingGroup.PainterSortCompare;\n }\n this._renderOpaque = this._renderOpaqueSorted;\n }\n /**\n * Set the alpha test sort comparison function.\n * If null the sub meshes will be render in the order they were created\n */\n set alphaTestSortCompareFn(value) {\n if (value) {\n this._alphaTestSortCompareFn = value;\n }\n else {\n this._alphaTestSortCompareFn = RenderingGroup.PainterSortCompare;\n }\n this._renderAlphaTest = this._renderAlphaTestSorted;\n }\n /**\n * Set the transparent sort comparison function.\n * If null the sub meshes will be render in the order they were created\n */\n set transparentSortCompareFn(value) {\n if (value) {\n this._transparentSortCompareFn = value;\n }\n else {\n this._transparentSortCompareFn = RenderingGroup.defaultTransparentSortCompare;\n }\n this._renderTransparent = this._renderTransparentSorted;\n }\n /**\n * Creates a new rendering group.\n * @param index The rendering group index\n * @param scene\n * @param opaqueSortCompareFn The opaque sort comparison function. If null no order is applied\n * @param alphaTestSortCompareFn The alpha test sort comparison function. If null no order is applied\n * @param transparentSortCompareFn The transparent sort comparison function. If null back to front + alpha index sort is applied\n */\n constructor(index, scene, opaqueSortCompareFn = null, alphaTestSortCompareFn = null, transparentSortCompareFn = null) {\n this.index = index;\n this._opaqueSubMeshes = new SmartArray(256);\n this._transparentSubMeshes = new SmartArray(256);\n this._alphaTestSubMeshes = new SmartArray(256);\n this._depthOnlySubMeshes = new SmartArray(256);\n this._particleSystems = new SmartArray(256);\n this._spriteManagers = new SmartArray(256);\n /** @internal */\n this._empty = true;\n /** @internal */\n this._edgesRenderers = new SmartArrayNoDuplicate(16);\n this._scene = scene;\n this.opaqueSortCompareFn = opaqueSortCompareFn;\n this.alphaTestSortCompareFn = alphaTestSortCompareFn;\n this.transparentSortCompareFn = transparentSortCompareFn;\n }\n /**\n * Render all the sub meshes contained in the group.\n * @param customRenderFunction Used to override the default render behaviour of the group.\n * @param renderSprites\n * @param renderParticles\n * @param activeMeshes\n */\n render(customRenderFunction, renderSprites, renderParticles, activeMeshes) {\n if (customRenderFunction) {\n customRenderFunction(this._opaqueSubMeshes, this._alphaTestSubMeshes, this._transparentSubMeshes, this._depthOnlySubMeshes);\n return;\n }\n const engine = this._scene.getEngine();\n // Depth only\n if (this._depthOnlySubMeshes.length !== 0) {\n engine.setColorWrite(false);\n this._renderAlphaTest(this._depthOnlySubMeshes);\n engine.setColorWrite(true);\n }\n // Opaque\n if (this._opaqueSubMeshes.length !== 0) {\n this._renderOpaque(this._opaqueSubMeshes);\n }\n // Alpha test\n if (this._alphaTestSubMeshes.length !== 0) {\n this._renderAlphaTest(this._alphaTestSubMeshes);\n }\n const stencilState = engine.getStencilBuffer();\n engine.setStencilBuffer(false);\n // Sprites\n if (renderSprites) {\n this._renderSprites();\n }\n // Particles\n if (renderParticles) {\n this._renderParticles(activeMeshes);\n }\n if (this.onBeforeTransparentRendering) {\n this.onBeforeTransparentRendering();\n }\n // Transparent\n if (this._transparentSubMeshes.length !== 0 || this._scene.useOrderIndependentTransparency) {\n engine.setStencilBuffer(stencilState);\n if (this._scene.useOrderIndependentTransparency) {\n const excludedMeshes = this._scene.depthPeelingRenderer.render(this._transparentSubMeshes);\n if (excludedMeshes.length) {\n // Render leftover meshes that could not be processed by depth peeling\n this._renderTransparent(excludedMeshes);\n }\n }\n else {\n this._renderTransparent(this._transparentSubMeshes);\n }\n engine.setAlphaMode(0);\n }\n // Set back stencil to false in case it changes before the edge renderer.\n engine.setStencilBuffer(false);\n // Edges\n if (this._edgesRenderers.length) {\n for (let edgesRendererIndex = 0; edgesRendererIndex < this._edgesRenderers.length; edgesRendererIndex++) {\n this._edgesRenderers.data[edgesRendererIndex].render();\n }\n engine.setAlphaMode(0);\n }\n // Restore Stencil state.\n engine.setStencilBuffer(stencilState);\n }\n /**\n * Renders the opaque submeshes in the order from the opaqueSortCompareFn.\n * @param subMeshes The submeshes to render\n */\n _renderOpaqueSorted(subMeshes) {\n RenderingGroup._RenderSorted(subMeshes, this._opaqueSortCompareFn, this._scene.activeCamera, false);\n }\n /**\n * Renders the opaque submeshes in the order from the alphatestSortCompareFn.\n * @param subMeshes The submeshes to render\n */\n _renderAlphaTestSorted(subMeshes) {\n RenderingGroup._RenderSorted(subMeshes, this._alphaTestSortCompareFn, this._scene.activeCamera, false);\n }\n /**\n * Renders the opaque submeshes in the order from the transparentSortCompareFn.\n * @param subMeshes The submeshes to render\n */\n _renderTransparentSorted(subMeshes) {\n RenderingGroup._RenderSorted(subMeshes, this._transparentSortCompareFn, this._scene.activeCamera, true);\n }\n /**\n * Renders the submeshes in a specified order.\n * @param subMeshes The submeshes to sort before render\n * @param sortCompareFn The comparison function use to sort\n * @param camera The camera position use to preprocess the submeshes to help sorting\n * @param transparent Specifies to activate blending if true\n */\n static _RenderSorted(subMeshes, sortCompareFn, camera, transparent) {\n let subIndex = 0;\n let subMesh;\n const cameraPosition = camera ? camera.globalPosition : RenderingGroup._ZeroVector;\n if (transparent) {\n for (; subIndex < subMeshes.length; subIndex++) {\n subMesh = subMeshes.data[subIndex];\n subMesh._alphaIndex = subMesh.getMesh().alphaIndex;\n subMesh._distanceToCamera = Vector3.Distance(subMesh.getBoundingInfo().boundingSphere.centerWorld, cameraPosition);\n }\n }\n const sortedArray = subMeshes.length === subMeshes.data.length ? subMeshes.data : subMeshes.data.slice(0, subMeshes.length);\n if (sortCompareFn) {\n sortedArray.sort(sortCompareFn);\n }\n const scene = sortedArray[0].getMesh().getScene();\n for (subIndex = 0; subIndex < sortedArray.length; subIndex++) {\n subMesh = sortedArray[subIndex];\n if (scene._activeMeshesFrozenButKeepClipping && !subMesh.isInFrustum(scene._frustumPlanes)) {\n continue;\n }\n if (transparent) {\n const material = subMesh.getMaterial();\n if (material && material.needDepthPrePass) {\n const engine = material.getScene().getEngine();\n engine.setColorWrite(false);\n engine.setAlphaMode(0);\n subMesh.render(false);\n engine.setColorWrite(true);\n }\n }\n subMesh.render(transparent);\n }\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are rendered back to front if in the same alpha index.\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static defaultTransparentSortCompare(a, b) {\n // Alpha index first\n if (a._alphaIndex > b._alphaIndex) {\n return 1;\n }\n if (a._alphaIndex < b._alphaIndex) {\n return -1;\n }\n // Then distance to camera\n return RenderingGroup.backToFrontSortCompare(a, b);\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are rendered back to front.\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static backToFrontSortCompare(a, b) {\n // Then distance to camera\n if (a._distanceToCamera < b._distanceToCamera) {\n return 1;\n }\n if (a._distanceToCamera > b._distanceToCamera) {\n return -1;\n }\n return 0;\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are rendered front to back (prevent overdraw).\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static frontToBackSortCompare(a, b) {\n // Then distance to camera\n if (a._distanceToCamera < b._distanceToCamera) {\n return -1;\n }\n if (a._distanceToCamera > b._distanceToCamera) {\n return 1;\n }\n return 0;\n }\n /**\n * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)\n * are grouped by material then geometry.\n *\n * @param a The first submesh\n * @param b The second submesh\n * @returns The result of the comparison\n */\n static PainterSortCompare(a, b) {\n const meshA = a.getMesh();\n const meshB = b.getMesh();\n if (meshA.material && meshB.material) {\n return meshA.material.uniqueId - meshB.material.uniqueId;\n }\n return meshA.uniqueId - meshB.uniqueId;\n }\n /**\n * Resets the different lists of submeshes to prepare a new frame.\n */\n prepare() {\n this._opaqueSubMeshes.reset();\n this._transparentSubMeshes.reset();\n this._alphaTestSubMeshes.reset();\n this._depthOnlySubMeshes.reset();\n this._particleSystems.reset();\n this.prepareSprites();\n this._edgesRenderers.reset();\n this._empty = true;\n }\n /**\n * Resets the different lists of sprites to prepare a new frame.\n */\n prepareSprites() {\n this._spriteManagers.reset();\n }\n dispose() {\n this._opaqueSubMeshes.dispose();\n this._transparentSubMeshes.dispose();\n this._alphaTestSubMeshes.dispose();\n this._depthOnlySubMeshes.dispose();\n this._particleSystems.dispose();\n this._spriteManagers.dispose();\n this._edgesRenderers.dispose();\n }\n /**\n * Inserts the submesh in its correct queue depending on its material.\n * @param subMesh The submesh to dispatch\n * @param [mesh] Optional reference to the submeshes's mesh. Provide if you have an exiting reference to improve performance.\n * @param [material] Optional reference to the submeshes's material. Provide if you have an exiting reference to improve performance.\n */\n dispatch(subMesh, mesh, material) {\n // Get mesh and materials if not provided\n if (mesh === undefined) {\n mesh = subMesh.getMesh();\n }\n if (material === undefined) {\n material = subMesh.getMaterial();\n }\n if (material === null || material === undefined) {\n return;\n }\n if (material.needAlphaBlendingForMesh(mesh)) {\n // Transparent\n this._transparentSubMeshes.push(subMesh);\n }\n else if (material.needAlphaTesting()) {\n // Alpha test\n if (material.needDepthPrePass) {\n this._depthOnlySubMeshes.push(subMesh);\n }\n this._alphaTestSubMeshes.push(subMesh);\n }\n else {\n if (material.needDepthPrePass) {\n this._depthOnlySubMeshes.push(subMesh);\n }\n this._opaqueSubMeshes.push(subMesh); // Opaque\n }\n mesh._renderingGroup = this;\n if (mesh._edgesRenderer && mesh.isEnabled() && mesh.isVisible && mesh._edgesRenderer.isEnabled) {\n this._edgesRenderers.pushNoDuplicate(mesh._edgesRenderer);\n }\n this._empty = false;\n }\n dispatchSprites(spriteManager) {\n this._spriteManagers.push(spriteManager);\n this._empty = false;\n }\n dispatchParticles(particleSystem) {\n this._particleSystems.push(particleSystem);\n this._empty = false;\n }\n _renderParticles(activeMeshes) {\n if (this._particleSystems.length === 0) {\n return;\n }\n // Particles\n const activeCamera = this._scene.activeCamera;\n this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);\n for (let particleIndex = 0; particleIndex < this._particleSystems.length; particleIndex++) {\n const particleSystem = this._particleSystems.data[particleIndex];\n if ((activeCamera && activeCamera.layerMask & particleSystem.layerMask) === 0) {\n continue;\n }\n const emitter = particleSystem.emitter;\n if (!emitter.position || !activeMeshes || activeMeshes.indexOf(emitter) !== -1) {\n this._scene._activeParticles.addCount(particleSystem.render(), false);\n }\n }\n this._scene.onAfterParticlesRenderingObservable.notifyObservers(this._scene);\n }\n _renderSprites() {\n if (!this._scene.spritesEnabled || this._spriteManagers.length === 0) {\n return;\n }\n // Sprites\n const activeCamera = this._scene.activeCamera;\n this._scene.onBeforeSpritesRenderingObservable.notifyObservers(this._scene);\n for (let id = 0; id < this._spriteManagers.length; id++) {\n const spriteManager = this._spriteManagers.data[id];\n if ((activeCamera && activeCamera.layerMask & spriteManager.layerMask) !== 0) {\n spriteManager.render();\n }\n }\n this._scene.onAfterSpritesRenderingObservable.notifyObservers(this._scene);\n }\n}\nRenderingGroup._ZeroVector = Vector3.Zero();\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}