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