@itwin/core-frontend 4.3.0-dev.8 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -1
- package/lib/cjs/DrawingViewState.d.ts +4 -2
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +6 -3
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +1 -1
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts +5 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +25 -5
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +1 -0
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +3 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +6 -0
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/render/primitives/VertexTableSplitter.d.ts.map +1 -1
- package/lib/cjs/common/render/primitives/VertexTableSplitter.js +13 -1
- package/lib/cjs/common/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/cjs/extension/ExtensionRuntime.js +2 -0
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +10 -2
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/ClipStack.d.ts +11 -1
- package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ClipStack.js +23 -0
- package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +2 -0
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +2 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +9 -3
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +28 -2
- package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/ThematicUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ThematicUniforms.js +6 -8
- package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.js +90 -33
- package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.js +8 -3
- package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts +1 -0
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +2 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +8 -12
- 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 +10 -8
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.d.ts +2 -0
- package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.js +6 -6
- package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.d.ts +5 -3
- package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +4 -16
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts +27 -12
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +25 -17
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +6 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +7 -3
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js +2 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +4 -2
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +5 -4
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +16 -2
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +34 -10
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -4
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +32 -4
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -0
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +41 -0
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +26 -5
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +22 -4
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +11 -2
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts +3 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +11 -2
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts +4 -2
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +6 -3
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +1 -1
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts +5 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +25 -5
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +1 -0
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +3 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +6 -0
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/render/primitives/VertexTableSplitter.d.ts.map +1 -1
- package/lib/esm/common/render/primitives/VertexTableSplitter.js +13 -1
- package/lib/esm/common/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/esm/extension/ExtensionRuntime.js +4 -2
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +10 -2
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/ClipStack.d.ts +11 -1
- package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
- package/lib/esm/render/webgl/ClipStack.js +23 -0
- package/lib/esm/render/webgl/ClipStack.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +2 -0
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +2 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +9 -3
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +29 -3
- package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/render/webgl/ThematicUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/ThematicUniforms.js +8 -10
- package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Clipping.js +91 -34
- package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Composite.js +8 -3
- package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts +1 -0
- package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +8 -12
- 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 +10 -8
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.d.ts +2 -0
- package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.js +3 -3
- package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +1 -1
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.d.ts +5 -3
- package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +5 -17
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts +27 -12
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +25 -17
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +6 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +7 -3
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js +2 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +4 -2
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +5 -4
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +16 -2
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +35 -11
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -4
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +33 -5
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -0
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +41 -0
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +26 -5
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +22 -4
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +11 -2
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts +3 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +11 -2
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +18 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThematicUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"ThematicUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACoB,eAAe,EACzC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAEpC,OAAO,SAAK;IAEnB,OAAO,KAAK,eAAe,GAA4C;IAEvE,IAAW,eAAe,IAAI,eAAe,GAAG,SAAS,CAExD;IAED,IAAW,YAAY,IAAI,OAAO,CAIjC;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED,IAAW,uBAAuB,IAAI,OAAO,CAE5C;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;IASpB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgE5B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKvC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKtC,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAK5D,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK5C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKhD,IAAW,UAAU,IAAI,OAAO,CAE/B;IAEM,OAAO;CAIf"}
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
* @module WebGL
|
|
7
7
|
*/
|
|
8
8
|
import { assert, dispose } from "@itwin/core-bentley";
|
|
9
|
-
import { Gradient, RenderTexture, ThematicDisplayMode, ThematicGradientMode } from "@itwin/core-common";
|
|
9
|
+
import { Gradient, RenderTexture, ThematicDisplayMode, ThematicGradientMode, ThematicGradientTransparencyMode, } from "@itwin/core-common";
|
|
10
10
|
import { TextureUnit } from "./RenderFlags";
|
|
11
11
|
import { desync, sync } from "./Sync";
|
|
12
12
|
import { TextureHandle } from "./Texture";
|
|
13
13
|
import { ThematicSensors } from "./ThematicSensors";
|
|
14
14
|
import { Angle, Range3d, Vector3d } from "@itwin/core-geometry";
|
|
15
15
|
import { System } from "./System";
|
|
16
|
-
import {
|
|
16
|
+
import { FloatRgba } from "./FloatRGBA";
|
|
17
17
|
/** Maintains state for uniforms related to thematic display.
|
|
18
18
|
* @internal
|
|
19
19
|
*/
|
|
@@ -23,9 +23,9 @@ export class ThematicUniforms {
|
|
|
23
23
|
this._colorMix = 0.0;
|
|
24
24
|
this._axis = new Float32Array(3);
|
|
25
25
|
this._sunDirection = new Float32Array(3);
|
|
26
|
-
this._marginColor = new
|
|
26
|
+
this._marginColor = new FloatRgba();
|
|
27
27
|
this._displayMode = new Float32Array(1);
|
|
28
|
-
this._fragSettings = new Float32Array(
|
|
28
|
+
this._fragSettings = new Float32Array(4); // gradientMode, distanceCutoff, stepCount, > 0.0 if multiply gradient alpha
|
|
29
29
|
this._numSensors = 0;
|
|
30
30
|
this._gradientDimension = _getGradientDimension();
|
|
31
31
|
this.syncKey = 0;
|
|
@@ -99,15 +99,13 @@ export class ThematicUniforms {
|
|
|
99
99
|
this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);
|
|
100
100
|
if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)
|
|
101
101
|
this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);
|
|
102
|
-
|
|
103
|
-
this._marginColor[0] = marginRgb.red;
|
|
104
|
-
this._marginColor[1] = marginRgb.green;
|
|
105
|
-
this._marginColor[2] = marginRgb.blue;
|
|
102
|
+
this._marginColor.setColorDef(this.thematicDisplay.gradientSettings.marginColor);
|
|
106
103
|
this._displayMode[0] = this.thematicDisplay.displayMode;
|
|
107
104
|
this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;
|
|
108
105
|
const sensorSettings = this.thematicDisplay.sensorSettings;
|
|
109
106
|
this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;
|
|
110
107
|
this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);
|
|
108
|
+
this._fragSettings[3] = this.thematicDisplay.gradientSettings.transparencyMode === ThematicGradientTransparencyMode.SurfaceOnly ? 0.0 : 1.0;
|
|
111
109
|
// If we want sensors and have no distance cutoff, then create a global shared sensor texture.
|
|
112
110
|
if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {
|
|
113
111
|
this._numSensors = sensorSettings.sensors.length;
|
|
@@ -132,7 +130,7 @@ export class ThematicUniforms {
|
|
|
132
130
|
}
|
|
133
131
|
bindMarginColor(uniform) {
|
|
134
132
|
if (!sync(this, uniform))
|
|
135
|
-
|
|
133
|
+
this._marginColor.bind(uniform);
|
|
136
134
|
}
|
|
137
135
|
bindDisplayMode(uniform) {
|
|
138
136
|
if (!sync(this, uniform))
|
|
@@ -140,7 +138,7 @@ export class ThematicUniforms {
|
|
|
140
138
|
}
|
|
141
139
|
bindFragSettings(uniform) {
|
|
142
140
|
if (!sync(this, uniform))
|
|
143
|
-
uniform.
|
|
141
|
+
uniform.setUniform4fv(this._fragSettings);
|
|
144
142
|
}
|
|
145
143
|
bindTexture(uniform, unit) {
|
|
146
144
|
assert(undefined !== this._texture);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.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, dispose } from \"@itwin/core-bentley\";\r\nimport { Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgb } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new Float32Array(3);\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n this._marginColor[0] = marginRgb.red;\r\n this._marginColor[1] = marginRgb.green;\r\n this._marginColor[2] = marginRgb.blue;\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._marginColor);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.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, dispose } from \"@itwin/core-bentley\";\r\nimport {\r\n Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode, ThematicGradientTransparencyMode,\r\n} from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new FloatRgba();\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(4); // gradientMode, distanceCutoff, stepCount, > 0.0 if multiply gradient alpha\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n this._marginColor.setColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n this._fragSettings[3] = this.thematicDisplay.gradientSettings.transparencyMode === ThematicGradientTransparencyMode.SurfaceOnly ? 0.0 : 1.0;\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n this._marginColor.bind(uniform);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clipping.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAmC,MAAM,kBAAkB,CAAC;AAY5G,eAAO,MAAM,WAAW,wbAYvB,CAAC;
|
|
1
|
+
{"version":3,"file":"Clipping.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAmC,MAAM,kBAAkB,CAAC;AAY5G,eAAO,MAAM,WAAW,wbAYvB,CAAC;AAoGF,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,QAwE/C"}
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { assert } from "@itwin/core-bentley";
|
|
9
9
|
import { TextureUnit } from "../RenderFlags";
|
|
10
|
-
import { addEyeSpace } from "./Common";
|
|
10
|
+
import { addEyeSpace, addFrustum } from "./Common";
|
|
11
|
+
import { addPixelWidthFactor } from "./FeatureSymbology";
|
|
12
|
+
import { computeAlphaWeight, computeOutputs } from "./Translucency";
|
|
11
13
|
import { addModelViewMatrix } from "./Vertex";
|
|
12
14
|
const getClipPlaneFloat = `
|
|
13
15
|
vec4 getClipPlane(int index) {
|
|
14
|
-
|
|
15
|
-
float y = (float(index) + 0.5) / float(u_clipParams[2]);
|
|
16
|
-
return TEXTURE(s_clipSampler, vec2(x, y));
|
|
16
|
+
return texelFetch(s_clipSampler, ivec2(0, index), 0);
|
|
17
17
|
}
|
|
18
18
|
`;
|
|
19
19
|
export const unpackFloat = `
|
|
@@ -34,57 +34,112 @@ float calcClipPlaneDist(vec3 camPos, vec4 plane) {
|
|
|
34
34
|
return dot(vec4(camPos, 1.0), plane);
|
|
35
35
|
}
|
|
36
36
|
`;
|
|
37
|
+
const applyClipPlanesLoop = `
|
|
38
|
+
for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {
|
|
39
|
+
`;
|
|
40
|
+
const applyClipPlanesLoopBody = `
|
|
41
|
+
vec4 plane = getClipPlane(i);
|
|
42
|
+
if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets
|
|
43
|
+
if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)
|
|
44
|
+
break;
|
|
45
|
+
|
|
46
|
+
numPlaneSets = 1;
|
|
47
|
+
numSetsClippedBy = 0;
|
|
48
|
+
clippedByCurrentPlaneSet = false;
|
|
49
|
+
} else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set
|
|
50
|
+
numPlaneSets = numPlaneSets + 1;
|
|
51
|
+
numSetsClippedBy += int(clippedByCurrentPlaneSet);
|
|
52
|
+
clippedByCurrentPlaneSet = false;
|
|
53
|
+
} else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {
|
|
54
|
+
clippedByCurrentPlaneSet = true;
|
|
55
|
+
}
|
|
56
|
+
`;
|
|
57
|
+
const applyClipPlanesIntersectionLoopBody = `
|
|
58
|
+
if ((i <= u_clipParams[1] - 2) && (!clippedByCurrentPlaneSet)) {
|
|
59
|
+
|
|
60
|
+
//Obtaining closest point on plane to current frag in eyespace
|
|
61
|
+
vec3 pointOnPlane = v_eyeSpace - (abs(calcClipPlaneDist(v_eyeSpace, plane)) * plane.xyz);
|
|
62
|
+
|
|
63
|
+
//determining whether to colorize
|
|
64
|
+
if (distance(v_eyeSpace, pointOnPlane) <= (kFrustumType_Perspective == u_frustum.z ? -pointOnPlane.z * widthFactor : widthFactor)) {
|
|
65
|
+
colorizeIntersection = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//Need to pull this condition out of the loop for when there are multiple clip planes defined
|
|
71
|
+
if (colorizeIntersection && !clippedByCurrentPlaneSet) {
|
|
72
|
+
g_clipColor = u_clipIntersection.rgb;
|
|
73
|
+
return bvec2(true, true);
|
|
74
|
+
}
|
|
75
|
+
`;
|
|
37
76
|
const applyClipPlanesPrelude = `
|
|
38
77
|
int numPlaneSets = 1;
|
|
39
78
|
int numSetsClippedBy = 0;
|
|
40
79
|
bool clippedByCurrentPlaneSet = false;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
80
|
+
bool colorizeIntersection = false;
|
|
81
|
+
if (u_colorizeIntersection) {
|
|
82
|
+
float widthFactor = u_pixelWidthFactor * 2.0 * u_clipIntersection.a;
|
|
83
|
+
${applyClipPlanesLoop}${applyClipPlanesLoopBody}${applyClipPlanesIntersectionLoopBody}
|
|
84
|
+
} else {
|
|
85
|
+
${applyClipPlanesLoop}${applyClipPlanesLoopBody} }\n
|
|
86
|
+
}
|
|
44
87
|
`;
|
|
45
88
|
const applyClipPlanesPostlude = `
|
|
46
|
-
vec4 plane = getClipPlane(i);
|
|
47
|
-
if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets
|
|
48
|
-
if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)
|
|
49
|
-
break;
|
|
50
|
-
|
|
51
|
-
numPlaneSets = 1;
|
|
52
|
-
numSetsClippedBy = 0;
|
|
53
|
-
clippedByCurrentPlaneSet = false;
|
|
54
|
-
} else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set
|
|
55
|
-
numPlaneSets = numPlaneSets + 1;
|
|
56
|
-
numSetsClippedBy += int(clippedByCurrentPlaneSet);
|
|
57
|
-
clippedByCurrentPlaneSet = false;
|
|
58
|
-
} else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {
|
|
59
|
-
clippedByCurrentPlaneSet = true;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
89
|
|
|
63
90
|
numSetsClippedBy += int(clippedByCurrentPlaneSet);
|
|
64
91
|
if (numSetsClippedBy == numPlaneSets) {
|
|
65
92
|
if (u_outsideRgba.a > 0.0) {
|
|
66
93
|
g_clipColor = u_outsideRgba.rgb;
|
|
67
|
-
return true;
|
|
94
|
+
return bvec2(true,false);
|
|
68
95
|
} else {
|
|
69
96
|
discard;
|
|
70
97
|
}
|
|
71
98
|
} else if (u_insideRgba.a > 0.0) {
|
|
72
99
|
g_clipColor = u_insideRgba.rgb;
|
|
73
|
-
return true;
|
|
100
|
+
return bvec2(true,false);
|
|
74
101
|
}
|
|
75
102
|
|
|
76
|
-
return false;
|
|
103
|
+
return bvec2(false,false);
|
|
104
|
+
`;
|
|
105
|
+
const assignFragData = `
|
|
106
|
+
if (g_hasClipColor.y) {
|
|
107
|
+
vec4 output0 = vec4(g_clipColor, 1.0);
|
|
108
|
+
vec4 output1 = vec4(1.0, 1.0, 0.0, 1.0);
|
|
109
|
+
|
|
110
|
+
FragColor0 = output0;
|
|
111
|
+
FragColor1 = output1;
|
|
112
|
+
} else {
|
|
113
|
+
${computeOutputs}
|
|
114
|
+
|
|
115
|
+
FragColor0 = output0;
|
|
116
|
+
FragColor1 = output1;
|
|
117
|
+
}
|
|
77
118
|
`;
|
|
78
|
-
const applyClipPlanes = applyClipPlanesPrelude +
|
|
119
|
+
const applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesPostlude;
|
|
79
120
|
const clipParams = new Int32Array(3);
|
|
80
121
|
/** @internal */
|
|
81
122
|
export function addClipping(prog) {
|
|
82
123
|
const frag = prog.frag;
|
|
83
124
|
const vert = prog.vert;
|
|
84
125
|
addEyeSpace(prog);
|
|
126
|
+
prog.addUniform("u_outsideRgba", 5 /* VariableType.Vec4 */, (program) => {
|
|
127
|
+
program.addGraphicUniform("u_outsideRgba", (uniform, params) => {
|
|
128
|
+
params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
prog.addUniform("u_insideRgba", 5 /* VariableType.Vec4 */, (program) => {
|
|
132
|
+
program.addGraphicUniform("u_insideRgba", (uniform, params) => {
|
|
133
|
+
params.target.uniforms.branch.clipStack.insideColor.bind(uniform);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
addFrustum(prog);
|
|
137
|
+
addPixelWidthFactor(frag);
|
|
138
|
+
addModelViewMatrix(vert);
|
|
85
139
|
// [0] = index of first plane
|
|
86
140
|
// [1] = index of last plane (one past the end)
|
|
87
141
|
// [2] = texture height
|
|
142
|
+
prog.frag.addGlobal("g_hasClipColor", 11 /* VariableType.BVec2 */);
|
|
88
143
|
prog.addUniformArray("u_clipParams", 1 /* VariableType.Int */, 3, (program) => {
|
|
89
144
|
program.addGraphicUniform("u_clipParams", (uniform, params) => {
|
|
90
145
|
// Set this to false to visualize pre-shader culling of geometry.
|
|
@@ -97,17 +152,16 @@ export function addClipping(prog) {
|
|
|
97
152
|
uniform.setUniform1iv(clipParams);
|
|
98
153
|
});
|
|
99
154
|
});
|
|
100
|
-
prog.addUniform("
|
|
101
|
-
program.
|
|
102
|
-
params.target.uniforms.branch.clipStack.
|
|
155
|
+
prog.frag.addUniform("u_colorizeIntersection", 0 /* VariableType.Boolean */, (program) => {
|
|
156
|
+
program.addProgramUniform("u_colorizeIntersection", (uniform, params) => {
|
|
157
|
+
uniform.setUniform1i(params.target.uniforms.branch.clipStack.colorizeIntersection ? 1 : 0);
|
|
103
158
|
});
|
|
104
159
|
});
|
|
105
|
-
prog.addUniform("
|
|
106
|
-
program.addGraphicUniform("
|
|
107
|
-
params.target.uniforms.branch.clipStack.
|
|
160
|
+
prog.frag.addUniform("u_clipIntersection", 5 /* VariableType.Vec4 */, (program) => {
|
|
161
|
+
program.addGraphicUniform("u_clipIntersection", (uniform, params) => {
|
|
162
|
+
params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);
|
|
108
163
|
});
|
|
109
164
|
});
|
|
110
|
-
addModelViewMatrix(vert);
|
|
111
165
|
frag.addFunction(getClipPlaneFloat);
|
|
112
166
|
frag.addFunction(calcClipPlaneDist);
|
|
113
167
|
frag.addUniform("s_clipSampler", 8 /* VariableType.Sampler2D */, (program) => {
|
|
@@ -119,5 +173,8 @@ export function addClipping(prog) {
|
|
|
119
173
|
});
|
|
120
174
|
}, 3 /* VariablePrecision.High */);
|
|
121
175
|
frag.set(10 /* FragmentShaderComponent.ApplyClipping */, applyClipPlanes);
|
|
176
|
+
// modify translucent shaders
|
|
177
|
+
if (frag.findFunction(computeAlphaWeight))
|
|
178
|
+
frag.set(16 /* FragmentShaderComponent.AssignFragData */, assignFragData);
|
|
122
179
|
}
|
|
123
180
|
//# sourceMappingURL=Clipping.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clipping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.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 { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType } from \"../ShaderBuilder\";\r\nimport { addEyeSpace } from \"./Common\";\r\nimport { addModelViewMatrix } from \"./Vertex\";\r\n\r\nconst getClipPlaneFloat = `\r\nvec4 getClipPlane(int index) {\r\n float x = 0.5;\r\n float y = (float(index) + 0.5) / float(u_clipParams[2]);\r\n return TEXTURE(s_clipSampler, vec2(x, y));\r\n}\r\n`;\r\n\r\nexport const unpackFloat = `\r\nfloat unpackFloat(vec4 v) {\r\n const float bias = 38.0;\r\n v = floor(v * 255.0 + 0.5);\r\n float temp = v.w / 2.0;\r\n float exponent = floor(temp);\r\n float sign = (temp - exponent) * 2.0;\r\n exponent = exponent - bias;\r\n sign = -(sign * 2.0 - 1.0);\r\n float unpacked = dot(sign * v.xyz, vec3(1.0 / 256.0, 1.0 / 65536.0, 1.0 / 16777216.0)); // shift x right 8, y right 16 and z right 24\r\n return unpacked * pow(10.0, exponent);\r\n}\r\n`;\r\n\r\nconst calcClipPlaneDist = `\r\nfloat calcClipPlaneDist(vec3 camPos, vec4 plane) {\r\n return dot(vec4(camPos, 1.0), plane);\r\n}\r\n`;\r\n\r\nconst applyClipPlanesPrelude = `\r\n int numPlaneSets = 1;\r\n int numSetsClippedBy = 0;\r\n bool clippedByCurrentPlaneSet = false;\r\n`;\r\n\r\nconst applyClipPlanesLoop = `\r\n for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {\r\n`;\r\n\r\nconst applyClipPlanesPostlude = `\r\n vec4 plane = getClipPlane(i);\r\n if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets\r\n if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)\r\n break;\r\n\r\n numPlaneSets = 1;\r\n numSetsClippedBy = 0;\r\n clippedByCurrentPlaneSet = false;\r\n } else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set\r\n numPlaneSets = numPlaneSets + 1;\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n clippedByCurrentPlaneSet = false;\r\n } else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {\r\n clippedByCurrentPlaneSet = true;\r\n }\r\n }\r\n\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n if (numSetsClippedBy == numPlaneSets) {\r\n if (u_outsideRgba.a > 0.0) {\r\n g_clipColor = u_outsideRgba.rgb;\r\n return true;\r\n } else {\r\n discard;\r\n }\r\n } else if (u_insideRgba.a > 0.0) {\r\n g_clipColor = u_insideRgba.rgb;\r\n return true;\r\n }\r\n\r\n return false;\r\n`;\r\n\r\nconst applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesLoop + applyClipPlanesPostlude;\r\n\r\nconst clipParams = new Int32Array(3);\r\n\r\n/** @internal */\r\nexport function addClipping(prog: ProgramBuilder) {\r\n const frag = prog.frag;\r\n const vert = prog.vert;\r\n\r\n addEyeSpace(prog);\r\n\r\n // [0] = index of first plane\r\n // [1] = index of last plane (one past the end)\r\n // [2] = texture height\r\n prog.addUniformArray(\"u_clipParams\", VariableType.Int, 3, (program) => {\r\n program.addGraphicUniform(\"u_clipParams\", (uniform, params) => {\r\n // Set this to false to visualize pre-shader culling of geometry.\r\n const doClipping = true;\r\n\r\n const stack = params.target.uniforms.branch.clipStack;\r\n clipParams[0] = stack.startIndex;\r\n clipParams[1] = stack.endIndex;\r\n clipParams[2] = doClipping ? stack.textureHeight : 0;\r\n assert(clipParams[2] > 0 || !doClipping);\r\n uniform.setUniform1iv(clipParams);\r\n });\r\n });\r\n\r\n prog.addUniform(\"u_outsideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_outsideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);\r\n });\r\n });\r\n\r\n prog.addUniform(\"u_insideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_insideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.insideColor.bind(uniform);\r\n });\r\n });\r\n\r\n addModelViewMatrix(vert);\r\n\r\n frag.addFunction(getClipPlaneFloat);\r\n\r\n frag.addFunction(calcClipPlaneDist);\r\n frag.addUniform(\"s_clipSampler\", VariableType.Sampler2D, (program) => {\r\n program.addGraphicUniform(\"s_clipSampler\", (uniform, params) => {\r\n const texture = params.target.uniforms.branch.clipStack.texture;\r\n assert(texture !== undefined);\r\n if (texture !== undefined)\r\n texture.bindSampler(uniform, TextureUnit.ClipVolume);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.set(FragmentShaderComponent.ApplyClipping, applyClipPlanes);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Clipping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.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 { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType } from \"../ShaderBuilder\";\r\nimport { addEyeSpace, addFrustum } from \"./Common\";\r\nimport { addPixelWidthFactor } from \"./FeatureSymbology\";\r\nimport { computeAlphaWeight, computeOutputs } from \"./Translucency\";\r\nimport { addModelViewMatrix } from \"./Vertex\";\r\n\r\nconst getClipPlaneFloat = `\r\nvec4 getClipPlane(int index) {\r\n return texelFetch(s_clipSampler, ivec2(0, index), 0);\r\n}\r\n`;\r\n\r\nexport const unpackFloat = `\r\nfloat unpackFloat(vec4 v) {\r\n const float bias = 38.0;\r\n v = floor(v * 255.0 + 0.5);\r\n float temp = v.w / 2.0;\r\n float exponent = floor(temp);\r\n float sign = (temp - exponent) * 2.0;\r\n exponent = exponent - bias;\r\n sign = -(sign * 2.0 - 1.0);\r\n float unpacked = dot(sign * v.xyz, vec3(1.0 / 256.0, 1.0 / 65536.0, 1.0 / 16777216.0)); // shift x right 8, y right 16 and z right 24\r\n return unpacked * pow(10.0, exponent);\r\n}\r\n`;\r\n\r\nconst calcClipPlaneDist = `\r\nfloat calcClipPlaneDist(vec3 camPos, vec4 plane) {\r\n return dot(vec4(camPos, 1.0), plane);\r\n}\r\n`;\r\n\r\nconst applyClipPlanesLoop = `\r\n for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {\r\n`;\r\n\r\nconst applyClipPlanesLoopBody = `\r\n vec4 plane = getClipPlane(i);\r\n if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets\r\n if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)\r\n break;\r\n\r\n numPlaneSets = 1;\r\n numSetsClippedBy = 0;\r\n clippedByCurrentPlaneSet = false;\r\n } else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set\r\n numPlaneSets = numPlaneSets + 1;\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n clippedByCurrentPlaneSet = false;\r\n } else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {\r\n clippedByCurrentPlaneSet = true;\r\n }\r\n`;\r\n\r\nconst applyClipPlanesIntersectionLoopBody = `\r\n if ((i <= u_clipParams[1] - 2) && (!clippedByCurrentPlaneSet)) {\r\n\r\n //Obtaining closest point on plane to current frag in eyespace\r\n vec3 pointOnPlane = v_eyeSpace - (abs(calcClipPlaneDist(v_eyeSpace, plane)) * plane.xyz);\r\n\r\n //determining whether to colorize\r\n if (distance(v_eyeSpace, pointOnPlane) <= (kFrustumType_Perspective == u_frustum.z ? -pointOnPlane.z * widthFactor : widthFactor)) {\r\n colorizeIntersection = true;\r\n }\r\n }\r\n }\r\n\r\n //Need to pull this condition out of the loop for when there are multiple clip planes defined\r\n if (colorizeIntersection && !clippedByCurrentPlaneSet) {\r\n g_clipColor = u_clipIntersection.rgb;\r\n return bvec2(true, true);\r\n }\r\n`;\r\n\r\nconst applyClipPlanesPrelude = `\r\n int numPlaneSets = 1;\r\n int numSetsClippedBy = 0;\r\n bool clippedByCurrentPlaneSet = false;\r\n bool colorizeIntersection = false;\r\n if (u_colorizeIntersection) {\r\n float widthFactor = u_pixelWidthFactor * 2.0 * u_clipIntersection.a;\r\n ${applyClipPlanesLoop}${applyClipPlanesLoopBody}${applyClipPlanesIntersectionLoopBody}\r\n } else {\r\n ${applyClipPlanesLoop}${applyClipPlanesLoopBody} }\\n\r\n }\r\n`;\r\n\r\nconst applyClipPlanesPostlude = `\r\n\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n if (numSetsClippedBy == numPlaneSets) {\r\n if (u_outsideRgba.a > 0.0) {\r\n g_clipColor = u_outsideRgba.rgb;\r\n return bvec2(true,false);\r\n } else {\r\n discard;\r\n }\r\n } else if (u_insideRgba.a > 0.0) {\r\n g_clipColor = u_insideRgba.rgb;\r\n return bvec2(true,false);\r\n }\r\n\r\n return bvec2(false,false);\r\n`;\r\n\r\nconst assignFragData = `\r\n if (g_hasClipColor.y) {\r\n vec4 output0 = vec4(g_clipColor, 1.0);\r\n vec4 output1 = vec4(1.0, 1.0, 0.0, 1.0);\r\n\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n } else {\r\n ${computeOutputs}\r\n\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n }\r\n`;\r\n\r\nconst applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesPostlude;\r\n\r\nconst clipParams = new Int32Array(3);\r\n\r\n/** @internal */\r\nexport function addClipping(prog: ProgramBuilder) {\r\n const frag = prog.frag;\r\n const vert = prog.vert;\r\n\r\n addEyeSpace(prog);\r\n\r\n prog.addUniform(\"u_outsideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_outsideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);\r\n });\r\n });\r\n\r\n prog.addUniform(\"u_insideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_insideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.insideColor.bind(uniform);\r\n });\r\n });\r\n\r\n addFrustum(prog);\r\n addPixelWidthFactor(frag);\r\n\r\n addModelViewMatrix(vert);\r\n\r\n // [0] = index of first plane\r\n // [1] = index of last plane (one past the end)\r\n // [2] = texture height\r\n\r\n prog.frag.addGlobal(\"g_hasClipColor\", VariableType.BVec2);\r\n\r\n prog.addUniformArray(\"u_clipParams\", VariableType.Int, 3, (program) => {\r\n program.addGraphicUniform(\"u_clipParams\", (uniform, params) => {\r\n // Set this to false to visualize pre-shader culling of geometry.\r\n const doClipping = true;\r\n\r\n const stack = params.target.uniforms.branch.clipStack;\r\n clipParams[0] = stack.startIndex;\r\n clipParams[1] = stack.endIndex;\r\n clipParams[2] = doClipping ? stack.textureHeight : 0;\r\n assert(clipParams[2] > 0 || !doClipping);\r\n uniform.setUniform1iv(clipParams);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"u_colorizeIntersection\", VariableType.Boolean, (program) => {\r\n program.addProgramUniform(\"u_colorizeIntersection\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.uniforms.branch.clipStack.colorizeIntersection ? 1 : 0);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"u_clipIntersection\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_clipIntersection\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addFunction(getClipPlaneFloat);\r\n\r\n frag.addFunction(calcClipPlaneDist);\r\n frag.addUniform(\"s_clipSampler\", VariableType.Sampler2D, (program) => {\r\n program.addGraphicUniform(\"s_clipSampler\", (uniform, params) => {\r\n const texture = params.target.uniforms.branch.clipStack.texture;\r\n assert(texture !== undefined);\r\n if (texture !== undefined)\r\n texture.bindSampler(uniform, TextureUnit.ClipVolume);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.set(FragmentShaderComponent.ApplyClipping, applyClipPlanes);\r\n\r\n // modify translucent shaders\r\n if (frag.findFunction(computeAlphaWeight))\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composite.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4GjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"Composite.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4GjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA+E5G"}
|
|
@@ -94,10 +94,10 @@ const computeTranslucentColor = `
|
|
|
94
94
|
vec4 computeColor() {
|
|
95
95
|
vec4 opaque = computeOpaqueColor();
|
|
96
96
|
vec4 accum = TEXTURE(u_accumulation, v_texCoord);
|
|
97
|
-
|
|
97
|
+
vec2 rg = TEXTURE(u_revealage, v_texCoord).rg;
|
|
98
98
|
|
|
99
|
-
vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);
|
|
100
|
-
vec4 col = (1.0 - transparent.a) * transparent + transparent.a * opaque;
|
|
99
|
+
vec4 transparent = vec4(accum.rgb / clamp(rg.r, 1e-4, 5e4), accum.a);
|
|
100
|
+
vec4 col = mix((1.0 - transparent.a) * transparent + transparent.a * opaque, vec4(u_clipIntersection.rgb, 1.0), rg.g);
|
|
101
101
|
return col;
|
|
102
102
|
}
|
|
103
103
|
`;
|
|
@@ -145,6 +145,11 @@ export function createCompositeProgram(flags, context) {
|
|
|
145
145
|
Texture2DHandle.bindSampler(uniform, params.geometry.reveal, TextureUnit.Two);
|
|
146
146
|
});
|
|
147
147
|
});
|
|
148
|
+
builder.frag.addUniform("u_clipIntersection", 5 /* VariableType.Vec4 */, (program) => {
|
|
149
|
+
program.addGraphicUniform("u_clipIntersection", (uniform, params) => {
|
|
150
|
+
params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
148
153
|
frag.addFunction(computeTranslucentColor);
|
|
149
154
|
if (!wantHilite) {
|
|
150
155
|
frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeTranslucentBaseColor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composite.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.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 { CompositeGeometry } from \"../CachedGeometry\";\r\nimport { CompositeFlags, TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nfunction addHiliteSettings(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeSettings(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_hilite_width\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_width\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeWidths(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst readEdgePixel = `\r\nvec2 readEdgePixel(float xOffset, float yOffset) {\r\n vec2 t = windowCoordsToTexCoords(gl_FragCoord.xy + vec2(xOffset, yOffset));\r\n return TEXTURE(u_hilite, t).xy;\r\n}\r\n`;\r\n\r\nconst computeNearbyHilites = `\r\nvec2 computeNearbyHilites() {\r\n float hiliteWidth = u_hilite_width.x;\r\n float emphWidth = u_hilite_width.y;\r\n float maxWidth = max(hiliteWidth, emphWidth);\r\n if (0.0 == maxWidth)\r\n return vec2(0.0);\r\n\r\n vec2 nearest = vec2(0.0, 0.0);\r\n for (int x = -1; x <= 1; x++)\r\n for (int y = -1; y <= 1; y++)\r\n if (0 != x || 0 != y)\r\n nearest = nearest + readEdgePixel(float(x), float(y));\r\n\r\n nearest = nearest * vec2(float(hiliteWidth > 0.0), float(emphWidth > 0.0));\r\n\r\n if ((0.0 == nearest.x && hiliteWidth > 1.0) || (0.0 == nearest.y && emphWidth > 1.0)) {\r\n vec2 farthest = vec2(0.0, 0.0);\r\n for (int i = -2; i <= 2; i++) {\r\n float f = float(i);\r\n farthest = farthest + readEdgePixel(f, -2.0) + readEdgePixel(-2.0, f) + readEdgePixel(f, 2.0) + readEdgePixel(2.0, f);\r\n }\r\n\r\n farthest = farthest * vec2(float(hiliteWidth > 1.0), float(emphWidth > 1.0));\r\n nearest = nearest + farthest;\r\n }\r\n\r\n return nearest;\r\n}\r\n`;\r\n\r\nconst computeOpaqueColor = `\r\nvec4 computeOpaqueColor() {\r\n vec4 opaque = TEXTURE(u_opaque, v_texCoord);\r\n opaque.rgb *= computeAmbientOcclusion();\r\n return opaque;\r\n}\r\n`;\r\n\r\nconst computeDefaultAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return 1.0; }\\n`;\r\nconst computeAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return TEXTURE(u_occlusion, v_texCoord).r; }\\n`;\r\n\r\nconst computeHiliteColor = \"\\nvec4 computeColor() { return computeOpaqueColor(); }\\n\";\r\n\r\nconst computeHiliteBaseColor = `\r\n vec4 baseColor = computeColor();\r\n vec2 flags = TEXTURE(u_hilite, v_texCoord).rg;\r\n vec2 outline = computeNearbyHilites();\r\n if (u_hilite_width.y < u_hilite_width.x) { // check for emphasis outline first if it is thinner\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n } else {\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n }\r\n float hiliteMix = flags.x * u_hilite_settings[2][0];\r\n float emphasisMix = flags.y * u_hilite_settings[2][1];\r\n baseColor.rgb *= (1.0 - (hiliteMix + emphasisMix));\r\n baseColor.rgb += u_hilite_settings[0] * hiliteMix;\r\n baseColor.rgb += u_hilite_settings[1] * emphasisMix;\r\n return baseColor;\r\n`;\r\n\r\nconst computeTranslucentColor = `\r\nvec4 computeColor() {\r\n vec4 opaque = computeOpaqueColor();\r\n vec4 accum = TEXTURE(u_accumulation, v_texCoord);\r\n float r = TEXTURE(u_revealage, v_texCoord).r;\r\n\r\n vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);\r\n vec4 col = (1.0 - transparent.a) * transparent + transparent.a * opaque;\r\n return col;\r\n}\r\n`;\r\n\r\nconst computeTranslucentBaseColor = \"return computeColor();\";\r\nconst computeAmbientOcclusionBaseColor = \"return computeOpaqueColor();\";\r\n\r\n/** @internal */\r\nexport function createCompositeProgram(flags: CompositeFlags, context: WebGL2RenderingContext): ShaderProgram {\r\n assert(CompositeFlags.None !== flags);\r\n\r\n const wantHilite = CompositeFlags.None !== (flags & CompositeFlags.Hilite);\r\n const wantTranslucent = CompositeFlags.None !== (flags & CompositeFlags.Translucent);\r\n const wantOcclusion = CompositeFlags.None !== (flags & CompositeFlags.AmbientOcclusion);\r\n\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);\r\n frag.addFunction(computeOpaqueColor);\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_opaque\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_opaque\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).opaque, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (wantHilite) {\r\n addHiliteSettings(frag);\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(readEdgePixel);\r\n frag.addFunction(computeNearbyHilites);\r\n\r\n frag.addUniform(\"u_hilite\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).hilite, TextureUnit.Three);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteBaseColor);\r\n if (!wantTranslucent) {\r\n frag.addFunction(computeHiliteColor);\r\n }\r\n }\r\n\r\n if (wantTranslucent) {\r\n frag.addUniform(\"u_accumulation\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_accumulation\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).accum, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_revealage\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_revealage\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).reveal, TextureUnit.Two);\r\n });\r\n });\r\n\r\n frag.addFunction(computeTranslucentColor);\r\n if (!wantHilite) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeTranslucentBaseColor);\r\n }\r\n }\r\n\r\n if (wantOcclusion) {\r\n frag.addUniform(\"u_occlusion\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_occlusion\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).occlusion!, TextureUnit.Four);\r\n });\r\n });\r\n\r\n if (!wantHilite && !wantTranslucent)\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeAmbientOcclusionBaseColor);\r\n }\r\n\r\n const flagString = (wantHilite ? \"-Hilite\" : \"\") + (wantTranslucent ? \"-Translucent\" : \"\") + (wantOcclusion ? \"-Occlusion\" : \"\");\r\n builder.vert.headerComment = `//!V! CombineTextures${flagString}`;\r\n builder.frag.headerComment = `//!F! CombineTextures${flagString}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Composite.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.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 { CompositeGeometry } from \"../CachedGeometry\";\r\nimport { CompositeFlags, TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nfunction addHiliteSettings(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeSettings(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_hilite_width\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_width\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeWidths(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst readEdgePixel = `\r\nvec2 readEdgePixel(float xOffset, float yOffset) {\r\n vec2 t = windowCoordsToTexCoords(gl_FragCoord.xy + vec2(xOffset, yOffset));\r\n return TEXTURE(u_hilite, t).xy;\r\n}\r\n`;\r\n\r\nconst computeNearbyHilites = `\r\nvec2 computeNearbyHilites() {\r\n float hiliteWidth = u_hilite_width.x;\r\n float emphWidth = u_hilite_width.y;\r\n float maxWidth = max(hiliteWidth, emphWidth);\r\n if (0.0 == maxWidth)\r\n return vec2(0.0);\r\n\r\n vec2 nearest = vec2(0.0, 0.0);\r\n for (int x = -1; x <= 1; x++)\r\n for (int y = -1; y <= 1; y++)\r\n if (0 != x || 0 != y)\r\n nearest = nearest + readEdgePixel(float(x), float(y));\r\n\r\n nearest = nearest * vec2(float(hiliteWidth > 0.0), float(emphWidth > 0.0));\r\n\r\n if ((0.0 == nearest.x && hiliteWidth > 1.0) || (0.0 == nearest.y && emphWidth > 1.0)) {\r\n vec2 farthest = vec2(0.0, 0.0);\r\n for (int i = -2; i <= 2; i++) {\r\n float f = float(i);\r\n farthest = farthest + readEdgePixel(f, -2.0) + readEdgePixel(-2.0, f) + readEdgePixel(f, 2.0) + readEdgePixel(2.0, f);\r\n }\r\n\r\n farthest = farthest * vec2(float(hiliteWidth > 1.0), float(emphWidth > 1.0));\r\n nearest = nearest + farthest;\r\n }\r\n\r\n return nearest;\r\n}\r\n`;\r\n\r\nconst computeOpaqueColor = `\r\nvec4 computeOpaqueColor() {\r\n vec4 opaque = TEXTURE(u_opaque, v_texCoord);\r\n opaque.rgb *= computeAmbientOcclusion();\r\n return opaque;\r\n}\r\n`;\r\n\r\nconst computeDefaultAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return 1.0; }\\n`;\r\nconst computeAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return TEXTURE(u_occlusion, v_texCoord).r; }\\n`;\r\n\r\nconst computeHiliteColor = \"\\nvec4 computeColor() { return computeOpaqueColor(); }\\n\";\r\n\r\nconst computeHiliteBaseColor = `\r\n vec4 baseColor = computeColor();\r\n vec2 flags = TEXTURE(u_hilite, v_texCoord).rg;\r\n vec2 outline = computeNearbyHilites();\r\n if (u_hilite_width.y < u_hilite_width.x) { // check for emphasis outline first if it is thinner\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n } else {\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n }\r\n float hiliteMix = flags.x * u_hilite_settings[2][0];\r\n float emphasisMix = flags.y * u_hilite_settings[2][1];\r\n baseColor.rgb *= (1.0 - (hiliteMix + emphasisMix));\r\n baseColor.rgb += u_hilite_settings[0] * hiliteMix;\r\n baseColor.rgb += u_hilite_settings[1] * emphasisMix;\r\n return baseColor;\r\n`;\r\n\r\nconst computeTranslucentColor = `\r\nvec4 computeColor() {\r\n vec4 opaque = computeOpaqueColor();\r\n vec4 accum = TEXTURE(u_accumulation, v_texCoord);\r\n vec2 rg = TEXTURE(u_revealage, v_texCoord).rg;\r\n\r\n vec4 transparent = vec4(accum.rgb / clamp(rg.r, 1e-4, 5e4), accum.a);\r\n vec4 col = mix((1.0 - transparent.a) * transparent + transparent.a * opaque, vec4(u_clipIntersection.rgb, 1.0), rg.g);\r\n return col;\r\n}\r\n`;\r\n\r\nconst computeTranslucentBaseColor = \"return computeColor();\";\r\nconst computeAmbientOcclusionBaseColor = \"return computeOpaqueColor();\";\r\n\r\n/** @internal */\r\nexport function createCompositeProgram(flags: CompositeFlags, context: WebGL2RenderingContext): ShaderProgram {\r\n assert(CompositeFlags.None !== flags);\r\n\r\n const wantHilite = CompositeFlags.None !== (flags & CompositeFlags.Hilite);\r\n const wantTranslucent = CompositeFlags.None !== (flags & CompositeFlags.Translucent);\r\n const wantOcclusion = CompositeFlags.None !== (flags & CompositeFlags.AmbientOcclusion);\r\n\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);\r\n frag.addFunction(computeOpaqueColor);\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_opaque\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_opaque\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).opaque, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (wantHilite) {\r\n addHiliteSettings(frag);\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(readEdgePixel);\r\n frag.addFunction(computeNearbyHilites);\r\n\r\n frag.addUniform(\"u_hilite\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).hilite, TextureUnit.Three);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteBaseColor);\r\n if (!wantTranslucent) {\r\n frag.addFunction(computeHiliteColor);\r\n }\r\n }\r\n\r\n if (wantTranslucent) {\r\n frag.addUniform(\"u_accumulation\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_accumulation\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).accum, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_revealage\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_revealage\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).reveal, TextureUnit.Two);\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_clipIntersection\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_clipIntersection\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addFunction(computeTranslucentColor);\r\n if (!wantHilite) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeTranslucentBaseColor);\r\n }\r\n }\r\n\r\n if (wantOcclusion) {\r\n frag.addUniform(\"u_occlusion\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_occlusion\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).occlusion!, TextureUnit.Four);\r\n });\r\n });\r\n\r\n if (!wantHilite && !wantTranslucent)\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeAmbientOcclusionBaseColor);\r\n }\r\n\r\n const flagString = (wantHilite ? \"-Hilite\" : \"\") + (wantTranslucent ? \"-Translucent\" : \"\") + (wantOcclusion ? \"-Occlusion\" : \"\");\r\n builder.vert.headerComment = `//!V! CombineTextures${flagString}`;\r\n builder.frag.headerComment = `//!F! CombineTextures${flagString}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -27,6 +27,7 @@ export declare const readDepthAndOrder = "\nvec2 readDepthAndOrder(vec2 tc) {\n
|
|
|
27
27
|
export declare function addRenderOrderConstants(builder: ShaderBuilder): void;
|
|
28
28
|
/** @internal */
|
|
29
29
|
export declare function addRenderOrder(builder: ShaderBuilder): void;
|
|
30
|
+
export declare function addPixelWidthFactor(builder: ShaderBuilder): void;
|
|
30
31
|
/** @internal */
|
|
31
32
|
export declare function addFeatureId(builder: ProgramBuilder, computeInFrag: boolean): void;
|
|
32
33
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA6DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;
|
|
1
|
+
{"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA6DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,QAMzD;AAgBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAW/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
|
|
@@ -408,7 +408,7 @@ export function addRenderOrder(builder) {
|
|
|
408
408
|
});
|
|
409
409
|
});
|
|
410
410
|
}
|
|
411
|
-
function addPixelWidthFactor(builder) {
|
|
411
|
+
export function addPixelWidthFactor(builder) {
|
|
412
412
|
builder.addUniform("u_pixelWidthFactor", 2 /* VariableType.Float */, (prog) => {
|
|
413
413
|
prog.addGraphicUniform("u_pixelWidthFactor", (uniform, params) => {
|
|
414
414
|
params.target.uniforms.bindPixelWidthFactor(uniform);
|