@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":"Thematic.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Thematic.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA+E;AAE/E,sCAAmC;AACnC,yCAAyC;AACzC,6CAA6C;AAC7C,qCAAsE;AACtE,gDAA6C;AAC7C,qCAAuC;AAEvC,MAAM,cAAc,GAAG;;;;;;CAMtB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;CAcpB,CAAC;AAEF,oDAAoD;AACpD,kJAAkJ;AAClJ,0LAA0L;AAC1L,MAAM,QAAQ,GAAG;;;;;;;CAOhB,CAAC;AAEF,yFAAyF;AACzF,+GAA+G;AAC/G,mHAAmH;AACnH,qBAAqB;AACrB,MAAM,eAAe,GAAG;;;;;;;;CAQvB,CAAC;AAEF,MAAM,mBAAmB,GAAG,oEAAoE,CAAC;AACjG,MAAM,sBAAsB,GAAG,4DAA4D,CAAC,CAAC,wDAAwD;AAErJ,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;IAsB5B,CAAC;AAEL,wGAAwG;AACxG,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiC9B,CAAC;AAEL,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBlC,CAAC;AAEF,0IAA0I;AAC1I,wDAAwD;AACxD,MAAM,gCAAgC,GAAG,OAAO,CAAC,CAAC,yBAAyB;AAC3E,MAAM,wCAAwC,GAAG;;;;;;;;;;iBAUhC,gCAAgC;;;;;;iBAMhC,gCAAgC;;;;;CAKhD,CAAC;AAEF,SAAS,UAAU,CAAC,YAAqB;IACvC,OAAO,YAAY,CAAC,CAAC;QACnB,yBAAyB,GAAG,wCAAwC,CAAC,CAAC,CAAC,sDAAsD;QAC7H,yBAAyB,GAAG,uBAAuB,GAAG,0BAA0B,CAAC,CAAC,wCAAwC;AAC9H,CAAC;AAED,4IAA4I;AAC5I,kGAAkG;AAClG,SAAgB,uBAAuB,CAAC,SAAkB,EAAE,qBAA8B,EAAE,YAAqB;IAC/G,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,aAAa,CAAC;IACpF,MAAM,UAAU,GAAG;;iCAEY,QAAQ;;;;;;;IAOrC,CAAC;IACH,MAAM,aAAa,GAAG;;IAEpB,CAAC;IACH,MAAM,cAAc,GAAG;;IAErB,CAAC;IACH,OAAO,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AAC3G,CAAC;AAnBD,0DAmBC;AAED,qHAAqH;AACrH,MAAM,4BAA4B,GAAG;;;CAGpC,CAAC;AAEF,SAAS,+BAA+B,CAAC,OAAsB;IAC7D,OAAO,CAAC,SAAS,CAAC,6BAA6B,EAAE,iCAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,SAAS,CAAC,qDAAqD,EAAE,iCAAmB,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxI,OAAO,CAAC,SAAS,CAAC,4BAA4B,EAAE,iCAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,SAAS,CAAC,gCAAgC,EAAE,iCAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,gCAAgC,CAAC,OAAsB;IAC9D,OAAO,CAAC,SAAS,CAAC,8BAA8B,EAAE,kCAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,CAAC,SAAS,CAAC,+BAA+B,EAAE,kCAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,SAAS,CAAC,4CAA4C,EAAE,kCAAoB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtH,OAAO,CAAC,SAAS,CAAC,gCAAgC,EAAE,kCAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,OAAuB,EAAE,gBAAgB,GAAG,KAAK,EAAE,gBAAgB,GAAG,KAAK;IAC5G,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAA,0BAAa,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB;QACxC,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IAE5B,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IAErB,IAAI,IAAI,CAAC,qBAAqB;QAC5B,IAAA,8BAAqB,EAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,CAAC,WAAW,CAAC,4DAA4D,EAAE,4BAA4B,CAAC,CAAC;IAE7G,IAAI,CAAC,UAAU,CAAC,gBAAgB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC5D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,UAAU,CAAC,iBAAiB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAChE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,UAAU,CAAC,gBAAgB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO,CAAC,UAAU,CAAC,wBAAwB,gBAAqB,CAAC,IAAI,EAAE,EAAE;YACvE,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;IAED,gCAAgC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,OAAO,CAAC,UAAU,CAAC,uBAAuB,iBAAsB,CAAC,IAAI,EAAE,EAAE;QACvE,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,eAAe,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC3D,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0CAA0C;IAC1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACnE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,gBAAgB,IAAI,gBAAgB,EAAE;QACxC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,iBAAsB,CAAC,IAAI,EAAE,EAAE;YACzE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;gBAC/D,OAAO,CAAC,YAAY,CAAC,CAAA,MAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,0CAAE,gBAAgB,CAAC,QAAQ,KAAI,GAAG,CAAC,CAAC;YAC1G,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,iBAAsB,CAAC,IAAI,EAAE,EAAE;YACzE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;gBAChE,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;IAED,IAAI,CAAC,UAAU,CAAC,cAAc,eAAoB,CAAC,IAAI,EAAE,EAAE;QACzD,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBACrC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB;oBACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;qBACrD,8FAA8F;oBACjG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;aAChE;iBAAM;gBACL,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,iBAAiB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBACrC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;oBAC3D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;iBACtD;qBAAM,EAAE,qFAAqF;oBAC5F,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;iBAC3D;aACF;iBAAM;gBACL,eAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,yBAAW,CAAC,eAAe,CAAC,CAAC;aAC1E;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,EAAE,EAAE,2EAA2E;QAClG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,0BAA0B,mBAAwB,CAAC,IAAI,EAAE,EAAE;YACjF,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;IAED,MAAM,QAAQ,GAAG,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC;IACvD,IAAI,QAAQ,EAAE;QACZ,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;KACvC;SAAM,IAAI,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,EAAE;QACnE,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;KACvC;SAAM;QACL,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;KAC1C;IAED,IAAI,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,EAAE;QACrD,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;KAClC;SAAM;QACL,IAAI,CAAC,WAAW,CAAC,sBAAW,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;KAChC;IAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,+BAA+C,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvF,CAAC;AAxID,gDAwIC","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 { ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addInstancedRtcMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addEyeSpace } from \"./Common\";\r\n\r\nconst getSensorFloat = `\r\nvec4 getSensor(int index) {\r\n float x = 0.5;\r\n float y = (float(index) + 0.5) / float(u_numSensors);\r\n return TEXTURE(s_sensorSampler, vec2(x, y));\r\n}\r\n`;\r\n\r\nconst unpackSensor = `\r\nvec4 getSensor(int index) {\r\n float y = (float(index) + 0.5) / float(u_numSensors);\r\n float sx = 0.25;\r\n vec2 tc = vec2(0.125, y);\r\n float posX = unpackFloat(TEXTURE(s_sensorSampler, tc));\r\n tc.x += sx;\r\n float posY = unpackFloat(TEXTURE(s_sensorSampler, tc));\r\n tc.x += sx;\r\n float posZ = unpackFloat(TEXTURE(s_sensorSampler, tc));\r\n tc.x += sx;\r\n float value = unpackFloat(TEXTURE(s_sensorSampler, tc));\r\n return vec4(posX, posY, posZ, value);\r\n}\r\n`;\r\n\r\n// Access a gradient texture at the specified index.\r\n// A stepped gradient texture is arranged with single unique color pixels for each step. The dimension of a stepped gradient texture is stepCount.\r\n// A smooth gradient texture is arranged with blended color pixels across the entire span of the texture. The dimension of a smooth gradient texture is the system's maximum texture size.\r\nconst getColor = `\r\nvec3 getColor(float ndx) {\r\n if (ndx < 0.0 || ndx > 1.0)\r\n return u_marginColor;\r\n\r\n return TEXTURE(s_texture, vec2(0.0, ndx)).rgb;\r\n}\r\n`;\r\n\r\n// Access a stepped gradient texture at the specified index taking into account isolines.\r\n// The texture format is exactly as described above for stepped mode. We just access the gradient differently,\r\n// specifically to ensure that the texels sampled result in lines of overall singular colors - no stepping into the\r\n// neighboring bands.\r\nconst getIsoLineColor = `\r\nvec3 getIsoLineColor(float ndx, float stepCount) {\r\n if (ndx < 0.01 || ndx > 0.99)\r\n return u_marginColor;\r\n\r\n ndx += 0.5 / stepCount; // center on step pixels\r\n return TEXTURE(s_texture, vec2(0.0, ndx)).rgb;\r\n}\r\n`;\r\n\r\nconst fwidthWhenAvailable = `\\nfloat _universal_fwidth(float coord) { return fwidth(coord); }\\n`;\r\nconst fwidthWhenNotAvailable = `\\nfloat _universal_fwidth(float coord) { return coord; }\\n`; // ###TODO: can we do something reasonable in this case?\r\n\r\nconst slopeAndHillShadeShader = ` else if (kThematicDisplayMode_Slope == u_thematicDisplayMode) {\r\n float d = dot(g_normal, u_thematicAxis);\r\n if (d < 0.0)\r\n d = -d;\r\n\r\n // The range of d is now 0 to 1 (90 degrees to 0 degrees).\r\n // However, the range from 0 to 1 is not linear. Therefore, we use acos() to find the actual angle in radians.\r\n d = acos(d);\r\n\r\n // range of d is currently 1.5708 to 0 radians.\r\n if (d < u_thematicRange.x || d > u_thematicRange.y)\r\n d = -1.0; // use marginColor if outside the requested range\r\n else { // convert d from radians to 0 to 1 using requested range\r\n d -= u_thematicRange.x;\r\n d /= (u_thematicRange.y - u_thematicRange.x);\r\n }\r\n\r\n ndx = d;\r\n } else if (kThematicDisplayMode_HillShade == u_thematicDisplayMode) {\r\n float d = dot(g_normal, u_thematicSunDirection);\r\n\r\n ndx = max(0.0, d);\r\n }`;\r\n\r\n// Access the appropriate gradient texel for a particular index based on display mode and gradient mode.\r\nconst applyThematicColorPrelude = `\r\n float ndx = v_thematicIndex;\r\n\r\n if (kThematicDisplayMode_InverseDistanceWeightedSensors == u_thematicDisplayMode) {\r\n float sensorSum = 0.0;\r\n float contributionSum = 0.0;\r\n\r\n vec3 sensorPos;\r\n float sensorValue;\r\n float sensorWeight;\r\n\r\n ndx = -1.0; // default index = marginColor\r\n\r\n float distanceCutoff = u_thematicSettings.y;\r\n\r\n for (int i = 0; i < 8192; i++) { // ###TODO: set maximum number of sensors during an incremental form of shader construction\r\n if (i >= u_numSensors)\r\n break;\r\n\r\n vec4 sensor = getSensor(i);\r\n\r\n float dist = distance(v_eyeSpace, sensor.xyz);\r\n\r\n bool skipThisSensor = (distanceCutoff > 0.0 && dist > distanceCutoff);\r\n if (!skipThisSensor) {\r\n float contribution = 1.0 / pow(dist, 2.0);\r\n sensorSum += sensor.w * contribution;\r\n contributionSum += contribution;\r\n }\r\n }\r\n\r\n if (contributionSum > 0.0) // avoid division by zero\r\n ndx = sensorSum / contributionSum;\r\n }`;\r\n\r\nconst applyThematicColorPostlude = `\r\n float gradientMode = u_thematicSettings.x;\r\n float stepCount = u_thematicSettings.z;\r\n\r\n vec4 rgba = vec4((kThematicGradientMode_IsoLines == gradientMode) ? getIsoLineColor(ndx, stepCount) : getColor(ndx), baseColor.a);\r\n rgba = mix(rgba, baseColor, u_thematicColorMix);\r\n\r\n if (kThematicGradientMode_IsoLines == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5) / _universal_fwidth(coord);\r\n rgba.a = 1.0 - min(line, 1.0);\r\n if (u_discardBetweenIsolines && 0.0 == rgba.a)\r\n discard;\r\n } else if (kThematicGradientMode_SteppedWithDelimiter == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5) / _universal_fwidth(coord);\r\n float value = min(line, 1.0);\r\n rgba.rgb *= value;\r\n }\r\n\r\n return rgba;\r\n`;\r\n\r\n// fwidth does not function for point clouds, so we work around the limitation with a less-than-ideal rendering of isolines and delimiters\r\n// using a tolerance not based on neighboring fragments.\r\nconst delimiterToleranceForPointClouds = `0.025`; // / (stepCount * 40.0)`;\r\nconst applyThematicColorPostludeForPointClouds = `\r\n float gradientMode = u_thematicSettings.x;\r\n float stepCount = u_thematicSettings.z;\r\n\r\n vec4 rgba = vec4((kThematicGradientMode_IsoLines == gradientMode) ? getIsoLineColor(ndx, stepCount) : getColor(ndx), baseColor.a);\r\n rgba = mix(rgba, baseColor, u_thematicColorMix);\r\n\r\n if (kThematicGradientMode_IsoLines == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5);\r\n if (line > ${delimiterToleranceForPointClouds})\r\n discard;\r\n } else if (kThematicGradientMode_SteppedWithDelimiter == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5);\r\n float value = min(line, 1.0);\r\n if (line < ${delimiterToleranceForPointClouds} && value < 1.0)\r\n rgba.rgb *= 0.0;\r\n }\r\n\r\n return rgba;\r\n`;\r\n\r\nfunction _getShader(isPointCloud: boolean) {\r\n return isPointCloud ?\r\n applyThematicColorPrelude + applyThematicColorPostludeForPointClouds : // do not include slope and hillshade for point clouds\r\n applyThematicColorPrelude + slopeAndHillShadeShader + applyThematicColorPostlude; // include all modes for everything else\r\n}\r\n\r\n// Compute the value for the varying to be interpolated to the fragment shader in order to access the color in the thematic gradient texture\r\n// We will project a vector onto another vector using this equation: proju = (v . u) / (v . v) * v\r\nexport function getComputeThematicIndex(instanced: boolean, skipSlopeAndHillShade: boolean, decodeNormal: boolean): string {\r\n const modelPos = instanced ? \"(g_instancedRtcMatrix * rawPosition)\" : \"rawPosition\";\r\n const heightMode = `\r\n if (kThematicDisplayMode_Height == u_thematicDisplayMode) {\r\n vec3 u = (u_modelToWorld * ${modelPos}).xyz;\r\n vec3 v = u_thematicAxis;\r\n vec3 proju = (dot(v, u) / dot(v, v)) * v;\r\n vec3 a = v * u_thematicRange.s;\r\n vec3 b = v * u_thematicRange.t;\r\n vec3 c = proju;\r\n v_thematicIndex = findFractionalPositionOnLine(a, b, c);\r\n }`;\r\n const hillShadeMode = ` else if (kThematicDisplayMode_HillShade == u_thematicDisplayMode) {\r\n v_thematicIndex = computeSurfaceNormal().z;\r\n }`;\r\n const hillShadeMode2 = ` else if (kThematicDisplayMode_HillShade == u_thematicDisplayMode) {\r\n v_thematicIndex = g_hillshadeIndex;\r\n }`;\r\n return skipSlopeAndHillShade ? heightMode : heightMode + (decodeNormal ? hillShadeMode : hillShadeMode2);\r\n}\r\n\r\n// Determine the fractional position of c on line segment ab. Assumes the three points are aligned on the same axis.\r\nconst findFractionalPositionOnLine = `\r\n float abDist = distance(a, b);\r\n return dot(b - a, c - a) / (abDist * abDist);\r\n`;\r\n\r\nfunction addThematicDisplayModeConstants(builder: ShaderBuilder) {\r\n builder.addDefine(\"kThematicDisplayMode_Height\", ThematicDisplayMode.Height.toFixed(1));\r\n builder.addDefine(\"kThematicDisplayMode_InverseDistanceWeightedSensors\", ThematicDisplayMode.InverseDistanceWeightedSensors.toFixed(1));\r\n builder.addDefine(\"kThematicDisplayMode_Slope\", ThematicDisplayMode.Slope.toFixed(1));\r\n builder.addDefine(\"kThematicDisplayMode_HillShade\", ThematicDisplayMode.HillShade.toFixed(1));\r\n}\r\n\r\nfunction addThematicGradientModeConstants(builder: ShaderBuilder) {\r\n builder.addDefine(\"kThematicGradientMode_Smooth\", ThematicGradientMode.Smooth.toFixed(1));\r\n builder.addDefine(\"kThematicGradientMode_Stepped\", ThematicGradientMode.Stepped.toFixed(1));\r\n builder.addDefine(\"kThematicGradientMode_SteppedWithDelimiter\", ThematicGradientMode.SteppedWithDelimiter.toFixed(1));\r\n builder.addDefine(\"kThematicGradientMode_IsoLines\", ThematicGradientMode.IsoLines.toFixed(1));\r\n}\r\n\r\n/** @internal */\r\nexport function addThematicDisplay(builder: ProgramBuilder, isForPointClouds = false, isForTerrainMesh = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n addRenderPass(builder.frag);\r\n\r\n if (!isForPointClouds && !isForTerrainMesh)\r\n addProjectionMatrix(vert);\r\n\r\n addEyeSpace(builder);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n\r\n vert.addFunction(\"float findFractionalPositionOnLine(vec3 a, vec3 b, vec3 c)\", findFractionalPositionOnLine);\r\n\r\n vert.addUniform(\"u_modelToWorld\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_modelToWorld\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n\r\n builder.addUniform(\"u_thematicRange\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicRange\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindRange(uniform);\r\n });\r\n });\r\n\r\n builder.addUniform(\"u_thematicAxis\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicAxis\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindAxis(uniform);\r\n });\r\n });\r\n\r\n if (!isForPointClouds) {\r\n builder.addUniform(\"u_thematicSunDirection\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicSunDirection\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n addThematicGradientModeConstants(builder.frag);\r\n\r\n addThematicDisplayModeConstants(builder.frag);\r\n addThematicDisplayModeConstants(builder.vert);\r\n\r\n builder.addUniform(\"u_thematicDisplayMode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicDisplayMode\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindDisplayMode(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_marginColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_marginColor\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindMarginColor(uniform);\r\n });\r\n });\r\n\r\n // gradientMode, distanceCutoff, stepCount\r\n builder.addUniform(\"u_thematicSettings\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicSettings\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindFragSettings(uniform);\r\n });\r\n });\r\n\r\n if (isForPointClouds || isForTerrainMesh) {\r\n builder.frag.addUniform(\"u_thematicColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.uniforms.thematic.thematicDisplay?.gradientSettings.colorMix || 0.0);\r\n });\r\n });\r\n } else {\r\n builder.frag.addUniform(\"u_thematicColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicColorMix\", (uniform, _params) => {\r\n uniform.setUniform1f(0.0);\r\n });\r\n });\r\n }\r\n\r\n frag.addUniform(\"u_numSensors\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_numSensors\", (uniform, params) => {\r\n if (params.target.wantThematicSensors) {\r\n if (params.target.uniforms.thematic.wantGlobalSensorTexture)\r\n params.target.uniforms.thematic.bindNumSensors(uniform);\r\n else // we are batching separate sensor textures per-tile; use the number of sensors from the batch\r\n params.target.uniforms.batch.bindNumThematicSensors(uniform);\r\n } else {\r\n uniform.setUniform1i(0);\r\n }\r\n });\r\n });\r\n\r\n frag.addUniform(\"s_sensorSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_sensorSampler\", (uniform, params) => {\r\n if (params.target.wantThematicSensors) {\r\n if (params.target.uniforms.thematic.wantGlobalSensorTexture) {\r\n params.target.uniforms.thematic.bindSensors(uniform);\r\n } else { // we are batching separate sensor textures per-tile; bind the batch's sensor texture\r\n params.target.uniforms.batch.bindThematicSensors(uniform);\r\n }\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.ThematicSensors);\r\n }\r\n });\r\n });\r\n\r\n if (!isForPointClouds) { // allows us to know when to discard between isolines to make them pickable\r\n builder.frag.addUniform(\"u_discardBetweenIsolines\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_discardBetweenIsolines\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n const isWebGL2 = System.instance.capabilities.isWebGL2;\r\n if (isWebGL2) {\r\n frag.addFunction(fwidthWhenAvailable);\r\n } else if (System.instance.capabilities.supportsStandardDerivatives) {\r\n frag.addExtension(\"GL_OES_standard_derivatives\");\r\n frag.addFunction(fwidthWhenAvailable);\r\n } else {\r\n frag.addFunction(fwidthWhenNotAvailable);\r\n }\r\n\r\n if (System.instance.capabilities.supportsTextureFloat) {\r\n frag.addFunction(getSensorFloat);\r\n } else {\r\n frag.addFunction(unpackFloat);\r\n frag.addFunction(unpackSensor);\r\n }\r\n\r\n frag.addFunction(getColor);\r\n frag.addFunction(getIsoLineColor);\r\n\r\n frag.set(FragmentShaderComponent.ApplyThematicDisplay, _getShader(isForPointClouds));\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Thematic.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Thematic.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 { ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addInstancedRtcMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addEyeSpace } from \"./Common\";\r\n\r\nconst getSensorFloat = `\r\nvec4 getSensor(int index) {\r\n float x = 0.5;\r\n float y = (float(index) + 0.5) / float(u_numSensors);\r\n return TEXTURE(s_sensorSampler, vec2(x, y));\r\n}\r\n`;\r\n\r\n// Access a gradient texture at the specified index.\r\n// A stepped gradient texture is arranged with single unique color pixels for each step. The dimension of a stepped gradient texture is stepCount.\r\n// A smooth gradient texture is arranged with blended color pixels across the entire span of the texture. The dimension of a smooth gradient texture is the system's maximum texture size.\r\nconst getColor = `\r\nvec3 getColor(float ndx) {\r\n if (ndx < 0.0 || ndx > 1.0)\r\n return u_marginColor;\r\n\r\n return TEXTURE(s_texture, vec2(0.0, ndx)).rgb;\r\n}\r\n`;\r\n\r\n// Access a stepped gradient texture at the specified index taking into account isolines.\r\n// The texture format is exactly as described above for stepped mode. We just access the gradient differently,\r\n// specifically to ensure that the texels sampled result in lines of overall singular colors - no stepping into the\r\n// neighboring bands.\r\nconst getIsoLineColor = `\r\nvec3 getIsoLineColor(float ndx, float stepCount) {\r\n if (ndx < 0.01 || ndx > 0.99)\r\n return u_marginColor;\r\n\r\n ndx += 0.5 / stepCount; // center on step pixels\r\n return TEXTURE(s_texture, vec2(0.0, ndx)).rgb;\r\n}\r\n`;\r\n\r\nconst fwidth = `\\nfloat _universal_fwidth(float coord) { return fwidth(coord); }\\n`;\r\n\r\nconst slopeAndHillShadeShader = ` else if (kThematicDisplayMode_Slope == u_thematicDisplayMode) {\r\n float d = dot(g_normal, u_thematicAxis);\r\n if (d < 0.0)\r\n d = -d;\r\n\r\n // The range of d is now 0 to 1 (90 degrees to 0 degrees).\r\n // However, the range from 0 to 1 is not linear. Therefore, we use acos() to find the actual angle in radians.\r\n d = acos(d);\r\n\r\n // range of d is currently 1.5708 to 0 radians.\r\n if (d < u_thematicRange.x || d > u_thematicRange.y)\r\n d = -1.0; // use marginColor if outside the requested range\r\n else { // convert d from radians to 0 to 1 using requested range\r\n d -= u_thematicRange.x;\r\n d /= (u_thematicRange.y - u_thematicRange.x);\r\n }\r\n\r\n ndx = d;\r\n } else if (kThematicDisplayMode_HillShade == u_thematicDisplayMode) {\r\n float d = dot(g_normal, u_thematicSunDirection);\r\n\r\n ndx = max(0.0, d);\r\n }`;\r\n\r\n// Access the appropriate gradient texel for a particular index based on display mode and gradient mode.\r\nconst applyThematicColorPrelude = `\r\n float ndx = v_thematicIndex;\r\n\r\n if (kThematicDisplayMode_InverseDistanceWeightedSensors == u_thematicDisplayMode) {\r\n float sensorSum = 0.0;\r\n float contributionSum = 0.0;\r\n\r\n vec3 sensorPos;\r\n float sensorValue;\r\n float sensorWeight;\r\n\r\n ndx = -1.0; // default index = marginColor\r\n\r\n float distanceCutoff = u_thematicSettings.y;\r\n\r\n for (int i = 0; i < 8192; i++) { // ###TODO: set maximum number of sensors during an incremental form of shader construction\r\n if (i >= u_numSensors)\r\n break;\r\n\r\n vec4 sensor = getSensor(i);\r\n\r\n float dist = distance(v_eyeSpace, sensor.xyz);\r\n\r\n bool skipThisSensor = (distanceCutoff > 0.0 && dist > distanceCutoff);\r\n if (!skipThisSensor) {\r\n float contribution = 1.0 / pow(dist, 2.0);\r\n sensorSum += sensor.w * contribution;\r\n contributionSum += contribution;\r\n }\r\n }\r\n\r\n if (contributionSum > 0.0) // avoid division by zero\r\n ndx = sensorSum / contributionSum;\r\n }`;\r\n\r\nconst applyThematicColorPostlude = `\r\n float gradientMode = u_thematicSettings.x;\r\n float stepCount = u_thematicSettings.z;\r\n\r\n vec4 rgba = vec4((kThematicGradientMode_IsoLines == gradientMode) ? getIsoLineColor(ndx, stepCount) : getColor(ndx), baseColor.a);\r\n rgba = mix(rgba, baseColor, u_thematicColorMix);\r\n\r\n if (kThematicGradientMode_IsoLines == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5) / _universal_fwidth(coord);\r\n rgba.a = 1.0 - min(line, 1.0);\r\n if (u_discardBetweenIsolines && 0.0 == rgba.a)\r\n discard;\r\n } else if (kThematicGradientMode_SteppedWithDelimiter == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5) / _universal_fwidth(coord);\r\n float value = min(line, 1.0);\r\n rgba.rgb *= value;\r\n }\r\n\r\n return rgba;\r\n`;\r\n\r\n// fwidth does not function for point clouds, so we work around the limitation with a less-than-ideal rendering of isolines and delimiters\r\n// using a tolerance not based on neighboring fragments.\r\nconst delimiterToleranceForPointClouds = `0.025`; // / (stepCount * 40.0)`;\r\nconst applyThematicColorPostludeForPointClouds = `\r\n float gradientMode = u_thematicSettings.x;\r\n float stepCount = u_thematicSettings.z;\r\n\r\n vec4 rgba = vec4((kThematicGradientMode_IsoLines == gradientMode) ? getIsoLineColor(ndx, stepCount) : getColor(ndx), baseColor.a);\r\n rgba = mix(rgba, baseColor, u_thematicColorMix);\r\n\r\n if (kThematicGradientMode_IsoLines == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5);\r\n if (line > ${delimiterToleranceForPointClouds})\r\n discard;\r\n } else if (kThematicGradientMode_SteppedWithDelimiter == gradientMode) {\r\n float coord = v_thematicIndex * stepCount;\r\n float line = abs(fract(coord - 0.5) - 0.5);\r\n float value = min(line, 1.0);\r\n if (line < ${delimiterToleranceForPointClouds} && value < 1.0)\r\n rgba.rgb *= 0.0;\r\n }\r\n\r\n return rgba;\r\n`;\r\n\r\nfunction _getShader(isPointCloud: boolean) {\r\n return isPointCloud ?\r\n applyThematicColorPrelude + applyThematicColorPostludeForPointClouds : // do not include slope and hillshade for point clouds\r\n applyThematicColorPrelude + slopeAndHillShadeShader + applyThematicColorPostlude; // include all modes for everything else\r\n}\r\n\r\n// Compute the value for the varying to be interpolated to the fragment shader in order to access the color in the thematic gradient texture\r\n// We will project a vector onto another vector using this equation: proju = (v . u) / (v . v) * v\r\nexport function getComputeThematicIndex(instanced: boolean, skipSlopeAndHillShade: boolean, decodeNormal: boolean): string {\r\n const modelPos = instanced ? \"(g_instancedRtcMatrix * rawPosition)\" : \"rawPosition\";\r\n const heightMode = `\r\n if (kThematicDisplayMode_Height == u_thematicDisplayMode) {\r\n vec3 u = (u_modelToWorld * ${modelPos}).xyz;\r\n vec3 v = u_thematicAxis;\r\n vec3 proju = (dot(v, u) / dot(v, v)) * v;\r\n vec3 a = v * u_thematicRange.s;\r\n vec3 b = v * u_thematicRange.t;\r\n vec3 c = proju;\r\n v_thematicIndex = findFractionalPositionOnLine(a, b, c);\r\n }`;\r\n const hillShadeMode = ` else if (kThematicDisplayMode_HillShade == u_thematicDisplayMode) {\r\n v_thematicIndex = computeSurfaceNormal().z;\r\n }`;\r\n const hillShadeMode2 = ` else if (kThematicDisplayMode_HillShade == u_thematicDisplayMode) {\r\n v_thematicIndex = g_hillshadeIndex;\r\n }`;\r\n return skipSlopeAndHillShade ? heightMode : heightMode + (decodeNormal ? hillShadeMode : hillShadeMode2);\r\n}\r\n\r\n// Determine the fractional position of c on line segment ab. Assumes the three points are aligned on the same axis.\r\nconst findFractionalPositionOnLine = `\r\n float abDist = distance(a, b);\r\n return dot(b - a, c - a) / (abDist * abDist);\r\n`;\r\n\r\nfunction addThematicDisplayModeConstants(builder: ShaderBuilder) {\r\n builder.addDefine(\"kThematicDisplayMode_Height\", ThematicDisplayMode.Height.toFixed(1));\r\n builder.addDefine(\"kThematicDisplayMode_InverseDistanceWeightedSensors\", ThematicDisplayMode.InverseDistanceWeightedSensors.toFixed(1));\r\n builder.addDefine(\"kThematicDisplayMode_Slope\", ThematicDisplayMode.Slope.toFixed(1));\r\n builder.addDefine(\"kThematicDisplayMode_HillShade\", ThematicDisplayMode.HillShade.toFixed(1));\r\n}\r\n\r\nfunction addThematicGradientModeConstants(builder: ShaderBuilder) {\r\n builder.addDefine(\"kThematicGradientMode_Smooth\", ThematicGradientMode.Smooth.toFixed(1));\r\n builder.addDefine(\"kThematicGradientMode_Stepped\", ThematicGradientMode.Stepped.toFixed(1));\r\n builder.addDefine(\"kThematicGradientMode_SteppedWithDelimiter\", ThematicGradientMode.SteppedWithDelimiter.toFixed(1));\r\n builder.addDefine(\"kThematicGradientMode_IsoLines\", ThematicGradientMode.IsoLines.toFixed(1));\r\n}\r\n\r\n/** @internal */\r\nexport function addThematicDisplay(builder: ProgramBuilder, isForPointClouds = false, isForTerrainMesh = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n addRenderPass(builder.frag);\r\n\r\n if (!isForPointClouds && !isForTerrainMesh)\r\n addProjectionMatrix(vert);\r\n\r\n addEyeSpace(builder);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n\r\n vert.addFunction(\"float findFractionalPositionOnLine(vec3 a, vec3 b, vec3 c)\", findFractionalPositionOnLine);\r\n\r\n vert.addUniform(\"u_modelToWorld\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_modelToWorld\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n\r\n builder.addUniform(\"u_thematicRange\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicRange\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindRange(uniform);\r\n });\r\n });\r\n\r\n builder.addUniform(\"u_thematicAxis\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicAxis\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindAxis(uniform);\r\n });\r\n });\r\n\r\n if (!isForPointClouds) {\r\n builder.addUniform(\"u_thematicSunDirection\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicSunDirection\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n addThematicGradientModeConstants(builder.frag);\r\n\r\n addThematicDisplayModeConstants(builder.frag);\r\n addThematicDisplayModeConstants(builder.vert);\r\n\r\n builder.addUniform(\"u_thematicDisplayMode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicDisplayMode\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindDisplayMode(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_marginColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_marginColor\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindMarginColor(uniform);\r\n });\r\n });\r\n\r\n // gradientMode, distanceCutoff, stepCount\r\n builder.addUniform(\"u_thematicSettings\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicSettings\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindFragSettings(uniform);\r\n });\r\n });\r\n\r\n if (isForPointClouds || isForTerrainMesh) {\r\n builder.frag.addUniform(\"u_thematicColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.uniforms.thematic.thematicDisplay?.gradientSettings.colorMix || 0.0);\r\n });\r\n });\r\n } else {\r\n builder.frag.addUniform(\"u_thematicColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_thematicColorMix\", (uniform, _params) => {\r\n uniform.setUniform1f(0.0);\r\n });\r\n });\r\n }\r\n\r\n frag.addUniform(\"u_numSensors\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_numSensors\", (uniform, params) => {\r\n if (params.target.wantThematicSensors) {\r\n if (params.target.uniforms.thematic.wantGlobalSensorTexture)\r\n params.target.uniforms.thematic.bindNumSensors(uniform);\r\n else // we are batching separate sensor textures per-tile; use the number of sensors from the batch\r\n params.target.uniforms.batch.bindNumThematicSensors(uniform);\r\n } else {\r\n uniform.setUniform1i(0);\r\n }\r\n });\r\n });\r\n\r\n frag.addUniform(\"s_sensorSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_sensorSampler\", (uniform, params) => {\r\n if (params.target.wantThematicSensors) {\r\n if (params.target.uniforms.thematic.wantGlobalSensorTexture) {\r\n params.target.uniforms.thematic.bindSensors(uniform);\r\n } else { // we are batching separate sensor textures per-tile; bind the batch's sensor texture\r\n params.target.uniforms.batch.bindThematicSensors(uniform);\r\n }\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.ThematicSensors);\r\n }\r\n });\r\n });\r\n\r\n if (!isForPointClouds) { // allows us to know when to discard between isolines to make them pickable\r\n builder.frag.addUniform(\"u_discardBetweenIsolines\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_discardBetweenIsolines\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n frag.addFunction(fwidth);\r\n frag.addFunction(getSensorFloat);\r\n\r\n frag.addFunction(getColor);\r\n frag.addFunction(getIsoLineColor);\r\n\r\n frag.set(FragmentShaderComponent.ApplyThematicDisplay, _getShader(isForPointClouds));\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Translucency.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Translucency.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA2B,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Translucency.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Translucency.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA2B,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAqC3E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAY1D"}
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.addTranslucency = void 0;
|
|
11
|
-
const System_1 = require("../System");
|
|
12
11
|
const Common_1 = require("./Common");
|
|
13
12
|
const Fragment_1 = require("./Fragment");
|
|
14
13
|
const Vertex_1 = require("./Vertex");
|
|
@@ -41,9 +40,6 @@ const assignFragData = `${computeOutputs}
|
|
|
41
40
|
FragColor0 = output0;
|
|
42
41
|
FragColor1 = output1;
|
|
43
42
|
`;
|
|
44
|
-
const assignFragColor = `${computeOutputs}
|
|
45
|
-
FragColor = (0 == u_renderTargetIndex) ? output0 : output1;
|
|
46
|
-
`;
|
|
47
43
|
/** @internal */
|
|
48
44
|
function addTranslucency(prog) {
|
|
49
45
|
const frag = prog.frag;
|
|
@@ -52,14 +48,8 @@ function addTranslucency(prog) {
|
|
|
52
48
|
(0, Vertex_1.addModelViewMatrix)(prog.vert);
|
|
53
49
|
frag.addFunction(Fragment_1.computeLinearDepth);
|
|
54
50
|
frag.addFunction(computeAlphaWeight);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
frag.set(16 /* AssignFragData */, assignFragData);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
(0, Fragment_1.addRenderTargetIndex)(frag);
|
|
61
|
-
frag.set(16 /* AssignFragData */, assignFragColor);
|
|
62
|
-
}
|
|
51
|
+
frag.addDrawBuffersExtension(2);
|
|
52
|
+
frag.set(16 /* AssignFragData */, assignFragData);
|
|
63
53
|
}
|
|
64
54
|
exports.addTranslucency = addTranslucency;
|
|
65
55
|
//# sourceMappingURL=Translucency.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Translucency.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Translucency.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,
|
|
1
|
+
{"version":3,"file":"Translucency.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Translucency.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,qCAAmD;AACnD,yCAAgD;AAChD,qCAA8C;AAE9C,qGAAqG;AACrG,wCAAwC;AACxC,yGAAyG;AACzG,iGAAiG;AACjG,2EAA2E;AAC3E,oGAAoG;AACpG,MAAM,kBAAkB,GAAG;;;;;;CAM1B,CAAC;AAEF,uDAAuD;AACvD,MAAM,cAAc,GAAG;;;;;;;;;;CAUtB,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,cAAc;;;CAGvC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,eAAe,CAAC,IAAoB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAEvB,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAClB,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;IACjB,IAAA,2BAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,CAAC,WAAW,CAAC,6BAAkB,CAAC,CAAC;IACrC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAErC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,0BAAyC,cAAc,CAAC,CAAC;AACnE,CAAC;AAZD,0CAYC","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 { FragmentShaderComponent, ProgramBuilder } from \"../ShaderBuilder\";\r\nimport { addEyeSpace, addFrustum } from \"./Common\";\r\nimport { computeLinearDepth } from \"./Fragment\";\r\nimport { addModelViewMatrix } from \"./Vertex\";\r\n\r\n// See Weighted Blended Order-Independent Transparency for examples of different weighting functions:\r\n// http://jcgt.org/published/0002/02/09/\r\n// We are using Equation 10 from the above paper. Equation 10 directly uses screen-space gl_FragCoord.z.\r\n// flatAlphaWeight bit is set if we want to apply OIT transparency using a constant Z value of 1.\r\n// computeLinearDepth() removes the perspective and puts z in linear [0..1]\r\n// To avoid excessively low weight for fragments close to the far plane, scale depth to [0.15, 1.0].\r\nconst computeAlphaWeight = `\r\nfloat computeAlphaWeight(float a) {\r\n float d = computeLinearDepth(v_eyeSpace.z) * .85 + .15;\r\n float z = (u_shaderFlags[kShaderBit_OITFlatAlphaWeight] ? 1.0 : d);\r\n return pow(a + 0.01, 4.0) + max(1e-2, 3.0 * 1e3 * pow(z, 3.0));\r\n}\r\n`;\r\n\r\n// NB: Our blending algorithm uses pre-multiplied alpha\r\nconst computeOutputs = `\r\n vec3 Ci = baseColor.rgb * baseColor.a;\r\n float ai = min(0.99, baseColor.a); // OIT algorithm does not nicely handle a=1\r\n float wzi = computeAlphaWeight(ai);\r\n\r\n // If we are scaling output into the 0 to 1 range, we use the maximum output of the alpha weight function.\r\n float outputScale = (u_shaderFlags[kShaderBit_OITScaleOutput] ? 1.0 / 3001.040604 : 1.0);\r\n\r\n vec4 output0 = vec4(Ci * wzi * outputScale, ai);\r\n vec4 output1 = vec4(ai * wzi * outputScale);\r\n`;\r\n\r\nconst assignFragData = `${computeOutputs}\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n`;\r\n\r\n/** @internal */\r\nexport function addTranslucency(prog: ProgramBuilder): void {\r\n const frag = prog.frag;\r\n\r\n addEyeSpace(prog);\r\n addFrustum(prog);\r\n addModelViewMatrix(prog.vert);\r\n\r\n frag.addFunction(computeLinearDepth);\r\n frag.addFunction(computeAlphaWeight);\r\n\r\n frag.addDrawBuffersExtension(2);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n}\r\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
|
-
import { IsInstanced } from "../TechniqueFlags";
|
|
5
4
|
import { VertexShaderBuilder } from "../ShaderBuilder";
|
|
6
5
|
/** @internal */
|
|
7
6
|
export declare const unquantizePosition = "\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\n";
|
|
@@ -15,7 +14,7 @@ export declare function addInstancedRtcMatrix(vert: VertexShaderBuilder): void;
|
|
|
15
14
|
/** @internal */
|
|
16
15
|
export declare function addModelViewMatrix(vert: VertexShaderBuilder): void;
|
|
17
16
|
/** @internal */
|
|
18
|
-
export declare function addNormalMatrix(vert: VertexShaderBuilder
|
|
17
|
+
export declare function addNormalMatrix(vert: VertexShaderBuilder): void;
|
|
19
18
|
/** @internal */
|
|
20
19
|
export declare function addPosition(vert: VertexShaderBuilder, fromLUT: boolean): void;
|
|
21
20
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vertex.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"Vertex.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAgB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAUrE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,+GAE9B,CAAC;AAiCF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAEjE;AAiCD,gBAAgB;AAChB,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAa5E;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAMnE;AAMD,gBAAgB;AAChB,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAcrE;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAkBlE;AAQD,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,QAUxD;AA8ED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,QAsBtE;AAED,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAMxD;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAgB7D;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAE/E;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAgB3D;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAE7E;AAUD,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,QAA6D,CAAC;AAC7F,gBAAgB;AAChB,eAAO,MAAM,aAAa,QAA6C,CAAC;AACxE,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,QAAiD,CAAC"}
|
|
@@ -11,7 +11,6 @@ exports.lateVertexDiscard = exports.vertexDiscard = exports.earlyVertexDiscard =
|
|
|
11
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
12
|
const Matrix_1 = require("../Matrix");
|
|
13
13
|
const RenderFlags_1 = require("../RenderFlags");
|
|
14
|
-
const System_1 = require("../System");
|
|
15
14
|
const Decode_1 = require("./Decode");
|
|
16
15
|
const Instancing_1 = require("./Instancing");
|
|
17
16
|
const LookupTable_1 = require("./LookupTable");
|
|
@@ -34,21 +33,7 @@ vec4 computeVertexPosition(vec3 encodedIndex) {
|
|
|
34
33
|
return unquantizePosition(qpos, u_qOrigin, u_qScale);
|
|
35
34
|
}
|
|
36
35
|
`;
|
|
37
|
-
const
|
|
38
|
-
vec4 computeVertexPosition(vec3 encodedIndex) {
|
|
39
|
-
vec3 pf[4];
|
|
40
|
-
pf[0] = g_vertLutData0.xyz;
|
|
41
|
-
g_featureAndMaterialIndex.x = g_vertLutData0.w;
|
|
42
|
-
pf[1] = g_vertLutData1.xyz;
|
|
43
|
-
g_featureAndMaterialIndex.y = g_vertLutData1.w;
|
|
44
|
-
pf[2] = g_vertLutData2.xyz;
|
|
45
|
-
g_featureAndMaterialIndex.z = g_vertLutData2.w;
|
|
46
|
-
pf[3] = g_vertLutData3.xyz;
|
|
47
|
-
g_featureAndMaterialIndex.w = g_vertLutData3.w;
|
|
48
|
-
return vec4(decode3Float32(pf), 1.0);
|
|
49
|
-
}
|
|
50
|
-
`;
|
|
51
|
-
const computeUnquantizedPosition2 = `
|
|
36
|
+
const computeUnquantizedPosition = `
|
|
52
37
|
vec4 computeVertexPosition(vec3 encodedIndex) {
|
|
53
38
|
uvec3 vux = uvec3(g_vertLutData0.xyz);
|
|
54
39
|
g_featureAndMaterialIndex.x = g_vertLutData0.w;
|
|
@@ -83,32 +68,18 @@ function getSamplePosition(type) {
|
|
|
83
68
|
}
|
|
84
69
|
`;
|
|
85
70
|
}
|
|
86
|
-
if (System_1.System.instance.capabilities.isWebGL2) {
|
|
87
|
-
return `
|
|
88
|
-
${prelude}
|
|
89
|
-
uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
90
|
-
tc.x += g_vert_stepX;
|
|
91
|
-
uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
92
|
-
tc.x += g_vert_stepX;
|
|
93
|
-
uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
94
|
-
tc.x += g_vert_stepX;
|
|
95
|
-
uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
96
|
-
uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;
|
|
97
|
-
return vec4(uintBitsToFloat(u), 1.0);
|
|
98
|
-
}`;
|
|
99
|
-
}
|
|
100
71
|
return `
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
72
|
+
${prelude}
|
|
73
|
+
uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
74
|
+
tc.x += g_vert_stepX;
|
|
75
|
+
uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
76
|
+
tc.x += g_vert_stepX;
|
|
77
|
+
uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
78
|
+
tc.x += g_vert_stepX;
|
|
79
|
+
uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
80
|
+
uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;
|
|
81
|
+
return vec4(uintBitsToFloat(u), 1.0);
|
|
82
|
+
}`;
|
|
112
83
|
}
|
|
113
84
|
/** @internal */
|
|
114
85
|
function addModelViewProjectionMatrix(vert) {
|
|
@@ -175,22 +146,12 @@ function addModelViewMatrix(vert) {
|
|
|
175
146
|
}
|
|
176
147
|
exports.addModelViewMatrix = addModelViewMatrix;
|
|
177
148
|
const computeNormalMatrix = `
|
|
178
|
-
g_nmx = mat3(u_modelViewN);
|
|
179
|
-
g_nmx[0][0] *= u_frustumScale.x;
|
|
180
|
-
g_nmx[1][1] *= u_frustumScale.y;
|
|
181
|
-
`;
|
|
182
|
-
const computeNormalMatrix2 = `
|
|
183
149
|
g_nmx = transpose(inverse(mat3(MAT_MV)));
|
|
184
150
|
g_nmx[0][0] *= u_frustumScale.x;
|
|
185
151
|
g_nmx[1][1] *= u_frustumScale.y;
|
|
186
152
|
`;
|
|
187
|
-
const computeNormalMatrix1Inst = `
|
|
188
|
-
g_nmx = mat3(MAT_MV);
|
|
189
|
-
g_nmx[0][0] *= u_frustumScale.x;
|
|
190
|
-
g_nmx[1][1] *= u_frustumScale.y;
|
|
191
|
-
`;
|
|
192
153
|
/** @internal */
|
|
193
|
-
function addNormalMatrix(vert
|
|
154
|
+
function addNormalMatrix(vert) {
|
|
194
155
|
vert.addGlobal("g_nmx", 6 /* Mat3 */);
|
|
195
156
|
vert.addUniform("u_frustumScale", 3 /* Vec2 */, (prog) => {
|
|
196
157
|
prog.addGraphicUniform("u_frustumScale", (uniform, params) => {
|
|
@@ -198,20 +159,7 @@ function addNormalMatrix(vert, instanced) {
|
|
|
198
159
|
uniform.setUniform2fv([scale.x, scale.y]);
|
|
199
160
|
});
|
|
200
161
|
});
|
|
201
|
-
|
|
202
|
-
vert.addInitializer(computeNormalMatrix2);
|
|
203
|
-
}
|
|
204
|
-
else if (1 /* Yes */ === instanced) {
|
|
205
|
-
vert.addInitializer(computeNormalMatrix1Inst);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
vert.addUniform("u_modelViewN", 6 /* Mat3 */, (prog) => {
|
|
209
|
-
prog.addGraphicUniform("u_modelViewN", (uniform, params) => {
|
|
210
|
-
params.target.uniforms.branch.bindModelViewNTransform(uniform, params.geometry, false);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
vert.addInitializer(computeNormalMatrix);
|
|
214
|
-
}
|
|
162
|
+
vert.addInitializer(computeNormalMatrix);
|
|
215
163
|
}
|
|
216
164
|
exports.addNormalMatrix = addNormalMatrix;
|
|
217
165
|
function readVertexData(index) {
|
|
@@ -251,18 +199,7 @@ function addPositionFromLUT(vert) {
|
|
|
251
199
|
vert.addGlobal(`g_vertLutData${i}`, 5 /* Vec4 */);
|
|
252
200
|
vert.addFunction(Decode_1.decodeUint24);
|
|
253
201
|
vert.addFunction(Decode_1.decodeUint16);
|
|
254
|
-
|
|
255
|
-
if (System_1.System.instance.capabilities.isWebGL2) {
|
|
256
|
-
vert.addFunction(computeUnquantizedPosition2);
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
vert.addFunction(Decode_1.decode3Float32);
|
|
260
|
-
vert.addFunction(computeUnquantizedPosition1);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
vert.addFunction(computeVertexPositionFromLUT);
|
|
265
|
-
}
|
|
202
|
+
vert.addFunction(unquantized ? computeUnquantizedPosition : computeVertexPositionFromLUT);
|
|
266
203
|
vert.addUniform("u_vertLUT", 8 /* Sampler2D */, (prog) => {
|
|
267
204
|
prog.addGraphicUniform("u_vertLUT", (uniform, params) => {
|
|
268
205
|
(params.geometry.asLUT).lut.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.VertexLUT);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.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 { DrawParams } from \"../DrawCommand\";\r\nimport { UniformHandle } from \"../UniformHandle\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { Pass, TextureUnit } from \"../RenderFlags\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { decode3Float32, decodeUint16, decodeUint24 } from \"./Decode\";\r\nimport { addInstanceOverrides } from \"./Instancing\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\n\r\nconst initializeVertLUTCoords = `\r\n g_vertexLUTIndex = decodeUInt24(qpos);\r\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantizePosition = `\r\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\r\n`;\r\n\r\nconst computeQuantizedPosition = `\r\nvec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }\r\n`;\r\n\r\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\r\nconst computeVertexPositionFromLUT = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\r\n g_featureAndMaterialIndex = g_vertLutData2;\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition1 = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 pf[4];\r\n pf[0] = g_vertLutData0.xyz;\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n pf[1] = g_vertLutData1.xyz;\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n pf[2] = g_vertLutData2.xyz;\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n pf[3] = g_vertLutData3.xyz;\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n return vec4(decode3Float32(pf), 1.0);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition2 = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n uvec3 vux = uvec3(g_vertLutData0.xyz);\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n uvec3 vuy = uvec3(g_vertLutData1.xyz);\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n uvec3 vuz = uvec3(g_vertLutData2.xyz);\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n uvec3 vuw = uvec3(g_vertLutData3.xyz);\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\r\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\r\n\r\nexport function addSamplePosition(vert: VertexShaderBuilder): void {\r\n vert.addFunction(getSamplePosition(vert.positionType));\r\n}\r\n\r\nfunction getSamplePosition(type: PositionType): string {\r\n const prelude = `\r\n vec4 samplePosition(float index) {\r\n vec2 tc = compute_vert_coords(index);`;\r\n\r\n if (\"quantized\" === type) {\r\n return `\r\n ${prelude}\r\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n }\r\n `;\r\n }\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n return `\r\n ${prelude}\r\n uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n }`;\r\n }\r\n\r\n return `\r\n ${prelude}\r\n vec3 pf[4];\r\n pf[0] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[1] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[2] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[3] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n return vec4(decode3Float32(pf), 1.0);\r\n }`;\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\r\n if (vert.usesInstancedGeometry) {\r\n addModelViewMatrix(vert);\r\n addProjectionMatrix(vert);\r\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\r\n } else {\r\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\r\n });\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\r\n params.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst computeInstancedRtcMatrix = `\r\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\r\n`;\r\n\r\n/** @internal */\r\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\r\n if (!vert.usesInstancedGeometry)\r\n return;\r\n\r\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\r\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\r\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\r\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\r\n vert.addInitializer(computeInstancedRtcMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\r\n const bind = (uniform: UniformHandle, params: DrawParams) => {\r\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\r\n };\r\n\r\n if (vert.usesInstancedGeometry) {\r\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\r\n });\r\n\r\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\r\n } else {\r\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\r\n // ###TODO: We only need 3 rows, not 4...\r\n prog.addGraphicUniform(\"u_mv\", bind);\r\n });\r\n }\r\n}\r\n\r\nconst computeNormalMatrix = `\r\n g_nmx = mat3(u_modelViewN);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix2 = `\r\n g_nmx = transpose(inverse(mat3(MAT_MV)));\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix1Inst = `\r\n g_nmx = mat3(MAT_MV);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\n/** @internal */\r\nexport function addNormalMatrix(vert: VertexShaderBuilder, instanced: IsInstanced) {\r\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\r\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\r\n const scale = params.target.uniforms.branch.top.frustumScale;\r\n uniform.setUniform2fv([scale.x, scale.y]);\r\n });\r\n });\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addInitializer(computeNormalMatrix2);\r\n } else if (IsInstanced.Yes === instanced) {\r\n vert.addInitializer(computeNormalMatrix1Inst);\r\n } else {\r\n vert.addUniform(\"u_modelViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_modelViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n vert.addInitializer(computeNormalMatrix);\r\n }\r\n}\r\n\r\nfunction readVertexData(index: number): string {\r\n return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;\r\n}\r\n\r\nconst nextVertexData = \"tc.x += g_vert_stepX;\";\r\n\r\nfunction readNextVertexData(index: number): string {\r\n return `\r\n ${nextVertexData}\r\n ${readVertexData(index)}`;\r\n}\r\n\r\nconst prereadVertexDataPrelude = `\r\n vec2 tc = g_vertexBaseCoords;\r\n ${readVertexData(0)}\r\n ${readNextVertexData(1)}\r\n ${readNextVertexData(2)}\r\n`;\r\n\r\nconst prereadQuantizedVertexData = `${prereadVertexDataPrelude}\r\n if (3.0 < u_vertParams.z) {\r\n ${readNextVertexData(3)}\r\n }\r\n`;\r\n\r\nconst prereadUnquantizedVertexData = `${prereadVertexDataPrelude}\r\n ${readNextVertexData(3)}\r\n ${readNextVertexData(4)}\r\n if (5.0 < u_vertParams.z) {\r\n ${readNextVertexData(5)}\r\n }\r\n`;\r\n\r\nconst scratchLutParams = new Float32Array(4);\r\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\r\n\r\n const unquantized = \"unquantized\" === vert.positionType;\r\n const maxRgbaPerVert = unquantized ? 6 : 4;\r\n for (let i = 0; i < maxRgbaPerVert; i++)\r\n vert.addGlobal(`g_vertLutData${i}`, VariableType.Vec4);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(decodeUint16);\r\n\r\n if (unquantized) {\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addFunction(computeUnquantizedPosition2);\r\n } else {\r\n vert.addFunction(decode3Float32);\r\n vert.addFunction(computeUnquantizedPosition1);\r\n }\r\n } else {\r\n vert.addFunction(computeVertexPositionFromLUT);\r\n }\r\n\r\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\r\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asLUT);\r\n const lut = params.geometry.asLUT.lut;\r\n const lutParams = scratchLutParams;\r\n lutParams[0] = lut.texture.width;\r\n lutParams[1] = lut.texture.height;\r\n lutParams[2] = lut.numRgbaPerVertex;\r\n lutParams[3] = lut.numVertices;\r\n uniform.setUniform4fv(lutParams);\r\n });\r\n });\r\n\r\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\r\n vert.addInitializer(initializeVertLUTCoords);\r\n\r\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\r\n\r\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\r\n vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);\r\n}\r\n\r\n/** @internal */\r\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\r\n if (!fromLUT || \"quantized\" === vert.positionType) {\r\n vert.addFunction(unquantizePosition);\r\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qScale);\r\n });\r\n });\r\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qOrigin);\r\n });\r\n });\r\n }\r\n\r\n if (!fromLUT) {\r\n vert.addFunction(computeQuantizedPosition);\r\n } else {\r\n addPositionFromLUT(vert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAlpha(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\r\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineWeight(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\r\n } else {\r\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\r\n }\r\n\r\n vert.addFunction(computeLineWeight);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineWeight, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\r\n } else {\r\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\r\n }\r\n\r\n vert.addFunction(computeLineCode);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineCode, func);\r\n}\r\n\r\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\r\n// Also place it outside NDC range (for GL_POINTS)\r\nconst discardVertex = ` {\r\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\r\n return;\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\r\n/** @internal */\r\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\r\n/** @internal */\r\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\r\n"]}
|
|
1
|
+
{"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.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 { DrawParams } from \"../DrawCommand\";\r\nimport { UniformHandle } from \"../UniformHandle\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { Pass, TextureUnit } from \"../RenderFlags\";\r\nimport { PositionType } from \"../TechniqueFlags\";\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\nimport { decodeUint16, decodeUint24 } from \"./Decode\";\r\nimport { addInstanceOverrides } from \"./Instancing\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\n\r\nconst initializeVertLUTCoords = `\r\n g_vertexLUTIndex = decodeUInt24(qpos);\r\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantizePosition = `\r\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\r\n`;\r\n\r\nconst computeQuantizedPosition = `\r\nvec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }\r\n`;\r\n\r\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\r\nconst computeVertexPositionFromLUT = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\r\n g_featureAndMaterialIndex = g_vertLutData2;\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n uvec3 vux = uvec3(g_vertLutData0.xyz);\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n uvec3 vuy = uvec3(g_vertLutData1.xyz);\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n uvec3 vuz = uvec3(g_vertLutData2.xyz);\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n uvec3 vuw = uvec3(g_vertLutData3.xyz);\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\r\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\r\n\r\nexport function addSamplePosition(vert: VertexShaderBuilder): void {\r\n vert.addFunction(getSamplePosition(vert.positionType));\r\n}\r\n\r\nfunction getSamplePosition(type: PositionType): string {\r\n const prelude = `\r\n vec4 samplePosition(float index) {\r\n vec2 tc = compute_vert_coords(index);`;\r\n\r\n if (\"quantized\" === type) {\r\n return `\r\n ${prelude}\r\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n }\r\n `;\r\n }\r\n\r\n return `\r\n ${prelude}\r\n uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n }`;\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\r\n if (vert.usesInstancedGeometry) {\r\n addModelViewMatrix(vert);\r\n addProjectionMatrix(vert);\r\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\r\n } else {\r\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\r\n });\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\r\n params.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst computeInstancedRtcMatrix = `\r\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\r\n`;\r\n\r\n/** @internal */\r\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\r\n if (!vert.usesInstancedGeometry)\r\n return;\r\n\r\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\r\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\r\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\r\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\r\n vert.addInitializer(computeInstancedRtcMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\r\n const bind = (uniform: UniformHandle, params: DrawParams) => {\r\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\r\n };\r\n\r\n if (vert.usesInstancedGeometry) {\r\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\r\n });\r\n\r\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\r\n } else {\r\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\r\n // ###TODO: We only need 3 rows, not 4...\r\n prog.addGraphicUniform(\"u_mv\", bind);\r\n });\r\n }\r\n}\r\n\r\nconst computeNormalMatrix = `\r\n g_nmx = transpose(inverse(mat3(MAT_MV)));\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\n/** @internal */\r\nexport function addNormalMatrix(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\r\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\r\n const scale = params.target.uniforms.branch.top.frustumScale;\r\n uniform.setUniform2fv([scale.x, scale.y]);\r\n });\r\n });\r\n\r\n vert.addInitializer(computeNormalMatrix);\r\n}\r\n\r\nfunction readVertexData(index: number): string {\r\n return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;\r\n}\r\n\r\nconst nextVertexData = \"tc.x += g_vert_stepX;\";\r\n\r\nfunction readNextVertexData(index: number): string {\r\n return `\r\n ${nextVertexData}\r\n ${readVertexData(index)}`;\r\n}\r\n\r\nconst prereadVertexDataPrelude = `\r\n vec2 tc = g_vertexBaseCoords;\r\n ${readVertexData(0)}\r\n ${readNextVertexData(1)}\r\n ${readNextVertexData(2)}\r\n`;\r\n\r\nconst prereadQuantizedVertexData = `${prereadVertexDataPrelude}\r\n if (3.0 < u_vertParams.z) {\r\n ${readNextVertexData(3)}\r\n }\r\n`;\r\n\r\nconst prereadUnquantizedVertexData = `${prereadVertexDataPrelude}\r\n ${readNextVertexData(3)}\r\n ${readNextVertexData(4)}\r\n if (5.0 < u_vertParams.z) {\r\n ${readNextVertexData(5)}\r\n }\r\n`;\r\n\r\nconst scratchLutParams = new Float32Array(4);\r\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\r\n\r\n const unquantized = \"unquantized\" === vert.positionType;\r\n const maxRgbaPerVert = unquantized ? 6 : 4;\r\n for (let i = 0; i < maxRgbaPerVert; i++)\r\n vert.addGlobal(`g_vertLutData${i}`, VariableType.Vec4);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(decodeUint16);\r\n\r\n vert.addFunction(unquantized ? computeUnquantizedPosition : computeVertexPositionFromLUT);\r\n\r\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\r\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asLUT);\r\n const lut = params.geometry.asLUT.lut;\r\n const lutParams = scratchLutParams;\r\n lutParams[0] = lut.texture.width;\r\n lutParams[1] = lut.texture.height;\r\n lutParams[2] = lut.numRgbaPerVertex;\r\n lutParams[3] = lut.numVertices;\r\n uniform.setUniform4fv(lutParams);\r\n });\r\n });\r\n\r\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\r\n vert.addInitializer(initializeVertLUTCoords);\r\n\r\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\r\n\r\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\r\n vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);\r\n}\r\n\r\n/** @internal */\r\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\r\n if (!fromLUT || \"quantized\" === vert.positionType) {\r\n vert.addFunction(unquantizePosition);\r\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qScale);\r\n });\r\n });\r\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qOrigin);\r\n });\r\n });\r\n }\r\n\r\n if (!fromLUT) {\r\n vert.addFunction(computeQuantizedPosition);\r\n } else {\r\n addPositionFromLUT(vert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAlpha(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\r\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineWeight(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\r\n } else {\r\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\r\n }\r\n\r\n vert.addFunction(computeLineWeight);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineWeight, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\r\n } else {\r\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\r\n }\r\n\r\n vert.addFunction(computeLineCode);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineCode, func);\r\n}\r\n\r\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\r\n// Also place it outside NDC range (for GL_POINTS)\r\nconst discardVertex = ` {\r\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\r\n return;\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\r\n/** @internal */\r\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\r\n/** @internal */\r\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wiremesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Wiremesh.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"Wiremesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Wiremesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA2B,cAAc,EAAgB,MAAM,kBAAkB,CAAC;AAsBzF;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAGzD"}
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.addWiremesh = void 0;
|
|
11
|
-
const System_1 = require("../System");
|
|
12
11
|
// Vertex shader produces barycentric coordinate for corner of triangle to be smoothly interpolated over face of triangle.
|
|
13
12
|
// This requires WebGL 2 because gl_VertexID.
|
|
14
13
|
// It also requires that we are drawing non-indexed vertices, or using an index buffer in which each set of 3 consecutive indices correspond to one triangle -
|
|
@@ -31,10 +30,8 @@ const applyWiremesh = `
|
|
|
31
30
|
* @internal
|
|
32
31
|
*/
|
|
33
32
|
function addWiremesh(builder) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
builder.frag.set(14 /* ApplyWiremesh */, applyWiremesh);
|
|
37
|
-
}
|
|
33
|
+
builder.addInlineComputedVarying("v_barycentric", 4 /* Vec3 */, computeBarycentric);
|
|
34
|
+
builder.frag.set(14 /* ApplyWiremesh */, applyWiremesh);
|
|
38
35
|
}
|
|
39
36
|
exports.addWiremesh = addWiremesh;
|
|
40
37
|
//# sourceMappingURL=Wiremesh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wiremesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Wiremesh.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"Wiremesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Wiremesh.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,0HAA0H;AAC1H,6CAA6C;AAC7C,8JAA8J;AAC9J,gEAAgE;AAChE,MAAM,kBAAkB,GAAG;;;CAG1B,CAAC;AAEF,2FAA2F;AAC3F,gHAAgH;AAChH,MAAM,aAAa,GAAG;;;;;;;CAOrB,CAAC;AAEF;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAuB;IACjD,OAAO,CAAC,wBAAwB,CAAC,eAAe,gBAAqB,kBAAkB,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,GAAG,yBAAwC,aAAa,CAAC,CAAC;AACzE,CAAC;AAHD,kCAGC","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 { FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\n\r\n// Vertex shader produces barycentric coordinate for corner of triangle to be smoothly interpolated over face of triangle.\r\n// This requires WebGL 2 because gl_VertexID.\r\n// It also requires that we are drawing non-indexed vertices, or using an index buffer in which each set of 3 consecutive indices correspond to one triangle -\r\n// otherwise gl_VertexID will not correlate to triangle corners.\r\nconst computeBarycentric = `\r\n int vertIndex = gl_VertexID % 3;\r\n v_barycentric = vec3(float(0 == vertIndex), float(1 == vertIndex), float(2 == vertIndex));\r\n`;\r\n\r\n// Fragment shader draws in the line color for fragments close to the edge of the triangle.\r\n// Vertex shader requires WebGL 2 which includes the functionality of the GL_OES_standard_derivatives extension.\r\nconst applyWiremesh = `\r\n const float lineWidth = 1.0;\r\n const vec3 lineColor = vec3(0.0);\r\n vec3 delta = fwidth(v_barycentric);\r\n vec3 factor = smoothstep(vec3(0.0), delta * lineWidth, v_barycentric);\r\n vec3 color = mix(lineColor, baseColor.rgb, min(min(factor.x, factor.y), factor.z));\r\n return vec4(color, baseColor.a);\r\n`;\r\n\r\n/** Adds to a mesh shader logic to produce an overlaid wiremesh.\r\n * @internal\r\n */\r\nexport function addWiremesh(builder: ProgramBuilder): void {\r\n builder.addInlineComputedVarying(\"v_barycentric\", VariableType.Vec3, computeBarycentric);\r\n builder.frag.set(FragmentShaderComponent.ApplyWiremesh, applyWiremesh);\r\n}\r\n"]}
|
|
@@ -17,7 +17,6 @@ interface PrimaryTreeId {
|
|
|
17
17
|
modelId: Id64String;
|
|
18
18
|
is3d: boolean;
|
|
19
19
|
isPlanProjection: boolean;
|
|
20
|
-
forceNoInstancing: boolean;
|
|
21
20
|
timeline?: RenderSchedule.ModelTimeline;
|
|
22
21
|
}
|
|
23
22
|
/** Find all extant tile trees associated with the specified model Ids and dispose of them.
|
|
@@ -36,10 +35,8 @@ declare class PrimaryTreeReference extends TileTreeReference {
|
|
|
36
35
|
private _owner;
|
|
37
36
|
private readonly _sectionClip?;
|
|
38
37
|
private readonly _sectionCutAppearanceProvider?;
|
|
39
|
-
private _forceNoInstancing;
|
|
40
38
|
protected readonly _animationTransformNodeId?: number;
|
|
41
39
|
constructor(view: ViewState, model: GeometricModelState, planProjection: boolean, transformNodeId: number | undefined, sectionClip?: StringifiedClipVector);
|
|
42
|
-
private checkForceNoInstancing;
|
|
43
40
|
protected getAnimationTransformNodeId(): number;
|
|
44
41
|
protected getViewFlagOverrides(_tree: TileTree): Partial<import("@itwin/core-bentley").Mutable<import("@itwin/core-bentley").NonFunctionPropertiesOf<import("@itwin/core-common").ViewFlags>>>;
|
|
45
42
|
protected getAppearanceProvider(_tree: TileTree): FeatureAppearanceProvider | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrimaryTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/PrimaryTileTree.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"PrimaryTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/PrimaryTileTree.ts"],"names":[],"mappings":"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"}
|