@itwin/core-frontend 4.0.0-dev.1 → 4.0.0-dev.4
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/lib/cjs/IModelApp.d.ts +1 -0
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +2 -4
- package/lib/cjs/IModelApp.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/render/RealityMeshParams.d.ts +4 -1
- package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +14 -4
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +5 -16
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +0 -6
- package/lib/cjs/render/RenderSystem.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/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 +0 -3
- package/lib/cjs/render/webgl/BackgroundMapDrape.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/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 +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- 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.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/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +13 -71
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.js +1 -3
- package/lib/cjs/render/webgl/PointCloud.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/RenderFlags.d.ts +1 -2
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +4 -6
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts +0 -2
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +754 -1135
- 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 +6 -18
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +11 -10
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +40 -122
- package/lib/cjs/render/webgl/System.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 +4 -28
- package/lib/cjs/render/webgl/Technique.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 +1 -4
- package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
- 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 +4 -5
- package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
- 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/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/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/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +2 -2
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +1 -0
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +2 -4
- package/lib/esm/IModelApp.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/render/RealityMeshParams.d.ts +4 -1
- package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +14 -4
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +5 -16
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +0 -6
- package/lib/esm/render/RenderSystem.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/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 +0 -3
- package/lib/esm/render/webgl/BackgroundMapDrape.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/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 +1 -1
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- 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.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/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +13 -71
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/esm/render/webgl/PointCloud.js +1 -3
- package/lib/esm/render/webgl/PointCloud.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/RenderFlags.d.ts +1 -2
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js +4 -6
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts +0 -2
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +756 -1137
- 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 +6 -18
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +11 -10
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +42 -124
- package/lib/esm/render/webgl/System.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 +5 -29
- package/lib/esm/render/webgl/Technique.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 +1 -4
- package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
- 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 +4 -5
- package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
- 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/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/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/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +2 -2
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAA2B,cAAc,EAAE,aAAa,EAAuC,MAAM,kBAAkB,CAAC;AAE/H,OAAO,
|
|
1
|
+
{"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAA2B,cAAc,EAAE,aAAa,EAAuC,MAAM,kBAAkB,CAAC;AAE/H,OAAO,EAAyC,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsB1F,eAAO,MAAM,cAAc,uEAE1B,CAAC;AAsMF,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,QAMtD;AAYD,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAsE9E"}
|
|
@@ -203,7 +203,7 @@ const mixFeatureColor = `
|
|
|
203
203
|
col.a = mix(col.a, v_color.a, step(0.0, v_color.a));
|
|
204
204
|
`;
|
|
205
205
|
function addThematicToRealityMesh(builder, gradientTextureUnit) {
|
|
206
|
-
addNormalMatrix(builder.vert
|
|
206
|
+
addNormalMatrix(builder.vert);
|
|
207
207
|
builder.vert.addFunction(octDecodeNormal);
|
|
208
208
|
builder.vert.addGlobal("g_hillshadeIndex", 2 /* Float */);
|
|
209
209
|
builder.addFunctionComputedVarying("v_n", 4 /* Vec3 */, "computeLightingNormal", computeNormal);
|
|
@@ -262,13 +262,8 @@ export function createRealityMeshBuilder(flags) {
|
|
|
262
262
|
frag.addGlobal("featureIncrement", 2 /* Float */, "0.0");
|
|
263
263
|
frag.addGlobal("classifierId", 5 /* Vec4 */);
|
|
264
264
|
frag.set(17 /* OverrideFeatureId */, overrideFeatureId);
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
const caps = System.instance.capabilities;
|
|
268
|
-
if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && 1 /* Yes */ === flags.isThematic) {
|
|
269
|
-
textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)
|
|
270
|
-
gradientTextureUnit = -1; // is dependent on drawing mode so will set later
|
|
271
|
-
}
|
|
265
|
+
const textureCount = System.instance.maxRealityImageryLayers;
|
|
266
|
+
const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;
|
|
272
267
|
const feat = flags.featureMode;
|
|
273
268
|
let opts = 2 /* Overrides */ === feat ? 28 /* Surface */ : 0 /* None */;
|
|
274
269
|
let applyFragmentFeatureColor = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n const textureCount = System.instance.maxRealityImageryLayers;\r\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
|
-
import { WebGLContext } from "@itwin/webgl-compatibility";
|
|
5
4
|
import { ShaderProgram } from "../ShaderProgram";
|
|
6
5
|
/** @internal */
|
|
7
|
-
export declare function createSkyBoxProgram(context:
|
|
6
|
+
export declare function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram;
|
|
8
7
|
//# sourceMappingURL=SkyBox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkyBox.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"SkyBox.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUjD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAmClF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;
|
|
1
|
+
{"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0);\r\n mat3.m01 = -rot.at(0, 1);\r\n mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0);\r\n mat3.m11 = -rot.at(1, 1);\r\n mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0);\r\n mat3.m21 = rot.at(2, 1);\r\n mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
|
-
import { WebGLContext } from "@itwin/webgl-compatibility";
|
|
5
4
|
import { ShaderProgram } from "../ShaderProgram";
|
|
6
5
|
/** @internal */
|
|
7
|
-
export declare function createSkySphereProgram(context:
|
|
6
|
+
export declare function createSkySphereProgram(context: WebGL2RenderingContext, isGradient: boolean): ShaderProgram;
|
|
8
7
|
//# sourceMappingURL=SkySphere.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkySphere.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"SkySphere.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4DjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,GAAG,aAAa,CAwJ1G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereProgram(context: WebGLContext, isGradient: boolean): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n if (isGradient) {\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n } else\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n\r\n const vert = builder.vert;\r\n vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n if (isGradient) {\r\n vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n }\r\n\r\n const frag = builder.frag;\r\n if (isGradient) {\r\n frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = `//!V! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n builder.frag.headerComment = `//!F! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereProgram(context: WebGL2RenderingContext, isGradient: boolean): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n if (isGradient) {\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n } else\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n\r\n const vert = builder.vert;\r\n vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n if (isGradient) {\r\n vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n }\r\n\r\n const frag = builder.frag;\r\n if (isGradient) {\r\n frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = `//!V! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n builder.frag.headerComment = `//!F! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -75,7 +75,7 @@ const applySolarShadowMapTerrain = `
|
|
|
75
75
|
export function addEvsmExponent(frag) {
|
|
76
76
|
frag.addUniform("u_evsmExponent", 2 /* Float */, (prog) => {
|
|
77
77
|
prog.addGraphicUniform("u_evsmExponent", (uniform) => {
|
|
78
|
-
uniform.setUniform1f((RenderType.TextureFloat === System.instance.
|
|
78
|
+
uniform.setUniform1f((RenderType.TextureFloat === System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);
|
|
79
79
|
});
|
|
80
80
|
});
|
|
81
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,gBAAgB,GAAG;;;;CAIxB,CAAC;AACF,MAAM,yBAAyB,GAAG;;;;CAIjC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;CAQxB,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;;;CAW3B,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;CAarB,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;CAK3B,CAAC;AAEF,MAAM,0BAA0B,GAAG;;;;;;CAMlC,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,IAA2B;IACzD,IAAI,CAAC,UAAU,CAAC,gBAAgB,iBAAsB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE;YACnD,OAAO,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,YAAY,KAAK,MAAM,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nconst computeShadowPos = `\r\n vec4 shadowProj = u_shadowProj * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\nconst computeInstancedShadowPos = `\r\n vec4 shadowProj = u_shadowProj * g_instancedRtcMatrix * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\n\r\n// for 32-bit float, max exponent should be 44.36, for 16-bit should be 5.545\r\nconst evsm32Exp = 42.0;\r\nconst evsm16Exp = 5.545;\r\n\r\nexport const warpDepth = `\r\n// Applies exponential warp to shadow map depth, input depth should be in [0, 1]\r\nvec2 warpDepth(float depth, float exponent) {\r\n depth = 2.0 * depth - 1.0; // Rescale depth into [-1, 1]\r\n float pos = exp( exponent * depth);\r\n float neg = -exp(-exponent * depth);\r\n return vec2(pos, neg);\r\n}\r\n`;\r\n\r\nconst chebyshevUpperBound = `\r\nfloat chebyshevUpperBound(vec2 moments, float mean, float minVariance) {\r\n float variance = moments.y - (moments.x * moments.x);\r\n variance = max(variance, minVariance);\r\n\r\n // Compute probabilistic upper bound\r\n float d = mean - moments.x;\r\n float pMax = variance / (variance + (d * d));\r\n\r\n return (mean <= moments.x ? 1.0 : pMax); // One-tailed Chebyshev\r\n}\r\n`;\r\n\r\nconst shadowMapEVSM = `\r\nfloat shadowMapEVSM(vec3 shadowPos) {\r\n vec2 warpedDepth = warpDepth(shadowPos.z, u_evsmExponent);\r\n vec4 occluder = TEXTURE(s_shadowSampler, shadowPos.xy/* * 0.5*/); // shadow texture is 1/2 size (both dirs)\r\n\r\n // Derivative of warping at depth\r\n vec2 depthScale = kVSMBias * 0.01 * u_evsmExponent * warpedDepth;\r\n vec2 minVariance = depthScale * depthScale;\r\n\r\n float posContrib = chebyshevUpperBound(occluder.xz, warpedDepth.x, minVariance.x);\r\n float negContrib = chebyshevUpperBound(occluder.yw, warpedDepth.y, minVariance.y);\r\n return min(posContrib, negContrib);\r\n}\r\n`;\r\n\r\nconst applySolarShadowMap = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n float visible = (u_surfaceFlags[kSurfaceBitIndex_HasNormals] && (dot(g_normal, u_sunDir) < 0.0)) ? 0.0 : shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\nconst applySolarShadowMapTerrain = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n\r\n float visible = shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEvsmExponent(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_evsmExponent\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_evsmExponent\", (uniform) => {\r\n uniform.setUniform1f((RenderType.TextureFloat === System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addSolarShadowMap(builder: ProgramBuilder, toTerrain = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n frag.addUniform(\"s_shadowSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_shadowSampler\", (uniform, params) => {\r\n const shadowMap = params.target.solarShadowMap;\r\n assert(undefined !== shadowMap.shadowMapTexture);\r\n shadowMap.shadowMapTexture.texture.bindSampler(uniform, TextureUnit.ShadowMap);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_shadowParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowParams\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindColorAndBias(uniform);\r\n });\r\n });\r\n\r\n if (!toTerrain) {\r\n frag.addUniform(\"u_sunDir\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_sunDir\", (uniform, params) => {\r\n params.target.uniforms.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n vert.addUniform(\"u_shadowProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowProj\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n\r\n addEvsmExponent(frag);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n builder.addInlineComputedVarying(\"v_shadowPos\", VariableType.Vec3, vert.usesInstancedGeometry ? computeInstancedShadowPos : computeShadowPos);\r\n /* This is the EVSM bias value, which makes tradeoffs in shadow quality. Normally it should be set to 0.1.\r\n Lower values can introduce shadows where they should not be, including shadow acne. Higher values can cause Peter\r\n Panning effect and light bleeding. Tested 0.01 and 1.0, woth more focus on 0.1 to 0.5 inclusive, chose 0.2 for a\r\n while (on 9/13/19) then after having shadow tiles match view tile resolution for ones in view, retested and went\r\n back to 0.1 (on 11/5/19). */\r\n frag.addGlobal(\"kVSMBias\", VariableType.Float, \"0.1\", true);\r\n frag.addFunction(warpDepth);\r\n frag.addFunction(chebyshevUpperBound);\r\n frag.addFunction(shadowMapEVSM);\r\n frag.set(FragmentShaderComponent.ApplySolarShadowMap, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;AAwO3B,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAc5H;AAoED,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AA4GF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAoBhH;AAuCD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,QAuDzI;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AA+BF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA8E1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}
|
|
@@ -133,10 +133,7 @@ function addMaterial(builder, instanced) {
|
|
|
133
133
|
vert.addGlobal("mat_rgb", 5 /* Vec4 */); // a = 0 if not overridden, else 1
|
|
134
134
|
vert.addGlobal("mat_alpha", 3 /* Vec2 */); // a = 0 if not overridden, else 1
|
|
135
135
|
vert.addGlobal("use_material", 0 /* Boolean */);
|
|
136
|
-
|
|
137
|
-
vert.addInitializer("use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));");
|
|
138
|
-
else
|
|
139
|
-
vert.addInitializer("use_material = !nthBitSet(surfaceFlags, kSurfaceBit_IgnoreMaterial);");
|
|
136
|
+
vert.addInitializer("use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));");
|
|
140
137
|
// Uniform material
|
|
141
138
|
vert.addFunction(decodeMaterialColor);
|
|
142
139
|
vert.addUniform("u_materialColor", 5 /* Vec4 */, (prog) => {
|
|
@@ -187,13 +184,13 @@ const adjustEyeSpace = `
|
|
|
187
184
|
const computePositionPostlude = `
|
|
188
185
|
return u_proj * pos;
|
|
189
186
|
`;
|
|
190
|
-
function createCommon(isInstanced, animated, shadowable,
|
|
187
|
+
function createCommon(isInstanced, animated, shadowable, isHiliter, positionType) {
|
|
191
188
|
const instanced = 1 /* Yes */ === isInstanced;
|
|
192
189
|
const attrMap = AttributeMap.findAttributeMap(0 /* Surface */, instanced);
|
|
193
190
|
const builder = new ProgramBuilder(attrMap, { positionType, instanced });
|
|
194
191
|
const vert = builder.vert;
|
|
195
192
|
if (animated)
|
|
196
|
-
addAnimation(vert, true
|
|
193
|
+
addAnimation(vert, true);
|
|
197
194
|
if (shadowable)
|
|
198
195
|
addSolarShadowMap(builder);
|
|
199
196
|
addProjectionMatrix(vert);
|
|
@@ -214,7 +211,7 @@ function createCommon(isInstanced, animated, shadowable, isThematic, isHiliter,
|
|
|
214
211
|
}
|
|
215
212
|
/** @internal */
|
|
216
213
|
export function createSurfaceHiliter(instanced, classified, posType) {
|
|
217
|
-
const builder = createCommon(instanced, 0 /* No */, 0 /* No */,
|
|
214
|
+
const builder = createCommon(instanced, 0 /* No */, 0 /* No */, true, posType);
|
|
218
215
|
addSurfaceFlags(builder, true, false);
|
|
219
216
|
addTexture(builder, 0 /* No */, 0 /* No */, false, true);
|
|
220
217
|
if (classified) {
|
|
@@ -228,9 +225,6 @@ export function createSurfaceHiliter(instanced, classified, posType) {
|
|
|
228
225
|
return builder;
|
|
229
226
|
}
|
|
230
227
|
const isSurfaceBitSet = `
|
|
231
|
-
bool isSurfaceBitSet(float flag) { return nthBitSet(surfaceFlags, flag); }
|
|
232
|
-
`;
|
|
233
|
-
const isSurfaceBitSet2 = `
|
|
234
228
|
bool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }
|
|
235
229
|
`;
|
|
236
230
|
/** @internal */
|
|
@@ -252,29 +246,17 @@ function addSurfaceFlagsLookup(builder) {
|
|
|
252
246
|
builder.addBitFlagConstant("kSurfaceBit_OverrideRgb", 7 /* OverrideRgb */);
|
|
253
247
|
builder.addBitFlagConstant("kSurfaceBit_HasNormalMap", 8 /* HasNormalMap */);
|
|
254
248
|
// Only need masks for flags modified in vertex shader
|
|
255
|
-
const suffix =
|
|
256
|
-
const type =
|
|
249
|
+
const suffix = "u";
|
|
250
|
+
const type = 10 /* Uint */;
|
|
257
251
|
builder.addConstant("kSurfaceMask_HasTexture", type, 1 /* HasTexture */.toString() + suffix);
|
|
258
252
|
builder.addConstant("kSurfaceMask_IgnoreMaterial", type, 8 /* IgnoreMaterial */.toString() + suffix);
|
|
259
253
|
builder.addConstant("kSurfaceMask_OverrideRgb", type, 128 /* OverrideRgb */.toString() + suffix);
|
|
260
254
|
builder.addConstant("kSurfaceMask_HasNormalMap", type, 256 /* HasNormalMap */.toString() + suffix);
|
|
261
255
|
addExtractNthBit(builder);
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
builder.addGlobal("surfaceFlags", 10 /* Uint */);
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
builder.addFunction(isSurfaceBitSet);
|
|
268
|
-
builder.addGlobal("surfaceFlags", 2 /* Float */);
|
|
269
|
-
}
|
|
256
|
+
builder.addFunction(isSurfaceBitSet);
|
|
257
|
+
builder.addGlobal("surfaceFlags", 10 /* Uint */);
|
|
270
258
|
}
|
|
271
259
|
const initSurfaceFlags = `
|
|
272
|
-
surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0.0;
|
|
273
|
-
surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0.0;
|
|
274
|
-
surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0.0;
|
|
275
|
-
surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0.0;
|
|
276
|
-
`;
|
|
277
|
-
const initSurfaceFlags2 = `
|
|
278
260
|
surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;
|
|
279
261
|
surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;
|
|
280
262
|
surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;
|
|
@@ -295,8 +277,7 @@ const computeColorSurfaceFlags = `
|
|
|
295
277
|
if (feature_rgb.r >= 0.0)
|
|
296
278
|
surfaceFlags += kSurfaceMask_OverrideRgb;
|
|
297
279
|
`;
|
|
298
|
-
const returnSurfaceFlags = " return surfaceFlags;\n";
|
|
299
|
-
const returnSurfaceFlags2 = " return float(surfaceFlags);\n";
|
|
280
|
+
const returnSurfaceFlags = " return float(surfaceFlags);\n";
|
|
300
281
|
const computeSurfaceFlags = computeBaseSurfaceFlags;
|
|
301
282
|
const computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;
|
|
302
283
|
/** @internal */
|
|
@@ -411,15 +392,12 @@ const surfaceFlagArray = new Int32Array(10 /* Count */);
|
|
|
411
392
|
export function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
|
|
412
393
|
addSurfaceFlagsLookup(builder.vert);
|
|
413
394
|
addSurfaceFlagsLookup(builder.frag);
|
|
414
|
-
let compute =
|
|
395
|
+
let compute = initSurfaceFlags;
|
|
415
396
|
if (withFeatureOverrides)
|
|
416
397
|
compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\n`;
|
|
417
|
-
compute +=
|
|
398
|
+
compute += returnSurfaceFlags;
|
|
418
399
|
builder.addFunctionComputedVarying("v_surfaceFlags", 2 /* Float */, "computeSurfaceFlags", compute);
|
|
419
|
-
|
|
420
|
-
builder.frag.addInitializer("surfaceFlags = uint(floor(v_surfaceFlags + 0.5));");
|
|
421
|
-
else
|
|
422
|
-
builder.frag.addInitializer("surfaceFlags = floor(v_surfaceFlags + 0.5);");
|
|
400
|
+
builder.frag.addInitializer("surfaceFlags = uint(floor(v_surfaceFlags + 0.5));");
|
|
423
401
|
builder.addUniformArray("u_surfaceFlags", 0 /* Boolean */, 10 /* Count */, (prog) => {
|
|
424
402
|
prog.addGraphicUniform("u_surfaceFlags", (uniform, params) => {
|
|
425
403
|
assert(undefined !== params.geometry.asSurface);
|
|
@@ -429,31 +407,29 @@ export function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor)
|
|
|
429
407
|
});
|
|
430
408
|
});
|
|
431
409
|
}
|
|
432
|
-
function addNormal(builder,
|
|
433
|
-
addNormalMatrix(builder.vert
|
|
410
|
+
function addNormal(builder, animated) {
|
|
411
|
+
addNormalMatrix(builder.vert);
|
|
434
412
|
const quantized = "quantized" === builder.vert.positionType;
|
|
435
413
|
builder.vert.addFunction(octDecodeNormal);
|
|
436
414
|
builder.vert.addFunction("vec3 computeSurfaceNormal()", getComputeNormal(quantized));
|
|
437
415
|
builder.addFunctionComputedVarying("v_n", 4 /* Vec3 */, "computeLightingNormal", animated ? getComputeAnimatedNormal(quantized) : "return computeSurfaceNormal();");
|
|
438
416
|
builder.frag.addGlobal("g_normal", 4 /* Vec3 */);
|
|
439
417
|
let finalizeNormal = finalizeNormalPrelude;
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
uniform.setUniform1f(normalMapScale);
|
|
454
|
-
});
|
|
418
|
+
finalizeNormal += finalizeNormalNormalMap;
|
|
419
|
+
builder.frag.addUniform("u_normalMapScale", 2 /* Float */, (prog) => {
|
|
420
|
+
prog.addGraphicUniform("u_normalMapScale", (uniform, params) => {
|
|
421
|
+
var _a;
|
|
422
|
+
let normalMapScale = 1.0;
|
|
423
|
+
if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas &&
|
|
424
|
+
undefined !== params.geometry.materialInfo.textureMapping &&
|
|
425
|
+
undefined !== params.geometry.materialInfo.textureMapping.normalMapParams) {
|
|
426
|
+
normalMapScale = (_a = params.geometry.materialInfo.textureMapping.normalMapParams.scale) !== null && _a !== void 0 ? _a : 1.0;
|
|
427
|
+
if (params.geometry.materialInfo.textureMapping.normalMapParams.greenUp)
|
|
428
|
+
normalMapScale = -normalMapScale;
|
|
429
|
+
}
|
|
430
|
+
uniform.setUniform1f(normalMapScale);
|
|
455
431
|
});
|
|
456
|
-
}
|
|
432
|
+
});
|
|
457
433
|
finalizeNormal += finalizeNormalPostlude;
|
|
458
434
|
builder.frag.set(21 /* FinalizeNormal */, finalizeNormal);
|
|
459
435
|
// Set to true to colorize surfaces based on normals (in world space).
|
|
@@ -470,8 +446,8 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
470
446
|
builder.addInlineComputedVarying("v_thematicIndex", 2 /* Float */, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));
|
|
471
447
|
}
|
|
472
448
|
// Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.
|
|
473
|
-
// Surfaces now need texture coordinates even for thematic in case they have a normal map
|
|
474
|
-
if (!isPointCloud
|
|
449
|
+
// Surfaces now need texture coordinates even for thematic in case they have a normal map.
|
|
450
|
+
if (!isPointCloud) {
|
|
475
451
|
builder.vert.addFunction(unquantize2d);
|
|
476
452
|
addChooseVec2WithBitFlagsFunction(builder.vert);
|
|
477
453
|
const quantized = "quantized" === builder.vert.positionType;
|
|
@@ -505,7 +481,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
505
481
|
}
|
|
506
482
|
});
|
|
507
483
|
});
|
|
508
|
-
if (!isHilite && !isPointCloud
|
|
484
|
+
if (!isHilite && !isPointCloud) {
|
|
509
485
|
builder.frag.addUniform("s_normalMap", 8 /* Sampler2D */, (prog) => {
|
|
510
486
|
prog.addGraphicUniform("s_normalMap", (uniform, params) => {
|
|
511
487
|
const surfGeom = params.geometry.asSurface;
|
|
@@ -558,7 +534,7 @@ function addTransparencyDiscard(frag) {
|
|
|
558
534
|
}
|
|
559
535
|
/** @internal */
|
|
560
536
|
export function createSurfaceBuilder(flags) {
|
|
561
|
-
const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable,
|
|
537
|
+
const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);
|
|
562
538
|
addShaderFlags(builder);
|
|
563
539
|
const feat = flags.featureMode;
|
|
564
540
|
let opts = 2 /* Overrides */ === feat ? 28 /* Surface */ : 0 /* None */;
|
|
@@ -571,7 +547,7 @@ export function createSurfaceBuilder(flags) {
|
|
|
571
547
|
addFeatureSymbology(builder, feat, opts);
|
|
572
548
|
addSurfaceFlags(builder, 2 /* Overrides */ === feat, true);
|
|
573
549
|
addSurfaceDiscard(builder, flags);
|
|
574
|
-
addNormal(builder, flags.
|
|
550
|
+
addNormal(builder, flags.isAnimated);
|
|
575
551
|
// In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).
|
|
576
552
|
builder.frag.set(3 /* FinalizeBaseColor */, applyBackgroundColor);
|
|
577
553
|
builder.frag.addUniform("u_bgColor", 4 /* Vec3 */, (prog) => {
|