@itwin/core-frontend 3.6.0-dev.8 → 4.0.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -1
- package/LICENSE.md +1 -1
- package/lib/cjs/AccuDraw.js +1 -1
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts +23 -3
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +11 -3
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CheckpointConnection.js +1 -1
- package/lib/cjs/CheckpointConnection.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +2 -2
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +12 -4
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +4 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +4 -6
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +4 -6
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +6 -7
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +8 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +10 -6
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NoRenderApp.js +3 -0
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts +4 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +19 -5
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
- package/lib/cjs/SubCategoriesCache.js +0 -1
- package/lib/cjs/SubCategoriesCache.js.map +1 -1
- package/lib/cjs/Tiles.d.ts +4 -0
- package/lib/cjs/Tiles.d.ts.map +1 -1
- package/lib/cjs/Tiles.js +11 -0
- package/lib/cjs/Tiles.js.map +1 -1
- package/lib/cjs/ViewContext.js +1 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewManager.d.ts.map +1 -1
- package/lib/cjs/ViewManager.js +2 -3
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +4 -5
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +0 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +53 -4
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +82 -34
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/extension/ExtensionImpl.js +2 -2
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
- package/lib/cjs/extension/ExtensionRuntime.js +3 -0
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +3 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
- package/lib/cjs/render/GraphicBuilder.js +1 -1
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/render/MockRender.js +3 -0
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/RealityMeshParams.d.ts +7 -5
- package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +23 -9
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/RenderMaterial.d.ts +1 -1
- package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
- package/lib/cjs/render/RenderMaterial.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +9 -20
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +4 -10
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +1 -1
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +3 -4
- package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
- package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.d.ts +5 -5
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/DisplayParams.js +2 -1
- package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
- package/lib/cjs/render/webgl/AttributeBuffers.d.ts +9 -79
- package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/cjs/render/webgl/AttributeBuffers.js +19 -152
- package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -6
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +5 -0
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.js +0 -8
- package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
- package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
- package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/ClipStack.d.ts +0 -1
- package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ClipStack.js +2 -6
- package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
- package/lib/cjs/render/webgl/ClipVolume.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ClipVolume.js +1 -5
- package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
- package/lib/cjs/render/webgl/ClippingProgram.d.ts +3 -2
- package/lib/cjs/render/webgl/ClippingProgram.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ClippingProgram.js +10 -37
- package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +7 -5
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/EDL.d.ts +40 -0
- package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
- package/lib/cjs/render/webgl/EDL.js +264 -0
- package/lib/cjs/render/webgl/EDL.js.map +1 -0
- package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
- package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FloatRGBA.js +0 -4
- package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
- package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
- package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
- package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
- package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/cjs/render/webgl/GLTimer.js +2 -35
- package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
- package/lib/cjs/render/webgl/Layer.js +2 -2
- package/lib/cjs/render/webgl/LayerCommands.js +2 -2
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +20 -77
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
- package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.js +1 -1
- package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +8 -3
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
- package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
- package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/RenderBuffer.d.ts +1 -1
- package/lib/cjs/render/webgl/RenderBuffer.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderBuffer.js +2 -3
- package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +46 -38
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +20 -19
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +12 -12
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -3
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +626 -888
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
- package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +1 -2
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +13 -48
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -2
- package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +8 -29
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
- package/lib/cjs/render/webgl/System.d.ts +10 -10
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +39 -122
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +7 -7
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts +4 -5
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +16 -25
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
- package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Texture.js +14 -18
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/render/webgl/ThematicSensors.d.ts +4 -3
- package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ThematicSensors.js +9 -50
- package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/cjs/render/webgl/ThematicUniforms.js +1 -1
- package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.js +2 -6
- package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +23 -26
- package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/Blur.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -9
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -10
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.d.ts +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.js +5 -36
- package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Common.js +9 -55
- package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +12 -19
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts +4 -7
- package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +2 -39
- package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/EDL.d.ts +13 -0
- package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
- package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
- package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +2 -2
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +3 -24
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.d.ts +0 -7
- package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.js +5 -40
- package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Instancing.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Instancing.js +1 -5
- package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -12
- package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -8
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
- package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +33 -57
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +3 -36
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.js +2 -12
- package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts +1 -2
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +15 -78
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Wiremesh.js +2 -5
- package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +4 -2
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +1 -1
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +6 -0
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +20 -7
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
- package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts +0 -3
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +6 -28
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +61 -53
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +2 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +8 -4
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +17 -9
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +1 -1
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +3 -0
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +28 -3
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +63 -8
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +2 -0
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +13 -0
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +57 -14
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +44 -4
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +131 -11
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +2 -2
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +2 -2
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +1 -1
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts +23 -3
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +11 -3
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CheckpointConnection.js +1 -1
- package/lib/esm/CheckpointConnection.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +2 -2
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +12 -4
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +4 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +4 -6
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +4 -6
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +6 -7
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.d.ts +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +8 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +10 -6
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.js +3 -0
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts +4 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +19 -5
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
- package/lib/esm/SubCategoriesCache.js +0 -1
- package/lib/esm/SubCategoriesCache.js.map +1 -1
- package/lib/esm/Tiles.d.ts +4 -0
- package/lib/esm/Tiles.d.ts.map +1 -1
- package/lib/esm/Tiles.js +11 -0
- package/lib/esm/Tiles.js.map +1 -1
- package/lib/esm/ViewContext.js +1 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewManager.d.ts.map +1 -1
- package/lib/esm/ViewManager.js +2 -3
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/ViewState.d.ts +4 -5
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +0 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +53 -4
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +83 -35
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/extension/ExtensionImpl.js +2 -2
- package/lib/esm/extension/ExtensionImpl.js.map +1 -1
- package/lib/esm/extension/ExtensionRuntime.js +5 -2
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +3 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.d.ts +1 -1
- package/lib/esm/render/GraphicBuilder.js +1 -1
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/MockRender.d.ts.map +1 -1
- package/lib/esm/render/MockRender.js +3 -0
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/RealityMeshParams.d.ts +7 -5
- package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +24 -10
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/RenderMaterial.d.ts +1 -1
- package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
- package/lib/esm/render/RenderMaterial.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +9 -20
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +4 -10
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +1 -1
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
- package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
- package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
- package/lib/esm/render/VisibleFeature.d.ts +5 -5
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/DisplayParams.js +2 -1
- package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
- package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
- package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
- package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -6
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +3 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +5 -0
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.js +0 -8
- package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
- package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js +69 -0
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
- package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
- package/lib/esm/render/webgl/ClipStack.js +2 -6
- package/lib/esm/render/webgl/ClipStack.js.map +1 -1
- package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
- package/lib/esm/render/webgl/ClipVolume.js +1 -5
- package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
- package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
- package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
- package/lib/esm/render/webgl/ClippingProgram.js +10 -37
- package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +7 -5
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/EDL.d.ts +40 -0
- package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
- package/lib/esm/render/webgl/EDL.js +260 -0
- package/lib/esm/render/webgl/EDL.js.map +1 -0
- package/lib/esm/render/webgl/EdgeSettings.js +2 -2
- package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
- package/lib/esm/render/webgl/FloatRGBA.js +0 -4
- package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
- package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
- package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
- package/lib/esm/render/webgl/FrameBuffer.js +9 -0
- package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
- package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/esm/render/webgl/GLTimer.js +2 -35
- package/lib/esm/render/webgl/GLTimer.js.map +1 -1
- package/lib/esm/render/webgl/Layer.js +2 -2
- package/lib/esm/render/webgl/LayerCommands.js +2 -2
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +20 -77
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
- package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/esm/render/webgl/PointCloud.js +1 -1
- package/lib/esm/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +8 -3
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
- package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
- package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
- package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderBuffer.js +2 -3
- package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +46 -38
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +20 -19
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js +12 -12
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -3
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +627 -891
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
- package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
- package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +8 -29
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
- package/lib/esm/render/webgl/System.d.ts +10 -10
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +41 -124
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +7 -7
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.d.ts +4 -5
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +17 -26
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
- package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
- package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
- package/lib/esm/render/webgl/Texture.js +14 -18
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
- package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
- package/lib/esm/render/webgl/ThematicSensors.js +9 -50
- package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
- package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.js +2 -6
- package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.js +23 -26
- package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
- package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
- package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
- package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Common.js +9 -55
- package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
- package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
- package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/esm/render/webgl/glsl/EDL.d.ts +13 -0
- package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
- package/lib/esm/render/webgl/glsl/EDL.js +253 -0
- package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.js +2 -2
- package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
- package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
- package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
- package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
- package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
- package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
- package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
- package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
- package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
- package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +33 -57
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
- package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
- package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
- package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
- package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/esm/tile/DynamicIModelTile.js +1 -1
- package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +4 -2
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTile.js +1 -1
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +6 -0
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +20 -7
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
- package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js +30 -12
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +8 -30
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +62 -54
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +2 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +5 -0
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +8 -4
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +17 -9
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +1 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +3 -0
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +3 -0
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +28 -3
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +62 -8
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +2 -0
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +13 -0
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +57 -14
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +44 -4
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +131 -11
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
- package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +2 -2
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.js +2 -2
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/public/locales/en/iModelJs.json +2 -2
- package/package.json +20 -21
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @module WebGL
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.SceneCompositor = void 0;
|
|
10
|
+
exports.SceneCompositor = exports.collectGeometryStatistics = exports.collectTextureStatistics = void 0;
|
|
11
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
12
|
const core_geometry_1 = require("@itwin/core-geometry");
|
|
13
13
|
const core_common_1 = require("@itwin/core-common");
|
|
@@ -17,7 +17,6 @@ const BranchState_1 = require("./BranchState");
|
|
|
17
17
|
const CachedGeometry_1 = require("./CachedGeometry");
|
|
18
18
|
const Diagnostics_1 = require("./Diagnostics");
|
|
19
19
|
const DrawCommand_1 = require("./DrawCommand");
|
|
20
|
-
const FloatRGBA_1 = require("./FloatRGBA");
|
|
21
20
|
const FrameBuffer_1 = require("./FrameBuffer");
|
|
22
21
|
const GL_1 = require("./GL");
|
|
23
22
|
const IModelFrameLifecycle_1 = require("./IModelFrameLifecycle");
|
|
@@ -29,10 +28,12 @@ const SolarShadowMap_1 = require("./SolarShadowMap");
|
|
|
29
28
|
const System_1 = require("./System");
|
|
30
29
|
const Texture_1 = require("./Texture");
|
|
31
30
|
const RenderBuffer_1 = require("./RenderBuffer");
|
|
31
|
+
const EDL_1 = require("./EDL");
|
|
32
32
|
function collectTextureStatistics(texture, stats) {
|
|
33
33
|
if (undefined !== texture)
|
|
34
34
|
stats.addTextureAttachment(texture.bytesUsed);
|
|
35
35
|
}
|
|
36
|
+
exports.collectTextureStatistics = collectTextureStatistics;
|
|
36
37
|
function collectMsBufferStatistics(msBuff, stats) {
|
|
37
38
|
if (undefined !== msBuff)
|
|
38
39
|
stats.addTextureAttachment(msBuff.bytesUsed);
|
|
@@ -99,23 +100,14 @@ class Textures {
|
|
|
99
100
|
init(width, height, numSamples) {
|
|
100
101
|
(0, core_bentley_1.assert)(undefined === this.accumulation);
|
|
101
102
|
let pixelDataType = GL_1.GL.Texture.DataType.UnsignedByte;
|
|
102
|
-
switch (System_1.System.instance.
|
|
103
|
+
switch (System_1.System.instance.maxRenderType) {
|
|
103
104
|
case webgl_compatibility_1.RenderType.TextureFloat: {
|
|
104
105
|
pixelDataType = GL_1.GL.Texture.DataType.Float;
|
|
105
106
|
break;
|
|
106
107
|
}
|
|
107
108
|
case webgl_compatibility_1.RenderType.TextureHalfFloat: {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
const ext = System_1.System.instance.capabilities.queryExtensionObject("OES_texture_half_float");
|
|
114
|
-
if (undefined !== ext) {
|
|
115
|
-
pixelDataType = ext.HALF_FLOAT_OES;
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
109
|
+
pixelDataType = System_1.System.instance.context.HALF_FLOAT;
|
|
110
|
+
break;
|
|
119
111
|
}
|
|
120
112
|
/* falls through */
|
|
121
113
|
case webgl_compatibility_1.RenderType.TextureUnsignedByte: {
|
|
@@ -205,9 +197,25 @@ class FrameBuffers {
|
|
|
205
197
|
this.depthAndOrder = FrameBuffer_1.FrameBuffer.create([textures.depthAndOrder], depth);
|
|
206
198
|
this.hilite = FrameBuffer_1.FrameBuffer.create([textures.hilite], depth);
|
|
207
199
|
this.hiliteUsingStencil = FrameBuffer_1.FrameBuffer.create([textures.hilite], depth);
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
200
|
+
if (!this.depthAndOrder || !this.hilite || !this.hiliteUsingStencil)
|
|
201
|
+
return false;
|
|
202
|
+
(0, core_bentley_1.assert)(undefined === this.opaqueAll);
|
|
203
|
+
if (!this.initPotentialMSMRTFbos(textures, depth, depthMS))
|
|
204
|
+
return false;
|
|
205
|
+
(0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
206
|
+
const colors = [textures.accumulation, textures.revealage];
|
|
207
|
+
this.translucent = FrameBuffer_1.FrameBuffer.create(colors, depth);
|
|
208
|
+
this.clearTranslucent = FrameBuffer_1.FrameBuffer.create(colors);
|
|
209
|
+
// We borrow the SceneCompositor's accum and revealage textures for the surface pass.
|
|
210
|
+
// First we render edges, writing to our textures.
|
|
211
|
+
// Then we copy our textures to borrowed textures.
|
|
212
|
+
// Finally we render surfaces, writing to our textures and reading from borrowed textures.
|
|
213
|
+
(0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
214
|
+
const pingPong = [textures.accumulation, textures.revealage];
|
|
215
|
+
this.pingPong = FrameBuffer_1.FrameBuffer.create(pingPong);
|
|
216
|
+
return undefined !== this.translucent
|
|
217
|
+
&& undefined !== this.clearTranslucent
|
|
218
|
+
&& undefined !== this.pingPong;
|
|
211
219
|
}
|
|
212
220
|
initPotentialMSFbos(textures, depth, depthMS) {
|
|
213
221
|
const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
|
|
@@ -224,19 +232,69 @@ class FrameBuffers {
|
|
|
224
232
|
return undefined !== this.opaqueColor
|
|
225
233
|
&& undefined !== this.opaqueAndCompositeColor;
|
|
226
234
|
}
|
|
227
|
-
|
|
235
|
+
initPotentialMSMRTFbos(textures, depth, depthMs) {
|
|
236
|
+
const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
|
|
237
|
+
(0, core_bentley_1.assert)(undefined !== boundColor && undefined !== textures.color && undefined !== textures.featureId && undefined !== textures.depthAndOrder && undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
238
|
+
const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];
|
|
239
|
+
if (undefined === depthMs) {
|
|
240
|
+
this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
|
|
241
|
+
colorAndPick[0] = textures.color;
|
|
242
|
+
this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
(0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuff && undefined !== textures.depthAndOrderMsBuffHidden);
|
|
246
|
+
const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];
|
|
247
|
+
const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
|
|
248
|
+
this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
|
|
249
|
+
colorAndPick[0] = textures.color;
|
|
250
|
+
this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
|
|
251
|
+
}
|
|
252
|
+
return undefined !== this.opaqueAll
|
|
253
|
+
&& undefined !== this.opaqueAndCompositeAll;
|
|
254
|
+
}
|
|
255
|
+
enableOcclusion(textures, depth, depthMs) {
|
|
228
256
|
(0, core_bentley_1.assert)(undefined !== textures.occlusion && undefined !== textures.occlusionBlur);
|
|
229
257
|
this.occlusion = FrameBuffer_1.FrameBuffer.create([textures.occlusion]);
|
|
230
258
|
this.occlusionBlur = FrameBuffer_1.FrameBuffer.create([textures.occlusionBlur]);
|
|
231
|
-
|
|
259
|
+
let rVal = undefined !== this.occlusion && undefined !== this.occlusionBlur;
|
|
260
|
+
if (undefined === depthMs) {
|
|
261
|
+
// If not using multisampling then we can use the accumulation and revealage textures for the hidden pick buffers,
|
|
262
|
+
(0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
263
|
+
const colorAndPick = [textures.color, textures.accumulation, textures.revealage];
|
|
264
|
+
this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
|
|
265
|
+
rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// If multisampling then we cannot use the revealage texture for depthAndOrder for the hidden edges since it is of the wrong type for blitting,
|
|
269
|
+
// so instead use a special depthAndOrderHidden texture just for this purpose.
|
|
270
|
+
// The featureId texture is not needed for hidden edges, so the accumulation texture can be used for it if we don't blit from the multisample bufffer into it.
|
|
271
|
+
(0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.depthAndOrderHidden);
|
|
272
|
+
(0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuffHidden);
|
|
273
|
+
const colorAndPick = [textures.color, textures.accumulation, textures.depthAndOrderHidden];
|
|
274
|
+
const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
|
|
275
|
+
const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
|
|
276
|
+
this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
|
|
277
|
+
// We will also need a frame buffer for copying the real pick data buffers into these hidden edge pick data buffers.
|
|
278
|
+
const pingPong = [textures.accumulation, textures.depthAndOrderHidden];
|
|
279
|
+
const pingPongMSBuffs = [textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
|
|
280
|
+
const pingPongFilters = [GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
|
|
281
|
+
this.pingPongMS = FrameBuffer_1.FrameBuffer.create(pingPong, depth, pingPongMSBuffs, pingPongFilters, depthMs);
|
|
282
|
+
rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden && (undefined === depthMs || undefined !== this.pingPongMS);
|
|
283
|
+
}
|
|
284
|
+
return rVal;
|
|
232
285
|
}
|
|
233
286
|
disableOcclusion() {
|
|
234
287
|
if (undefined !== this.occlusion) {
|
|
235
288
|
this.occlusion = (0, core_bentley_1.dispose)(this.occlusion);
|
|
236
289
|
this.occlusionBlur = (0, core_bentley_1.dispose)(this.occlusionBlur);
|
|
237
290
|
}
|
|
291
|
+
this.opaqueAndCompositeAllHidden = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
|
|
292
|
+
this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
|
|
238
293
|
}
|
|
239
294
|
enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
295
|
+
const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
|
|
296
|
+
if (undefined === boundColor)
|
|
297
|
+
return;
|
|
240
298
|
if (undefined === this.stencilSet) {
|
|
241
299
|
if (undefined !== depthMS) { // if multisampling use the multisampled depth everywhere
|
|
242
300
|
this.stencilSet = FrameBuffer_1.FrameBuffer.create([], depth, [], [], depthMS);
|
|
@@ -251,6 +309,16 @@ class FrameBuffers {
|
|
|
251
309
|
this.volClassCreateBlendAltZ = FrameBuffer_1.FrameBuffer.create([textures.volClassBlend], volClassDepth);
|
|
252
310
|
}
|
|
253
311
|
}
|
|
312
|
+
if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {
|
|
313
|
+
if (undefined !== volClassDepth) {
|
|
314
|
+
let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];
|
|
315
|
+
this.idsAndZ = FrameBuffer_1.FrameBuffer.create(ids, depth);
|
|
316
|
+
this.idsAndAltZ = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
|
|
317
|
+
ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];
|
|
318
|
+
this.idsAndZComposite = FrameBuffer_1.FrameBuffer.create(ids, depth);
|
|
319
|
+
this.idsAndAltZComposite = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
254
322
|
}
|
|
255
323
|
disableVolumeClassifier() {
|
|
256
324
|
if (undefined !== this.stencilSet) {
|
|
@@ -259,29 +327,40 @@ class FrameBuffers {
|
|
|
259
327
|
this.volClassCreateBlend = (0, core_bentley_1.dispose)(this.volClassCreateBlend);
|
|
260
328
|
this.volClassCreateBlendAltZ = (0, core_bentley_1.dispose)(this.volClassCreateBlendAltZ);
|
|
261
329
|
}
|
|
330
|
+
if (undefined !== this.idsAndZ) {
|
|
331
|
+
this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
|
|
332
|
+
this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
|
|
333
|
+
this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
|
|
334
|
+
this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
|
|
335
|
+
}
|
|
262
336
|
}
|
|
263
337
|
enableMultiSampling(textures, depth, depthMS) {
|
|
264
338
|
this.opaqueColor = (0, core_bentley_1.dispose)(this.opaqueColor);
|
|
265
339
|
this.opaqueAndCompositeColor = (0, core_bentley_1.dispose)(this.opaqueAndCompositeColor);
|
|
266
|
-
|
|
340
|
+
let rVal = this.initPotentialMSFbos(textures, depth, depthMS);
|
|
341
|
+
this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
|
|
342
|
+
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
|
|
343
|
+
rVal = this.initPotentialMSMRTFbos(textures, depth, depthMS);
|
|
344
|
+
return rVal;
|
|
267
345
|
}
|
|
268
346
|
disableMultiSampling(textures, depth) {
|
|
347
|
+
this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
|
|
348
|
+
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
|
|
349
|
+
if (!this.initPotentialMSMRTFbos(textures, depth, undefined))
|
|
350
|
+
return false;
|
|
269
351
|
this.opaqueColor = (0, core_bentley_1.dispose)(this.opaqueColor);
|
|
270
352
|
this.opaqueAndCompositeColor = (0, core_bentley_1.dispose)(this.opaqueAndCompositeColor);
|
|
271
353
|
return this.initPotentialMSFbos(textures, depth, undefined);
|
|
272
354
|
}
|
|
273
355
|
get isDisposed() {
|
|
274
|
-
return undefined === this.opaqueColor
|
|
275
|
-
&& undefined === this.
|
|
276
|
-
&& undefined === this.
|
|
277
|
-
&& undefined === this.
|
|
278
|
-
&& undefined === this.
|
|
279
|
-
&& undefined === this.
|
|
280
|
-
&& undefined === this.
|
|
281
|
-
&& undefined === this.
|
|
282
|
-
&& undefined === this.altZOnly
|
|
283
|
-
&& undefined === this.volClassCreateBlend
|
|
284
|
-
&& undefined === this.volClassCreateBlendAltZ;
|
|
356
|
+
return undefined === this.opaqueColor && undefined === this.opaqueAndCompositeColor && undefined === this.depthAndOrder
|
|
357
|
+
&& undefined === this.hilite && undefined === this.hiliteUsingStencil && undefined === this.occlusion
|
|
358
|
+
&& undefined === this.occlusionBlur && undefined === this.stencilSet && undefined === this.altZOnly
|
|
359
|
+
&& undefined === this.volClassCreateBlend && undefined === this.volClassCreateBlendAltZ && undefined === this.opaqueAll
|
|
360
|
+
&& undefined === this.opaqueAndCompositeAll && undefined === this.opaqueAndCompositeAllHidden && undefined === this.pingPong
|
|
361
|
+
&& undefined === this.pingPongMS && undefined === this.translucent && undefined === this.clearTranslucent
|
|
362
|
+
&& undefined === this.idsAndZ && undefined === this.idsAndAltZ && undefined === this.idsAndZComposite
|
|
363
|
+
&& undefined === this.idsAndAltZComposite && undefined === this.edlDrawCol;
|
|
285
364
|
}
|
|
286
365
|
dispose() {
|
|
287
366
|
this.opaqueColor = (0, core_bentley_1.dispose)(this.opaqueColor);
|
|
@@ -295,29 +374,50 @@ class FrameBuffers {
|
|
|
295
374
|
this.altZOnly = (0, core_bentley_1.dispose)(this.altZOnly);
|
|
296
375
|
this.volClassCreateBlend = (0, core_bentley_1.dispose)(this.volClassCreateBlend);
|
|
297
376
|
this.volClassCreateBlendAltZ = (0, core_bentley_1.dispose)(this.volClassCreateBlendAltZ);
|
|
377
|
+
this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
|
|
378
|
+
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
|
|
379
|
+
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
|
|
380
|
+
this.pingPong = (0, core_bentley_1.dispose)(this.pingPong);
|
|
381
|
+
this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
|
|
382
|
+
this.translucent = (0, core_bentley_1.dispose)(this.translucent);
|
|
383
|
+
this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
|
|
384
|
+
this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
|
|
385
|
+
this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
|
|
386
|
+
this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
|
|
387
|
+
this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
|
|
388
|
+
this.edlDrawCol = (0, core_bentley_1.dispose)(this.edlDrawCol);
|
|
298
389
|
}
|
|
299
390
|
}
|
|
300
391
|
function collectGeometryStatistics(geom, stats) {
|
|
301
392
|
if (undefined !== geom)
|
|
302
393
|
geom.collectStatistics(stats);
|
|
303
394
|
}
|
|
395
|
+
exports.collectGeometryStatistics = collectGeometryStatistics;
|
|
304
396
|
// Maintains the geometry used to execute screenspace operations for a SceneCompositor.
|
|
305
397
|
class Geometry {
|
|
306
398
|
collectStatistics(stats) {
|
|
307
399
|
collectGeometryStatistics(this.composite, stats);
|
|
308
400
|
collectGeometryStatistics(this.volClassColorStencil, stats);
|
|
309
401
|
collectGeometryStatistics(this.volClassCopyZ, stats);
|
|
310
|
-
collectGeometryStatistics(this.volClassCopyZWithPoints, stats);
|
|
311
402
|
collectGeometryStatistics(this.volClassSetBlend, stats);
|
|
312
403
|
collectGeometryStatistics(this.volClassBlend, stats);
|
|
313
404
|
collectGeometryStatistics(this.occlusion, stats);
|
|
314
405
|
collectGeometryStatistics(this.occlusionXBlur, stats);
|
|
315
406
|
collectGeometryStatistics(this.occlusionYBlur, stats);
|
|
407
|
+
collectGeometryStatistics(this.copyPickBuffers, stats);
|
|
408
|
+
collectGeometryStatistics(this.clearTranslucent, stats);
|
|
409
|
+
collectGeometryStatistics(this.clearPickAndColor, stats);
|
|
316
410
|
}
|
|
317
411
|
init(textures) {
|
|
318
412
|
(0, core_bentley_1.assert)(undefined === this.composite);
|
|
319
413
|
this.composite = CachedGeometry_1.CompositeGeometry.createGeometry(textures.color.getHandle(), textures.accumulation.getHandle(), textures.revealage.getHandle(), textures.hilite.getHandle());
|
|
320
|
-
|
|
414
|
+
if (undefined === this.composite)
|
|
415
|
+
return false;
|
|
416
|
+
(0, core_bentley_1.assert)(undefined === this.copyPickBuffers);
|
|
417
|
+
this.copyPickBuffers = CachedGeometry_1.CopyPickBufferGeometry.createGeometry(textures.featureId.getHandle(), textures.depthAndOrder.getHandle());
|
|
418
|
+
this.clearTranslucent = CachedGeometry_1.ViewportQuadGeometry.create(16 /* OITClearTranslucent */);
|
|
419
|
+
this.clearPickAndColor = CachedGeometry_1.ViewportQuadGeometry.create(21 /* ClearPickAndColor */);
|
|
420
|
+
return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;
|
|
321
421
|
}
|
|
322
422
|
enableOcclusion(textures, depth) {
|
|
323
423
|
var _a;
|
|
@@ -334,16 +434,13 @@ class Geometry {
|
|
|
334
434
|
this.occlusionXBlur = (0, core_bentley_1.dispose)(this.occlusionXBlur);
|
|
335
435
|
this.occlusionYBlur = (0, core_bentley_1.dispose)(this.occlusionYBlur);
|
|
336
436
|
}
|
|
337
|
-
enableVolumeClassifier(textures, depth
|
|
437
|
+
enableVolumeClassifier(textures, depth) {
|
|
338
438
|
(0, core_bentley_1.assert)(undefined === this.volClassColorStencil && undefined === this.volClassCopyZ && undefined === this.volClassSetBlend && undefined === this.volClassBlend);
|
|
339
439
|
this.volClassColorStencil = CachedGeometry_1.ViewportQuadGeometry.create(20 /* VolClassColorUsingStencil */);
|
|
340
440
|
this.volClassCopyZ = CachedGeometry_1.SingleTexturedViewportQuadGeometry.createGeometry(depth.getHandle(), 31 /* VolClassCopyZ */);
|
|
341
441
|
this.volClassSetBlend = CachedGeometry_1.VolumeClassifierGeometry.createVCGeometry(depth.getHandle());
|
|
342
442
|
this.volClassBlend = CachedGeometry_1.SingleTexturedViewportQuadGeometry.createGeometry(textures.volClassBlend.getHandle(), 33 /* VolClassBlend */);
|
|
343
|
-
|
|
344
|
-
this.volClassCopyZWithPoints = CachedGeometry_1.ScreenPointsGeometry.createGeometry(width, height, depth.getHandle());
|
|
345
|
-
return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend
|
|
346
|
-
&& (System_1.System.instance.capabilities.supportsFragDepth || undefined !== this.volClassCopyZWithPoints);
|
|
443
|
+
return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend;
|
|
347
444
|
}
|
|
348
445
|
disableVolumeClassifier() {
|
|
349
446
|
if (undefined !== this.volClassColorStencil) {
|
|
@@ -351,20 +448,13 @@ class Geometry {
|
|
|
351
448
|
this.volClassCopyZ = (0, core_bentley_1.dispose)(this.volClassCopyZ);
|
|
352
449
|
this.volClassSetBlend = (0, core_bentley_1.dispose)(this.volClassSetBlend);
|
|
353
450
|
this.volClassBlend = (0, core_bentley_1.dispose)(this.volClassBlend);
|
|
354
|
-
if (!System_1.System.instance.capabilities.supportsFragDepth)
|
|
355
|
-
this.volClassCopyZWithPoints = (0, core_bentley_1.dispose)(this.volClassCopyZWithPoints);
|
|
356
451
|
}
|
|
357
452
|
}
|
|
358
453
|
get isDisposed() {
|
|
359
|
-
return undefined === this.composite
|
|
360
|
-
&& undefined === this.
|
|
361
|
-
&& undefined === this.
|
|
362
|
-
&& undefined === this.
|
|
363
|
-
&& undefined === this.volClassColorStencil
|
|
364
|
-
&& undefined === this.volClassCopyZ
|
|
365
|
-
&& undefined === this.volClassSetBlend
|
|
366
|
-
&& undefined === this.volClassBlend
|
|
367
|
-
&& undefined === this.volClassCopyZWithPoints;
|
|
454
|
+
return undefined === this.composite && undefined === this.occlusion && undefined === this.occlusionXBlur
|
|
455
|
+
&& undefined === this.occlusionYBlur && undefined === this.volClassColorStencil && undefined === this.volClassCopyZ
|
|
456
|
+
&& undefined === this.volClassSetBlend && undefined === this.volClassBlend && undefined === this.copyPickBuffers
|
|
457
|
+
&& undefined === this.clearTranslucent && undefined === this.clearPickAndColor;
|
|
368
458
|
}
|
|
369
459
|
dispose() {
|
|
370
460
|
this.composite = (0, core_bentley_1.dispose)(this.composite);
|
|
@@ -372,6 +462,9 @@ class Geometry {
|
|
|
372
462
|
this.occlusionXBlur = (0, core_bentley_1.dispose)(this.occlusionXBlur);
|
|
373
463
|
this.occlusionYBlur = (0, core_bentley_1.dispose)(this.occlusionYBlur);
|
|
374
464
|
this.disableVolumeClassifier();
|
|
465
|
+
this.copyPickBuffers = (0, core_bentley_1.dispose)(this.copyPickBuffers);
|
|
466
|
+
this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
|
|
467
|
+
this.clearPickAndColor = (0, core_bentley_1.dispose)(this.clearPickAndColor);
|
|
375
468
|
}
|
|
376
469
|
}
|
|
377
470
|
// Represents a view of data read from a region of the frame buffer.
|
|
@@ -519,11 +612,12 @@ class SceneCompositor {
|
|
|
519
612
|
constructor(target) {
|
|
520
613
|
this.target = target;
|
|
521
614
|
this.solarShadowMap = new SolarShadowMap_1.SolarShadowMap(target);
|
|
615
|
+
this.eyeDomeLighting = new EDL_1.EyeDomeLighting(target);
|
|
522
616
|
this._needHiddenEdges = false;
|
|
523
617
|
}
|
|
524
618
|
get needHiddenEdges() { return this._needHiddenEdges; }
|
|
525
619
|
static create(target) {
|
|
526
|
-
return
|
|
620
|
+
return new Compositor(target);
|
|
527
621
|
}
|
|
528
622
|
}
|
|
529
623
|
exports.SceneCompositor = SceneCompositor;
|
|
@@ -536,7 +630,7 @@ var PrimitiveDrawState;
|
|
|
536
630
|
})(PrimitiveDrawState || (PrimitiveDrawState = {}));
|
|
537
631
|
// The actual base class. Specializations are provided based on whether or not multiple render targets are supported.
|
|
538
632
|
class Compositor extends SceneCompositor {
|
|
539
|
-
constructor(target
|
|
633
|
+
constructor(target) {
|
|
540
634
|
super(target);
|
|
541
635
|
this._width = -1;
|
|
542
636
|
this._height = -1;
|
|
@@ -549,14 +643,16 @@ class Compositor extends SceneCompositor {
|
|
|
549
643
|
this._hiliteRenderState = new RenderState_1.RenderState();
|
|
550
644
|
this._noDepthMaskRenderState = new RenderState_1.RenderState();
|
|
551
645
|
this._backgroundMapRenderState = new RenderState_1.RenderState();
|
|
646
|
+
this._pointCloudRenderState = new RenderState_1.RenderState();
|
|
552
647
|
this._debugStencil = 0; // 0 to draw stencil volumes normally, 1 to draw as opaque, 2 to draw blended
|
|
553
648
|
this._haveVolumeClassifier = false;
|
|
554
649
|
this._antialiasSamples = 1;
|
|
555
650
|
this._viewProjectionMatrix = new Matrix_1.Matrix4();
|
|
556
651
|
this._primitiveDrawState = PrimitiveDrawState.Both; // used by drawPrimitive to decide whether a primitive needs to be drawn.
|
|
557
|
-
this.
|
|
558
|
-
this._geom =
|
|
652
|
+
this._fbos = new FrameBuffers();
|
|
653
|
+
this._geom = new Geometry();
|
|
559
654
|
this._opaqueRenderState.flags.depthTest = true;
|
|
655
|
+
this._pointCloudRenderState.flags.depthTest = true;
|
|
560
656
|
this._translucentRenderState.flags.depthMask = false;
|
|
561
657
|
this._translucentRenderState.flags.blend = this._translucentRenderState.flags.depthTest = true;
|
|
562
658
|
this._translucentRenderState.blend.setBlendFuncSeparate(GL_1.GL.BlendFactor.One, GL_1.GL.BlendFactor.Zero, GL_1.GL.BlendFactor.One, GL_1.GL.BlendFactor.OneMinusSrcAlpha);
|
|
@@ -574,123 +670,400 @@ class Compositor extends SceneCompositor {
|
|
|
574
670
|
this._layerRenderState.depthFunc = GL_1.GL.DepthFunc.Always;
|
|
575
671
|
this._layerRenderState.blend.setBlendFunc(GL_1.GL.BlendFactor.One, GL_1.GL.BlendFactor.OneMinusSrcAlpha);
|
|
576
672
|
}
|
|
673
|
+
get featureIds() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }
|
|
674
|
+
get depthAndOrder() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }
|
|
675
|
+
get _samplerFbo() { return this._readPickDataFromPingPong ? this._fbos.pingPong : this._fbos.opaqueAll; }
|
|
676
|
+
getSamplerTexture(index) { return this._samplerFbo.getColor(index); }
|
|
577
677
|
drawPrimitive(primitive, exec, outputsToPick) {
|
|
578
678
|
if ((outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.NonPickable) ||
|
|
579
679
|
(!outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.Pickable))
|
|
580
680
|
primitive.draw(exec);
|
|
581
681
|
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
585
|
-
this._frameBuffers.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
|
|
586
|
-
}
|
|
587
|
-
disableVolumeClassifierFbos() { this._frameBuffers.disableVolumeClassifier(); }
|
|
588
|
-
/** This function generates a texture that contains ambient occlusion information to be applied later. */
|
|
589
|
-
renderAmbientOcclusion() {
|
|
682
|
+
clearOpaque(needComposite) {
|
|
683
|
+
const fbo = needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll;
|
|
590
684
|
const system = System_1.System.instance;
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.
|
|
597
|
-
this.target.techniques.draw(params);
|
|
598
|
-
});
|
|
599
|
-
this.target.endPerfMetricRecord();
|
|
600
|
-
// Render the X-blurred ambient occlusion based on unblurred ambient occlusion
|
|
601
|
-
fbo = this._frameBuffers.occlusionBlur;
|
|
602
|
-
this.target.beginPerfMetricRecord("Blur AO X");
|
|
603
|
-
system.frameBufferStack.execute(fbo, true, false, () => {
|
|
604
|
-
System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
|
|
605
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionXBlur);
|
|
606
|
-
this.target.techniques.draw(params);
|
|
607
|
-
});
|
|
608
|
-
this.target.endPerfMetricRecord();
|
|
609
|
-
// Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)
|
|
610
|
-
fbo = this._frameBuffers.occlusion;
|
|
611
|
-
this.target.beginPerfMetricRecord("Blur AO Y");
|
|
612
|
-
system.frameBufferStack.execute(fbo, true, false, () => {
|
|
613
|
-
System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
|
|
614
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionYBlur);
|
|
685
|
+
system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {
|
|
686
|
+
// Clear pick data buffers to 0's and color buffer to background color
|
|
687
|
+
// (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id
|
|
688
|
+
// (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)
|
|
689
|
+
system.applyRenderState(this._noDepthMaskRenderState);
|
|
690
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.clearPickAndColor);
|
|
615
691
|
this.target.techniques.draw(params);
|
|
692
|
+
// Clear depth buffer
|
|
693
|
+
system.applyRenderState(RenderState_1.RenderState.defaults); // depthMask == true.
|
|
694
|
+
system.context.clearDepth(1.0);
|
|
695
|
+
system.context.clear(GL_1.GL.BufferBit.Depth);
|
|
616
696
|
});
|
|
617
|
-
this.target.endPerfMetricRecord();
|
|
618
697
|
}
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
698
|
+
renderLayers(commands, needComposite, pass) {
|
|
699
|
+
const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
|
|
700
|
+
const useMsBuffers = 1 /* OpaqueLayers */ === pass && fbo.isMultisampled && this.useMsBuffers;
|
|
701
|
+
this._readPickDataFromPingPong = !useMsBuffers;
|
|
702
|
+
System_1.System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {
|
|
703
|
+
this.drawPass(commands, pass, true);
|
|
704
|
+
});
|
|
705
|
+
this._readPickDataFromPingPong = false;
|
|
626
706
|
}
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
const includeOcclusion = this.target.wantAmbientOcclusion;
|
|
632
|
-
const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);
|
|
633
|
-
let wantAntialiasSamples = this.target.antialiasSamples <= 1 || !System_1.System.instance.capabilities.supportsDrawBuffers ? 1 : this.target.antialiasSamples;
|
|
634
|
-
if (wantAntialiasSamples > System_1.System.instance.capabilities.maxAntialiasSamples)
|
|
635
|
-
wantAntialiasSamples = System_1.System.instance.capabilities.maxAntialiasSamples;
|
|
636
|
-
const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);
|
|
637
|
-
// If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.
|
|
638
|
-
if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {
|
|
639
|
-
this._width = width;
|
|
640
|
-
this._height = height;
|
|
641
|
-
this._antialiasSamples = wantAntialiasSamples;
|
|
642
|
-
// init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.
|
|
643
|
-
if (!this.init()) {
|
|
644
|
-
(0, core_bentley_1.assert)(false, "Failed to initialize scene compositor");
|
|
645
|
-
return false;
|
|
646
|
-
}
|
|
707
|
+
renderOpaque(commands, compositeFlags, renderForReadPixels) {
|
|
708
|
+
if (0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */) && !renderForReadPixels) {
|
|
709
|
+
this.renderOpaqueAO(commands);
|
|
710
|
+
return;
|
|
647
711
|
}
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
this._haveVolumeClassifier = false;
|
|
663
|
-
}
|
|
664
|
-
if (includeOcclusion && this._includeOcclusion) {
|
|
665
|
-
// Multisampling and AO buffers are also somewhat co-dependent, so if AO is on
|
|
666
|
-
// and is staying on, just disable AO and let it get re-enabled later.
|
|
667
|
-
this._geom.disableOcclusion();
|
|
668
|
-
this._frameBuffers.disableOcclusion();
|
|
669
|
-
this._textures.disableOcclusion();
|
|
670
|
-
this._includeOcclusion = false;
|
|
671
|
-
}
|
|
672
|
-
if (this._antialiasSamples > 1) {
|
|
673
|
-
if (!this.enableMultiSampling()) {
|
|
674
|
-
(0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
|
|
675
|
-
return false;
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
else {
|
|
679
|
-
if (!this.disableMultiSampling()) {
|
|
680
|
-
(0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
|
|
681
|
-
return false;
|
|
682
|
-
}
|
|
712
|
+
const needComposite = 0 /* None */ !== compositeFlags;
|
|
713
|
+
const fbStack = System_1.System.instance.frameBufferStack;
|
|
714
|
+
// Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).
|
|
715
|
+
let fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
|
|
716
|
+
const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
|
|
717
|
+
this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
|
|
718
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
719
|
+
this.drawPass(commands, 2 /* OpaqueLinear */);
|
|
720
|
+
this.drawPass(commands, 3 /* OpaquePlanar */, true);
|
|
721
|
+
if (renderForReadPixels) {
|
|
722
|
+
this.drawPass(commands, 4 /* PointClouds */, true); // don't need EDL for this
|
|
723
|
+
this.drawPass(commands, 5 /* OpaqueGeneral */, true);
|
|
724
|
+
if (useMsBuffers)
|
|
725
|
+
fbo.blitMsBuffersToTextures(true);
|
|
683
726
|
}
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
|
|
727
|
+
});
|
|
728
|
+
this._readPickDataFromPingPong = false;
|
|
729
|
+
// The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
|
|
730
|
+
if (!renderForReadPixels) {
|
|
731
|
+
fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
|
|
732
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
733
|
+
this.drawPass(commands, 5 /* OpaqueGeneral */, false);
|
|
734
|
+
this.drawPass(commands, 9 /* HiddenEdge */, false);
|
|
735
|
+
});
|
|
736
|
+
// assume we are done with MS at this point, so update the non-MS buffers
|
|
737
|
+
if (useMsBuffers)
|
|
738
|
+
fbo.blitMsBuffersToTextures(needComposite);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
renderOpaqueAO(commands) {
|
|
742
|
+
const fbStack = System_1.System.instance.frameBufferStack;
|
|
743
|
+
const haveHiddenEdges = 0 !== commands.getCommands(9 /* HiddenEdge */).length;
|
|
744
|
+
// Output the linear, planar, and pickable surfaces to color and pick data buffers.
|
|
745
|
+
let fbo = this._fbos.opaqueAndCompositeAll;
|
|
746
|
+
const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
|
|
747
|
+
this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
|
|
748
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
749
|
+
this.drawPass(commands, 2 /* OpaqueLinear */);
|
|
750
|
+
this.drawPass(commands, 3 /* OpaquePlanar */, true);
|
|
751
|
+
this._primitiveDrawState = PrimitiveDrawState.Pickable;
|
|
752
|
+
this.drawPass(commands, 5 /* OpaqueGeneral */, true);
|
|
753
|
+
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
754
|
+
if (useMsBuffers)
|
|
755
|
+
fbo.blitMsBuffersToTextures(true);
|
|
756
|
+
});
|
|
757
|
+
this._readPickDataFromPingPong = false;
|
|
758
|
+
// Output the non-pickable surfaces and hidden edges to just the color buffer.
|
|
759
|
+
fbo = this._fbos.opaqueAndCompositeColor;
|
|
760
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
761
|
+
this._primitiveDrawState = PrimitiveDrawState.NonPickable;
|
|
762
|
+
this.drawPass(commands, 5 /* OpaqueGeneral */, false);
|
|
763
|
+
if (haveHiddenEdges)
|
|
764
|
+
this.drawPass(commands, 9 /* HiddenEdge */, false);
|
|
765
|
+
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
766
|
+
});
|
|
767
|
+
if (useMsBuffers)
|
|
768
|
+
fbo.blitMsBuffersToTextures(true);
|
|
769
|
+
// If there are no hidden edges, then we're done & can run the AO passes using the normal depthAndOrder texture.
|
|
770
|
+
if (haveHiddenEdges) {
|
|
771
|
+
// AO needs the pick data (orderAndDepth) for the hidden edges. We don't want it in with the other pick data though since they are not pickable, so we will use other textures.
|
|
772
|
+
// If not multisampling we will re-use the ping-pong/transparency textures since we are done with ping-ponging at this point and transparency happens later.
|
|
773
|
+
// If multisampling then we will use the accumulation texture for featureIDs and a special texture for depthAndOrder since the revealage texture is not the right type for multisampling.
|
|
774
|
+
// First we will need to copy what's in the pick buffers so far into the hidden pick buffers.
|
|
775
|
+
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
776
|
+
fbo = (useMsBuffers ? this._fbos.pingPongMS : this._fbos.pingPong);
|
|
777
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
778
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.copyPickBuffers);
|
|
779
|
+
this.target.techniques.draw(params);
|
|
780
|
+
});
|
|
781
|
+
if (useMsBuffers)
|
|
782
|
+
fbo.blitMsBuffersToTextures(false, 1); // only want to blit the depth/order target
|
|
783
|
+
// Now draw the hidden edges, using an fbo which places their depth/order into the hidden pick buffers.
|
|
784
|
+
// Since we are not writing to the actual pick buffers we let this._readPickDataFromPingPong remain false.
|
|
785
|
+
fbo = this._fbos.opaqueAndCompositeAllHidden;
|
|
786
|
+
this._primitiveDrawState = PrimitiveDrawState.Pickable;
|
|
787
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
788
|
+
this.drawPass(commands, 9 /* HiddenEdge */, false);
|
|
789
|
+
});
|
|
790
|
+
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
791
|
+
if (useMsBuffers) {
|
|
792
|
+
// Only want to blit the color and depth/order targets as the featureId target is not blit-able and will generate a GL error.
|
|
793
|
+
fbo.blitMsBuffersToTextures(false, 0);
|
|
794
|
+
fbo.blitMsBuffersToTextures(false, 2);
|
|
795
|
+
}
|
|
796
|
+
this._needHiddenEdges = false;
|
|
797
|
+
}
|
|
798
|
+
this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture with the hidden edges to be read for the 2nd AO blur pass.
|
|
799
|
+
this.renderAmbientOcclusion();
|
|
800
|
+
this._needHiddenEdges = false;
|
|
801
|
+
}
|
|
802
|
+
renderPointClouds(commands, compositeFlags) {
|
|
803
|
+
var _a, _b;
|
|
804
|
+
const is3d = 2 /* Perspective */ === this.target.uniforms.frustum.type;
|
|
805
|
+
// separate individual point clouds and get their point cloud settings
|
|
806
|
+
const pointClouds = [];
|
|
807
|
+
let pcs;
|
|
808
|
+
const cmds = commands.getCommands(4 /* PointClouds */);
|
|
809
|
+
let curPC;
|
|
810
|
+
let pushDepth = 0;
|
|
811
|
+
for (const cmd of cmds) {
|
|
812
|
+
if ("pushBranch" === cmd.opcode) { // should be first command
|
|
813
|
+
++pushDepth;
|
|
814
|
+
if (pushDepth === 1) {
|
|
815
|
+
pcs = (_a = cmd.branch.branch.realityModelDisplaySettings) === null || _a === void 0 ? void 0 : _a.pointCloud;
|
|
816
|
+
this.target.uniforms.realityModel.pointCloud.updateRange(cmd.branch.branch.realityModelRange, this.target, cmd.branch.localToWorldTransform, is3d);
|
|
817
|
+
pointClouds.push(curPC = { pcs, cmds: [cmd] });
|
|
818
|
+
}
|
|
819
|
+
else {
|
|
820
|
+
(0, core_bentley_1.assert)(undefined !== curPC);
|
|
821
|
+
curPC.cmds.push(cmd);
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
else {
|
|
825
|
+
if ("popBranch" === cmd.opcode)
|
|
826
|
+
--pushDepth;
|
|
827
|
+
(0, core_bentley_1.assert)(undefined !== curPC);
|
|
828
|
+
curPC.cmds.push(cmd);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
const needComposite = 0 /* None */ !== compositeFlags;
|
|
832
|
+
const fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
|
|
833
|
+
const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
|
|
834
|
+
const system = System_1.System.instance;
|
|
835
|
+
const fbStack = system.frameBufferStack;
|
|
836
|
+
this._readPickDataFromPingPong = false;
|
|
837
|
+
for (const pc of pointClouds) {
|
|
838
|
+
pcs = pc.pcs;
|
|
839
|
+
let edlOn = (pcs === null || pcs === void 0 ? void 0 : pcs.edlMode) !== "off" && is3d;
|
|
840
|
+
if (edlOn) {
|
|
841
|
+
if (undefined === this._textures.hilite)
|
|
842
|
+
edlOn = false;
|
|
843
|
+
else {
|
|
844
|
+
// create fbo on fly if not present, or has changed (from MS)
|
|
845
|
+
// ###TODO consider not drawing point clouds to MS buffers, at least if EDL, it isn't worth the overhead.
|
|
846
|
+
// would have to blit depth before draw, use depth for draw, then run shader to copy depth back to MSAA
|
|
847
|
+
// at end, wherever color buf changed (test alpha, else discard)
|
|
848
|
+
// this would also simplify this code considerably
|
|
849
|
+
let drawColBufs;
|
|
850
|
+
if (undefined !== this._fbos.edlDrawCol)
|
|
851
|
+
drawColBufs = this._fbos.edlDrawCol.getColorTargets(useMsBuffers, 0);
|
|
852
|
+
if (undefined === this._fbos.edlDrawCol || this._textures.hilite !== (drawColBufs === null || drawColBufs === void 0 ? void 0 : drawColBufs.tex) || this._textures.hiliteMsBuff !== drawColBufs.msBuf) {
|
|
853
|
+
this._fbos.edlDrawCol = (0, core_bentley_1.dispose)(this._fbos.edlDrawCol);
|
|
854
|
+
const filters = [GL_1.GL.MultiSampling.Filter.Linear];
|
|
855
|
+
if (useMsBuffers)
|
|
856
|
+
this._fbos.edlDrawCol = FrameBuffer_1.FrameBuffer.create([this._textures.hilite], this._depth, useMsBuffers && this._textures.hiliteMsBuff ? [this._textures.hiliteMsBuff] : undefined, filters, this._depthMS);
|
|
857
|
+
else
|
|
858
|
+
this._fbos.edlDrawCol = FrameBuffer_1.FrameBuffer.create([this._textures.hilite], this._depth);
|
|
859
|
+
}
|
|
860
|
+
if (undefined === this._fbos.edlDrawCol)
|
|
861
|
+
edlOn = false;
|
|
862
|
+
else { // can draw EDL
|
|
863
|
+
// first draw pointcloud to borrowed hilite texture(MS) and regular depth(MS) buffers
|
|
864
|
+
fbStack.execute(this._fbos.edlDrawCol, true, useMsBuffers, () => {
|
|
865
|
+
system.context.clearColor(0, 0, 0, 0);
|
|
866
|
+
system.context.clear(GL_1.GL.BufferBit.Color);
|
|
867
|
+
system.applyRenderState(this.getRenderState(4 /* PointClouds */));
|
|
868
|
+
this.target.techniques.execute(this.target, pc.cmds, 4 /* PointClouds */);
|
|
869
|
+
});
|
|
870
|
+
if (useMsBuffers)
|
|
871
|
+
this._fbos.edlDrawCol.blitMsBuffersToTextures(true, 0); // need to read the non-MS depth and hilite buffers
|
|
872
|
+
// next process buffers to generate EDL (depth buffer is passed during init)
|
|
873
|
+
this.target.beginPerfMetricRecord("Calc EDL"); // ### todo keep? (probably)
|
|
874
|
+
const sts = this.eyeDomeLighting.draw({
|
|
875
|
+
edlMode: ((_b = pc.pcs) === null || _b === void 0 ? void 0 : _b.edlMode) === "full" ? EDL_1.EDLMode.Full : EDL_1.EDLMode.On,
|
|
876
|
+
edlFilter: !!(pcs === null || pcs === void 0 ? void 0 : pcs.edlFilter),
|
|
877
|
+
useMsBuffers,
|
|
878
|
+
inputTex: this._textures.hilite,
|
|
879
|
+
curFbo: fbo,
|
|
880
|
+
});
|
|
881
|
+
this.target.endPerfMetricRecord();
|
|
882
|
+
if (!sts) {
|
|
883
|
+
edlOn = false;
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
if (!edlOn) {
|
|
889
|
+
// draw the regular way
|
|
890
|
+
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
891
|
+
system.applyRenderState(this.getRenderState(4 /* PointClouds */));
|
|
892
|
+
this.target.techniques.execute(this.target, pc.cmds, 4 /* PointClouds */);
|
|
893
|
+
});
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
renderForVolumeClassification(commands, compositeFlags, renderForReadPixels) {
|
|
898
|
+
const needComposite = 0 /* None */ !== compositeFlags;
|
|
899
|
+
const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
|
|
900
|
+
const fbStack = System_1.System.instance.frameBufferStack;
|
|
901
|
+
if (renderForReadPixels || needAO) {
|
|
902
|
+
this._readPickDataFromPingPong = true;
|
|
903
|
+
fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll, true, this.useMsBuffers, () => {
|
|
904
|
+
this.drawPass(commands, 5 /* OpaqueGeneral */, true, 20 /* VolumeClassifiedRealityData */);
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
else {
|
|
908
|
+
this._readPickDataFromPingPong = false;
|
|
909
|
+
fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, true, this.useMsBuffers, () => {
|
|
910
|
+
this.drawPass(commands, 5 /* OpaqueGeneral */, false, 20 /* VolumeClassifiedRealityData */);
|
|
911
|
+
});
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
renderIndexedClassifierForReadPixels(cmds, state, renderForIntersectingVolumes, needComposite) {
|
|
915
|
+
this._readPickDataFromPingPong = true;
|
|
916
|
+
const fbo = (renderForIntersectingVolumes ? (needComposite ? this._fbos.idsAndZComposite : this._fbos.idsAndZ)
|
|
917
|
+
: (needComposite ? this._fbos.idsAndAltZComposite : this._fbos.idsAndAltZ));
|
|
918
|
+
System_1.System.instance.frameBufferStack.execute(fbo, true, false, () => {
|
|
919
|
+
System_1.System.instance.applyRenderState(state);
|
|
920
|
+
this.target.techniques.execute(this.target, cmds, 5 /* OpaqueGeneral */);
|
|
921
|
+
});
|
|
922
|
+
this._readPickDataFromPingPong = false;
|
|
923
|
+
}
|
|
924
|
+
clearTranslucent() {
|
|
925
|
+
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
926
|
+
System_1.System.instance.frameBufferStack.execute(this._fbos.clearTranslucent, true, false, () => {
|
|
927
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.clearTranslucent);
|
|
928
|
+
this.target.techniques.draw(params);
|
|
929
|
+
});
|
|
930
|
+
}
|
|
931
|
+
renderTranslucent(commands) {
|
|
932
|
+
System_1.System.instance.frameBufferStack.execute(this._fbos.translucent, true, false, () => {
|
|
933
|
+
this.drawPass(commands, 8 /* Translucent */);
|
|
934
|
+
});
|
|
935
|
+
}
|
|
936
|
+
getBackgroundFbo(needComposite) {
|
|
937
|
+
return needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
|
|
938
|
+
}
|
|
939
|
+
pingPong() {
|
|
940
|
+
if (this._fbos.opaqueAll.isMultisampled && this.useMsBuffers) {
|
|
941
|
+
// If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.
|
|
942
|
+
this._fbos.opaqueAll.blitMsBuffersToTextures(false, 1);
|
|
943
|
+
this._fbos.opaqueAll.blitMsBuffersToTextures(false, 2);
|
|
944
|
+
}
|
|
945
|
+
else {
|
|
946
|
+
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
947
|
+
System_1.System.instance.frameBufferStack.execute(this._fbos.pingPong, true, this.useMsBuffers, () => {
|
|
948
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.copyPickBuffers);
|
|
949
|
+
this.target.techniques.draw(params);
|
|
950
|
+
});
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
get antialiasSamples() { return this._antialiasSamples; }
|
|
954
|
+
get useMsBuffers() { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }
|
|
955
|
+
enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
956
|
+
this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
|
|
957
|
+
}
|
|
958
|
+
disableVolumeClassifierFbos() {
|
|
959
|
+
this._fbos.disableVolumeClassifier();
|
|
960
|
+
}
|
|
961
|
+
/** This function generates a texture that contains ambient occlusion information to be applied later. */
|
|
962
|
+
renderAmbientOcclusion() {
|
|
963
|
+
const system = System_1.System.instance;
|
|
964
|
+
// Render unblurred ambient occlusion based on depth buffer
|
|
965
|
+
let fbo = this._fbos.occlusion;
|
|
966
|
+
this.target.beginPerfMetricRecord("Compute AO");
|
|
967
|
+
system.frameBufferStack.execute(fbo, true, false, () => {
|
|
968
|
+
System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
|
|
969
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusion);
|
|
970
|
+
this.target.techniques.draw(params);
|
|
971
|
+
});
|
|
972
|
+
this.target.endPerfMetricRecord();
|
|
973
|
+
// Render the X-blurred ambient occlusion based on unblurred ambient occlusion
|
|
974
|
+
fbo = this._fbos.occlusionBlur;
|
|
975
|
+
this.target.beginPerfMetricRecord("Blur AO X");
|
|
976
|
+
system.frameBufferStack.execute(fbo, true, false, () => {
|
|
977
|
+
System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
|
|
978
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionXBlur);
|
|
979
|
+
this.target.techniques.draw(params);
|
|
980
|
+
});
|
|
981
|
+
this.target.endPerfMetricRecord();
|
|
982
|
+
// Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)
|
|
983
|
+
fbo = this._fbos.occlusion;
|
|
984
|
+
this.target.beginPerfMetricRecord("Blur AO Y");
|
|
985
|
+
system.frameBufferStack.execute(fbo, true, false, () => {
|
|
986
|
+
System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
|
|
987
|
+
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionYBlur);
|
|
988
|
+
this.target.techniques.draw(params);
|
|
989
|
+
});
|
|
990
|
+
this.target.endPerfMetricRecord();
|
|
991
|
+
}
|
|
992
|
+
collectStatistics(stats) {
|
|
993
|
+
if (undefined !== this._depth)
|
|
994
|
+
stats.addTextureAttachment(this._depth.bytesUsed);
|
|
995
|
+
if (undefined !== this._depthMS)
|
|
996
|
+
stats.addTextureAttachment(this._depthMS.bytesUsed);
|
|
997
|
+
this._textures.collectStatistics(stats);
|
|
998
|
+
this._geom.collectStatistics(stats);
|
|
999
|
+
}
|
|
1000
|
+
preDraw() {
|
|
1001
|
+
const rect = this.target.viewRect;
|
|
1002
|
+
const width = rect.width;
|
|
1003
|
+
const height = rect.height;
|
|
1004
|
+
const includeOcclusion = this.target.wantAmbientOcclusion;
|
|
1005
|
+
const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);
|
|
1006
|
+
let wantAntialiasSamples = this.target.antialiasSamples <= 1 ? 1 : this.target.antialiasSamples;
|
|
1007
|
+
if (wantAntialiasSamples > System_1.System.instance.maxAntialiasSamples)
|
|
1008
|
+
wantAntialiasSamples = System_1.System.instance.maxAntialiasSamples;
|
|
1009
|
+
const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);
|
|
1010
|
+
// If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.
|
|
1011
|
+
if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {
|
|
1012
|
+
this._width = width;
|
|
1013
|
+
this._height = height;
|
|
1014
|
+
this._antialiasSamples = wantAntialiasSamples;
|
|
1015
|
+
// init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.
|
|
1016
|
+
if (!this.init()) {
|
|
1017
|
+
(0, core_bentley_1.assert)(false, "Failed to initialize scene compositor");
|
|
1018
|
+
return false;
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
else if (this._antialiasSamples !== wantAntialiasSamples) {
|
|
1022
|
+
// Turn on or off multisampling. Rather than just re-initializing, we can save the
|
|
1023
|
+
// non multisampled textures & FBOs and just try to add or delete the multisampled ones.
|
|
1024
|
+
this._antialiasSamples = wantAntialiasSamples;
|
|
1025
|
+
if (wantVolumeClassifier && this._haveVolumeClassifier) {
|
|
1026
|
+
// Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on
|
|
1027
|
+
// and is staying on, just disable volume classifiers and let them get re-enabled later.
|
|
1028
|
+
this.disableVolumeClassifierFbos();
|
|
1029
|
+
this._geom.disableVolumeClassifier();
|
|
1030
|
+
this._textures.disableVolumeClassifier();
|
|
1031
|
+
if (undefined !== this._vcAltDepthStencil) {
|
|
1032
|
+
this._vcAltDepthStencil.dispose();
|
|
1033
|
+
this._vcAltDepthStencil = undefined;
|
|
1034
|
+
}
|
|
1035
|
+
this._haveVolumeClassifier = false;
|
|
1036
|
+
}
|
|
1037
|
+
if (includeOcclusion && this._includeOcclusion) {
|
|
1038
|
+
// Multisampling and AO buffers are also somewhat co-dependent, so if AO is on
|
|
1039
|
+
// and is staying on, just disable AO and let it get re-enabled later.
|
|
1040
|
+
this._geom.disableOcclusion();
|
|
1041
|
+
this._fbos.disableOcclusion();
|
|
1042
|
+
this._textures.disableOcclusion();
|
|
1043
|
+
this._includeOcclusion = false;
|
|
1044
|
+
}
|
|
1045
|
+
if (this._antialiasSamples > 1) {
|
|
1046
|
+
if (!this.enableMultiSampling()) {
|
|
1047
|
+
(0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
|
|
1048
|
+
return false;
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
else {
|
|
1052
|
+
if (!this.disableMultiSampling()) {
|
|
1053
|
+
(0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
|
|
1054
|
+
return false;
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
// Allocate or free ambient occlusion-related resources if necessary
|
|
1059
|
+
if (includeOcclusion !== this._includeOcclusion) {
|
|
687
1060
|
this._includeOcclusion = includeOcclusion;
|
|
688
1061
|
if (includeOcclusion) {
|
|
689
1062
|
if (!this._textures.enableOcclusion(width, height, this._antialiasSamples)) {
|
|
690
1063
|
(0, core_bentley_1.assert)(false, "Failed to initialize occlusion textures");
|
|
691
1064
|
return false;
|
|
692
1065
|
}
|
|
693
|
-
if (!this.
|
|
1066
|
+
if (!this._fbos.enableOcclusion(this._textures, this._depth, this._depthMS)) {
|
|
694
1067
|
(0, core_bentley_1.assert)(false, "Failed to initialize occlusion frame buffers");
|
|
695
1068
|
return false;
|
|
696
1069
|
}
|
|
@@ -698,28 +1071,22 @@ class Compositor extends SceneCompositor {
|
|
|
698
1071
|
}
|
|
699
1072
|
else {
|
|
700
1073
|
this._geom.disableOcclusion();
|
|
701
|
-
this.
|
|
1074
|
+
this._fbos.disableOcclusion();
|
|
702
1075
|
this._textures.disableOcclusion();
|
|
703
1076
|
}
|
|
704
1077
|
}
|
|
705
|
-
// Allocate or free volume classifier-related resources if necessary.
|
|
1078
|
+
// Allocate or free volume classifier-related resources if necessary.
|
|
706
1079
|
if (wantVolumeClassifier !== this._haveVolumeClassifier) {
|
|
707
|
-
if (wantVolumeClassifier
|
|
1080
|
+
if (wantVolumeClassifier) {
|
|
708
1081
|
this._vcAltDepthStencil = System_1.System.instance.createDepthBuffer(width, height);
|
|
709
1082
|
if (undefined !== this._depthMS)
|
|
710
1083
|
this._vcAltDepthStencilMS = System_1.System.instance.createDepthBuffer(width, height, this._antialiasSamples);
|
|
711
|
-
if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS))
|
|
712
|
-
(0, core_bentley_1.assert)(false, "Failed to initialize volume classifier depth buffer");
|
|
1084
|
+
if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS))
|
|
713
1085
|
return false;
|
|
714
|
-
|
|
715
|
-
if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples)) {
|
|
716
|
-
(0, core_bentley_1.assert)(false, "Failed to initialize volume classifier textures");
|
|
1086
|
+
if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples))
|
|
717
1087
|
return false;
|
|
718
|
-
|
|
719
|
-
if (!this._geom.enableVolumeClassifier(this._textures, this._depth, width, height)) {
|
|
720
|
-
(0, core_bentley_1.assert)(false, "Failed to initialize volume classifier geometry");
|
|
1088
|
+
if (!this._geom.enableVolumeClassifier(this._textures, this._depth))
|
|
721
1089
|
return false;
|
|
722
|
-
}
|
|
723
1090
|
this.enableVolumeClassifierFbos(this._textures, this._depth, this._vcAltDepthStencil, this._depthMS, this._vcAltDepthStencilMS);
|
|
724
1091
|
this._haveVolumeClassifier = true;
|
|
725
1092
|
}
|
|
@@ -737,10 +1104,8 @@ class Compositor extends SceneCompositor {
|
|
|
737
1104
|
return true;
|
|
738
1105
|
}
|
|
739
1106
|
draw(commands) {
|
|
740
|
-
if (!this.preDraw())
|
|
741
|
-
(0, core_bentley_1.assert)(false);
|
|
1107
|
+
if (!this.preDraw())
|
|
742
1108
|
return;
|
|
743
|
-
}
|
|
744
1109
|
const compositeFlags = commands.compositeFlags;
|
|
745
1110
|
const needComposite = 0 /* None */ !== compositeFlags;
|
|
746
1111
|
// Clear output targets
|
|
@@ -788,6 +1153,10 @@ class Compositor extends SceneCompositor {
|
|
|
788
1153
|
frameBufferStack: System_1.System.instance.frameBufferStack,
|
|
789
1154
|
});
|
|
790
1155
|
this.target.frameStatsCollector.endTime("onRenderOpaqueTime");
|
|
1156
|
+
// Render point cloud geometry with possible EDL
|
|
1157
|
+
this.target.beginPerfMetricRecord("Render PointClouds");
|
|
1158
|
+
this.renderPointClouds(commands, compositeFlags);
|
|
1159
|
+
this.target.endPerfMetricRecord();
|
|
791
1160
|
// Render opaque geometry
|
|
792
1161
|
this.target.beginPerfMetricRecord("Render Opaque");
|
|
793
1162
|
this.renderOpaque(commands, compositeFlags, false);
|
|
@@ -796,7 +1165,7 @@ class Compositor extends SceneCompositor {
|
|
|
796
1165
|
this.target.frameStatsCollector.beginTime("translucentTime");
|
|
797
1166
|
// Render translucent layers
|
|
798
1167
|
this.target.beginPerfMetricRecord("Render Translucent Layers");
|
|
799
|
-
this.renderLayers(commands, needComposite,
|
|
1168
|
+
this.renderLayers(commands, needComposite, 7 /* TranslucentLayers */);
|
|
800
1169
|
this.target.endPerfMetricRecord();
|
|
801
1170
|
if (needComposite) {
|
|
802
1171
|
this._geom.composite.update(compositeFlags);
|
|
@@ -817,13 +1186,13 @@ class Compositor extends SceneCompositor {
|
|
|
817
1186
|
// Render overlay Layers
|
|
818
1187
|
this.target.frameStatsCollector.beginTime("overlaysTime");
|
|
819
1188
|
this.target.beginPerfMetricRecord("Render Overlay Layers");
|
|
820
|
-
this.renderLayers(commands, false,
|
|
1189
|
+
this.renderLayers(commands, false, 11 /* OverlayLayers */);
|
|
821
1190
|
this.target.endPerfMetricRecord();
|
|
822
1191
|
this.target.frameStatsCollector.endTime("overlaysTime");
|
|
823
1192
|
this.target.popViewClip();
|
|
824
1193
|
}
|
|
825
1194
|
get fullHeight() { return this.target.viewRect.height; }
|
|
826
|
-
drawForReadPixels(commands, sceneOverlays,
|
|
1195
|
+
drawForReadPixels(commands, sceneOverlays, worldOverlayDecorations, viewOverlayDecorations) {
|
|
827
1196
|
this.target.beginPerfMetricRecord("Render Background", true);
|
|
828
1197
|
if (!this.preDraw()) {
|
|
829
1198
|
this.target.endPerfMetricRecord(true); // End Render Background record if returning
|
|
@@ -846,28 +1215,29 @@ class Compositor extends SceneCompositor {
|
|
|
846
1215
|
// Ensure it draws before any opaque geometry (including layers), without depth.
|
|
847
1216
|
this.target.beginPerfMetricRecord("Render background map", true);
|
|
848
1217
|
this.target.drawingBackgroundForReadPixels = true;
|
|
849
|
-
this.renderLayers(commands, false,
|
|
1218
|
+
this.renderLayers(commands, false, 15 /* BackgroundMap */);
|
|
850
1219
|
this.target.drawingBackgroundForReadPixels = false;
|
|
851
1220
|
this.target.endPerfMetricRecord(true);
|
|
852
1221
|
this.target.beginPerfMetricRecord("Render Opaque Layers", true);
|
|
853
1222
|
this.renderLayers(commands, false, 1 /* OpaqueLayers */);
|
|
854
1223
|
this.target.endPerfMetricRecord(true);
|
|
1224
|
+
// PointClouds are rendered in Opaque pass for readPixels
|
|
855
1225
|
this.target.beginPerfMetricRecord("Render Opaque", true);
|
|
856
1226
|
this.renderOpaque(commands, 0 /* None */, true);
|
|
857
1227
|
this.target.endPerfMetricRecord(true);
|
|
858
1228
|
this.target.beginPerfMetricRecord("Render Translucent Layers", true);
|
|
859
|
-
this.renderLayers(commands, false,
|
|
1229
|
+
this.renderLayers(commands, false, 7 /* TranslucentLayers */);
|
|
860
1230
|
this.target.endPerfMetricRecord(true);
|
|
861
1231
|
this.target.beginPerfMetricRecord("Render Overlay Layers", true);
|
|
862
|
-
this.renderLayers(commands, false,
|
|
1232
|
+
this.renderLayers(commands, false, 11 /* OverlayLayers */);
|
|
863
1233
|
this.target.endPerfMetricRecord(true);
|
|
864
1234
|
this.target.popViewClip();
|
|
865
1235
|
}
|
|
866
|
-
if (
|
|
1236
|
+
if (!sceneOverlays.length && !(worldOverlayDecorations === null || worldOverlayDecorations === void 0 ? void 0 : worldOverlayDecorations.length) && !(viewOverlayDecorations === null || viewOverlayDecorations === void 0 ? void 0 : viewOverlayDecorations.length))
|
|
867
1237
|
return;
|
|
868
1238
|
// Now populate the opaque passes with any pickable world overlays
|
|
869
1239
|
this.target.beginPerfMetricRecord("Overlay Draws", true);
|
|
870
|
-
commands.initForPickOverlays(sceneOverlays,
|
|
1240
|
+
commands.initForPickOverlays(sceneOverlays, worldOverlayDecorations, viewOverlayDecorations);
|
|
871
1241
|
if (commands.isEmpty) {
|
|
872
1242
|
this.target.endPerfMetricRecord(true); // End Overlay Draws record if returning
|
|
873
1243
|
return;
|
|
@@ -876,7 +1246,7 @@ class Compositor extends SceneCompositor {
|
|
|
876
1246
|
// (If *only* overlays exist, then clearOpaque() above already took care of this).
|
|
877
1247
|
if (haveRenderCommands) {
|
|
878
1248
|
const system = System_1.System.instance;
|
|
879
|
-
system.frameBufferStack.execute(this.
|
|
1249
|
+
system.frameBufferStack.execute(this._fbos.opaqueColor, true, this.useMsBuffers, () => {
|
|
880
1250
|
system.applyRenderState(RenderState_1.RenderState.defaults);
|
|
881
1251
|
system.context.clearDepth(1.0);
|
|
882
1252
|
system.context.clear(GL_1.GL.BufferBit.Depth);
|
|
@@ -894,7 +1264,7 @@ class Compositor extends SceneCompositor {
|
|
|
894
1264
|
readPixels(rect, selector) {
|
|
895
1265
|
return PixelBuffer.create(rect, selector, this);
|
|
896
1266
|
}
|
|
897
|
-
readDepthAndOrder(rect) { return this.readFrameBuffer(rect, this.
|
|
1267
|
+
readDepthAndOrder(rect) { return this.readFrameBuffer(rect, this._fbos.depthAndOrder); }
|
|
898
1268
|
readFeatureIds(rect) {
|
|
899
1269
|
const tex = this._textures.featureId;
|
|
900
1270
|
if (undefined === tex)
|
|
@@ -908,8 +1278,8 @@ class Compositor extends SceneCompositor {
|
|
|
908
1278
|
this.solarShadowMap.update(context);
|
|
909
1279
|
}
|
|
910
1280
|
get screenSpaceEffectFbo() {
|
|
911
|
-
(0, core_bentley_1.assert)(undefined !== this.
|
|
912
|
-
return this.
|
|
1281
|
+
(0, core_bentley_1.assert)(undefined !== this._fbos.hilite);
|
|
1282
|
+
return this._fbos.hilite;
|
|
913
1283
|
}
|
|
914
1284
|
readFrameBuffer(rect, fbo) {
|
|
915
1285
|
if (undefined === fbo || !Diagnostics_1.Debug.isValidFrameBuffer)
|
|
@@ -934,14 +1304,16 @@ class Compositor extends SceneCompositor {
|
|
|
934
1304
|
&& undefined === this._vcAltDepthStencil
|
|
935
1305
|
&& !this._includeOcclusion
|
|
936
1306
|
&& this._textures.isDisposed
|
|
937
|
-
&& this.
|
|
1307
|
+
&& this._fbos.isDisposed
|
|
938
1308
|
&& this._geom.isDisposed
|
|
939
1309
|
&& !this._haveVolumeClassifier
|
|
940
|
-
&& this.solarShadowMap.isDisposed
|
|
1310
|
+
&& this.solarShadowMap.isDisposed
|
|
1311
|
+
&& this.eyeDomeLighting.isDisposed;
|
|
941
1312
|
}
|
|
942
1313
|
dispose() {
|
|
943
1314
|
this.reset();
|
|
944
1315
|
(0, core_bentley_1.dispose)(this.solarShadowMap);
|
|
1316
|
+
(0, core_bentley_1.dispose)(this.eyeDomeLighting);
|
|
945
1317
|
}
|
|
946
1318
|
// Resets anything that depends on the dimensions of the render target.
|
|
947
1319
|
// Does *not* dispose the solar shadow map.
|
|
@@ -951,9 +1323,10 @@ class Compositor extends SceneCompositor {
|
|
|
951
1323
|
this._vcAltDepthStencil = (0, core_bentley_1.dispose)(this._vcAltDepthStencil);
|
|
952
1324
|
this._includeOcclusion = false;
|
|
953
1325
|
(0, core_bentley_1.dispose)(this._textures);
|
|
954
|
-
(0, core_bentley_1.dispose)(this.
|
|
1326
|
+
(0, core_bentley_1.dispose)(this._fbos);
|
|
955
1327
|
(0, core_bentley_1.dispose)(this._geom);
|
|
956
1328
|
this._haveVolumeClassifier = false;
|
|
1329
|
+
this.eyeDomeLighting.reset();
|
|
957
1330
|
}
|
|
958
1331
|
init() {
|
|
959
1332
|
this.reset();
|
|
@@ -964,8 +1337,9 @@ class Compositor extends SceneCompositor {
|
|
|
964
1337
|
this._depthMS = undefined;
|
|
965
1338
|
if (this._depth !== undefined) {
|
|
966
1339
|
return this._textures.init(this._width, this._height, this._antialiasSamples)
|
|
967
|
-
&& this.
|
|
968
|
-
&& this._geom.init(this._textures)
|
|
1340
|
+
&& this._fbos.init(this._textures, this._depth, this._depthMS)
|
|
1341
|
+
&& this._geom.init(this._textures)
|
|
1342
|
+
&& this.eyeDomeLighting.init(this._width, this._height, this._depth);
|
|
969
1343
|
}
|
|
970
1344
|
return false;
|
|
971
1345
|
}
|
|
@@ -975,36 +1349,42 @@ class Compositor extends SceneCompositor {
|
|
|
975
1349
|
this._depthMS = System_1.System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);
|
|
976
1350
|
if (undefined === this._depthMS)
|
|
977
1351
|
return false;
|
|
978
|
-
|
|
1352
|
+
if (!this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples))
|
|
1353
|
+
return false;
|
|
1354
|
+
(0, core_bentley_1.assert)(undefined !== this._depth && undefined !== this._depthMS);
|
|
1355
|
+
return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);
|
|
979
1356
|
}
|
|
980
1357
|
disableMultiSampling() {
|
|
1358
|
+
(0, core_bentley_1.assert)(undefined !== this._depth);
|
|
1359
|
+
if (!this._fbos.disableMultiSampling(this._textures, this._depth))
|
|
1360
|
+
return false;
|
|
981
1361
|
// Want to disable multisampling without deleting & reallocating other stuff.
|
|
982
1362
|
this._depthMS = (0, core_bentley_1.dispose)(this._depthMS);
|
|
983
1363
|
(0, core_bentley_1.assert)(undefined !== this._depth);
|
|
984
1364
|
return this._textures.disableMultiSampling();
|
|
985
1365
|
}
|
|
986
1366
|
renderBackgroundMap(commands, needComposite) {
|
|
987
|
-
const cmds = commands.getCommands(
|
|
1367
|
+
const cmds = commands.getCommands(15 /* BackgroundMap */);
|
|
988
1368
|
if (0 === cmds.length) {
|
|
989
1369
|
return;
|
|
990
1370
|
}
|
|
991
1371
|
const fbStack = System_1.System.instance.frameBufferStack;
|
|
992
1372
|
const fbo = this.getBackgroundFbo(needComposite);
|
|
993
1373
|
fbStack.execute(fbo, true, this.useMsBuffers, () => {
|
|
994
|
-
System_1.System.instance.applyRenderState(this.getRenderState(
|
|
995
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1374
|
+
System_1.System.instance.applyRenderState(this.getRenderState(15 /* BackgroundMap */));
|
|
1375
|
+
this.target.techniques.execute(this.target, cmds, 15 /* BackgroundMap */);
|
|
996
1376
|
});
|
|
997
1377
|
}
|
|
998
1378
|
renderSkyBox(commands, needComposite) {
|
|
999
|
-
const cmds = commands.getCommands(
|
|
1379
|
+
const cmds = commands.getCommands(14 /* SkyBox */);
|
|
1000
1380
|
if (0 === cmds.length) {
|
|
1001
1381
|
return;
|
|
1002
1382
|
}
|
|
1003
1383
|
const fbStack = System_1.System.instance.frameBufferStack;
|
|
1004
1384
|
const fbo = this.getBackgroundFbo(needComposite);
|
|
1005
1385
|
fbStack.execute(fbo, true, this.useMsBuffers, () => {
|
|
1006
|
-
System_1.System.instance.applyRenderState(this.getRenderState(
|
|
1007
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1386
|
+
System_1.System.instance.applyRenderState(this.getRenderState(14 /* SkyBox */));
|
|
1387
|
+
this.target.techniques.execute(this.target, cmds, 14 /* SkyBox */);
|
|
1008
1388
|
});
|
|
1009
1389
|
}
|
|
1010
1390
|
renderBackground(commands, needComposite) {
|
|
@@ -1123,10 +1503,10 @@ class Compositor extends SceneCompositor {
|
|
|
1123
1503
|
}
|
|
1124
1504
|
renderIndexedVolumeClassifier(cmdsByIndex, needComposite) {
|
|
1125
1505
|
// Set the stencil for the given classifier stencil volume.
|
|
1126
|
-
System_1.System.instance.frameBufferStack.execute(this.
|
|
1506
|
+
System_1.System.instance.frameBufferStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
|
|
1127
1507
|
this.target.pushState(this._vcBranchState);
|
|
1128
1508
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
1129
|
-
this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex,
|
|
1509
|
+
this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, 6 /* Classification */);
|
|
1130
1510
|
this.target.popBranch();
|
|
1131
1511
|
});
|
|
1132
1512
|
// Process the stencil for the pick data.
|
|
@@ -1134,8 +1514,8 @@ class Compositor extends SceneCompositor {
|
|
|
1134
1514
|
}
|
|
1135
1515
|
renderVolumeClassification(commands, compositeFlags, renderForReadPixels) {
|
|
1136
1516
|
// Sometimes we need to render the classifier stencil volumes one at a time, if so draw them from the cmdsByIndex list
|
|
1137
|
-
const cmds = commands.getCommands(
|
|
1138
|
-
const cmdsByIndex = commands.getCommands(
|
|
1517
|
+
const cmds = commands.getCommands(6 /* Classification */);
|
|
1518
|
+
const cmdsByIndex = commands.getCommands(17 /* ClassificationByIndex */);
|
|
1139
1519
|
let numCmdsPerClassifier = 0;
|
|
1140
1520
|
for (const cmd of cmdsByIndex) { // Figure out how many commands there are per index/primitive
|
|
1141
1521
|
numCmdsPerClassifier++;
|
|
@@ -1144,7 +1524,7 @@ class Compositor extends SceneCompositor {
|
|
|
1144
1524
|
break;
|
|
1145
1525
|
}
|
|
1146
1526
|
}
|
|
1147
|
-
const cmdsForVC = commands.getCommands(
|
|
1527
|
+
const cmdsForVC = commands.getCommands(20 /* VolumeClassifiedRealityData */);
|
|
1148
1528
|
if (!this.target.activeVolumeClassifierProps || (renderForReadPixels && 0 === cmds.length) || 0 === cmdsForVC.length)
|
|
1149
1529
|
return;
|
|
1150
1530
|
let outsideFlags = this.target.activeVolumeClassifierProps.flags.outside;
|
|
@@ -1164,28 +1544,28 @@ class Compositor extends SceneCompositor {
|
|
|
1164
1544
|
if (this._debugStencil > 0) {
|
|
1165
1545
|
fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {
|
|
1166
1546
|
if (1 === this._debugStencil) {
|
|
1167
|
-
System_1.System.instance.applyRenderState(this.getRenderState(
|
|
1168
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1547
|
+
System_1.System.instance.applyRenderState(this.getRenderState(5 /* OpaqueGeneral */));
|
|
1548
|
+
this.target.techniques.execute(this.target, cmds, 5 /* OpaqueGeneral */);
|
|
1169
1549
|
}
|
|
1170
1550
|
else {
|
|
1171
1551
|
this.target.pushState(this._vcBranchState);
|
|
1172
1552
|
System_1.System.instance.applyRenderState(this._vcDebugRenderState);
|
|
1173
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1553
|
+
this.target.techniques.execute(this.target, cmds, 6 /* Classification */);
|
|
1174
1554
|
this.target.popBranch();
|
|
1175
1555
|
}
|
|
1176
1556
|
});
|
|
1177
1557
|
return;
|
|
1178
1558
|
}
|
|
1179
|
-
if (undefined === this.
|
|
1559
|
+
if (undefined === this._fbos.altZOnly || undefined === this._fbos.stencilSet)
|
|
1180
1560
|
return;
|
|
1181
1561
|
if (renderForReadPixels && this.target.vcSupportIntersectingVolumes) {
|
|
1182
1562
|
// Clear the stencil.
|
|
1183
|
-
fbStack.execute(this.
|
|
1563
|
+
fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
|
|
1184
1564
|
System_1.System.instance.context.clearStencil(0);
|
|
1185
1565
|
System_1.System.instance.context.clear(GL_1.GL.BufferBit.Stencil);
|
|
1186
1566
|
});
|
|
1187
1567
|
if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
|
|
1188
|
-
this.
|
|
1568
|
+
this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
|
|
1189
1569
|
for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier)
|
|
1190
1570
|
this.renderIndexedVolumeClassifier(cmdsByIndex.slice(i, i + numCmdsPerClassifier), needComposite);
|
|
1191
1571
|
return;
|
|
@@ -1195,10 +1575,10 @@ class Compositor extends SceneCompositor {
|
|
|
1195
1575
|
const doColorByElement = core_common_1.SpatialClassifierInsideDisplay.ElementColor === insideFlags || renderForReadPixels;
|
|
1196
1576
|
const doColorByElementForIntersectingVolumes = this.target.vcSupportIntersectingVolumes;
|
|
1197
1577
|
const needAltZ = (doColorByElement && !doColorByElementForIntersectingVolumes) || needOutsideDraw;
|
|
1198
|
-
let zOnlyFbo = this.
|
|
1199
|
-
let volClassBlendFbo = this.
|
|
1578
|
+
let zOnlyFbo = this._fbos.stencilSet;
|
|
1579
|
+
let volClassBlendFbo = this._fbos.volClassCreateBlend;
|
|
1200
1580
|
let volClassBlendReadZTexture = this._vcAltDepthStencil.getHandle();
|
|
1201
|
-
let volClassBlendReadZTextureFbo = this.
|
|
1581
|
+
let volClassBlendReadZTextureFbo = this._fbos.altZOnly;
|
|
1202
1582
|
if (!needAltZ) {
|
|
1203
1583
|
// Initialize the blend texture and the stencil.
|
|
1204
1584
|
(0, core_bentley_1.assert)(undefined !== volClassBlendFbo);
|
|
@@ -1211,31 +1591,28 @@ class Compositor extends SceneCompositor {
|
|
|
1211
1591
|
else {
|
|
1212
1592
|
// If we are doing color-by-element for the inside do not care about intersecting volumes or we need to color the outside
|
|
1213
1593
|
// then we need to copy the Z buffer and set up a different zbuffer/stencil to render in.
|
|
1214
|
-
zOnlyFbo = this.
|
|
1215
|
-
volClassBlendFbo = this.
|
|
1594
|
+
zOnlyFbo = this._fbos.altZOnly;
|
|
1595
|
+
volClassBlendFbo = this._fbos.volClassCreateBlendAltZ;
|
|
1216
1596
|
(0, core_bentley_1.assert)(undefined !== volClassBlendFbo);
|
|
1217
1597
|
volClassBlendReadZTexture = this._depth.getHandle();
|
|
1218
|
-
volClassBlendReadZTextureFbo = this.
|
|
1598
|
+
volClassBlendReadZTextureFbo = this._fbos.stencilSet;
|
|
1219
1599
|
if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
|
|
1220
1600
|
volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
|
|
1221
1601
|
// Copy the current Z into the Alt-Z. At the same time go ahead and clear the stencil and the blend texture.
|
|
1222
1602
|
fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {
|
|
1223
1603
|
this.target.pushState(this.target.decorationsState);
|
|
1224
1604
|
System_1.System.instance.applyRenderState(this._vcCopyZRenderState);
|
|
1225
|
-
|
|
1226
|
-
this.target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.volClassCopyZ)); // This method uses the EXT_frag_depth extension
|
|
1227
|
-
else
|
|
1228
|
-
this.target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.volClassCopyZWithPoints)); // This method draws GL_POINTS (1 per pixel) to set Z in vertex shader
|
|
1605
|
+
this.target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.volClassCopyZ)); // This method uses the EXT_frag_depth extension
|
|
1229
1606
|
System_1.System.instance.bindTexture2d(RenderFlags_1.TextureUnit.Zero, undefined);
|
|
1230
1607
|
this.target.popBranch();
|
|
1231
1608
|
});
|
|
1232
1609
|
}
|
|
1233
1610
|
if (renderForReadPixels) {
|
|
1234
1611
|
// Set the stencil for all of the classifier volumes.
|
|
1235
|
-
System_1.System.instance.frameBufferStack.execute(this.
|
|
1612
|
+
System_1.System.instance.frameBufferStack.execute(this._fbos.altZOnly, false, this.useMsBuffers, () => {
|
|
1236
1613
|
this.target.pushState(this._vcBranchState);
|
|
1237
1614
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
1238
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1615
|
+
this.target.techniques.execute(this.target, cmds, 6 /* Classification */);
|
|
1239
1616
|
// After we create the stencil we need to clear the Z for the next step (so also must turn on z writing temporarily).
|
|
1240
1617
|
this._vcSetStencilRenderState.flags.depthMask = true;
|
|
1241
1618
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
@@ -1254,7 +1631,7 @@ class Compositor extends SceneCompositor {
|
|
|
1254
1631
|
this.setAllStencilOps(this._vcColorRenderState, GL_1.GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw
|
|
1255
1632
|
this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ.texture;
|
|
1256
1633
|
if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
|
|
1257
|
-
this.
|
|
1634
|
+
this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
|
|
1258
1635
|
this.renderIndexedClassifierForReadPixels(cmds, this._vcColorRenderState, false, needComposite);
|
|
1259
1636
|
this.target.activeVolumeClassifierTexture = undefined;
|
|
1260
1637
|
this._vcColorRenderState.flags.depthTest = false;
|
|
@@ -1274,7 +1651,7 @@ class Compositor extends SceneCompositor {
|
|
|
1274
1651
|
fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {
|
|
1275
1652
|
this.target.pushState(this._vcBranchState);
|
|
1276
1653
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
1277
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1654
|
+
this.target.techniques.execute(this.target, cmds, 6 /* Classification */);
|
|
1278
1655
|
this.target.popBranch();
|
|
1279
1656
|
System_1.System.instance.bindTexture2d(RenderFlags_1.TextureUnit.Two, undefined);
|
|
1280
1657
|
System_1.System.instance.bindTexture2d(RenderFlags_1.TextureUnit.Five, undefined);
|
|
@@ -1330,7 +1707,7 @@ class Compositor extends SceneCompositor {
|
|
|
1330
1707
|
fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {
|
|
1331
1708
|
this.target.pushState(this._vcBranchState);
|
|
1332
1709
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
1333
|
-
this.target.techniques.execute(this.target, nxtCmds,
|
|
1710
|
+
this.target.techniques.execute(this.target, nxtCmds, 6 /* Classification */);
|
|
1334
1711
|
this.target.popBranch();
|
|
1335
1712
|
});
|
|
1336
1713
|
// Process the stencil. Just render the volume normally (us opaque pass), but use blending to modify the source alpha that gets written to the blend texture.
|
|
@@ -1341,7 +1718,7 @@ class Compositor extends SceneCompositor {
|
|
|
1341
1718
|
this._vcColorRenderState.flags.cull = true;
|
|
1342
1719
|
System_1.System.instance.applyRenderState(this._vcColorRenderState);
|
|
1343
1720
|
this.target.activeVolumeClassifierTexture = undefined; // make sure this texture is undefined so we do not use the planar classification shader
|
|
1344
|
-
this.target.techniques.execute(this.target, nxtCmds,
|
|
1721
|
+
this.target.techniques.execute(this.target, nxtCmds, 5 /* OpaqueGeneral */);
|
|
1345
1722
|
this._vcColorRenderState.flags.cull = false;
|
|
1346
1723
|
this.target.popBranch();
|
|
1347
1724
|
});
|
|
@@ -1349,7 +1726,7 @@ class Compositor extends SceneCompositor {
|
|
|
1349
1726
|
}
|
|
1350
1727
|
else {
|
|
1351
1728
|
if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
|
|
1352
|
-
this.
|
|
1729
|
+
this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
|
|
1353
1730
|
fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {
|
|
1354
1731
|
// For coloring the inside by element color we will draw the inside using the the classifiers themselves.
|
|
1355
1732
|
// To do this we need to first clear our Alt-Z. The shader will then test and write Z and will discard
|
|
@@ -1367,7 +1744,7 @@ class Compositor extends SceneCompositor {
|
|
|
1367
1744
|
System_1.System.instance.context.clearDepth(1.0);
|
|
1368
1745
|
System_1.System.instance.context.clear(GL_1.GL.BufferBit.Depth);
|
|
1369
1746
|
this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ.texture;
|
|
1370
|
-
this.target.techniques.execute(this.target, cmds,
|
|
1747
|
+
this.target.techniques.execute(this.target, cmds, 5 /* OpaqueGeneral */);
|
|
1371
1748
|
this.target.activeVolumeClassifierTexture = undefined;
|
|
1372
1749
|
this._vcColorRenderState.flags.depthTest = false;
|
|
1373
1750
|
this._vcColorRenderState.flags.depthMask = false;
|
|
@@ -1384,12 +1761,12 @@ class Compositor extends SceneCompositor {
|
|
|
1384
1761
|
// and this stage can be skipped. In order for this to work the list of commands needs to get reduced to only the ones which draw hilited volumes.
|
|
1385
1762
|
// We cannot use the hillite shader to draw them since it doesn't handle logZ properly (it doesn't need to since it is only used elsewhere when Z write is turned off)
|
|
1386
1763
|
// and we don't really want another whole set of hilite shaders just for this.
|
|
1387
|
-
const cmdsSelected = (0, DrawCommand_1.extractHilitedVolumeClassifierCommands)(this.target.hilites, commands.getCommands(
|
|
1388
|
-
commands.replaceCommands(
|
|
1764
|
+
const cmdsSelected = (0, DrawCommand_1.extractHilitedVolumeClassifierCommands)(this.target.hilites, commands.getCommands(16 /* HiliteClassification */));
|
|
1765
|
+
commands.replaceCommands(16 /* HiliteClassification */, cmdsSelected); // replace the hilite command list for use in hilite pass as well.
|
|
1389
1766
|
// if (cmdsSelected.length > 0 && insideFlags !== this.target.activeVolumeClassifierProps!.flags.selected) {
|
|
1390
1767
|
if (!doColorByElement && cmdsSelected.length > 0 && insideFlags !== core_common_1.SpatialClassifierInsideDisplay.Hilite) { // assume selected ones are always hilited
|
|
1391
1768
|
// Set the stencil using just the hilited volume classifiers.
|
|
1392
|
-
fbStack.execute(this.
|
|
1769
|
+
fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
|
|
1393
1770
|
this.target.pushState(this._vcBranchState);
|
|
1394
1771
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
1395
1772
|
if (needAltZ) {
|
|
@@ -1397,12 +1774,12 @@ class Compositor extends SceneCompositor {
|
|
|
1397
1774
|
System_1.System.instance.context.clearStencil(0);
|
|
1398
1775
|
System_1.System.instance.context.clear(GL_1.GL.BufferBit.Stencil);
|
|
1399
1776
|
}
|
|
1400
|
-
this.target.techniques.execute(this.target, cmdsSelected,
|
|
1777
|
+
this.target.techniques.execute(this.target, cmdsSelected, 6 /* Classification */);
|
|
1401
1778
|
this.target.popBranch();
|
|
1402
1779
|
});
|
|
1403
1780
|
if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
|
|
1404
|
-
this.
|
|
1405
|
-
fbStack.execute(this.
|
|
1781
|
+
this._fbos.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
|
|
1782
|
+
fbStack.execute(this._fbos.volClassCreateBlend, false, this.useMsBuffers, () => {
|
|
1406
1783
|
this._geom.volClassSetBlend.boundaryType = CachedGeometry_1.BoundaryType.Selected;
|
|
1407
1784
|
this._geom.volClassSetBlend.texture = this._vcAltDepthStencil.getHandle(); // need to attach the alt depth instead of the real one since it is bound to the frame buffer
|
|
1408
1785
|
this.target.pushState(this.target.decorationsState);
|
|
@@ -1433,10 +1810,10 @@ class Compositor extends SceneCompositor {
|
|
|
1433
1810
|
const flashedClassifierCmds = (0, DrawCommand_1.extractFlashedVolumeClassifierCommands)(this.target.flashedId, cmdsByIndex, numCmdsPerClassifier);
|
|
1434
1811
|
if (undefined !== flashedClassifierCmds && !doColorByElement) {
|
|
1435
1812
|
// Set the stencil for this one classifier.
|
|
1436
|
-
fbStack.execute(this.
|
|
1813
|
+
fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
|
|
1437
1814
|
this.target.pushState(this._vcBranchState);
|
|
1438
1815
|
System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
|
|
1439
|
-
this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds,
|
|
1816
|
+
this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, 5 /* OpaqueGeneral */);
|
|
1440
1817
|
this.target.popBranch();
|
|
1441
1818
|
});
|
|
1442
1819
|
// Process the stencil to flash the contents.
|
|
@@ -1453,35 +1830,35 @@ class Compositor extends SceneCompositor {
|
|
|
1453
1830
|
}
|
|
1454
1831
|
renderHilite(commands) {
|
|
1455
1832
|
const system = System_1.System.instance;
|
|
1456
|
-
system.frameBufferStack.execute(this.
|
|
1833
|
+
system.frameBufferStack.execute(this._fbos.hilite, true, false, () => {
|
|
1457
1834
|
// Clear the hilite buffer.
|
|
1458
1835
|
system.context.clearColor(0, 0, 0, 0);
|
|
1459
1836
|
system.context.clear(GL_1.GL.BufferBit.Color);
|
|
1460
1837
|
// Draw the normal hilite geometry.
|
|
1461
|
-
this.drawPass(commands,
|
|
1838
|
+
this.drawPass(commands, 10 /* Hilite */);
|
|
1462
1839
|
});
|
|
1463
1840
|
// Process planar classifiers
|
|
1464
|
-
const planarClassifierCmds = commands.getCommands(
|
|
1841
|
+
const planarClassifierCmds = commands.getCommands(18 /* HilitePlanarClassification */);
|
|
1465
1842
|
if (0 !== planarClassifierCmds.length) {
|
|
1466
|
-
system.frameBufferStack.execute(this.
|
|
1843
|
+
system.frameBufferStack.execute(this._fbos.hiliteUsingStencil, true, false, () => {
|
|
1467
1844
|
system.applyRenderState(this._opaqueRenderState);
|
|
1468
|
-
this.target.techniques.execute(this.target, planarClassifierCmds,
|
|
1845
|
+
this.target.techniques.execute(this.target, planarClassifierCmds, 18 /* HilitePlanarClassification */);
|
|
1469
1846
|
});
|
|
1470
1847
|
}
|
|
1471
1848
|
// Process the volume classifiers.
|
|
1472
|
-
const vcHiliteCmds = commands.getCommands(
|
|
1849
|
+
const vcHiliteCmds = commands.getCommands(16 /* HiliteClassification */);
|
|
1473
1850
|
if (0 !== vcHiliteCmds.length && undefined !== this._vcBranchState) {
|
|
1474
1851
|
// Set the stencil for the given classifier stencil volume.
|
|
1475
|
-
system.frameBufferStack.execute(this.
|
|
1852
|
+
system.frameBufferStack.execute(this._fbos.stencilSet, false, false, () => {
|
|
1476
1853
|
this.target.pushState(this._vcBranchState);
|
|
1477
1854
|
system.applyRenderState(this._vcSetStencilRenderState);
|
|
1478
|
-
this.target.techniques.execute(this.target, vcHiliteCmds,
|
|
1855
|
+
this.target.techniques.execute(this.target, vcHiliteCmds, 10 /* Hilite */);
|
|
1479
1856
|
this.target.popBranch();
|
|
1480
1857
|
});
|
|
1481
1858
|
// Process the stencil for the hilite data.
|
|
1482
|
-
system.frameBufferStack.execute(this.
|
|
1859
|
+
system.frameBufferStack.execute(this._fbos.hiliteUsingStencil, true, false, () => {
|
|
1483
1860
|
system.applyRenderState(this._vcPickDataRenderState);
|
|
1484
|
-
this.target.techniques.execute(this.target, vcHiliteCmds,
|
|
1861
|
+
this.target.techniques.execute(this.target, vcHiliteCmds, 10 /* Hilite */);
|
|
1485
1862
|
});
|
|
1486
1863
|
}
|
|
1487
1864
|
}
|
|
@@ -1493,27 +1870,29 @@ class Compositor extends SceneCompositor {
|
|
|
1493
1870
|
getRenderState(pass) {
|
|
1494
1871
|
switch (pass) {
|
|
1495
1872
|
case 1 /* OpaqueLayers */:
|
|
1496
|
-
case
|
|
1497
|
-
case
|
|
1873
|
+
case 7 /* TranslucentLayers */:
|
|
1874
|
+
case 11 /* OverlayLayers */:
|
|
1498
1875
|
// NB: During pick, we don't want blending - it will mess up our pick buffer data and we don't care about the color data.
|
|
1499
1876
|
// During normal draw, we don't use the pick buffers for anything, and we want color blending.
|
|
1500
1877
|
// (We get away with this because surfaces always draw before their edges, and we're not depth-testing, so edges always draw atop surfaces without pick buffer testing).
|
|
1501
1878
|
this._layerRenderState.flags.blend = !this.target.isReadPixelsInProgress;
|
|
1502
1879
|
// Transparent non-overlay Layers are drawn between opaque and translucent passes. Test depth, don't write it, so that they blend with opaque.
|
|
1503
|
-
this._layerRenderState.flags.depthMask =
|
|
1504
|
-
this._layerRenderState.depthFunc = (
|
|
1880
|
+
this._layerRenderState.flags.depthMask = 7 /* TranslucentLayers */ !== pass;
|
|
1881
|
+
this._layerRenderState.depthFunc = (7 /* TranslucentLayers */ === pass) ? GL_1.GL.DepthFunc.Default : GL_1.GL.DepthFunc.Always;
|
|
1505
1882
|
return this._layerRenderState;
|
|
1506
1883
|
case 2 /* OpaqueLinear */:
|
|
1507
1884
|
case 3 /* OpaquePlanar */:
|
|
1508
|
-
case
|
|
1509
|
-
case
|
|
1885
|
+
case 5 /* OpaqueGeneral */:
|
|
1886
|
+
case 18 /* HilitePlanarClassification */:
|
|
1510
1887
|
return this._opaqueRenderState;
|
|
1511
|
-
case
|
|
1888
|
+
case 8 /* Translucent */:
|
|
1512
1889
|
return this._translucentRenderState;
|
|
1513
|
-
case
|
|
1890
|
+
case 10 /* Hilite */:
|
|
1514
1891
|
return this._hiliteRenderState;
|
|
1515
|
-
case
|
|
1892
|
+
case 15 /* BackgroundMap */:
|
|
1516
1893
|
return this._backgroundMapRenderState;
|
|
1894
|
+
case 4 /* PointClouds */:
|
|
1895
|
+
return this._pointCloudRenderState;
|
|
1517
1896
|
default:
|
|
1518
1897
|
return this._noDepthMaskRenderState;
|
|
1519
1898
|
}
|
|
@@ -1530,645 +1909,4 @@ class Compositor extends SceneCompositor {
|
|
|
1530
1909
|
this.target.techniques.execute(this.target, cmds, pass);
|
|
1531
1910
|
}
|
|
1532
1911
|
}
|
|
1533
|
-
class MRTFrameBuffers extends FrameBuffers {
|
|
1534
|
-
init(textures, depth, depthMs) {
|
|
1535
|
-
if (!super.init(textures, depth, depthMs))
|
|
1536
|
-
return false;
|
|
1537
|
-
(0, core_bentley_1.assert)(undefined === this.opaqueAll);
|
|
1538
|
-
if (!this.initPotentialMSMRTFbos(textures, depth, depthMs))
|
|
1539
|
-
return false;
|
|
1540
|
-
(0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
1541
|
-
const colors = [textures.accumulation, textures.revealage];
|
|
1542
|
-
this.translucent = FrameBuffer_1.FrameBuffer.create(colors, depth);
|
|
1543
|
-
this.clearTranslucent = FrameBuffer_1.FrameBuffer.create(colors);
|
|
1544
|
-
// We borrow the SceneCompositor's accum and revealage textures for the surface pass.
|
|
1545
|
-
// First we render edges, writing to our textures.
|
|
1546
|
-
// Then we copy our textures to borrowed textures.
|
|
1547
|
-
// Finally we render surfaces, writing to our textures and reading from borrowed textures.
|
|
1548
|
-
(0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
1549
|
-
const pingPong = [textures.accumulation, textures.revealage];
|
|
1550
|
-
this.pingPong = FrameBuffer_1.FrameBuffer.create(pingPong);
|
|
1551
|
-
return undefined !== this.translucent
|
|
1552
|
-
&& undefined !== this.clearTranslucent
|
|
1553
|
-
&& undefined !== this.pingPong;
|
|
1554
|
-
}
|
|
1555
|
-
initPotentialMSMRTFbos(textures, depth, depthMs) {
|
|
1556
|
-
const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
|
|
1557
|
-
(0, core_bentley_1.assert)(undefined !== boundColor && undefined !== textures.color && undefined !== textures.featureId && undefined !== textures.depthAndOrder && undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
1558
|
-
const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];
|
|
1559
|
-
if (undefined === depthMs) {
|
|
1560
|
-
this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
|
|
1561
|
-
colorAndPick[0] = textures.color;
|
|
1562
|
-
this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
|
|
1563
|
-
}
|
|
1564
|
-
else {
|
|
1565
|
-
(0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuff && undefined !== textures.depthAndOrderMsBuffHidden);
|
|
1566
|
-
const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];
|
|
1567
|
-
const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
|
|
1568
|
-
this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
|
|
1569
|
-
colorAndPick[0] = textures.color;
|
|
1570
|
-
this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
|
|
1571
|
-
}
|
|
1572
|
-
return undefined !== this.opaqueAll
|
|
1573
|
-
&& undefined !== this.opaqueAndCompositeAll;
|
|
1574
|
-
}
|
|
1575
|
-
enableOcclusion(textures, depth, depthMs) {
|
|
1576
|
-
let rVal = super.enableOcclusion(textures, depth, depthMs);
|
|
1577
|
-
if (undefined === depthMs) {
|
|
1578
|
-
// If not using multisampling then we can use the accumulation and revealage textures for the hidden pick buffers,
|
|
1579
|
-
(0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.revealage);
|
|
1580
|
-
const colorAndPick = [textures.color, textures.accumulation, textures.revealage];
|
|
1581
|
-
this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
|
|
1582
|
-
rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden;
|
|
1583
|
-
}
|
|
1584
|
-
else {
|
|
1585
|
-
// If multisampling then we cannot use the revealage texture for depthAndOrder for the hidden edges since it is of the wrong type for blitting,
|
|
1586
|
-
// so instead use a special depthAndOrderHidden texture just for this purpose.
|
|
1587
|
-
// The featureId texture is not needed for hidden edges, so the accumulation texture can be used for it if we don't blit from the multisample bufffer into it.
|
|
1588
|
-
(0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.depthAndOrderHidden);
|
|
1589
|
-
(0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuffHidden);
|
|
1590
|
-
const colorAndPick = [textures.color, textures.accumulation, textures.depthAndOrderHidden];
|
|
1591
|
-
const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
|
|
1592
|
-
const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
|
|
1593
|
-
this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
|
|
1594
|
-
// We will also need a frame buffer for copying the real pick data buffers into these hidden edge pick data buffers.
|
|
1595
|
-
const pingPong = [textures.accumulation, textures.depthAndOrderHidden];
|
|
1596
|
-
const pingPongMSBuffs = [textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
|
|
1597
|
-
const pingPongFilters = [GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
|
|
1598
|
-
this.pingPongMS = FrameBuffer_1.FrameBuffer.create(pingPong, depth, pingPongMSBuffs, pingPongFilters, depthMs);
|
|
1599
|
-
rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden && (undefined === depthMs || undefined !== this.pingPongMS);
|
|
1600
|
-
}
|
|
1601
|
-
return rVal;
|
|
1602
|
-
}
|
|
1603
|
-
disableOcclusion() {
|
|
1604
|
-
super.disableOcclusion();
|
|
1605
|
-
this.opaqueAndCompositeAllHidden = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
|
|
1606
|
-
this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
|
|
1607
|
-
}
|
|
1608
|
-
enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
1609
|
-
const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
|
|
1610
|
-
if (undefined === boundColor)
|
|
1611
|
-
return;
|
|
1612
|
-
super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
|
|
1613
|
-
if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {
|
|
1614
|
-
if (undefined !== volClassDepth) {
|
|
1615
|
-
let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];
|
|
1616
|
-
this.idsAndZ = FrameBuffer_1.FrameBuffer.create(ids, depth);
|
|
1617
|
-
this.idsAndAltZ = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
|
|
1618
|
-
ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];
|
|
1619
|
-
this.idsAndZComposite = FrameBuffer_1.FrameBuffer.create(ids, depth);
|
|
1620
|
-
this.idsAndAltZComposite = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
|
|
1621
|
-
}
|
|
1622
|
-
}
|
|
1623
|
-
}
|
|
1624
|
-
disableVolumeClassifier() {
|
|
1625
|
-
super.disableVolumeClassifier();
|
|
1626
|
-
if (undefined !== this.idsAndZ) {
|
|
1627
|
-
this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
|
|
1628
|
-
this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
|
|
1629
|
-
this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
|
|
1630
|
-
this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
|
|
1631
|
-
}
|
|
1632
|
-
}
|
|
1633
|
-
enableMultiSampling(textures, depth, depthMS) {
|
|
1634
|
-
super.enableMultiSampling(textures, depth, depthMS);
|
|
1635
|
-
this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
|
|
1636
|
-
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
|
|
1637
|
-
return this.initPotentialMSMRTFbos(textures, depth, depthMS);
|
|
1638
|
-
}
|
|
1639
|
-
disableMultiSampling(textures, depth) {
|
|
1640
|
-
this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
|
|
1641
|
-
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
|
|
1642
|
-
if (!this.initPotentialMSMRTFbos(textures, depth, undefined))
|
|
1643
|
-
return false;
|
|
1644
|
-
return super.disableMultiSampling(textures, depth);
|
|
1645
|
-
}
|
|
1646
|
-
get isDisposed() {
|
|
1647
|
-
return super.isDisposed
|
|
1648
|
-
&& undefined === this.opaqueAll
|
|
1649
|
-
&& undefined === this.opaqueAndCompositeAll
|
|
1650
|
-
&& undefined === this.opaqueAndCompositeAllHidden
|
|
1651
|
-
&& undefined === this.pingPong
|
|
1652
|
-
&& undefined === this.pingPongMS
|
|
1653
|
-
&& undefined === this.translucent
|
|
1654
|
-
&& undefined === this.clearTranslucent
|
|
1655
|
-
&& undefined === this.idsAndZ
|
|
1656
|
-
&& undefined === this.idsAndAltZ
|
|
1657
|
-
&& undefined === this.idsAndZComposite
|
|
1658
|
-
&& undefined === this.idsAndAltZComposite;
|
|
1659
|
-
}
|
|
1660
|
-
dispose() {
|
|
1661
|
-
super.dispose();
|
|
1662
|
-
this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
|
|
1663
|
-
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
|
|
1664
|
-
this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
|
|
1665
|
-
this.pingPong = (0, core_bentley_1.dispose)(this.pingPong);
|
|
1666
|
-
this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
|
|
1667
|
-
this.translucent = (0, core_bentley_1.dispose)(this.translucent);
|
|
1668
|
-
this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
|
|
1669
|
-
this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
|
|
1670
|
-
this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
|
|
1671
|
-
this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
|
|
1672
|
-
this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
|
|
1673
|
-
}
|
|
1674
|
-
}
|
|
1675
|
-
class MRTGeometry extends Geometry {
|
|
1676
|
-
collectStatistics(stats) {
|
|
1677
|
-
super.collectStatistics(stats);
|
|
1678
|
-
collectGeometryStatistics(this.copyPickBuffers, stats);
|
|
1679
|
-
collectGeometryStatistics(this.clearTranslucent, stats);
|
|
1680
|
-
collectGeometryStatistics(this.clearPickAndColor, stats);
|
|
1681
|
-
}
|
|
1682
|
-
init(textures) {
|
|
1683
|
-
if (!super.init(textures))
|
|
1684
|
-
return false;
|
|
1685
|
-
(0, core_bentley_1.assert)(undefined === this.copyPickBuffers);
|
|
1686
|
-
this.copyPickBuffers = CachedGeometry_1.CopyPickBufferGeometry.createGeometry(textures.featureId.getHandle(), textures.depthAndOrder.getHandle());
|
|
1687
|
-
this.clearTranslucent = CachedGeometry_1.ViewportQuadGeometry.create(16 /* OITClearTranslucent */);
|
|
1688
|
-
this.clearPickAndColor = CachedGeometry_1.ViewportQuadGeometry.create(21 /* ClearPickAndColor */);
|
|
1689
|
-
return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;
|
|
1690
|
-
}
|
|
1691
|
-
get isDisposed() {
|
|
1692
|
-
return super.isDisposed
|
|
1693
|
-
&& undefined === this.copyPickBuffers
|
|
1694
|
-
&& undefined === this.clearTranslucent
|
|
1695
|
-
&& undefined === this.clearPickAndColor;
|
|
1696
|
-
}
|
|
1697
|
-
dispose() {
|
|
1698
|
-
super.dispose();
|
|
1699
|
-
this.copyPickBuffers = (0, core_bentley_1.dispose)(this.copyPickBuffers);
|
|
1700
|
-
this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
|
|
1701
|
-
this.clearPickAndColor = (0, core_bentley_1.dispose)(this.clearPickAndColor);
|
|
1702
|
-
}
|
|
1703
|
-
}
|
|
1704
|
-
// SceneCompositor used when multiple render targets are supported (WEBGL_draw_buffers exists and supports at least 4 color attachments).
|
|
1705
|
-
class MRTCompositor extends Compositor {
|
|
1706
|
-
constructor(target) {
|
|
1707
|
-
super(target, new MRTFrameBuffers(), new MRTGeometry());
|
|
1708
|
-
}
|
|
1709
|
-
get currentRenderTargetIndex() {
|
|
1710
|
-
(0, core_bentley_1.assert)(false, "MRT is supported");
|
|
1711
|
-
return 0;
|
|
1712
|
-
}
|
|
1713
|
-
set currentRenderTargetIndex(_index) {
|
|
1714
|
-
(0, core_bentley_1.assert)(false, "MRT is supported");
|
|
1715
|
-
}
|
|
1716
|
-
get featureIds() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }
|
|
1717
|
-
get depthAndOrder() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }
|
|
1718
|
-
get _fbos() { return this._frameBuffers; }
|
|
1719
|
-
get _geometry() { return this._geom; }
|
|
1720
|
-
enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
1721
|
-
this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
|
|
1722
|
-
}
|
|
1723
|
-
disableVolumeClassifierFbos() { this._fbos.disableVolumeClassifier(); }
|
|
1724
|
-
enableMultiSampling() {
|
|
1725
|
-
if (!super.enableMultiSampling())
|
|
1726
|
-
return false;
|
|
1727
|
-
(0, core_bentley_1.assert)(undefined !== this._depth && undefined !== this._depthMS);
|
|
1728
|
-
return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);
|
|
1729
|
-
}
|
|
1730
|
-
disableMultiSampling() {
|
|
1731
|
-
(0, core_bentley_1.assert)(undefined !== this._depth);
|
|
1732
|
-
if (!this._fbos.disableMultiSampling(this._textures, this._depth))
|
|
1733
|
-
return false;
|
|
1734
|
-
return super.disableMultiSampling();
|
|
1735
|
-
}
|
|
1736
|
-
clearOpaque(needComposite) {
|
|
1737
|
-
const fbo = needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll;
|
|
1738
|
-
const system = System_1.System.instance;
|
|
1739
|
-
system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {
|
|
1740
|
-
// Clear pick data buffers to 0's and color buffer to background color
|
|
1741
|
-
// (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id
|
|
1742
|
-
// (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)
|
|
1743
|
-
system.applyRenderState(this._noDepthMaskRenderState);
|
|
1744
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.clearPickAndColor);
|
|
1745
|
-
this.target.techniques.draw(params);
|
|
1746
|
-
// Clear depth buffer
|
|
1747
|
-
system.applyRenderState(RenderState_1.RenderState.defaults); // depthMask == true.
|
|
1748
|
-
system.context.clearDepth(1.0);
|
|
1749
|
-
system.context.clear(GL_1.GL.BufferBit.Depth);
|
|
1750
|
-
});
|
|
1751
|
-
}
|
|
1752
|
-
renderOpaque(commands, compositeFlags, renderForReadPixels) {
|
|
1753
|
-
if (0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */) && !renderForReadPixels) {
|
|
1754
|
-
this.renderOpaqueAO(commands);
|
|
1755
|
-
return;
|
|
1756
|
-
}
|
|
1757
|
-
const needComposite = 0 /* None */ !== compositeFlags;
|
|
1758
|
-
const fbStack = System_1.System.instance.frameBufferStack;
|
|
1759
|
-
// Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).
|
|
1760
|
-
let fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
|
|
1761
|
-
const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
|
|
1762
|
-
this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
|
|
1763
|
-
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
1764
|
-
this.drawPass(commands, 2 /* OpaqueLinear */);
|
|
1765
|
-
this.drawPass(commands, 3 /* OpaquePlanar */, true);
|
|
1766
|
-
if (renderForReadPixels) {
|
|
1767
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, true);
|
|
1768
|
-
if (useMsBuffers)
|
|
1769
|
-
fbo.blitMsBuffersToTextures(true);
|
|
1770
|
-
}
|
|
1771
|
-
});
|
|
1772
|
-
this._readPickDataFromPingPong = false;
|
|
1773
|
-
// The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
|
|
1774
|
-
if (!renderForReadPixels) {
|
|
1775
|
-
fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
|
|
1776
|
-
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
1777
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, false);
|
|
1778
|
-
this.drawPass(commands, 8 /* HiddenEdge */, false);
|
|
1779
|
-
});
|
|
1780
|
-
if (useMsBuffers)
|
|
1781
|
-
fbo.blitMsBuffersToTextures(needComposite);
|
|
1782
|
-
}
|
|
1783
|
-
}
|
|
1784
|
-
renderOpaqueAO(commands) {
|
|
1785
|
-
const fbStack = System_1.System.instance.frameBufferStack;
|
|
1786
|
-
const haveHiddenEdges = 0 !== commands.getCommands(8 /* HiddenEdge */).length;
|
|
1787
|
-
// Output the linear, planar, and pickable surfaces to color and pick data buffers.
|
|
1788
|
-
let fbo = this._fbos.opaqueAndCompositeAll;
|
|
1789
|
-
const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
|
|
1790
|
-
this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
|
|
1791
|
-
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
1792
|
-
this.drawPass(commands, 2 /* OpaqueLinear */);
|
|
1793
|
-
this.drawPass(commands, 3 /* OpaquePlanar */, true);
|
|
1794
|
-
this._primitiveDrawState = PrimitiveDrawState.Pickable;
|
|
1795
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, true);
|
|
1796
|
-
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
1797
|
-
if (useMsBuffers)
|
|
1798
|
-
fbo.blitMsBuffersToTextures(true);
|
|
1799
|
-
});
|
|
1800
|
-
this._readPickDataFromPingPong = false;
|
|
1801
|
-
// Output the non-pickable surfaces and hidden edges to just the color buffer.
|
|
1802
|
-
fbo = this._fbos.opaqueAndCompositeColor;
|
|
1803
|
-
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
1804
|
-
this._primitiveDrawState = PrimitiveDrawState.NonPickable;
|
|
1805
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, false);
|
|
1806
|
-
if (haveHiddenEdges)
|
|
1807
|
-
this.drawPass(commands, 8 /* HiddenEdge */, false);
|
|
1808
|
-
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
1809
|
-
});
|
|
1810
|
-
if (useMsBuffers)
|
|
1811
|
-
fbo.blitMsBuffersToTextures(true);
|
|
1812
|
-
// If there are no hidden edges, then we're done & can run the AO passes using the normal depthAndOrder texture.
|
|
1813
|
-
if (haveHiddenEdges) {
|
|
1814
|
-
// AO needs the pick data (orderAndDepth) for the hidden edges. We don't want it in with the other pick data though since they are not pickable, so we will use other textures.
|
|
1815
|
-
// If not multisampling we will re-use the ping-pong/transparency textures since we are done with ping-ponging at this point and transparency happens later.
|
|
1816
|
-
// If multisampling then we will use the accumulation texture for featureIDs and a special texture for depthAndOrder since the revealage texture is not the right type for multisampling.
|
|
1817
|
-
// First we will need to copy what's in the pick buffers so far into the hidden pick buffers.
|
|
1818
|
-
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
1819
|
-
fbo = (useMsBuffers ? this._fbos.pingPongMS : this._fbos.pingPong);
|
|
1820
|
-
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
1821
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.copyPickBuffers);
|
|
1822
|
-
this.target.techniques.draw(params);
|
|
1823
|
-
});
|
|
1824
|
-
if (useMsBuffers)
|
|
1825
|
-
fbo.blitMsBuffersToTextures(false, 1); // only want to blit the depth/order target
|
|
1826
|
-
// Now draw the hidden edges, using an fbo which places their depth/order into the hidden pick buffers.
|
|
1827
|
-
// Since we are not writing to the actual pick buffers we let this._readPickDataFromPingPong remain false.
|
|
1828
|
-
fbo = this._fbos.opaqueAndCompositeAllHidden;
|
|
1829
|
-
this._primitiveDrawState = PrimitiveDrawState.Pickable;
|
|
1830
|
-
fbStack.execute(fbo, true, useMsBuffers, () => {
|
|
1831
|
-
this.drawPass(commands, 8 /* HiddenEdge */, false);
|
|
1832
|
-
});
|
|
1833
|
-
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
1834
|
-
if (useMsBuffers) {
|
|
1835
|
-
// Only want to blit the color and depth/order targets as the featureId target is not blit-able and will generate a GL error.
|
|
1836
|
-
fbo.blitMsBuffersToTextures(false, 0);
|
|
1837
|
-
fbo.blitMsBuffersToTextures(false, 2);
|
|
1838
|
-
}
|
|
1839
|
-
this._needHiddenEdges = false;
|
|
1840
|
-
}
|
|
1841
|
-
this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture with the hidden edges to be read for the 2nd AO blur pass.
|
|
1842
|
-
this.renderAmbientOcclusion();
|
|
1843
|
-
this._needHiddenEdges = false;
|
|
1844
|
-
}
|
|
1845
|
-
renderLayers(commands, needComposite, pass) {
|
|
1846
|
-
const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
|
|
1847
|
-
const useMsBuffers = 1 /* OpaqueLayers */ === pass && fbo.isMultisampled && this.useMsBuffers;
|
|
1848
|
-
this._readPickDataFromPingPong = !useMsBuffers;
|
|
1849
|
-
System_1.System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {
|
|
1850
|
-
this.drawPass(commands, pass, true);
|
|
1851
|
-
});
|
|
1852
|
-
this._readPickDataFromPingPong = false;
|
|
1853
|
-
}
|
|
1854
|
-
renderForVolumeClassification(commands, compositeFlags, renderForReadPixels) {
|
|
1855
|
-
const needComposite = 0 /* None */ !== compositeFlags;
|
|
1856
|
-
const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
|
|
1857
|
-
const fbStack = System_1.System.instance.frameBufferStack;
|
|
1858
|
-
if (renderForReadPixels || needAO) {
|
|
1859
|
-
this._readPickDataFromPingPong = true;
|
|
1860
|
-
fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll, true, this.useMsBuffers, () => {
|
|
1861
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, true, 19 /* VolumeClassifiedRealityData */);
|
|
1862
|
-
});
|
|
1863
|
-
}
|
|
1864
|
-
else {
|
|
1865
|
-
this._readPickDataFromPingPong = false;
|
|
1866
|
-
fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, true, this.useMsBuffers, () => {
|
|
1867
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, false, 19 /* VolumeClassifiedRealityData */);
|
|
1868
|
-
});
|
|
1869
|
-
}
|
|
1870
|
-
}
|
|
1871
|
-
renderIndexedClassifierForReadPixels(cmds, state, renderForIntersectingVolumes, needComposite) {
|
|
1872
|
-
this._readPickDataFromPingPong = true;
|
|
1873
|
-
const fbo = (renderForIntersectingVolumes ? (needComposite ? this._fbos.idsAndZComposite : this._fbos.idsAndZ)
|
|
1874
|
-
: (needComposite ? this._fbos.idsAndAltZComposite : this._fbos.idsAndAltZ));
|
|
1875
|
-
System_1.System.instance.frameBufferStack.execute(fbo, true, false, () => {
|
|
1876
|
-
System_1.System.instance.applyRenderState(state);
|
|
1877
|
-
this.target.techniques.execute(this.target, cmds, 4 /* OpaqueGeneral */);
|
|
1878
|
-
});
|
|
1879
|
-
this._readPickDataFromPingPong = false;
|
|
1880
|
-
}
|
|
1881
|
-
clearTranslucent() {
|
|
1882
|
-
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
1883
|
-
System_1.System.instance.frameBufferStack.execute(this._fbos.clearTranslucent, true, false, () => {
|
|
1884
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.clearTranslucent);
|
|
1885
|
-
this.target.techniques.draw(params);
|
|
1886
|
-
});
|
|
1887
|
-
}
|
|
1888
|
-
renderTranslucent(commands) {
|
|
1889
|
-
System_1.System.instance.frameBufferStack.execute(this._fbos.translucent, true, false, () => {
|
|
1890
|
-
this.drawPass(commands, 7 /* Translucent */);
|
|
1891
|
-
});
|
|
1892
|
-
}
|
|
1893
|
-
pingPong() {
|
|
1894
|
-
if (this._fbos.opaqueAll.isMultisampled && this.useMsBuffers) {
|
|
1895
|
-
// If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.
|
|
1896
|
-
this._fbos.opaqueAll.blitMsBuffersToTextures(false, 1);
|
|
1897
|
-
this._fbos.opaqueAll.blitMsBuffersToTextures(false, 2);
|
|
1898
|
-
}
|
|
1899
|
-
else {
|
|
1900
|
-
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
1901
|
-
System_1.System.instance.frameBufferStack.execute(this._fbos.pingPong, true, this.useMsBuffers, () => {
|
|
1902
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.copyPickBuffers);
|
|
1903
|
-
this.target.techniques.draw(params);
|
|
1904
|
-
});
|
|
1905
|
-
}
|
|
1906
|
-
}
|
|
1907
|
-
getBackgroundFbo(needComposite) { return needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor; }
|
|
1908
|
-
get _samplerFbo() { return this._readPickDataFromPingPong ? this._fbos.pingPong : this._fbos.opaqueAll; }
|
|
1909
|
-
getSamplerTexture(index) { return this._samplerFbo.getColor(index); }
|
|
1910
|
-
}
|
|
1911
|
-
class MPFrameBuffers extends FrameBuffers {
|
|
1912
|
-
init(textures, depth) {
|
|
1913
|
-
if (!super.init(textures, depth, undefined))
|
|
1914
|
-
return false;
|
|
1915
|
-
(0, core_bentley_1.assert)(undefined === this.accumulation);
|
|
1916
|
-
this.accumulation = FrameBuffer_1.FrameBuffer.create([textures.accumulation], depth);
|
|
1917
|
-
this.revealage = FrameBuffer_1.FrameBuffer.create([textures.revealage], depth);
|
|
1918
|
-
this.featureId = FrameBuffer_1.FrameBuffer.create([textures.featureId], depth);
|
|
1919
|
-
return undefined !== this.accumulation && undefined !== this.revealage && undefined !== this.featureId;
|
|
1920
|
-
}
|
|
1921
|
-
enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
1922
|
-
super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
|
|
1923
|
-
if (undefined !== this.featureId) {
|
|
1924
|
-
this.featureIdWithDepth = FrameBuffer_1.FrameBuffer.create([this.featureId.getColor(0)], depth);
|
|
1925
|
-
this.featureIdWithDepthAltZ = FrameBuffer_1.FrameBuffer.create([this.featureId.getColor(0)], volClassDepth);
|
|
1926
|
-
}
|
|
1927
|
-
}
|
|
1928
|
-
disableVolumeClassifier() {
|
|
1929
|
-
super.disableVolumeClassifier();
|
|
1930
|
-
if (undefined !== this.featureIdWithDepth) {
|
|
1931
|
-
this.featureIdWithDepth = (0, core_bentley_1.dispose)(this.featureIdWithDepth);
|
|
1932
|
-
this.featureIdWithDepthAltZ = (0, core_bentley_1.dispose)(this.featureIdWithDepthAltZ);
|
|
1933
|
-
}
|
|
1934
|
-
}
|
|
1935
|
-
get isDisposed() {
|
|
1936
|
-
return super.isDisposed
|
|
1937
|
-
&& undefined === this.accumulation
|
|
1938
|
-
&& undefined === this.revealage
|
|
1939
|
-
&& undefined === this.featureId
|
|
1940
|
-
&& undefined === this.featureIdWithDepth
|
|
1941
|
-
&& undefined === this.featureIdWithDepthAltZ;
|
|
1942
|
-
}
|
|
1943
|
-
dispose() {
|
|
1944
|
-
super.dispose();
|
|
1945
|
-
this.accumulation = (0, core_bentley_1.dispose)(this.accumulation);
|
|
1946
|
-
this.revealage = (0, core_bentley_1.dispose)(this.revealage);
|
|
1947
|
-
this.featureId = (0, core_bentley_1.dispose)(this.featureId);
|
|
1948
|
-
this.disableVolumeClassifier();
|
|
1949
|
-
}
|
|
1950
|
-
}
|
|
1951
|
-
class MPGeometry extends Geometry {
|
|
1952
|
-
collectStatistics(stats) {
|
|
1953
|
-
super.collectStatistics(stats);
|
|
1954
|
-
collectGeometryStatistics(this.copyColor, stats);
|
|
1955
|
-
}
|
|
1956
|
-
init(textures) {
|
|
1957
|
-
if (!super.init(textures))
|
|
1958
|
-
return false;
|
|
1959
|
-
(0, core_bentley_1.assert)(undefined === this.copyColor);
|
|
1960
|
-
this.copyColor = CachedGeometry_1.SingleTexturedViewportQuadGeometry.createGeometry(textures.featureId.getHandle(), 18 /* CopyColor */);
|
|
1961
|
-
return undefined !== this.copyColor;
|
|
1962
|
-
}
|
|
1963
|
-
get isDisposed() { return super.isDisposed && undefined === this.copyColor; }
|
|
1964
|
-
dispose() {
|
|
1965
|
-
super.dispose();
|
|
1966
|
-
this.copyColor = (0, core_bentley_1.dispose)(this.copyColor);
|
|
1967
|
-
}
|
|
1968
|
-
}
|
|
1969
|
-
// Compositor used when multiple render targets are not supported (WEBGL_draw_buffers not available or fewer than 4 color attachments supported).
|
|
1970
|
-
// This falls back to multi-pass rendering in place of MRT rendering, which has obvious performance implications.
|
|
1971
|
-
// The chief use case is iOS.
|
|
1972
|
-
class MPCompositor extends Compositor {
|
|
1973
|
-
constructor(target) {
|
|
1974
|
-
super(target, new MPFrameBuffers(), new MPGeometry());
|
|
1975
|
-
this._currentRenderTargetIndex = 0;
|
|
1976
|
-
this._drawMultiPassDepth = true;
|
|
1977
|
-
this._opaqueRenderStateNoZWt = new RenderState_1.RenderState();
|
|
1978
|
-
this._scratchBgColor = new FloatRGBA_1.FloatRgba();
|
|
1979
|
-
this._opaqueRenderStateNoZWt.flags.depthTest = true;
|
|
1980
|
-
this._opaqueRenderStateNoZWt.flags.depthMask = false;
|
|
1981
|
-
}
|
|
1982
|
-
getRenderState(pass) {
|
|
1983
|
-
switch (pass) {
|
|
1984
|
-
case 2 /* OpaqueLinear */:
|
|
1985
|
-
case 3 /* OpaquePlanar */:
|
|
1986
|
-
case 4 /* OpaqueGeneral */:
|
|
1987
|
-
return this._drawMultiPassDepth ? this._opaqueRenderState : this._opaqueRenderStateNoZWt;
|
|
1988
|
-
}
|
|
1989
|
-
return super.getRenderState(pass);
|
|
1990
|
-
}
|
|
1991
|
-
get _fbos() { return this._frameBuffers; }
|
|
1992
|
-
get _geometry() { return this._geom; }
|
|
1993
|
-
get currentRenderTargetIndex() { return this._currentRenderTargetIndex; }
|
|
1994
|
-
set currentRenderTargetIndex(index) { this._currentRenderTargetIndex = index; }
|
|
1995
|
-
get featureIds() { return this._readPickDataFromPingPong ? this._textures.accumulation : this._textures.featureId; }
|
|
1996
|
-
get depthAndOrder() { return this._readPickDataFromPingPong ? this._textures.revealage : this._textures.depthAndOrder; }
|
|
1997
|
-
getBackgroundFbo(needComposite) { return needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor; }
|
|
1998
|
-
enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
|
|
1999
|
-
this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
|
|
2000
|
-
}
|
|
2001
|
-
disableVolumeClassifierFbos() { this._fbos.disableVolumeClassifier(); }
|
|
2002
|
-
clearOpaque(needComposite) {
|
|
2003
|
-
const bg = this._scratchBgColor;
|
|
2004
|
-
this.target.uniforms.style.cloneBackgroundRgba(bg);
|
|
2005
|
-
this.clearFbo(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, bg.red, bg.green, bg.blue, bg.alpha, true);
|
|
2006
|
-
this.clearFbo(this._fbos.depthAndOrder, 0, 0, 0, 0, false);
|
|
2007
|
-
this.clearFbo(this._fbos.featureId, 0, 0, 0, 0, false);
|
|
2008
|
-
}
|
|
2009
|
-
clearHiddenPick() {
|
|
2010
|
-
}
|
|
2011
|
-
renderOpaque(commands, compositeFlags, renderForReadPixels) {
|
|
2012
|
-
if (0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */) && !renderForReadPixels) {
|
|
2013
|
-
this.renderOpaqueAO(commands);
|
|
2014
|
-
return;
|
|
2015
|
-
}
|
|
2016
|
-
// Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).
|
|
2017
|
-
this._readPickDataFromPingPong = true;
|
|
2018
|
-
const needComposite = 0 /* None */ !== compositeFlags;
|
|
2019
|
-
const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
|
|
2020
|
-
const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
|
|
2021
|
-
this.drawOpaquePass(colorFbo, commands, 2 /* OpaqueLinear */, false);
|
|
2022
|
-
this.drawOpaquePass(colorFbo, commands, 3 /* OpaquePlanar */, true);
|
|
2023
|
-
if (renderForReadPixels || needAO)
|
|
2024
|
-
this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true);
|
|
2025
|
-
this._readPickDataFromPingPong = false;
|
|
2026
|
-
// The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
|
|
2027
|
-
if (!renderForReadPixels) {
|
|
2028
|
-
System_1.System.instance.frameBufferStack.execute(colorFbo, true, false, () => {
|
|
2029
|
-
this._drawMultiPassDepth = true; // for OpaqueGeneral
|
|
2030
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, false);
|
|
2031
|
-
this.drawPass(commands, 8 /* HiddenEdge */, false);
|
|
2032
|
-
});
|
|
2033
|
-
}
|
|
2034
|
-
}
|
|
2035
|
-
renderOpaqueAO(commands) {
|
|
2036
|
-
const fbStack = System_1.System.instance.frameBufferStack;
|
|
2037
|
-
const haveHiddenEdges = 0 !== commands.getCommands(8 /* HiddenEdge */).length;
|
|
2038
|
-
// Output the linear, planar, and pickable surfaces to color and pick data buffers.
|
|
2039
|
-
this._readPickDataFromPingPong = true;
|
|
2040
|
-
const colorFbo = this._fbos.opaqueAndCompositeColor;
|
|
2041
|
-
this.drawOpaquePass(colorFbo, commands, 2 /* OpaqueLinear */, false);
|
|
2042
|
-
this.drawOpaquePass(colorFbo, commands, 3 /* OpaquePlanar */, true);
|
|
2043
|
-
this._primitiveDrawState = PrimitiveDrawState.Pickable;
|
|
2044
|
-
this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true);
|
|
2045
|
-
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
2046
|
-
this._readPickDataFromPingPong = false;
|
|
2047
|
-
// Output the non-pickable surfaces and hidden edges to just the color buffer.
|
|
2048
|
-
fbStack.execute(colorFbo, true, false, () => {
|
|
2049
|
-
this._drawMultiPassDepth = true; // for OpaqueGeneral
|
|
2050
|
-
this._primitiveDrawState = PrimitiveDrawState.NonPickable;
|
|
2051
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, false);
|
|
2052
|
-
if (haveHiddenEdges)
|
|
2053
|
-
this.drawPass(commands, 8 /* HiddenEdge */, false);
|
|
2054
|
-
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
2055
|
-
});
|
|
2056
|
-
if (haveHiddenEdges) {
|
|
2057
|
-
// First copy the depthAndOrder texture to the revealage texture which we will use for the hidden edge pick data (don't need full pick with featureIds).
|
|
2058
|
-
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
2059
|
-
this.copyFbo(this._textures.depthAndOrder, this._fbos.revealage);
|
|
2060
|
-
// So far only the non-pickable hidden edges have been drawn for AO, so we need to draw the pickable ones to the hidden depthAndOrder (revealage).
|
|
2061
|
-
this._primitiveDrawState = PrimitiveDrawState.Pickable;
|
|
2062
|
-
// Since we only need to draw color and depthAndOrder instead of calling drawOpaquePass just do what we need here.
|
|
2063
|
-
this._drawMultiPassDepth = true;
|
|
2064
|
-
fbStack.execute(colorFbo, true, false, () => this.drawPass(commands, 8 /* HiddenEdge */, false));
|
|
2065
|
-
this._drawMultiPassDepth = false;
|
|
2066
|
-
this._currentRenderTargetIndex = 2;
|
|
2067
|
-
fbStack.execute(this._fbos.revealage, true, false, () => this.drawPass(commands, 8 /* HiddenEdge */, false));
|
|
2068
|
-
this._currentRenderTargetIndex = 0;
|
|
2069
|
-
this._readPickDataFromPingPong = false;
|
|
2070
|
-
this._primitiveDrawState = PrimitiveDrawState.Both;
|
|
2071
|
-
}
|
|
2072
|
-
this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture to be read for the 2nd AO blur pass.
|
|
2073
|
-
this.renderAmbientOcclusion();
|
|
2074
|
-
this._needHiddenEdges = false;
|
|
2075
|
-
}
|
|
2076
|
-
renderLayers(commands, needComposite, pass) {
|
|
2077
|
-
this._readPickDataFromPingPong = true;
|
|
2078
|
-
const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
|
|
2079
|
-
this.drawOpaquePass(colorFbo, commands, pass, true);
|
|
2080
|
-
this._readPickDataFromPingPong = false;
|
|
2081
|
-
}
|
|
2082
|
-
renderForVolumeClassification(commands, compositeFlags, renderForReadPixels) {
|
|
2083
|
-
const needComposite = 0 /* None */ !== compositeFlags;
|
|
2084
|
-
const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
|
|
2085
|
-
const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
|
|
2086
|
-
if (renderForReadPixels || needAO) {
|
|
2087
|
-
this._readPickDataFromPingPong = true;
|
|
2088
|
-
this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true, 19 /* VolumeClassifiedRealityData */);
|
|
2089
|
-
if (needAO)
|
|
2090
|
-
this.renderAmbientOcclusion();
|
|
2091
|
-
}
|
|
2092
|
-
else {
|
|
2093
|
-
this._readPickDataFromPingPong = false;
|
|
2094
|
-
System_1.System.instance.frameBufferStack.execute(colorFbo, true, false, () => {
|
|
2095
|
-
this._drawMultiPassDepth = true; // for OpaqueGeneral
|
|
2096
|
-
this.drawPass(commands, 4 /* OpaqueGeneral */, false, 19 /* VolumeClassifiedRealityData */);
|
|
2097
|
-
});
|
|
2098
|
-
}
|
|
2099
|
-
}
|
|
2100
|
-
renderIndexedClassifierForReadPixels(cmds, state, renderForIntersectingVolumes, _needComposite) {
|
|
2101
|
-
// Note that we only need to render to the Id textures here, no color, since the color buffer is not used in readPixels.
|
|
2102
|
-
this._readPickDataFromPingPong = true;
|
|
2103
|
-
this._currentRenderTargetIndex = 1;
|
|
2104
|
-
const fbo = (renderForIntersectingVolumes ? this._fbos.featureIdWithDepth : this._fbos.featureIdWithDepthAltZ);
|
|
2105
|
-
System_1.System.instance.frameBufferStack.execute(fbo, true, false, () => {
|
|
2106
|
-
System_1.System.instance.applyRenderState(state);
|
|
2107
|
-
this.target.techniques.execute(this.target, cmds, 4 /* OpaqueGeneral */);
|
|
2108
|
-
});
|
|
2109
|
-
this._currentRenderTargetIndex = 0;
|
|
2110
|
-
this._readPickDataFromPingPong = false;
|
|
2111
|
-
}
|
|
2112
|
-
// ###TODO: For readPixels(), could skip rendering color...also could skip rendering depth and/or element ID depending upon selector...
|
|
2113
|
-
drawOpaquePass(colorFbo, commands, pass, pingPong, cmdPass = 255 /* None */) {
|
|
2114
|
-
const commandPass = 255 /* None */ === cmdPass ? pass : cmdPass;
|
|
2115
|
-
const stack = System_1.System.instance.frameBufferStack;
|
|
2116
|
-
this._drawMultiPassDepth = true;
|
|
2117
|
-
if (!this.target.isReadPixelsInProgress) {
|
|
2118
|
-
stack.execute(colorFbo, true, false, () => this.drawPass(commands, pass, pingPong, commandPass));
|
|
2119
|
-
this._drawMultiPassDepth = false;
|
|
2120
|
-
}
|
|
2121
|
-
this._currentRenderTargetIndex++;
|
|
2122
|
-
if (!this.target.isReadPixelsInProgress || Pixel_1.Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel_1.Pixel.Selector.Feature)) {
|
|
2123
|
-
stack.execute(this._fbos.featureId, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));
|
|
2124
|
-
this._drawMultiPassDepth = false;
|
|
2125
|
-
}
|
|
2126
|
-
this._currentRenderTargetIndex++;
|
|
2127
|
-
if (!this.target.isReadPixelsInProgress || Pixel_1.Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel_1.Pixel.Selector.GeometryAndDistance)) {
|
|
2128
|
-
stack.execute(this._fbos.depthAndOrder, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));
|
|
2129
|
-
}
|
|
2130
|
-
this._currentRenderTargetIndex = 0;
|
|
2131
|
-
}
|
|
2132
|
-
clearTranslucent() {
|
|
2133
|
-
this.clearFbo(this._fbos.accumulation, 0, 0, 0, 1, false);
|
|
2134
|
-
this.clearFbo(this._fbos.revealage, 1, 0, 0, 1, false);
|
|
2135
|
-
}
|
|
2136
|
-
renderTranslucent(commands) {
|
|
2137
|
-
System_1.System.instance.frameBufferStack.execute(this._fbos.accumulation, true, false, () => {
|
|
2138
|
-
this.drawPass(commands, 7 /* Translucent */);
|
|
2139
|
-
});
|
|
2140
|
-
this._currentRenderTargetIndex = 1;
|
|
2141
|
-
System_1.System.instance.frameBufferStack.execute(this._fbos.revealage, true, false, () => {
|
|
2142
|
-
this.drawPass(commands, 7 /* Translucent */);
|
|
2143
|
-
});
|
|
2144
|
-
this._currentRenderTargetIndex = 0;
|
|
2145
|
-
}
|
|
2146
|
-
pingPong() {
|
|
2147
|
-
System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
|
|
2148
|
-
this.copyFbo(this._textures.featureId, this._fbos.accumulation);
|
|
2149
|
-
this.copyFbo(this._textures.depthAndOrder, this._fbos.revealage);
|
|
2150
|
-
}
|
|
2151
|
-
copyFbo(src, dst) {
|
|
2152
|
-
const geom = this._geometry.copyColor;
|
|
2153
|
-
geom.texture = src.getHandle();
|
|
2154
|
-
System_1.System.instance.frameBufferStack.execute(dst, true, false, () => {
|
|
2155
|
-
const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, geom);
|
|
2156
|
-
this.target.techniques.draw(params);
|
|
2157
|
-
});
|
|
2158
|
-
}
|
|
2159
|
-
clearFbo(fbo, red, green, blue, alpha, andDepth) {
|
|
2160
|
-
const system = System_1.System.instance;
|
|
2161
|
-
const gl = system.context;
|
|
2162
|
-
system.frameBufferStack.execute(fbo, true, false, () => {
|
|
2163
|
-
system.applyRenderState(andDepth ? RenderState_1.RenderState.defaults : this._noDepthMaskRenderState);
|
|
2164
|
-
gl.clearColor(red, green, blue, alpha);
|
|
2165
|
-
let bit = GL_1.GL.BufferBit.Color;
|
|
2166
|
-
if (andDepth) {
|
|
2167
|
-
gl.clearDepth(1.0);
|
|
2168
|
-
bit |= GL_1.GL.BufferBit.Depth;
|
|
2169
|
-
}
|
|
2170
|
-
gl.clear(bit);
|
|
2171
|
-
});
|
|
2172
|
-
}
|
|
2173
|
-
}
|
|
2174
1912
|
//# sourceMappingURL=SceneCompositor.js.map
|