@itwin/core-frontend 5.1.4 → 5.1.6

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/lib/cjs/PlanarClipMaskState.d.ts +3 -0
  3. package/lib/cjs/PlanarClipMaskState.d.ts.map +1 -1
  4. package/lib/cjs/PlanarClipMaskState.js +5 -1
  5. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  6. package/lib/cjs/ViewContext.d.ts +10 -1
  7. package/lib/cjs/ViewContext.d.ts.map +1 -1
  8. package/lib/cjs/ViewContext.js +12 -1
  9. package/lib/cjs/ViewContext.js.map +1 -1
  10. package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts +4 -1
  11. package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
  12. package/lib/cjs/internal/render/webgl/BatchUniforms.js +15 -4
  13. package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
  14. package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts +3 -3
  15. package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
  16. package/lib/cjs/internal/render/webgl/FeatureOverrides.js +10 -10
  17. package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
  18. package/lib/cjs/internal/render/webgl/Graphic.d.ts +3 -3
  19. package/lib/cjs/internal/render/webgl/Graphic.d.ts.map +1 -1
  20. package/lib/cjs/internal/render/webgl/Graphic.js +7 -7
  21. package/lib/cjs/internal/render/webgl/Graphic.js.map +1 -1
  22. package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts +1 -0
  23. package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
  24. package/lib/cjs/internal/render/webgl/PlanarClassifier.js +19 -3
  25. package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
  26. package/lib/cjs/internal/render/webgl/RenderCommands.d.ts +2 -1
  27. package/lib/cjs/internal/render/webgl/RenderCommands.d.ts.map +1 -1
  28. package/lib/cjs/internal/render/webgl/RenderCommands.js +3 -1
  29. package/lib/cjs/internal/render/webgl/RenderCommands.js.map +1 -1
  30. package/lib/cjs/internal/render/webgl/Target.js +2 -2
  31. package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
  32. package/lib/cjs/internal/render/webgl/VisibleTileFeatures.js +1 -1
  33. package/lib/cjs/internal/render/webgl/VisibleTileFeatures.js.map +1 -1
  34. package/lib/esm/PlanarClipMaskState.d.ts +3 -0
  35. package/lib/esm/PlanarClipMaskState.d.ts.map +1 -1
  36. package/lib/esm/PlanarClipMaskState.js +5 -1
  37. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  38. package/lib/esm/ViewContext.d.ts +10 -1
  39. package/lib/esm/ViewContext.d.ts.map +1 -1
  40. package/lib/esm/ViewContext.js +12 -1
  41. package/lib/esm/ViewContext.js.map +1 -1
  42. package/lib/esm/internal/render/webgl/BatchUniforms.d.ts +4 -1
  43. package/lib/esm/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
  44. package/lib/esm/internal/render/webgl/BatchUniforms.js +15 -4
  45. package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
  46. package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts +3 -3
  47. package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
  48. package/lib/esm/internal/render/webgl/FeatureOverrides.js +10 -10
  49. package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
  50. package/lib/esm/internal/render/webgl/Graphic.d.ts +3 -3
  51. package/lib/esm/internal/render/webgl/Graphic.d.ts.map +1 -1
  52. package/lib/esm/internal/render/webgl/Graphic.js +7 -7
  53. package/lib/esm/internal/render/webgl/Graphic.js.map +1 -1
  54. package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts +1 -0
  55. package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
  56. package/lib/esm/internal/render/webgl/PlanarClassifier.js +19 -3
  57. package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
  58. package/lib/esm/internal/render/webgl/RenderCommands.d.ts +2 -1
  59. package/lib/esm/internal/render/webgl/RenderCommands.d.ts.map +1 -1
  60. package/lib/esm/internal/render/webgl/RenderCommands.js +3 -1
  61. package/lib/esm/internal/render/webgl/RenderCommands.js.map +1 -1
  62. package/lib/esm/internal/render/webgl/Target.js +2 -2
  63. package/lib/esm/internal/render/webgl/Target.js.map +1 -1
  64. package/lib/esm/internal/render/webgl/VisibleTileFeatures.js +1 -1
  65. package/lib/esm/internal/render/webgl/VisibleTileFeatures.js.map +1 -1
  66. package/package.json +20 -20
package/CHANGELOG.md CHANGED
@@ -1,6 +1,20 @@
1
1
  # Change Log - @itwin/core-frontend
2
2
 
3
- This log was last generated on Fri, 22 Aug 2025 14:22:33 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 08 Sep 2025 13:53:47 GMT and should not be manually modified.
4
+
5
+ ## 5.1.6
6
+ Mon, 08 Sep 2025 13:53:47 GMT
7
+
8
+ ### Updates
9
+
10
+ - Fix 'ghost' elements when using GraphicalEditingScope with model masking.
11
+
12
+ ## 5.1.5
13
+ Thu, 04 Sep 2025 13:51:08 GMT
14
+
15
+ ### Updates
16
+
17
+ - Add DynamicsContext.addOverlay
4
18
 
5
19
  ## 5.1.4
6
20
  Fri, 22 Aug 2025 14:22:33 GMT
@@ -16,11 +16,14 @@ export declare class PlanarClipMaskState {
16
16
  private _tileTreeRefs?;
17
17
  private _allLoaded;
18
18
  private _usingViewportOverrides;
19
+ private _overridesModelVisibility;
19
20
  private _maskRange;
20
21
  private constructor();
21
22
  static create(settings: PlanarClipMaskSettings): PlanarClipMaskState;
22
23
  static fromJSON(props: PlanarClipMaskProps): PlanarClipMaskState;
23
24
  get usingViewportOverrides(): boolean;
25
+ /** @internal */
26
+ get overridesModelVisibility(): boolean;
24
27
  discloseTileTrees(trees: DisclosedTileTreeSet): void;
25
28
  getTileTrees(context: SceneContext, classifiedModelId: Id64String, maskRange: Range3d): TileTreeReference[] | undefined;
26
29
  getPlanarClipMaskSymbologyOverrides(context: SceneContext, featureSymbologySource: FeatureSymbology.Source): FeatureSymbology.Overrides | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarClipMaskState.d.ts","sourceRoot":"","sources":["../../src/PlanarClipMaskState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAiE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAChJ,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,SAAgB,QAAQ,EAAE,sBAAsB,CAAC;IACjD,OAAO,CAAC,aAAa,CAAC,CAAsB;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,UAAU,CAAiC;IAEnD,OAAO;WAIO,MAAM,CAAC,QAAQ,EAAE,sBAAsB,GAAG,mBAAmB;WAI7D,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB;IAIvE,IAAW,sBAAsB,IAAI,OAAO,CAAyC;IAE9E,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAMpD,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG,iBAAiB,EAAE,GAAG,SAAS;IAgCvH,mCAAmC,CAAC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,MAAM,GAAG,gBAAgB,CAAC,SAAS,GAAG,SAAS;CAoD3J"}
1
+ {"version":3,"file":"PlanarClipMaskState.d.ts","sourceRoot":"","sources":["../../src/PlanarClipMaskState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAiE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAChJ,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,SAAgB,QAAQ,EAAE,sBAAsB,CAAC;IACjD,OAAO,CAAC,aAAa,CAAC,CAAsB;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,UAAU,CAAiC;IAEnD,OAAO;WAIO,MAAM,CAAC,QAAQ,EAAE,sBAAsB,GAAG,mBAAmB;WAI7D,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB;IAIvE,IAAW,sBAAsB,IAAI,OAAO,CAAyC;IAErF,gBAAgB;IAChB,IAAW,wBAAwB,IAAI,OAAO,CAA2C;IAElF,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAMpD,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG,iBAAiB,EAAE,GAAG,SAAS;IAgCvH,mCAAmC,CAAC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,MAAM,GAAG,gBAAgB,CAAC,SAAS,GAAG,SAAS;CAqD3J"}
@@ -20,6 +20,7 @@ class PlanarClipMaskState {
20
20
  _tileTreeRefs;
21
21
  _allLoaded = false;
22
22
  _usingViewportOverrides = false;
23
+ _overridesModelVisibility = false;
23
24
  _maskRange = core_geometry_1.Range3d.createNull();
24
25
  constructor(settings) {
25
26
  this.settings = settings;
@@ -32,6 +33,8 @@ class PlanarClipMaskState {
32
33
  }
33
34
  get usingViewportOverrides() { return this._usingViewportOverrides; }
34
35
  ;
36
+ /** @internal */
37
+ get overridesModelVisibility() { return this._overridesModelVisibility; }
35
38
  discloseTileTrees(trees) {
36
39
  if (this._tileTreeRefs)
37
40
  this._tileTreeRefs.forEach((treeRef) => treeRef.discloseTileTrees(trees));
@@ -67,7 +70,7 @@ class PlanarClipMaskState {
67
70
  }
68
71
  // Returns any potential FeatureSymbology overrides for drawing the planar clip mask.
69
72
  getPlanarClipMaskSymbologyOverrides(context, featureSymbologySource) {
70
- this._usingViewportOverrides = false;
73
+ this._usingViewportOverrides = this._overridesModelVisibility = false;
71
74
  // First obtain a list of models that will need to be turned off for drawing the planar clip mask (only used for batched tile trees).
72
75
  const overrideModels = context.viewport.view.isSpatialView() ? context.viewport.view.getModelsNotInMask(this.settings.modelIds, core_common_1.PlanarClipMaskMode.Priority === this.settings.mode) : undefined;
73
76
  const noSubCategoryOrElementIds = !this.settings.subCategoryOrElementIds;
@@ -77,6 +80,7 @@ class PlanarClipMaskState {
77
80
  const viewport = overrideModels && ovrBasedOnContext ? context.viewport : undefined;
78
81
  const overrides = FeatureSymbology_1.FeatureSymbology.Overrides.withSource(featureSymbologySource, viewport);
79
82
  if (overrideModels) {
83
+ this._overridesModelVisibility = true;
80
84
  // overrideModels is used for batched models. For those, we need to create model overrides to turn off models that are
81
85
  // not wanted in the mask (using transparency) no matter what mask mode is being used.
82
86
  const appOff = core_common_1.FeatureAppearance.fromTransparency(1.0);
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarClipMaskState.js","sourceRoot":"","sources":["../../src/PlanarClipMaskState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { FeatureAppearance, PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskProps, PlanarClipMaskSettings } from \"@itwin/core-common\";\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\nimport { DisclosedTileTreeSet, TileTreeReference } from \"./tile/internal\";\nimport { SceneContext } from \"./ViewContext\";\nimport { Range3d } from \"@itwin/core-geometry\";\n\n/** The State of Planar Clip Mask applied to a reality model or background map.\n * Handles loading models and their associated tiles for models that are used by masks but may not be otherwise loaded or displayed.\n * @beta\n */\nexport class PlanarClipMaskState {\n public readonly settings: PlanarClipMaskSettings;\n private _tileTreeRefs?: TileTreeReference[];\n private _allLoaded = false;\n private _usingViewportOverrides = false;\n private _maskRange: Range3d = Range3d.createNull();\n\n private constructor(settings: PlanarClipMaskSettings) {\n this.settings = settings;\n }\n\n public static create(settings: PlanarClipMaskSettings): PlanarClipMaskState {\n return new PlanarClipMaskState(settings);\n }\n\n public static fromJSON(props: PlanarClipMaskProps): PlanarClipMaskState {\n return this.create(PlanarClipMaskSettings.fromJSON(props));\n }\n\n public get usingViewportOverrides(): boolean { return this._usingViewportOverrides; };\n\n public discloseTileTrees(trees: DisclosedTileTreeSet): void {\n if (this._tileTreeRefs)\n this._tileTreeRefs.forEach((treeRef) => treeRef.discloseTileTrees(trees));\n }\n\n // Returns the TileTreeReferences for the models that need to be drawn to create the planar clip mask, and extend the maskRange if needed.\n public getTileTrees(context: SceneContext, classifiedModelId: Id64String, maskRange: Range3d): TileTreeReference[] | undefined {\n if (this.settings.mode === PlanarClipMaskMode.Priority) {\n // For priority mode we simply want refs for all viewed models if the priority is higher than the mask priority.\n // For this case, we don't need a maskRange so leave it as null.\n const viewTrees = new Array<TileTreeReference>();\n const thisPriority = this.settings.priority === undefined ? PlanarClipMaskPriority.RealityModel : this.settings.priority;\n for (const ref of context.viewport.getTileTreeRefs()) {\n const tree = ref.treeOwner.load();\n if (tree && tree.modelId !== classifiedModelId && ref.planarClipMaskPriority > thisPriority)\n viewTrees.push(ref);\n }\n\n return viewTrees;\n }\n\n // For all other modes we need to let the tree refs in the view state decide which refs need to be drawn\n // since batched tiles cannot turn on/off individual models just by their tile tree refs.\n // Keep calling this until loaded so that the range is valid.\n if (!this._allLoaded) {\n this._tileTreeRefs = new Array<TileTreeReference>();\n if (this.settings.modelIds && context.viewport.view.isSpatialView()) {\n context.viewport.view.collectMaskRefs(this.settings.modelIds, this._tileTreeRefs, maskRange);\n }\n this._allLoaded = this._tileTreeRefs.every((treeRef) => treeRef.treeOwner.load() !== undefined);\n maskRange.clone(this._maskRange);\n } else // If already loaded, just set the maskRange to the saved maskRange.\n this._maskRange.clone(maskRange);\n\n return this._allLoaded ? this._tileTreeRefs : undefined;\n }\n\n // Returns any potential FeatureSymbology overrides for drawing the planar clip mask.\n public getPlanarClipMaskSymbologyOverrides(context: SceneContext, featureSymbologySource: FeatureSymbology.Source): FeatureSymbology.Overrides | undefined {\n this._usingViewportOverrides = false;\n // First obtain a list of models that will need to be turned off for drawing the planar clip mask (only used for batched tile trees).\n const overrideModels = context.viewport.view.isSpatialView() ? context.viewport.view.getModelsNotInMask(this.settings.modelIds, PlanarClipMaskMode.Priority === this.settings.mode) : undefined;\n\n const noSubCategoryOrElementIds = !this.settings.subCategoryOrElementIds;\n if (noSubCategoryOrElementIds && !overrideModels)\n return undefined;\n\n const ovrBasedOnContext = PlanarClipMaskMode.Priority === this.settings.mode || PlanarClipMaskMode.Models === this.settings.mode || noSubCategoryOrElementIds;\n const viewport = overrideModels && ovrBasedOnContext ? context.viewport : undefined;\n const overrides = FeatureSymbology.Overrides.withSource(featureSymbologySource, viewport);\n\n if (overrideModels) {\n // overrideModels is used for batched models. For those, we need to create model overrides to turn off models that are\n // not wanted in the mask (using transparency) no matter what mask mode is being used.\n const appOff = FeatureAppearance.fromTransparency(1.0);\n // For Priority or Models mode, we need to start with the current overrides and modify them\n if (ovrBasedOnContext) {\n this._usingViewportOverrides = true; // Set flag to use listener since context.viewport might change afterwards.\n overrides.addInvisibleElementOverridesToNeverDrawn(); // need this for fully trans element overrides to not participate in mask\n overrideModels.forEach((modelId: string) => {\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\n });\n return overrides;\n }\n // Otherwise, we just start with a default overrides and modify it.\n overrideModels.forEach((modelId: string) => {\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\n });\n }\n\n // Add overrides to turn things on or off based on the subcategories or elements in the mask settings.\n switch (this.settings.mode) {\n case PlanarClipMaskMode.IncludeElements: {\n overrides.setAlwaysDrawnSet(this.settings.subCategoryOrElementIds!, true);\n return overrides;\n }\n case PlanarClipMaskMode.ExcludeElements: {\n overrides.ignoreSubCategory = true;\n overrides.setNeverDrawnSet(this.settings.subCategoryOrElementIds!);\n return overrides;\n }\n case PlanarClipMaskMode.IncludeSubCategories: {\n for (const subCategoryId of this.settings.subCategoryOrElementIds!)\n overrides.setVisibleSubCategory(subCategoryId);\n return overrides;\n }\n }\n\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"PlanarClipMaskState.js","sourceRoot":"","sources":["../../src/PlanarClipMaskState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { FeatureAppearance, PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskProps, PlanarClipMaskSettings } from \"@itwin/core-common\";\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\nimport { DisclosedTileTreeSet, TileTreeReference } from \"./tile/internal\";\nimport { SceneContext } from \"./ViewContext\";\nimport { Range3d } from \"@itwin/core-geometry\";\n\n/** The State of Planar Clip Mask applied to a reality model or background map.\n * Handles loading models and their associated tiles for models that are used by masks but may not be otherwise loaded or displayed.\n * @beta\n */\nexport class PlanarClipMaskState {\n public readonly settings: PlanarClipMaskSettings;\n private _tileTreeRefs?: TileTreeReference[];\n private _allLoaded = false;\n private _usingViewportOverrides = false;\n private _overridesModelVisibility = false;\n private _maskRange: Range3d = Range3d.createNull();\n\n private constructor(settings: PlanarClipMaskSettings) {\n this.settings = settings;\n }\n\n public static create(settings: PlanarClipMaskSettings): PlanarClipMaskState {\n return new PlanarClipMaskState(settings);\n }\n\n public static fromJSON(props: PlanarClipMaskProps): PlanarClipMaskState {\n return this.create(PlanarClipMaskSettings.fromJSON(props));\n }\n\n public get usingViewportOverrides(): boolean { return this._usingViewportOverrides; };\n\n /** @internal */\n public get overridesModelVisibility(): boolean { return this._overridesModelVisibility; }\n\n public discloseTileTrees(trees: DisclosedTileTreeSet): void {\n if (this._tileTreeRefs)\n this._tileTreeRefs.forEach((treeRef) => treeRef.discloseTileTrees(trees));\n }\n\n // Returns the TileTreeReferences for the models that need to be drawn to create the planar clip mask, and extend the maskRange if needed.\n public getTileTrees(context: SceneContext, classifiedModelId: Id64String, maskRange: Range3d): TileTreeReference[] | undefined {\n if (this.settings.mode === PlanarClipMaskMode.Priority) {\n // For priority mode we simply want refs for all viewed models if the priority is higher than the mask priority.\n // For this case, we don't need a maskRange so leave it as null.\n const viewTrees = new Array<TileTreeReference>();\n const thisPriority = this.settings.priority === undefined ? PlanarClipMaskPriority.RealityModel : this.settings.priority;\n for (const ref of context.viewport.getTileTreeRefs()) {\n const tree = ref.treeOwner.load();\n if (tree && tree.modelId !== classifiedModelId && ref.planarClipMaskPriority > thisPriority)\n viewTrees.push(ref);\n }\n\n return viewTrees;\n }\n\n // For all other modes we need to let the tree refs in the view state decide which refs need to be drawn\n // since batched tiles cannot turn on/off individual models just by their tile tree refs.\n // Keep calling this until loaded so that the range is valid.\n if (!this._allLoaded) {\n this._tileTreeRefs = new Array<TileTreeReference>();\n if (this.settings.modelIds && context.viewport.view.isSpatialView()) {\n context.viewport.view.collectMaskRefs(this.settings.modelIds, this._tileTreeRefs, maskRange);\n }\n this._allLoaded = this._tileTreeRefs.every((treeRef) => treeRef.treeOwner.load() !== undefined);\n maskRange.clone(this._maskRange);\n } else // If already loaded, just set the maskRange to the saved maskRange.\n this._maskRange.clone(maskRange);\n\n return this._allLoaded ? this._tileTreeRefs : undefined;\n }\n\n // Returns any potential FeatureSymbology overrides for drawing the planar clip mask.\n public getPlanarClipMaskSymbologyOverrides(context: SceneContext, featureSymbologySource: FeatureSymbology.Source): FeatureSymbology.Overrides | undefined {\n this._usingViewportOverrides = this._overridesModelVisibility = false;\n // First obtain a list of models that will need to be turned off for drawing the planar clip mask (only used for batched tile trees).\n const overrideModels = context.viewport.view.isSpatialView() ? context.viewport.view.getModelsNotInMask(this.settings.modelIds, PlanarClipMaskMode.Priority === this.settings.mode) : undefined;\n\n const noSubCategoryOrElementIds = !this.settings.subCategoryOrElementIds;\n if (noSubCategoryOrElementIds && !overrideModels)\n return undefined;\n\n const ovrBasedOnContext = PlanarClipMaskMode.Priority === this.settings.mode || PlanarClipMaskMode.Models === this.settings.mode || noSubCategoryOrElementIds;\n const viewport = overrideModels && ovrBasedOnContext ? context.viewport : undefined;\n const overrides = FeatureSymbology.Overrides.withSource(featureSymbologySource, viewport);\n\n if (overrideModels) {\n this._overridesModelVisibility = true;\n // overrideModels is used for batched models. For those, we need to create model overrides to turn off models that are\n // not wanted in the mask (using transparency) no matter what mask mode is being used.\n const appOff = FeatureAppearance.fromTransparency(1.0);\n // For Priority or Models mode, we need to start with the current overrides and modify them\n if (ovrBasedOnContext) {\n this._usingViewportOverrides = true; // Set flag to use listener since context.viewport might change afterwards.\n overrides.addInvisibleElementOverridesToNeverDrawn(); // need this for fully trans element overrides to not participate in mask\n overrideModels.forEach((modelId: string) => {\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\n });\n return overrides;\n }\n // Otherwise, we just start with a default overrides and modify it.\n overrideModels.forEach((modelId: string) => {\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\n });\n }\n\n // Add overrides to turn things on or off based on the subcategories or elements in the mask settings.\n switch (this.settings.mode) {\n case PlanarClipMaskMode.IncludeElements: {\n overrides.setAlwaysDrawnSet(this.settings.subCategoryOrElementIds!, true);\n return overrides;\n }\n case PlanarClipMaskMode.ExcludeElements: {\n overrides.ignoreSubCategory = true;\n overrides.setNeverDrawnSet(this.settings.subCategoryOrElementIds!);\n return overrides;\n }\n case PlanarClipMaskMode.IncludeSubCategories: {\n for (const subCategoryId of this.settings.subCategoryOrElementIds!)\n overrides.setVisibleSubCategory(subCategoryId);\n return overrides;\n }\n }\n\n return undefined;\n }\n}\n"]}
@@ -71,8 +71,17 @@ export declare class RenderContext {
71
71
  export declare class DynamicsContext extends RenderContext {
72
72
  private _foreground?;
73
73
  private _overlay?;
74
- /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]]. */
74
+ /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]].
75
+ * These graphics are drawn as [[GraphicType.Scene]].
76
+ * @see [[addOverlay]] to add a graphic to be drawn as an overlay instead.
77
+ */
75
78
  addGraphic(graphic: RenderGraphic): void;
79
+ /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]].
80
+ * These graphics are drawn as part of the viewport's scene as described by [[GraphicType.Scene]], except
81
+ * that they always draw on top of other graphics as with [[GraphicType.WorldOverlay]].
82
+ * @see [[addGraphic]] to add an ordinary scene graphic instead.
83
+ */
84
+ addOverlay(graphic: RenderGraphic): void;
76
85
  /** @internal */
77
86
  add(graphic: RenderGraphic, isOverlay: boolean): void;
78
87
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"ViewContext.d.ts","sourceRoot":"","sources":["../../src/ViewContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ViewContext.d.ts","sourceRoot":"","sources":["../../src/ViewContext.ts"],"names":[],"mappings":"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"}
@@ -86,10 +86,21 @@ exports.RenderContext = RenderContext;
86
86
  class DynamicsContext extends RenderContext {
87
87
  _foreground;
88
88
  _overlay;
89
- /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]]. */
89
+ /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]].
90
+ * These graphics are drawn as [[GraphicType.Scene]].
91
+ * @see [[addOverlay]] to add a graphic to be drawn as an overlay instead.
92
+ */
90
93
  addGraphic(graphic) {
91
94
  this.add(graphic, false);
92
95
  }
96
+ /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]].
97
+ * These graphics are drawn as part of the viewport's scene as described by [[GraphicType.Scene]], except
98
+ * that they always draw on top of other graphics as with [[GraphicType.WorldOverlay]].
99
+ * @see [[addGraphic]] to add an ordinary scene graphic instead.
100
+ */
101
+ addOverlay(graphic) {
102
+ this.add(graphic, true);
103
+ }
93
104
  /** @internal */
94
105
  add(graphic, isOverlay) {
95
106
  const key = isOverlay ? "_overlay" : "_foreground";
@@ -1 +1 @@
1
- {"version":3,"file":"ViewContext.js","sourceRoot":"","sources":["../../src/ViewContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { assert, Id64String } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point2d,\n Point3d, Range1d, Transform, XAndY,\n} from \"@itwin/core-geometry\";\nimport { Frustum, FrustumPlanes, ViewFlags } from \"@itwin/core-common\";\nimport { CachedDecoration, DecorationsCache } from \"./DecorationsCache\";\nimport { IModelApp } from \"./IModelApp\";\nimport { PlanarClipMaskState } from \"./PlanarClipMaskState\";\nimport { CanvasDecoration } from \"./render/CanvasDecoration\";\nimport { Decorations } from \"./render/Decorations\";\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\nimport { GraphicBuilder, ViewportGraphicBuilderOptions } from \"./render/GraphicBuilder\";\nimport { GraphicList, RenderGraphic } from \"./render/RenderGraphic\";\nimport { RenderPlanarClassifier } from \"./internal/render/RenderPlanarClassifier\";\nimport { RenderSystem, } from \"./render/RenderSystem\";\nimport { RenderTarget } from \"./render/RenderTarget\";\nimport { Scene } from \"./render/Scene\";\nimport { SpatialClassifierTileTreeReference, Tile, TileGraphicType, TileLoadStatus, TileTreeReference } from \"./tile/internal\";\nimport { ViewingSpace } from \"./ViewingSpace\";\nimport { ELEMENT_MARKED_FOR_REMOVAL, ScreenViewport, Viewport, ViewportDecorator } from \"./Viewport\";\nimport { ActiveSpatialClassifier } from \"./SpatialClassifiersState\";\nimport { GraphicType } from \"./common/render/GraphicType\";\nimport { RenderTextureDrape } from \"./internal/render/RenderTextureDrape\";\n\n/** Provides context for producing [[RenderGraphic]]s for drawing within a [[Viewport]].\n * @public\n * @extensions\n */\nexport class RenderContext {\n /** ViewFlags extracted from the context's [[Viewport]]. */\n public readonly viewFlags: ViewFlags;\n private readonly _viewport: Viewport;\n /** Frustum extracted from the context's [[Viewport]]. */\n public readonly frustum: Frustum;\n /** Frustum planes extracted from the context's [[Viewport]]. */\n public readonly frustumPlanes: FrustumPlanes;\n\n constructor(vp: Viewport, frustum?: Frustum) {\n this._viewport = vp;\n this.viewFlags = vp.viewFlags;\n this.frustum = frustum ? frustum : vp.getFrustum();\n this.frustumPlanes = FrustumPlanes.fromFrustum(this.frustum);\n }\n\n /** Given a point in world coordinates, determine approximately how many pixels it occupies on screen based on this context's frustum. */\n public getPixelSizeAtPoint(inPoint?: Point3d): number {\n return this.viewport.viewingSpace.getPixelSizeAtPoint(inPoint);\n }\n\n /** The [[Viewport]] associated with this context. */\n public get viewport(): Viewport {\n return this._viewport;\n }\n\n /** The [[RenderSystem]] being used to produce graphics for this context. */\n public get renderSystem(): RenderSystem {\n return this.target.renderSystem;\n }\n\n /** @internal */\n public get target(): RenderTarget { return this.viewport.target; }\n\n /** @internal */\n protected _createGraphicBuilder(options: Omit<ViewportGraphicBuilderOptions, \"viewport\">): GraphicBuilder {\n return this.target.createGraphicBuilder({ ...options, viewport: this.viewport });\n }\n\n /** Create a builder for creating a [[GraphicType.Scene]] [[RenderGraphic]] for rendering within this context's [[Viewport]].\n * @param transform the local-to-world transform in which the builder's geometry is to be defined.\n * @returns A builder for creating a [[GraphicType.Scene]] [[RenderGraphic]] for rendering within this context's [[Viewport]].\n */\n public createSceneGraphicBuilder(transform?: Transform): GraphicBuilder {\n return this._createGraphicBuilder({ type: GraphicType.Scene, placement: transform });\n }\n\n /** Create a graphic from a [[GraphicBranch]]. */\n public createGraphicBranch(branch: GraphicBranch, location: Transform, opts?: GraphicBranchOptions): RenderGraphic {\n return this.target.renderSystem.createGraphicBranch(branch, location, opts);\n }\n\n /** Create a [[RenderGraphic]] which groups a set of graphics into a node in a scene graph, applying to each a transform and optional clip volume and symbology overrides.\n * @param branch Contains the group of graphics and the symbology overrides.\n * @param location the local-to-world transform applied to the grouped graphics.\n * @returns A RenderGraphic suitable for drawing the scene graph node within this context's [[Viewport]].\n * @see [[RenderSystem.createBranch]]\n */\n public createBranch(branch: GraphicBranch, location: Transform): RenderGraphic { return this.createGraphicBranch(branch, location); }\n\n /** Given the size of a logical pixel in meters, convert it to the size of a physical pixel in meters, if [[RenderSystem.dpiAwareLOD]] is `true`.\n * Used when computing LOD for graphics.\n * @internal\n */\n public adjustPixelSizeForLOD(cssPixelSize: number): number {\n return this.viewport.target.adjustPixelSizeForLOD(cssPixelSize);\n }\n}\n\n/** Provides context for an [[InteractiveTool]] to display decorations representing its current state.\n * @see [[InteractiveTool.onDynamicFrame]]\n * @public\n */\nexport class DynamicsContext extends RenderContext {\n private _foreground?: GraphicList;\n private _overlay?: GraphicList;\n\n /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]]. */\n public addGraphic(graphic: RenderGraphic): void {\n this.add(graphic, false);\n }\n\n /** @internal */\n public add(graphic: RenderGraphic, isOverlay: boolean) {\n const key = isOverlay ? \"_overlay\" : \"_foreground\";\n const list = this[key] ?? (this[key] = []);\n list.push(graphic);\n }\n\n /** @internal */\n public changeDynamics(): void {\n this.viewport.changeDynamics(this._foreground, this._overlay);\n }\n\n /** Create a builder for producing a [[RenderGraphic]] appropriate for rendering within this context's [[Viewport]].\n * @param options Options describing how to create the builder.\n * @returns A builder that produces a [[RenderGraphic]].\n */\n public createGraphic(options: Omit<ViewportGraphicBuilderOptions, \"viewport\">): GraphicBuilder {\n return this._createGraphicBuilder(options);\n }\n}\n\n/** Arguments supplied to [[DecorateContext.create]].\n * @public\n */\nexport interface DecorateContextCreateArgs {\n /** The viewport to be decorated. */\n viewport: ScreenViewport;\n /** The set of decoration graphics to be populated by the context. */\n output: Decorations;\n /** Optional cache. If omitted, one will be created.\n * @internal\n */\n cache?: DecorationsCache;\n}\n\n/** Provides context for a [[ViewportDecorator]] to add [[Decorations]] to be rendered within a [[Viewport]].\n * @public\n * @extensions\n */\nexport class DecorateContext extends RenderContext {\n private readonly _decorations: Decorations;\n private readonly _cache: DecorationsCache;\n private _curCacheableDecorator?: ViewportDecorator;\n\n /** The [[ScreenViewport]] in which this context's [[Decorations]] will be drawn. */\n public override get viewport(): ScreenViewport {\n return super.viewport as ScreenViewport;\n }\n\n /** @internal */\n constructor(vp: ScreenViewport, decorations: Decorations, cache: DecorationsCache) {\n super(vp);\n this._decorations = decorations;\n this._cache = cache;\n }\n\n /** Create a new DecorateContext.\n * @param args Describes the inputs to the context.\n * @note Typically the [[ScreenViewport]] takes care of creating the context for you.\n * @public\n */\n public static create(args: DecorateContextCreateArgs): DecorateContext {\n return new DecorateContext(args.viewport, args.output, args.cache ?? new DecorationsCache());\n }\n\n /** Create a builder for creating a [[RenderGraphic]] of the specified type appropriate for rendering within this context's [[Viewport]].\n * @param type The type of builder to create.\n * @param transform the local-to-world transform in which the builder's geometry is to be defined.\n * @param id If the decoration is to be pickable, a unique identifier to associate with the resultant [[RenderGraphic]].\n * @returns A builder for creating a [[RenderGraphic]] of the specified type appropriate for rendering within this context's [[Viewport]].\n * @see [[IModelConnection.transientIds]] for obtaining an ID for a pickable decoration.\n * @see [[createGraphic]] for more options.\n */\n public createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder {\n return this.createGraphic({ type, placement: transform, pickable: undefined !== id ? { id } : undefined });\n }\n\n /** Create a builder for producing a [[RenderGraphic]] appropriate for rendering within this context's [[Viewport]].\n * @param options Options describing how to create the builder.\n * @returns A builder that produces a [[RenderGraphic]].\n */\n public createGraphic(options: Omit<ViewportGraphicBuilderOptions, \"viewport\">): GraphicBuilder {\n return this._createGraphicBuilder(options);\n }\n\n /** @internal */\n public addFromDecorator(decorator: ViewportDecorator): void {\n assert(undefined === this._curCacheableDecorator);\n try {\n if (decorator.useCachedDecorations) {\n const cached = this._cache.get(decorator);\n if (cached) {\n this.restoreCache(cached);\n return;\n }\n\n this._curCacheableDecorator = decorator;\n }\n\n decorator.decorate(this);\n } finally {\n this._curCacheableDecorator = undefined;\n }\n }\n\n /** Restores decorations onto this context from the specified array of cached decorations. */\n private restoreCache(cachedDecorations: CachedDecoration[]) {\n cachedDecorations.forEach((cachedDecoration) => {\n switch (cachedDecoration.type) {\n case \"graphic\":\n this.addDecoration(cachedDecoration.graphicType, cachedDecoration.graphicOwner);\n break;\n case \"canvas\":\n this.addCanvasDecoration(cachedDecoration.canvasDecoration, cachedDecoration.atFront);\n break;\n case \"html\":\n this.addHtmlDecoration(cachedDecoration.htmlElement);\n break;\n }\n });\n }\n\n private _appendToCache(decoration: CachedDecoration) {\n assert(undefined !== this._curCacheableDecorator);\n this._cache.add(this._curCacheableDecorator, decoration);\n }\n\n /** Calls [[GraphicBuilder.finish]] on the supplied builder to obtain a [[RenderGraphic]], then adds the graphic to the appropriate list of\n * [[Decorations]].\n * @param builder The builder from which to extract the graphic.\n * @note The builder should not be used after calling this method.\n */\n public addDecorationFromBuilder(builder: GraphicBuilder) {\n this.addDecoration(builder.type, builder.finish());\n }\n\n /** Adds a graphic to the set of [[Decorations]] to be drawn in this context's [[ScreenViewport]].\n * @param The type of the graphic, which determines to which list of decorations it is added.\n * @param decoration The decoration graphic to add.\n * @note The type must match the type with which the [[RenderGraphic]]'s [[GraphicBuilder]] was constructed.\n * @see [[DecorateContext.addDecorationFromBuilder]] for a more convenient API.\n */\n public addDecoration(type: GraphicType, decoration: RenderGraphic) {\n if (this._curCacheableDecorator) {\n const graphicOwner = this.target.renderSystem.createGraphicOwner(decoration);\n this._appendToCache({ type: \"graphic\", graphicOwner, graphicType: type });\n decoration = graphicOwner;\n }\n\n switch (type) {\n case GraphicType.Scene:\n if (undefined === this._decorations.normal)\n this._decorations.normal = [];\n this._decorations.normal.push(decoration);\n break;\n\n case GraphicType.WorldDecoration:\n if (!this._decorations.world)\n this._decorations.world = [];\n this._decorations.world.push(decoration);\n break;\n\n case GraphicType.WorldOverlay:\n if (!this._decorations.worldOverlay)\n this._decorations.worldOverlay = [];\n this._decorations.worldOverlay.push(decoration);\n break;\n\n case GraphicType.ViewOverlay:\n if (!this._decorations.viewOverlay)\n this._decorations.viewOverlay = [];\n this._decorations.viewOverlay.push(decoration);\n break;\n\n case GraphicType.ViewBackground:\n this.setViewBackground(decoration);\n break;\n }\n }\n\n /** Add a [[CanvasDecoration]] to be drawn in this context's [[ScreenViewport]]. */\n public addCanvasDecoration(decoration: CanvasDecoration, atFront = false) {\n if (this._curCacheableDecorator)\n this._appendToCache({ type: \"canvas\", canvasDecoration: decoration, atFront });\n\n if (undefined === this._decorations.canvasDecorations)\n this._decorations.canvasDecorations = [];\n\n const list = this._decorations.canvasDecorations;\n if (0 === list.length || true === atFront)\n list.push(decoration);\n else\n list.unshift(decoration);\n }\n\n /** Add an HTMLElement to be drawn as a decoration in this context's [[ScreenViewport]]. */\n public addHtmlDecoration(decoration: HTMLElement) {\n if (this._curCacheableDecorator)\n this._appendToCache({ type: \"html\", htmlElement: decoration });\n\n // an element decoration being added might already be on the decorationDiv, just marked for removal\n if (decoration[ELEMENT_MARKED_FOR_REMOVAL]) {\n decoration[ELEMENT_MARKED_FOR_REMOVAL] = false;\n } else if (decoration.parentElement !== this.viewport.decorationDiv) {\n this.viewport.decorationDiv.appendChild(decoration);\n }\n }\n\n /** @internal */\n public drawStandardGrid(gridOrigin: Point3d, rMatrix: Matrix3d, spacing: XAndY, gridsPerRef: number, _isoGrid: boolean = false, _fixedRepetitions?: Point2d): void {\n const vp = this.viewport;\n\n if (vp.viewingGlobe)\n return;\n\n const color = vp.getContrastToBackgroundColor();\n const planarGrid = this.viewport.target.renderSystem.createPlanarGrid(vp.getFrustum(), { origin: gridOrigin, rMatrix, spacing, gridsPerRef, color });\n if (planarGrid) {\n this.addDecoration(GraphicType.WorldDecoration, planarGrid);\n }\n }\n\n /** Display skyBox graphic that encompasses entire scene and rotates with camera.\n * @see [[RenderSystem.createSkyBox]].\n */\n public setSkyBox(graphic: RenderGraphic) {\n this._decorations.skyBox = graphic;\n }\n\n /** Set the graphic to be displayed behind all other geometry as the background of this context's [[ScreenViewport]]. */\n public setViewBackground(graphic: RenderGraphic) {\n this._decorations.viewBackground = graphic;\n }\n}\n\n/** Context used to create the scene to be drawn in a [[Viewport]]. The scene consists of a set of [[RenderGraphic]]s produced by the\n * [[TileTree]]s visible within the viewport. Creating the scene may result in the enqueueing of requests for [[Tile]] content which\n * should be displayed in the viewport but are not yet loaded.\n * @public\n */\nexport class SceneContext extends RenderContext {\n private _missingChildTiles = false;\n /** The graphics comprising the scene. */\n public readonly scene = new Scene();\n\n /** @internal */\n public readonly missingTiles = new Set<Tile>();\n\n /** @internal */\n public markChildrenLoading(): void {\n this._missingChildTiles = true;\n }\n\n /** @internal */\n public get hasMissingTiles(): boolean {\n return this._missingChildTiles || this.missingTiles.size > 0;\n }\n\n private _viewingSpace?: ViewingSpace;\n private _graphicType: TileGraphicType = TileGraphicType.Scene;\n\n public constructor(vp: Viewport, frustum?: Frustum) {\n super(vp, frustum);\n }\n\n /** The viewed volume containing the scene. */\n public get viewingSpace(): ViewingSpace {\n return undefined !== this._viewingSpace ? this._viewingSpace : this.viewport.viewingSpace;\n }\n\n /** @internal */\n public get graphicType() { return this._graphicType; }\n\n /** Add the specified graphic to the scene. */\n public outputGraphic(graphic: RenderGraphic): void {\n switch (this._graphicType) {\n case TileGraphicType.BackgroundMap:\n this.backgroundGraphics.push(graphic);\n break;\n case TileGraphicType.Overlay:\n this.overlayGraphics.push(graphic);\n break;\n default:\n this.graphics.push(graphic);\n break;\n }\n }\n\n /** Indicate that the specified tile is desired for the scene but is not yet ready. A request to load its contents will later be enqueued. */\n public insertMissingTile(tile: Tile): void {\n switch (tile.loadStatus) {\n case TileLoadStatus.NotLoaded:\n case TileLoadStatus.Queued:\n case TileLoadStatus.Loading:\n this.missingTiles.add(tile);\n break;\n }\n }\n\n /** @internal */\n public requestMissingTiles(): void {\n IModelApp.tileAdmin.requestTiles(this.viewport, this.missingTiles);\n }\n\n /** @internal */\n public addPlanarClassifier(classifiedModelId: Id64String, classifierTree?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState): RenderPlanarClassifier | undefined {\n // Target may have the classifier from a previous frame; if not we must create one.\n let classifier = this.viewport.target.getPlanarClassifier(classifiedModelId);\n if (undefined === classifier)\n classifier = this.viewport.target.createPlanarClassifier(classifierTree?.activeClassifier);\n\n // Either way, we need to collect the graphics to draw for this frame, and record that we did so.\n if (undefined !== classifier) {\n this.planarClassifiers.set(classifiedModelId, classifier);\n classifier.setSource(classifierTree, planarClipMask);\n }\n\n return classifier;\n }\n\n /** @internal */\n public getPlanarClassifierForModel(modelId: Id64String) {\n return this.planarClassifiers.get(modelId);\n }\n\n /** @internal */\n public addBackgroundDrapedModel(drapedTreeRef: TileTreeReference, _heightRange: Range1d | undefined): RenderTextureDrape | undefined {\n const drapedTree = drapedTreeRef.treeOwner.tileTree;\n if (undefined === drapedTree)\n return undefined;\n\n const id = drapedTree.modelId;\n let drape = this.getTextureDrapeForModel(id);\n if (undefined !== drape)\n return drape;\n\n drape = this.viewport.target.getTextureDrape(id);\n if (undefined === drape && this.viewport.backgroundDrapeMap)\n drape = this.viewport.target.renderSystem.createBackgroundMapDrape(drapedTreeRef, this.viewport.backgroundDrapeMap);\n\n if (undefined !== drape)\n this.textureDrapes.set(id, drape);\n\n return drape;\n }\n\n /** @internal */\n public getTextureDrapeForModel(modelId: Id64String) {\n return this.textureDrapes.get(modelId);\n }\n\n /** @internal */\n public withGraphicType(type: TileGraphicType, func: () => void): void {\n const prevType = this._graphicType;\n this._graphicType = type;\n\n func();\n\n this._graphicType = prevType;\n }\n\n /** The graphics in the scene that will be drawn with depth. */\n public get graphics() { return this.scene.foreground; }\n /** The graphics that will be drawn behind everything else in the scene. */\n public get backgroundGraphics() { return this.scene.background; }\n /** The graphics that will be drawn in front of everything else in the scene. */\n public get overlayGraphics() { return this.scene.overlay; }\n /** @internal */\n public get planarClassifiers() { return this.scene.planarClassifiers; }\n /** @internal */\n public get textureDrapes() { return this.scene.textureDrapes; }\n\n /** @internal */\n public setVolumeClassifier(classifier: ActiveSpatialClassifier, modelId: Id64String): void {\n this.scene.volumeClassifier = { classifier, modelId };\n }\n}\n"]}
1
+ {"version":3,"file":"ViewContext.js","sourceRoot":"","sources":["../../src/ViewContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { assert, Id64String } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point2d,\n Point3d, Range1d, Transform, XAndY,\n} from \"@itwin/core-geometry\";\nimport { Frustum, FrustumPlanes, ViewFlags } from \"@itwin/core-common\";\nimport { CachedDecoration, DecorationsCache } from \"./DecorationsCache\";\nimport { IModelApp } from \"./IModelApp\";\nimport { PlanarClipMaskState } from \"./PlanarClipMaskState\";\nimport { CanvasDecoration } from \"./render/CanvasDecoration\";\nimport { Decorations } from \"./render/Decorations\";\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\nimport { GraphicBuilder, ViewportGraphicBuilderOptions } from \"./render/GraphicBuilder\";\nimport { GraphicList, RenderGraphic } from \"./render/RenderGraphic\";\nimport { RenderPlanarClassifier } from \"./internal/render/RenderPlanarClassifier\";\nimport { RenderSystem, } from \"./render/RenderSystem\";\nimport { RenderTarget } from \"./render/RenderTarget\";\nimport { Scene } from \"./render/Scene\";\nimport { SpatialClassifierTileTreeReference, Tile, TileGraphicType, TileLoadStatus, TileTreeReference } from \"./tile/internal\";\nimport { ViewingSpace } from \"./ViewingSpace\";\nimport { ELEMENT_MARKED_FOR_REMOVAL, ScreenViewport, Viewport, ViewportDecorator } from \"./Viewport\";\nimport { ActiveSpatialClassifier } from \"./SpatialClassifiersState\";\nimport { GraphicType } from \"./common/render/GraphicType\";\nimport { RenderTextureDrape } from \"./internal/render/RenderTextureDrape\";\n\n/** Provides context for producing [[RenderGraphic]]s for drawing within a [[Viewport]].\n * @public\n * @extensions\n */\nexport class RenderContext {\n /** ViewFlags extracted from the context's [[Viewport]]. */\n public readonly viewFlags: ViewFlags;\n private readonly _viewport: Viewport;\n /** Frustum extracted from the context's [[Viewport]]. */\n public readonly frustum: Frustum;\n /** Frustum planes extracted from the context's [[Viewport]]. */\n public readonly frustumPlanes: FrustumPlanes;\n\n constructor(vp: Viewport, frustum?: Frustum) {\n this._viewport = vp;\n this.viewFlags = vp.viewFlags;\n this.frustum = frustum ? frustum : vp.getFrustum();\n this.frustumPlanes = FrustumPlanes.fromFrustum(this.frustum);\n }\n\n /** Given a point in world coordinates, determine approximately how many pixels it occupies on screen based on this context's frustum. */\n public getPixelSizeAtPoint(inPoint?: Point3d): number {\n return this.viewport.viewingSpace.getPixelSizeAtPoint(inPoint);\n }\n\n /** The [[Viewport]] associated with this context. */\n public get viewport(): Viewport {\n return this._viewport;\n }\n\n /** The [[RenderSystem]] being used to produce graphics for this context. */\n public get renderSystem(): RenderSystem {\n return this.target.renderSystem;\n }\n\n /** @internal */\n public get target(): RenderTarget { return this.viewport.target; }\n\n /** @internal */\n protected _createGraphicBuilder(options: Omit<ViewportGraphicBuilderOptions, \"viewport\">): GraphicBuilder {\n return this.target.createGraphicBuilder({ ...options, viewport: this.viewport });\n }\n\n /** Create a builder for creating a [[GraphicType.Scene]] [[RenderGraphic]] for rendering within this context's [[Viewport]].\n * @param transform the local-to-world transform in which the builder's geometry is to be defined.\n * @returns A builder for creating a [[GraphicType.Scene]] [[RenderGraphic]] for rendering within this context's [[Viewport]].\n */\n public createSceneGraphicBuilder(transform?: Transform): GraphicBuilder {\n return this._createGraphicBuilder({ type: GraphicType.Scene, placement: transform });\n }\n\n /** Create a graphic from a [[GraphicBranch]]. */\n public createGraphicBranch(branch: GraphicBranch, location: Transform, opts?: GraphicBranchOptions): RenderGraphic {\n return this.target.renderSystem.createGraphicBranch(branch, location, opts);\n }\n\n /** Create a [[RenderGraphic]] which groups a set of graphics into a node in a scene graph, applying to each a transform and optional clip volume and symbology overrides.\n * @param branch Contains the group of graphics and the symbology overrides.\n * @param location the local-to-world transform applied to the grouped graphics.\n * @returns A RenderGraphic suitable for drawing the scene graph node within this context's [[Viewport]].\n * @see [[RenderSystem.createBranch]]\n */\n public createBranch(branch: GraphicBranch, location: Transform): RenderGraphic { return this.createGraphicBranch(branch, location); }\n\n /** Given the size of a logical pixel in meters, convert it to the size of a physical pixel in meters, if [[RenderSystem.dpiAwareLOD]] is `true`.\n * Used when computing LOD for graphics.\n * @internal\n */\n public adjustPixelSizeForLOD(cssPixelSize: number): number {\n return this.viewport.target.adjustPixelSizeForLOD(cssPixelSize);\n }\n}\n\n/** Provides context for an [[InteractiveTool]] to display decorations representing its current state.\n * @see [[InteractiveTool.onDynamicFrame]]\n * @public\n */\nexport class DynamicsContext extends RenderContext {\n private _foreground?: GraphicList;\n private _overlay?: GraphicList;\n\n /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]].\n * These graphics are drawn as [[GraphicType.Scene]].\n * @see [[addOverlay]] to add a graphic to be drawn as an overlay instead.\n */\n public addGraphic(graphic: RenderGraphic): void {\n this.add(graphic, false);\n }\n\n /** Add a graphic to the list of dynamic graphics to be drawn in this context's [[Viewport]].\n * These graphics are drawn as part of the viewport's scene as described by [[GraphicType.Scene]], except\n * that they always draw on top of other graphics as with [[GraphicType.WorldOverlay]].\n * @see [[addGraphic]] to add an ordinary scene graphic instead.\n */\n public addOverlay(graphic: RenderGraphic): void {\n this.add(graphic, true);\n }\n\n /** @internal */\n public add(graphic: RenderGraphic, isOverlay: boolean) {\n const key = isOverlay ? \"_overlay\" : \"_foreground\";\n const list = this[key] ?? (this[key] = []);\n list.push(graphic);\n }\n\n /** @internal */\n public changeDynamics(): void {\n this.viewport.changeDynamics(this._foreground, this._overlay);\n }\n\n /** Create a builder for producing a [[RenderGraphic]] appropriate for rendering within this context's [[Viewport]].\n * @param options Options describing how to create the builder.\n * @returns A builder that produces a [[RenderGraphic]].\n */\n public createGraphic(options: Omit<ViewportGraphicBuilderOptions, \"viewport\">): GraphicBuilder {\n return this._createGraphicBuilder(options);\n }\n}\n\n/** Arguments supplied to [[DecorateContext.create]].\n * @public\n */\nexport interface DecorateContextCreateArgs {\n /** The viewport to be decorated. */\n viewport: ScreenViewport;\n /** The set of decoration graphics to be populated by the context. */\n output: Decorations;\n /** Optional cache. If omitted, one will be created.\n * @internal\n */\n cache?: DecorationsCache;\n}\n\n/** Provides context for a [[ViewportDecorator]] to add [[Decorations]] to be rendered within a [[Viewport]].\n * @public\n * @extensions\n */\nexport class DecorateContext extends RenderContext {\n private readonly _decorations: Decorations;\n private readonly _cache: DecorationsCache;\n private _curCacheableDecorator?: ViewportDecorator;\n\n /** The [[ScreenViewport]] in which this context's [[Decorations]] will be drawn. */\n public override get viewport(): ScreenViewport {\n return super.viewport as ScreenViewport;\n }\n\n /** @internal */\n constructor(vp: ScreenViewport, decorations: Decorations, cache: DecorationsCache) {\n super(vp);\n this._decorations = decorations;\n this._cache = cache;\n }\n\n /** Create a new DecorateContext.\n * @param args Describes the inputs to the context.\n * @note Typically the [[ScreenViewport]] takes care of creating the context for you.\n * @public\n */\n public static create(args: DecorateContextCreateArgs): DecorateContext {\n return new DecorateContext(args.viewport, args.output, args.cache ?? new DecorationsCache());\n }\n\n /** Create a builder for creating a [[RenderGraphic]] of the specified type appropriate for rendering within this context's [[Viewport]].\n * @param type The type of builder to create.\n * @param transform the local-to-world transform in which the builder's geometry is to be defined.\n * @param id If the decoration is to be pickable, a unique identifier to associate with the resultant [[RenderGraphic]].\n * @returns A builder for creating a [[RenderGraphic]] of the specified type appropriate for rendering within this context's [[Viewport]].\n * @see [[IModelConnection.transientIds]] for obtaining an ID for a pickable decoration.\n * @see [[createGraphic]] for more options.\n */\n public createGraphicBuilder(type: GraphicType, transform?: Transform, id?: Id64String): GraphicBuilder {\n return this.createGraphic({ type, placement: transform, pickable: undefined !== id ? { id } : undefined });\n }\n\n /** Create a builder for producing a [[RenderGraphic]] appropriate for rendering within this context's [[Viewport]].\n * @param options Options describing how to create the builder.\n * @returns A builder that produces a [[RenderGraphic]].\n */\n public createGraphic(options: Omit<ViewportGraphicBuilderOptions, \"viewport\">): GraphicBuilder {\n return this._createGraphicBuilder(options);\n }\n\n /** @internal */\n public addFromDecorator(decorator: ViewportDecorator): void {\n assert(undefined === this._curCacheableDecorator);\n try {\n if (decorator.useCachedDecorations) {\n const cached = this._cache.get(decorator);\n if (cached) {\n this.restoreCache(cached);\n return;\n }\n\n this._curCacheableDecorator = decorator;\n }\n\n decorator.decorate(this);\n } finally {\n this._curCacheableDecorator = undefined;\n }\n }\n\n /** Restores decorations onto this context from the specified array of cached decorations. */\n private restoreCache(cachedDecorations: CachedDecoration[]) {\n cachedDecorations.forEach((cachedDecoration) => {\n switch (cachedDecoration.type) {\n case \"graphic\":\n this.addDecoration(cachedDecoration.graphicType, cachedDecoration.graphicOwner);\n break;\n case \"canvas\":\n this.addCanvasDecoration(cachedDecoration.canvasDecoration, cachedDecoration.atFront);\n break;\n case \"html\":\n this.addHtmlDecoration(cachedDecoration.htmlElement);\n break;\n }\n });\n }\n\n private _appendToCache(decoration: CachedDecoration) {\n assert(undefined !== this._curCacheableDecorator);\n this._cache.add(this._curCacheableDecorator, decoration);\n }\n\n /** Calls [[GraphicBuilder.finish]] on the supplied builder to obtain a [[RenderGraphic]], then adds the graphic to the appropriate list of\n * [[Decorations]].\n * @param builder The builder from which to extract the graphic.\n * @note The builder should not be used after calling this method.\n */\n public addDecorationFromBuilder(builder: GraphicBuilder) {\n this.addDecoration(builder.type, builder.finish());\n }\n\n /** Adds a graphic to the set of [[Decorations]] to be drawn in this context's [[ScreenViewport]].\n * @param The type of the graphic, which determines to which list of decorations it is added.\n * @param decoration The decoration graphic to add.\n * @note The type must match the type with which the [[RenderGraphic]]'s [[GraphicBuilder]] was constructed.\n * @see [[DecorateContext.addDecorationFromBuilder]] for a more convenient API.\n */\n public addDecoration(type: GraphicType, decoration: RenderGraphic) {\n if (this._curCacheableDecorator) {\n const graphicOwner = this.target.renderSystem.createGraphicOwner(decoration);\n this._appendToCache({ type: \"graphic\", graphicOwner, graphicType: type });\n decoration = graphicOwner;\n }\n\n switch (type) {\n case GraphicType.Scene:\n if (undefined === this._decorations.normal)\n this._decorations.normal = [];\n this._decorations.normal.push(decoration);\n break;\n\n case GraphicType.WorldDecoration:\n if (!this._decorations.world)\n this._decorations.world = [];\n this._decorations.world.push(decoration);\n break;\n\n case GraphicType.WorldOverlay:\n if (!this._decorations.worldOverlay)\n this._decorations.worldOverlay = [];\n this._decorations.worldOverlay.push(decoration);\n break;\n\n case GraphicType.ViewOverlay:\n if (!this._decorations.viewOverlay)\n this._decorations.viewOverlay = [];\n this._decorations.viewOverlay.push(decoration);\n break;\n\n case GraphicType.ViewBackground:\n this.setViewBackground(decoration);\n break;\n }\n }\n\n /** Add a [[CanvasDecoration]] to be drawn in this context's [[ScreenViewport]]. */\n public addCanvasDecoration(decoration: CanvasDecoration, atFront = false) {\n if (this._curCacheableDecorator)\n this._appendToCache({ type: \"canvas\", canvasDecoration: decoration, atFront });\n\n if (undefined === this._decorations.canvasDecorations)\n this._decorations.canvasDecorations = [];\n\n const list = this._decorations.canvasDecorations;\n if (0 === list.length || true === atFront)\n list.push(decoration);\n else\n list.unshift(decoration);\n }\n\n /** Add an HTMLElement to be drawn as a decoration in this context's [[ScreenViewport]]. */\n public addHtmlDecoration(decoration: HTMLElement) {\n if (this._curCacheableDecorator)\n this._appendToCache({ type: \"html\", htmlElement: decoration });\n\n // an element decoration being added might already be on the decorationDiv, just marked for removal\n if (decoration[ELEMENT_MARKED_FOR_REMOVAL]) {\n decoration[ELEMENT_MARKED_FOR_REMOVAL] = false;\n } else if (decoration.parentElement !== this.viewport.decorationDiv) {\n this.viewport.decorationDiv.appendChild(decoration);\n }\n }\n\n /** @internal */\n public drawStandardGrid(gridOrigin: Point3d, rMatrix: Matrix3d, spacing: XAndY, gridsPerRef: number, _isoGrid: boolean = false, _fixedRepetitions?: Point2d): void {\n const vp = this.viewport;\n\n if (vp.viewingGlobe)\n return;\n\n const color = vp.getContrastToBackgroundColor();\n const planarGrid = this.viewport.target.renderSystem.createPlanarGrid(vp.getFrustum(), { origin: gridOrigin, rMatrix, spacing, gridsPerRef, color });\n if (planarGrid) {\n this.addDecoration(GraphicType.WorldDecoration, planarGrid);\n }\n }\n\n /** Display skyBox graphic that encompasses entire scene and rotates with camera.\n * @see [[RenderSystem.createSkyBox]].\n */\n public setSkyBox(graphic: RenderGraphic) {\n this._decorations.skyBox = graphic;\n }\n\n /** Set the graphic to be displayed behind all other geometry as the background of this context's [[ScreenViewport]]. */\n public setViewBackground(graphic: RenderGraphic) {\n this._decorations.viewBackground = graphic;\n }\n}\n\n/** Context used to create the scene to be drawn in a [[Viewport]]. The scene consists of a set of [[RenderGraphic]]s produced by the\n * [[TileTree]]s visible within the viewport. Creating the scene may result in the enqueueing of requests for [[Tile]] content which\n * should be displayed in the viewport but are not yet loaded.\n * @public\n */\nexport class SceneContext extends RenderContext {\n private _missingChildTiles = false;\n /** The graphics comprising the scene. */\n public readonly scene = new Scene();\n\n /** @internal */\n public readonly missingTiles = new Set<Tile>();\n\n /** @internal */\n public markChildrenLoading(): void {\n this._missingChildTiles = true;\n }\n\n /** @internal */\n public get hasMissingTiles(): boolean {\n return this._missingChildTiles || this.missingTiles.size > 0;\n }\n\n private _viewingSpace?: ViewingSpace;\n private _graphicType: TileGraphicType = TileGraphicType.Scene;\n\n public constructor(vp: Viewport, frustum?: Frustum) {\n super(vp, frustum);\n }\n\n /** The viewed volume containing the scene. */\n public get viewingSpace(): ViewingSpace {\n return undefined !== this._viewingSpace ? this._viewingSpace : this.viewport.viewingSpace;\n }\n\n /** @internal */\n public get graphicType() { return this._graphicType; }\n\n /** Add the specified graphic to the scene. */\n public outputGraphic(graphic: RenderGraphic): void {\n switch (this._graphicType) {\n case TileGraphicType.BackgroundMap:\n this.backgroundGraphics.push(graphic);\n break;\n case TileGraphicType.Overlay:\n this.overlayGraphics.push(graphic);\n break;\n default:\n this.graphics.push(graphic);\n break;\n }\n }\n\n /** Indicate that the specified tile is desired for the scene but is not yet ready. A request to load its contents will later be enqueued. */\n public insertMissingTile(tile: Tile): void {\n switch (tile.loadStatus) {\n case TileLoadStatus.NotLoaded:\n case TileLoadStatus.Queued:\n case TileLoadStatus.Loading:\n this.missingTiles.add(tile);\n break;\n }\n }\n\n /** @internal */\n public requestMissingTiles(): void {\n IModelApp.tileAdmin.requestTiles(this.viewport, this.missingTiles);\n }\n\n /** @internal */\n public addPlanarClassifier(classifiedModelId: Id64String, classifierTree?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState): RenderPlanarClassifier | undefined {\n // Target may have the classifier from a previous frame; if not we must create one.\n let classifier = this.viewport.target.getPlanarClassifier(classifiedModelId);\n if (undefined === classifier)\n classifier = this.viewport.target.createPlanarClassifier(classifierTree?.activeClassifier);\n\n // Either way, we need to collect the graphics to draw for this frame, and record that we did so.\n if (undefined !== classifier) {\n this.planarClassifiers.set(classifiedModelId, classifier);\n classifier.setSource(classifierTree, planarClipMask);\n }\n\n return classifier;\n }\n\n /** @internal */\n public getPlanarClassifierForModel(modelId: Id64String) {\n return this.planarClassifiers.get(modelId);\n }\n\n /** @internal */\n public addBackgroundDrapedModel(drapedTreeRef: TileTreeReference, _heightRange: Range1d | undefined): RenderTextureDrape | undefined {\n const drapedTree = drapedTreeRef.treeOwner.tileTree;\n if (undefined === drapedTree)\n return undefined;\n\n const id = drapedTree.modelId;\n let drape = this.getTextureDrapeForModel(id);\n if (undefined !== drape)\n return drape;\n\n drape = this.viewport.target.getTextureDrape(id);\n if (undefined === drape && this.viewport.backgroundDrapeMap)\n drape = this.viewport.target.renderSystem.createBackgroundMapDrape(drapedTreeRef, this.viewport.backgroundDrapeMap);\n\n if (undefined !== drape)\n this.textureDrapes.set(id, drape);\n\n return drape;\n }\n\n /** @internal */\n public getTextureDrapeForModel(modelId: Id64String) {\n return this.textureDrapes.get(modelId);\n }\n\n /** @internal */\n public withGraphicType(type: TileGraphicType, func: () => void): void {\n const prevType = this._graphicType;\n this._graphicType = type;\n\n func();\n\n this._graphicType = prevType;\n }\n\n /** The graphics in the scene that will be drawn with depth. */\n public get graphics() { return this.scene.foreground; }\n /** The graphics that will be drawn behind everything else in the scene. */\n public get backgroundGraphics() { return this.scene.background; }\n /** The graphics that will be drawn in front of everything else in the scene. */\n public get overlayGraphics() { return this.scene.overlay; }\n /** @internal */\n public get planarClassifiers() { return this.scene.planarClassifiers; }\n /** @internal */\n public get textureDrapes() { return this.scene.textureDrapes; }\n\n /** @internal */\n public setVolumeClassifier(classifier: ActiveSpatialClassifier, modelId: Id64String): void {\n this.scene.volumeClassifier = { classifier, modelId };\n }\n}\n"]}
@@ -6,6 +6,7 @@ import { Batch } from "./Graphic";
6
6
  import { UniformHandle } from "./UniformHandle";
7
7
  import { Target } from "./Target";
8
8
  import { FeatureMode } from "./TechniqueFlags";
9
+ import { FeatureAppearanceProvider } from "@itwin/core-common";
9
10
  /** Maintains uniform variable state associated with the Batch currently being drawn by a Target.
10
11
  * @internal
11
12
  */
@@ -21,7 +22,9 @@ export declare class BatchUniforms {
21
22
  private _scratchBytes;
22
23
  private _scratchUint32;
23
24
  constructor(target: Target, batchState: BatchState);
24
- setCurrentBatch(batch: Batch | undefined): void;
25
+ clearCurrentBatch(): void;
26
+ setCurrentBatch(batch: Batch, provider: FeatureAppearanceProvider): void;
27
+ private _setCurrentBatch;
25
28
  resetBatchState(): void;
26
29
  get featureMode(): FeatureMode;
27
30
  bindNumThematicSensors(uniform: UniformHandle): void;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchUniforms.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/BatchUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C;;GAEG;AACH,qBAAa,aAAa;IACxB,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,YAAY,CAAoB;IACjC,OAAO,SAAK;IAEnB,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAuB;IAEvC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAA8C;gBAEjD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAKlD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI;IAoC/C,eAAe,IAAI,IAAI;IAI9B,IAAW,WAAW,IAAI,WAAW,CAA8B;IAE5D,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKpD,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKxD,IAAW,gBAAgB,IAAI,OAAO,CAGrC;IAEM,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAM5C,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASjD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMrC,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK3C,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAUvD,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKzC,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAmBtD,+BAA+B,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAgB7D,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,GAAG,IAAI;CAW1F"}
1
+ {"version":3,"file":"BatchUniforms.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/BatchUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAM/D;;GAEG;AACH,qBAAa,aAAa;IACxB,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,YAAY,CAAoB;IACjC,OAAO,SAAK;IAEnB,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAuB;IAEvC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAA8C;gBAEjD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAKlD,iBAAiB,IAAI,IAAI;IAIzB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAI/E,OAAO,CAAC,gBAAgB;IAuCjB,eAAe,IAAI,IAAI;IAI9B,IAAW,WAAW,IAAI,WAAW,CAA8B;IAE5D,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKpD,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKxD,IAAW,gBAAgB,IAAI,OAAO,CAGrC;IAEM,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAM5C,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASjD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMrC,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK3C,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAUvD,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKzC,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAmBtD,+BAA+B,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAgB7D,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,GAAG,IAAI;CAW1F"}
@@ -9,6 +9,7 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.BatchUniforms = void 0;
11
11
  const Sync_1 = require("./Sync");
12
+ const core_bentley_1 = require("@itwin/core-bentley");
12
13
  const scratchRgb = new Float32Array(3);
13
14
  const noOverrideRgb = new Float32Array([-1.0, -1.0, -1.0]);
14
15
  /** Maintains uniform variable state associated with the Batch currently being drawn by a Target.
@@ -29,19 +30,29 @@ class BatchUniforms {
29
30
  this.state = batchState;
30
31
  this._target = target;
31
32
  }
32
- setCurrentBatch(batch) {
33
+ clearCurrentBatch() {
34
+ this._setCurrentBatch(undefined, undefined);
35
+ }
36
+ setCurrentBatch(batch, provider) {
37
+ this._setCurrentBatch(batch, provider);
38
+ }
39
+ _setCurrentBatch(batch, provider) {
33
40
  (0, Sync_1.desync)(this);
34
- if (undefined !== batch)
41
+ let overrides;
42
+ if (undefined !== batch) {
43
+ (0, core_bentley_1.assert)(undefined !== provider);
44
+ overrides = batch.getOverrides(this._target, provider);
35
45
  this.state.push(batch, false);
36
- else
46
+ }
47
+ else {
37
48
  this.state.pop();
49
+ }
38
50
  const batchId = this.state.currentBatchId;
39
51
  this._scratchUint32[0] = batchId;
40
52
  this._batchId[0] = this._scratchBytes[0];
41
53
  this._batchId[1] = this._scratchBytes[1];
42
54
  this._batchId[2] = this._scratchBytes[2];
43
55
  this._batchId[3] = this._scratchBytes[3];
44
- const overrides = undefined !== batch ? batch.getOverrides(this._target) : undefined;
45
56
  this._overrides = (undefined !== overrides && overrides.anyOverridden) ? overrides : undefined;
46
57
  let sensors;
47
58
  if (undefined !== batch && this._target.wantThematicSensors) {
@@ -1 +1 @@
1
- {"version":3,"file":"BatchUniforms.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/BatchUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { BatchState } from \"./BatchState\";\nimport { FeatureOverrides } from \"./FeatureOverrides\";\nimport { Batch } from \"./Graphic\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { desync, sync } from \"./Sync\";\nimport { Target } from \"./Target\";\nimport { FeatureMode } from \"./TechniqueFlags\";\nimport { ThematicSensors } from \"./ThematicSensors\";\nimport { Contours } from \"./Contours\";\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\n\nconst scratchRgb = new Float32Array(3);\nconst noOverrideRgb = new Float32Array([-1.0, -1.0, -1.0]);\n\n/** Maintains uniform variable state associated with the Batch currently being drawn by a Target.\n * @internal\n */\nexport class BatchUniforms {\n public readonly state: BatchState;\n private readonly _target: Target;\n private _featureMode = FeatureMode.None;\n public syncKey = 0;\n\n private _overrides?: FeatureOverrides;\n private _sensors?: ThematicSensors;\n private _contours?: Contours;\n private _batchId = new Float32Array(4);\n\n private _scratchBytes = new Uint8Array(4);\n private _scratchUint32 = new Uint32Array(this._scratchBytes.buffer);\n\n public constructor(target: Target, batchState: BatchState) {\n this.state = batchState;\n this._target = target;\n }\n\n public setCurrentBatch(batch: Batch | undefined): void {\n desync(this);\n\n if (undefined !== batch)\n this.state.push(batch, false);\n else\n this.state.pop();\n\n const batchId = this.state.currentBatchId;\n this._scratchUint32[0] = batchId;\n this._batchId[0] = this._scratchBytes[0];\n this._batchId[1] = this._scratchBytes[1];\n this._batchId[2] = this._scratchBytes[2];\n this._batchId[3] = this._scratchBytes[3];\n\n const overrides = undefined !== batch ? batch.getOverrides(this._target) : undefined;\n this._overrides = (undefined !== overrides && overrides.anyOverridden) ? overrides : undefined;\n\n let sensors: ThematicSensors | undefined;\n if (undefined !== batch && this._target.wantThematicSensors) {\n const distanceCutoff = this._target.plan.thematic!.sensorSettings.distanceCutoff;\n if (distanceCutoff > 0) // if we have a distance cutoff, we want to create per-batch sensor textures\n sensors = batch.getThematicSensors(this._target);\n }\n this._sensors = sensors;\n\n if (undefined !== this._overrides)\n this._featureMode = FeatureMode.Overrides;\n else if (0 !== batchId)\n this._featureMode = FeatureMode.Pick;\n else\n this._featureMode = FeatureMode.None;\n\n this._contours = undefined !== batch && this.wantContourLines ? batch.getContours(this._target) : undefined;\n }\n\n public resetBatchState(): void {\n this.state.reset();\n }\n\n public get featureMode(): FeatureMode { return this._featureMode; }\n\n public bindNumThematicSensors(uniform: UniformHandle): void {\n if (undefined !== this._sensors)\n this._sensors.bindNumSensors(uniform);\n }\n\n public bindThematicSensors(uniform: UniformHandle): void {\n if (undefined !== this._sensors)\n this._sensors.bindTexture(uniform);\n }\n\n public get wantContourLines(): boolean {\n const contours = this._target.currentBranch.contourLine;\n return undefined !== contours && contours.displayContours && contours.groups.length > 0;\n }\n\n public bindContourLUT(uniform: UniformHandle): void {\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\n if (undefined !== this._contours)\n this._contours.bindContourLUT(uniform);\n }\n\n public bindContourLUTWidth(uniform: UniformHandle): void {\n if (!sync(this, uniform)) {\n if (undefined === this._contours)\n uniform.setUniform1ui(0);\n else\n this._contours.bindContourLUTWidth(uniform);\n }\n }\n\n public bindLUT(uniform: UniformHandle): void {\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\n if (undefined !== this._overrides)\n this._overrides.bindLUT(uniform);\n }\n\n public bindLUTParams(uniform: UniformHandle): void {\n if (undefined !== this._overrides && !sync(this, uniform))\n this._overrides.bindLUTParams(uniform);\n }\n\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\n if (sync(this, uniform))\n return;\n\n if (undefined !== this._overrides)\n this._overrides.bindUniformSymbologyFlags(uniform);\n else\n uniform.setUniform1f(0);\n }\n\n public bindBatchId(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform4fv(this._batchId);\n }\n\n public bindUniformColorOverride(uniform: UniformHandle): void {\n if (sync(this, uniform))\n return;\n\n if (undefined !== this._overrides) {\n const uo = this._overrides.getUniformOverrides();\n if (uo[0] & OvrFlags.Rgb) {\n scratchRgb[0] = uo[4] / 255.0;\n scratchRgb[1] = uo[5] / 255.0;\n scratchRgb[2] = uo[6] / 255.0;\n uniform.setUniform3fv(scratchRgb);\n } else {\n uniform.setUniform3fv(noOverrideRgb);\n }\n } else {\n uniform.setUniform3fv(noOverrideRgb);\n }\n }\n\n public bindUniformTransparencyOverride(uniform: UniformHandle): void {\n if (sync(this, uniform))\n return;\n\n if (undefined !== this._overrides) {\n const uo = this._overrides.getUniformOverrides();\n if (uo[0] & OvrFlags.Alpha) {\n uniform.setUniform1f(uo[7]/255.0);\n } else {\n uniform.setUniform1f(-1.0);\n }\n } else {\n uniform.setUniform1f(-1.0);\n }\n }\n\n public bindUniformNonLocatable(uniform: UniformHandle, ignoreNonLocatable: boolean): void {\n if (sync(this, uniform))\n return;\n\n let nonLocatable = 0;\n if (!ignoreNonLocatable && undefined !== this._overrides) {\n const uo = this._overrides.getUniformOverrides();\n nonLocatable = (uo[0] & OvrFlags.NonLocatable) ? 1 : 0;\n }\n uniform.setUniform1i(nonLocatable);\n }\n}\n"]}
1
+ {"version":3,"file":"BatchUniforms.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/BatchUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { BatchState } from \"./BatchState\";\nimport { FeatureOverrides } from \"./FeatureOverrides\";\nimport { Batch } from \"./Graphic\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { desync, sync } from \"./Sync\";\nimport { Target } from \"./Target\";\nimport { FeatureMode } from \"./TechniqueFlags\";\nimport { ThematicSensors } from \"./ThematicSensors\";\nimport { Contours } from \"./Contours\";\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\nimport { FeatureAppearanceProvider } from \"@itwin/core-common\";\nimport { assert } from \"@itwin/core-bentley\";\n\nconst scratchRgb = new Float32Array(3);\nconst noOverrideRgb = new Float32Array([-1.0, -1.0, -1.0]);\n\n/** Maintains uniform variable state associated with the Batch currently being drawn by a Target.\n * @internal\n */\nexport class BatchUniforms {\n public readonly state: BatchState;\n private readonly _target: Target;\n private _featureMode = FeatureMode.None;\n public syncKey = 0;\n\n private _overrides?: FeatureOverrides;\n private _sensors?: ThematicSensors;\n private _contours?: Contours;\n private _batchId = new Float32Array(4);\n\n private _scratchBytes = new Uint8Array(4);\n private _scratchUint32 = new Uint32Array(this._scratchBytes.buffer);\n\n public constructor(target: Target, batchState: BatchState) {\n this.state = batchState;\n this._target = target;\n }\n\n public clearCurrentBatch(): void {\n this._setCurrentBatch(undefined, undefined);\n }\n\n public setCurrentBatch(batch: Batch, provider: FeatureAppearanceProvider): void {\n this._setCurrentBatch(batch, provider);\n }\n\n private _setCurrentBatch(batch: Batch | undefined, provider: FeatureAppearanceProvider | undefined): void {\n desync(this);\n\n let overrides;\n if (undefined !== batch) {\n assert(undefined !== provider);\n overrides = batch.getOverrides(this._target, provider);\n this.state.push(batch, false);\n } else {\n this.state.pop();\n }\n\n const batchId = this.state.currentBatchId;\n this._scratchUint32[0] = batchId;\n this._batchId[0] = this._scratchBytes[0];\n this._batchId[1] = this._scratchBytes[1];\n this._batchId[2] = this._scratchBytes[2];\n this._batchId[3] = this._scratchBytes[3];\n\n this._overrides = (undefined !== overrides && overrides.anyOverridden) ? overrides : undefined;\n\n let sensors: ThematicSensors | undefined;\n if (undefined !== batch && this._target.wantThematicSensors) {\n const distanceCutoff = this._target.plan.thematic!.sensorSettings.distanceCutoff;\n if (distanceCutoff > 0) // if we have a distance cutoff, we want to create per-batch sensor textures\n sensors = batch.getThematicSensors(this._target);\n }\n this._sensors = sensors;\n\n if (undefined !== this._overrides)\n this._featureMode = FeatureMode.Overrides;\n else if (0 !== batchId)\n this._featureMode = FeatureMode.Pick;\n else\n this._featureMode = FeatureMode.None;\n\n this._contours = undefined !== batch && this.wantContourLines ? batch.getContours(this._target) : undefined;\n }\n\n public resetBatchState(): void {\n this.state.reset();\n }\n\n public get featureMode(): FeatureMode { return this._featureMode; }\n\n public bindNumThematicSensors(uniform: UniformHandle): void {\n if (undefined !== this._sensors)\n this._sensors.bindNumSensors(uniform);\n }\n\n public bindThematicSensors(uniform: UniformHandle): void {\n if (undefined !== this._sensors)\n this._sensors.bindTexture(uniform);\n }\n\n public get wantContourLines(): boolean {\n const contours = this._target.currentBranch.contourLine;\n return undefined !== contours && contours.displayContours && contours.groups.length > 0;\n }\n\n public bindContourLUT(uniform: UniformHandle): void {\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\n if (undefined !== this._contours)\n this._contours.bindContourLUT(uniform);\n }\n\n public bindContourLUTWidth(uniform: UniformHandle): void {\n if (!sync(this, uniform)) {\n if (undefined === this._contours)\n uniform.setUniform1ui(0);\n else\n this._contours.bindContourLUTWidth(uniform);\n }\n }\n\n public bindLUT(uniform: UniformHandle): void {\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\n if (undefined !== this._overrides)\n this._overrides.bindLUT(uniform);\n }\n\n public bindLUTParams(uniform: UniformHandle): void {\n if (undefined !== this._overrides && !sync(this, uniform))\n this._overrides.bindLUTParams(uniform);\n }\n\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\n if (sync(this, uniform))\n return;\n\n if (undefined !== this._overrides)\n this._overrides.bindUniformSymbologyFlags(uniform);\n else\n uniform.setUniform1f(0);\n }\n\n public bindBatchId(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform4fv(this._batchId);\n }\n\n public bindUniformColorOverride(uniform: UniformHandle): void {\n if (sync(this, uniform))\n return;\n\n if (undefined !== this._overrides) {\n const uo = this._overrides.getUniformOverrides();\n if (uo[0] & OvrFlags.Rgb) {\n scratchRgb[0] = uo[4] / 255.0;\n scratchRgb[1] = uo[5] / 255.0;\n scratchRgb[2] = uo[6] / 255.0;\n uniform.setUniform3fv(scratchRgb);\n } else {\n uniform.setUniform3fv(noOverrideRgb);\n }\n } else {\n uniform.setUniform3fv(noOverrideRgb);\n }\n }\n\n public bindUniformTransparencyOverride(uniform: UniformHandle): void {\n if (sync(this, uniform))\n return;\n\n if (undefined !== this._overrides) {\n const uo = this._overrides.getUniformOverrides();\n if (uo[0] & OvrFlags.Alpha) {\n uniform.setUniform1f(uo[7]/255.0);\n } else {\n uniform.setUniform1f(-1.0);\n }\n } else {\n uniform.setUniform1f(-1.0);\n }\n }\n\n public bindUniformNonLocatable(uniform: UniformHandle, ignoreNonLocatable: boolean): void {\n if (sync(this, uniform))\n return;\n\n let nonLocatable = 0;\n if (!ignoreNonLocatable && undefined !== this._overrides) {\n const uo = this._overrides.getUniformOverrides();\n nonLocatable = (uo[0] & OvrFlags.NonLocatable) ? 1 : 0;\n }\n uniform.setUniform1i(nonLocatable);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module WebGL
3
3
  */
4
- import { PackedFeature, RenderFeatureTable } from "@itwin/core-common";
4
+ import { FeatureAppearanceProvider, PackedFeature, RenderFeatureTable } from "@itwin/core-common";
5
5
  import { WebGLDisposable } from "./Disposable";
6
6
  import { UniformHandle } from "./UniformHandle";
7
7
  import { Hilites, Target } from "./Target";
@@ -49,8 +49,8 @@ export declare class FeatureOverrides implements WebGLDisposable {
49
49
  static createFromTarget(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined): FeatureOverrides;
50
50
  get isDisposed(): boolean;
51
51
  [Symbol.dispose](): void;
52
- initFromMap(map: RenderFeatureTable): void;
53
- update(features: RenderFeatureTable): void;
52
+ initFromMap(map: RenderFeatureTable, provider: FeatureAppearanceProvider): void;
53
+ update(features: RenderFeatureTable, provider: FeatureAppearanceProvider): void;
54
54
  bindLUTParams(uniform: UniformHandle): void;
55
55
  bindLUT(uniform: UniformHandle): void;
56
56
  bindUniformSymbologyFlags(uniform: UniformHandle): void;
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureOverrides.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAKnE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAQ3G;AAED,gBAAgB;AAChB,MAAM,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC;AAIjD,gBAAgB;AAChB,qBAAa,gBAAiB,YAAW,eAAe;IACtD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,IAAI,CAAC,CAAkB;IAC/B,OAAO,CAAC,6BAA6B,CAAC,CAA6B;IACnE,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,mBAAmB,CAAoB;IAC/C,OAAO,CAAC,2BAA2B,CAAoB;IACvD,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,sBAAsB,CAAqC;IACnE,OAAO,CAAC,QAAQ,CAAC,CAA0B;IAE3C,IAAW,aAAa,YAAkC;IAC1D,IAAW,SAAS,YAA8B;IAClD,IAAW,cAAc,YAAmC;IAC5D,IAAW,6BAA6B,YAAkD;IAC1F,IAAW,SAAS,YAA8B;IAClD,IAAW,UAAU,YAA+B;IAEpD,iBAAiB;IACjB,IAAW,OAAO,IAAI,UAAU,GAAG,SAAS,CAAiC;IAC7E,IAAW,UAAU,IAAI,MAAM,CAA8D;IAC7F,IAAW,SAAS,YAAmE;IAEvF,OAAO,CAAC,2BAA2B;IAuB5B,mBAAmB,IAAI,UAAU;IAOxC,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,gBAAgB;IAiIxB,OAAO,CAAC,uBAAuB;IAgD/B,OAAO,CAAC,aAAa;IAuCrB,OAAO;WAMO,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,GAAG,SAAS;IAIlH,IAAW,UAAU,IAAI,OAAO,CAAoC;IAE7D,CAAC,MAAM,CAAC,OAAO,CAAC;IAQhB,WAAW,CAAC,GAAG,EAAE,kBAAkB;IAenC,MAAM,CAAC,QAAQ,EAAE,kBAAkB;IA8BnC,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI3C,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKrC,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;CAG/D"}
1
+ {"version":3,"file":"FeatureOverrides.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAKnE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAQ3G;AAED,gBAAgB;AAChB,MAAM,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC;AAIjD,gBAAgB;AAChB,qBAAa,gBAAiB,YAAW,eAAe;IACtD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,IAAI,CAAC,CAAkB;IAC/B,OAAO,CAAC,6BAA6B,CAAC,CAA6B;IACnE,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,mBAAmB,CAAoB;IAC/C,OAAO,CAAC,2BAA2B,CAAoB;IACvD,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,sBAAsB,CAAqC;IACnE,OAAO,CAAC,QAAQ,CAAC,CAA0B;IAE3C,IAAW,aAAa,YAAkC;IAC1D,IAAW,SAAS,YAA8B;IAClD,IAAW,cAAc,YAAmC;IAC5D,IAAW,6BAA6B,YAAkD;IAC1F,IAAW,SAAS,YAA8B;IAClD,IAAW,UAAU,YAA+B;IAEpD,iBAAiB;IACjB,IAAW,OAAO,IAAI,UAAU,GAAG,SAAS,CAAiC;IAC7E,IAAW,UAAU,IAAI,MAAM,CAA8D;IAC7F,IAAW,SAAS,YAAmE;IAEvF,OAAO,CAAC,2BAA2B;IAuB5B,mBAAmB,IAAI,UAAU;IAOxC,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,gBAAgB;IAyIxB,OAAO,CAAC,uBAAuB;IAgD/B,OAAO,CAAC,aAAa;IAuCrB,OAAO;WAMO,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,GAAG,SAAS;IAIlH,IAAW,UAAU,IAAI,OAAO,CAAoC;IAE7D,CAAC,MAAM,CAAC,OAAO,CAAC;IAQhB,WAAW,CAAC,GAAG,EAAE,kBAAkB,EAAE,QAAQ,EAAE,yBAAyB;IAexE,MAAM,CAAC,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,yBAAyB;IA+BxE,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI3C,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKrC,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;CAG/D"}
@@ -78,7 +78,7 @@ class FeatureOverrides {
78
78
  (0, core_bentley_1.assert)(undefined !== this._lut.dataBytes);
79
79
  return this._lut.dataBytes;
80
80
  }
81
- _initialize(map, ovrs, pickExcludes, hilite, flashed) {
81
+ _initialize(provider, map, ovrs, pickExcludes, hilite, flashed) {
82
82
  const nFeatures = map.numFeatures;
83
83
  const dims = (0, VertexTable_1.computeDimensions)(nFeatures, 3, 0, System_1.System.instance.maxTextureSize);
84
84
  const width = dims.width;
@@ -88,17 +88,17 @@ class FeatureOverrides {
88
88
  this._lutParams[1] = height;
89
89
  const data = new Uint8Array(width * height * 4);
90
90
  const creator = new Texture_1.Texture2DDataUpdater(data);
91
- this.buildLookupTable(creator, map, ovrs, pickExcludes, flashed, hilite);
91
+ this.buildLookupTable(provider, creator, map, ovrs, pickExcludes, flashed, hilite);
92
92
  return Texture_1.TextureHandle.createForData(width, height, data, true, GL_1.GL.Texture.WrapMode.ClampToEdge);
93
93
  }
94
- _update(map, lut, pickExcludes, flashed, hilites, ovrs) {
94
+ _update(provider, map, lut, pickExcludes, flashed, hilites, ovrs) {
95
95
  const updater = new Texture_1.Texture2DDataUpdater(lut.dataBytes);
96
96
  if (undefined === ovrs) {
97
97
  this.updateFlashedAndHilited(updater, map, pickExcludes, flashed, hilites);
98
98
  }
99
99
  else {
100
100
  (0, core_bentley_1.assert)(undefined !== hilites);
101
- this.buildLookupTable(updater, map, ovrs, pickExcludes, flashed, hilites);
101
+ this.buildLookupTable(provider, updater, map, ovrs, pickExcludes, flashed, hilites);
102
102
  }
103
103
  lut.update(updater);
104
104
  }
@@ -121,7 +121,7 @@ class FeatureOverrides {
121
121
  }
122
122
  return curFlags;
123
123
  }
124
- buildLookupTable(data, map, ovr, pickExclude, flashedIdParts, hilites) {
124
+ buildLookupTable(provider, data, map, ovr, pickExclude, flashedIdParts, hilites) {
125
125
  const allowHilite = true !== this._options.noHilite;
126
126
  const allowFlash = true !== this._options.noFlash;
127
127
  const allowEmphasis = true !== this._options.noEmphasis;
@@ -149,7 +149,7 @@ class FeatureOverrides {
149
149
  prevModelId.upper = feature.modelId.upper;
150
150
  isModelHilited = allowHilite && hilites.models.hasPair(feature.modelId);
151
151
  }
152
- const app = this.target.currentBranch.getFeatureAppearance(ovr, feature.elementId.lower, feature.elementId.upper, feature.subCategoryId.lower, feature.subCategoryId.upper, feature.geometryClass, feature.modelId.lower, feature.modelId.upper, map.type, feature.animationNodeId);
152
+ const app = provider.getFeatureAppearance(ovr, feature.elementId.lower, feature.elementId.upper, feature.subCategoryId.lower, feature.subCategoryId.upper, feature.geometryClass, feature.modelId.lower, feature.modelId.upper, map.type, feature.animationNodeId);
153
153
  // NB: If the appearance is fully transparent, then:
154
154
  // - For normal ("primary") models, getAppearance() returns undefined.
155
155
  // - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.
@@ -309,19 +309,19 @@ class FeatureOverrides {
309
309
  this._cleanup = undefined;
310
310
  }
311
311
  }
312
- initFromMap(map) {
312
+ initFromMap(map, provider) {
313
313
  const nFeatures = map.numFeatures;
314
314
  (0, core_bentley_1.assert)(0 < nFeatures);
315
315
  this._lut = (0, core_bentley_1.dispose)(this._lut);
316
316
  const ovrs = this.target.currentFeatureSymbologyOverrides;
317
317
  this._mostRecentSymbologyOverrides = ovrs;
318
318
  const hilite = this.target.hilites;
319
- this._lut = this._initialize(map, ovrs, this.target.pickExclusions, hilite, this.target.flashed);
319
+ this._lut = this._initialize(provider, map, ovrs, this.target.pickExclusions, hilite, this.target.flashed);
320
320
  this._lastFlashId = core_bentley_1.Id64.invalid;
321
321
  this._hiliteSyncObserver = {};
322
322
  this._pickExclusionsSyncObserver = {};
323
323
  }
324
- update(features) {
324
+ update(features, provider) {
325
325
  let ovrs = this.target.currentFeatureSymbologyOverrides;
326
326
  const ovrsUpdated = ovrs !== this._mostRecentSymbologyOverrides;
327
327
  if (ovrsUpdated)
@@ -335,7 +335,7 @@ class FeatureOverrides {
335
335
  if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId || pickExcludesUpdated) {
336
336
  // _lut can be undefined if context was lost, (gl.createTexture returns null)
337
337
  if (this._lut) {
338
- this._update(features, this._lut, undefined !== ovrs || pickExcludesUpdated ? this.target.pickExclusions : undefined, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);
338
+ this._update(provider, features, this._lut, undefined !== ovrs || pickExcludesUpdated ? this.target.pickExclusions : undefined, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);
339
339
  }
340
340
  this._lastFlashId = flashedId;
341
341
  }