@itwin/core-frontend 5.2.0-dev.21 → 5.2.0-dev.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/PlanarClipMaskState.d.ts +3 -0
- package/lib/cjs/PlanarClipMaskState.d.ts.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +5 -1
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts +4 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js +15 -4
- package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js +10 -10
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.js +7 -7
- package/lib/cjs/internal/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts +1 -0
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js +19 -3
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js +3 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +2 -2
- package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
- package/lib/cjs/internal/render/webgl/VisibleTileFeatures.js +1 -1
- package/lib/cjs/internal/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.d.ts +3 -0
- package/lib/esm/PlanarClipMaskState.d.ts.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +5 -1
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.d.ts +4 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js +15 -4
- package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts +3 -3
- package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.js +10 -10
- package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.d.ts +3 -3
- package/lib/esm/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.js +7 -7
- package/lib/esm/internal/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts +1 -0
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.js +19 -3
- package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js +3 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +2 -2
- package/lib/esm/internal/render/webgl/Target.js.map +1 -1
- package/lib/esm/internal/render/webgl/VisibleTileFeatures.js +1 -1
- package/lib/esm/internal/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/package.json +20 -20
|
@@ -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;
|
|
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"}
|
|
@@ -17,6 +17,7 @@ export class PlanarClipMaskState {
|
|
|
17
17
|
_tileTreeRefs;
|
|
18
18
|
_allLoaded = false;
|
|
19
19
|
_usingViewportOverrides = false;
|
|
20
|
+
_overridesModelVisibility = false;
|
|
20
21
|
_maskRange = Range3d.createNull();
|
|
21
22
|
constructor(settings) {
|
|
22
23
|
this.settings = settings;
|
|
@@ -29,6 +30,8 @@ export class PlanarClipMaskState {
|
|
|
29
30
|
}
|
|
30
31
|
get usingViewportOverrides() { return this._usingViewportOverrides; }
|
|
31
32
|
;
|
|
33
|
+
/** @internal */
|
|
34
|
+
get overridesModelVisibility() { return this._overridesModelVisibility; }
|
|
32
35
|
discloseTileTrees(trees) {
|
|
33
36
|
if (this._tileTreeRefs)
|
|
34
37
|
this._tileTreeRefs.forEach((treeRef) => treeRef.discloseTileTrees(trees));
|
|
@@ -64,7 +67,7 @@ export class PlanarClipMaskState {
|
|
|
64
67
|
}
|
|
65
68
|
// Returns any potential FeatureSymbology overrides for drawing the planar clip mask.
|
|
66
69
|
getPlanarClipMaskSymbologyOverrides(context, featureSymbologySource) {
|
|
67
|
-
this._usingViewportOverrides = false;
|
|
70
|
+
this._usingViewportOverrides = this._overridesModelVisibility = false;
|
|
68
71
|
// 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).
|
|
69
72
|
const overrideModels = context.viewport.view.isSpatialView() ? context.viewport.view.getModelsNotInMask(this.settings.modelIds, PlanarClipMaskMode.Priority === this.settings.mode) : undefined;
|
|
70
73
|
const noSubCategoryOrElementIds = !this.settings.subCategoryOrElementIds;
|
|
@@ -74,6 +77,7 @@ export class PlanarClipMaskState {
|
|
|
74
77
|
const viewport = overrideModels && ovrBasedOnContext ? context.viewport : undefined;
|
|
75
78
|
const overrides = FeatureSymbology.Overrides.withSource(featureSymbologySource, viewport);
|
|
76
79
|
if (overrideModels) {
|
|
80
|
+
this._overridesModelVisibility = true;
|
|
77
81
|
// overrideModels is used for batched models. For those, we need to create model overrides to turn off models that are
|
|
78
82
|
// not wanted in the mask (using transparency) no matter what mask mode is being used.
|
|
79
83
|
const appOff = FeatureAppearance.fromTransparency(1.0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarClipMaskState.js","sourceRoot":"","sources":["../../src/PlanarClipMaskState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { FeatureAppearance, PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskProps, PlanarClipMaskSettings } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\r\nimport { DisclosedTileTreeSet, TileTreeReference } from \"./tile/internal\";\r\nimport { SceneContext } from \"./ViewContext\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\n\r\n/** The State of Planar Clip Mask applied to a reality model or background map.\r\n * Handles loading models and their associated tiles for models that are used by masks but may not be otherwise loaded or displayed.\r\n * @beta\r\n */\r\nexport class PlanarClipMaskState {\r\n public readonly settings: PlanarClipMaskSettings;\r\n private _tileTreeRefs?: TileTreeReference[];\r\n private _allLoaded = false;\r\n private _usingViewportOverrides = false;\r\n private _maskRange: Range3d = Range3d.createNull();\r\n\r\n private constructor(settings: PlanarClipMaskSettings) {\r\n this.settings = settings;\r\n }\r\n\r\n public static create(settings: PlanarClipMaskSettings): PlanarClipMaskState {\r\n return new PlanarClipMaskState(settings);\r\n }\r\n\r\n public static fromJSON(props: PlanarClipMaskProps): PlanarClipMaskState {\r\n return this.create(PlanarClipMaskSettings.fromJSON(props));\r\n }\r\n\r\n public get usingViewportOverrides(): boolean { return this._usingViewportOverrides; };\r\n\r\n public discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n if (this._tileTreeRefs)\r\n this._tileTreeRefs.forEach((treeRef) => treeRef.discloseTileTrees(trees));\r\n }\r\n\r\n // Returns the TileTreeReferences for the models that need to be drawn to create the planar clip mask, and extend the maskRange if needed.\r\n public getTileTrees(context: SceneContext, classifiedModelId: Id64String, maskRange: Range3d): TileTreeReference[] | undefined {\r\n if (this.settings.mode === PlanarClipMaskMode.Priority) {\r\n // For priority mode we simply want refs for all viewed models if the priority is higher than the mask priority.\r\n // For this case, we don't need a maskRange so leave it as null.\r\n const viewTrees = new Array<TileTreeReference>();\r\n const thisPriority = this.settings.priority === undefined ? PlanarClipMaskPriority.RealityModel : this.settings.priority;\r\n for (const ref of context.viewport.getTileTreeRefs()) {\r\n const tree = ref.treeOwner.load();\r\n if (tree && tree.modelId !== classifiedModelId && ref.planarClipMaskPriority > thisPriority)\r\n viewTrees.push(ref);\r\n }\r\n\r\n return viewTrees;\r\n }\r\n\r\n // For all other modes we need to let the tree refs in the view state decide which refs need to be drawn\r\n // since batched tiles cannot turn on/off individual models just by their tile tree refs.\r\n // Keep calling this until loaded so that the range is valid.\r\n if (!this._allLoaded) {\r\n this._tileTreeRefs = new Array<TileTreeReference>();\r\n if (this.settings.modelIds && context.viewport.view.isSpatialView()) {\r\n context.viewport.view.collectMaskRefs(this.settings.modelIds, this._tileTreeRefs, maskRange);\r\n }\r\n this._allLoaded = this._tileTreeRefs.every((treeRef) => treeRef.treeOwner.load() !== undefined);\r\n maskRange.clone(this._maskRange);\r\n } else // If already loaded, just set the maskRange to the saved maskRange.\r\n this._maskRange.clone(maskRange);\r\n\r\n return this._allLoaded ? this._tileTreeRefs : undefined;\r\n }\r\n\r\n // Returns any potential FeatureSymbology overrides for drawing the planar clip mask.\r\n public getPlanarClipMaskSymbologyOverrides(context: SceneContext, featureSymbologySource: FeatureSymbology.Source): FeatureSymbology.Overrides | undefined {\r\n this._usingViewportOverrides = false;\r\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).\r\n const overrideModels = context.viewport.view.isSpatialView() ? context.viewport.view.getModelsNotInMask(this.settings.modelIds, PlanarClipMaskMode.Priority === this.settings.mode) : undefined;\r\n\r\n const noSubCategoryOrElementIds = !this.settings.subCategoryOrElementIds;\r\n if (noSubCategoryOrElementIds && !overrideModels)\r\n return undefined;\r\n\r\n const ovrBasedOnContext = PlanarClipMaskMode.Priority === this.settings.mode || PlanarClipMaskMode.Models === this.settings.mode || noSubCategoryOrElementIds;\r\n const viewport = overrideModels && ovrBasedOnContext ? context.viewport : undefined;\r\n const overrides = FeatureSymbology.Overrides.withSource(featureSymbologySource, viewport);\r\n\r\n if (overrideModels) {\r\n // overrideModels is used for batched models. For those, we need to create model overrides to turn off models that are\r\n // not wanted in the mask (using transparency) no matter what mask mode is being used.\r\n const appOff = FeatureAppearance.fromTransparency(1.0);\r\n // For Priority or Models mode, we need to start with the current overrides and modify them\r\n if (ovrBasedOnContext) {\r\n this._usingViewportOverrides = true; // Set flag to use listener since context.viewport might change afterwards.\r\n overrides.addInvisibleElementOverridesToNeverDrawn(); // need this for fully trans element overrides to not participate in mask\r\n overrideModels.forEach((modelId: string) => {\r\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\r\n });\r\n return overrides;\r\n }\r\n // Otherwise, we just start with a default overrides and modify it.\r\n overrideModels.forEach((modelId: string) => {\r\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\r\n });\r\n }\r\n\r\n // Add overrides to turn things on or off based on the subcategories or elements in the mask settings.\r\n switch (this.settings.mode) {\r\n case PlanarClipMaskMode.IncludeElements: {\r\n overrides.setAlwaysDrawnSet(this.settings.subCategoryOrElementIds ?? [], true);\r\n return overrides;\r\n }\r\n case PlanarClipMaskMode.ExcludeElements: {\r\n overrides.ignoreSubCategory = true;\r\n overrides.setNeverDrawnSet(this.settings.subCategoryOrElementIds ?? []);\r\n return overrides;\r\n }\r\n case PlanarClipMaskMode.IncludeSubCategories: {\r\n for (const subCategoryId of this.settings.subCategoryOrElementIds ?? [])\r\n overrides.setVisibleSubCategory(subCategoryId);\r\n return overrides;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"PlanarClipMaskState.js","sourceRoot":"","sources":["../../src/PlanarClipMaskState.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,EAAuB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAChJ,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACd,QAAQ,CAAyB;IACzC,aAAa,CAAuB;IACpC,UAAU,GAAG,KAAK,CAAC;IACnB,uBAAuB,GAAG,KAAK,CAAC;IAChC,yBAAyB,GAAG,KAAK,CAAC;IAClC,UAAU,GAAY,OAAO,CAAC,UAAU,EAAE,CAAC;IAEnD,YAAoB,QAAgC;QAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,QAAgC;QACnD,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,KAA0B;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAW,sBAAsB,KAAc,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAAA,CAAC;IAEtF,gBAAgB;IAChB,IAAW,wBAAwB,KAAc,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAElF,iBAAiB,CAAC,KAA2B;QAClD,IAAI,IAAI,CAAC,aAAa;YACpB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,0IAA0I;IACnI,YAAY,CAAC,OAAqB,EAAE,iBAA6B,EAAE,SAAkB;QAC1F,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,kBAAkB,CAAC,QAAQ,EAAE,CAAC;YACvD,gHAAgH;YAChH,gEAAgE;YAChE,MAAM,SAAS,GAAG,IAAI,KAAK,EAAqB,CAAC;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzH,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;gBACrD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,iBAAiB,IAAI,GAAG,CAAC,sBAAsB,GAAG,YAAY;oBACzF,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,wGAAwG;QACxG,yFAAyF;QACzF,6DAA6D;QAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,EAAqB,CAAC;YACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBACpE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC/F,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,CAAC;YAChG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;aAAO,oEAAoE;YAC1E,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,qFAAqF;IAC9E,mCAAmC,CAAC,OAAqB,EAAE,sBAA+C;QAC/G,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;QACtE,qIAAqI;QACrI,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhM,MAAM,yBAAyB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACzE,IAAI,yBAAyB,IAAI,CAAC,cAAc;YAC9C,OAAO,SAAS,CAAC;QAEnB,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,kBAAkB,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,yBAAyB,CAAC;QAC9J,MAAM,QAAQ,GAAG,cAAc,IAAI,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;QAE1F,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,uHAAuH;YACvH,sFAAsF;YACtF,MAAM,MAAM,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACvD,2FAA2F;YAC3F,IAAI,iBAAiB,EAAE,CAAC;gBACtB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC,2EAA2E;gBAChH,SAAS,CAAC,wCAAwC,EAAE,CAAC,CAAE,yEAAyE;gBAChI,cAAc,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;oBACzC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,mEAAmE;YACnE,cAAc,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;gBACzC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,CAAC,CAAC,CAAC;QACL,CAAC;QAED,sGAAsG;QACtG,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;gBACxC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC/E,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,KAAK,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;gBACxC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBACnC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;gBACxE,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,KAAK,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC7C,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,IAAI,EAAE;oBACrE,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;gBACjD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { FeatureAppearance, PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskProps, PlanarClipMaskSettings } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\r\nimport { DisclosedTileTreeSet, TileTreeReference } from \"./tile/internal\";\r\nimport { SceneContext } from \"./ViewContext\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\n\r\n/** The State of Planar Clip Mask applied to a reality model or background map.\r\n * Handles loading models and their associated tiles for models that are used by masks but may not be otherwise loaded or displayed.\r\n * @beta\r\n */\r\nexport class PlanarClipMaskState {\r\n public readonly settings: PlanarClipMaskSettings;\r\n private _tileTreeRefs?: TileTreeReference[];\r\n private _allLoaded = false;\r\n private _usingViewportOverrides = false;\r\n private _overridesModelVisibility = false;\r\n private _maskRange: Range3d = Range3d.createNull();\r\n\r\n private constructor(settings: PlanarClipMaskSettings) {\r\n this.settings = settings;\r\n }\r\n\r\n public static create(settings: PlanarClipMaskSettings): PlanarClipMaskState {\r\n return new PlanarClipMaskState(settings);\r\n }\r\n\r\n public static fromJSON(props: PlanarClipMaskProps): PlanarClipMaskState {\r\n return this.create(PlanarClipMaskSettings.fromJSON(props));\r\n }\r\n\r\n public get usingViewportOverrides(): boolean { return this._usingViewportOverrides; };\r\n\r\n /** @internal */\r\n public get overridesModelVisibility(): boolean { return this._overridesModelVisibility; }\r\n\r\n public discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n if (this._tileTreeRefs)\r\n this._tileTreeRefs.forEach((treeRef) => treeRef.discloseTileTrees(trees));\r\n }\r\n\r\n // Returns the TileTreeReferences for the models that need to be drawn to create the planar clip mask, and extend the maskRange if needed.\r\n public getTileTrees(context: SceneContext, classifiedModelId: Id64String, maskRange: Range3d): TileTreeReference[] | undefined {\r\n if (this.settings.mode === PlanarClipMaskMode.Priority) {\r\n // For priority mode we simply want refs for all viewed models if the priority is higher than the mask priority.\r\n // For this case, we don't need a maskRange so leave it as null.\r\n const viewTrees = new Array<TileTreeReference>();\r\n const thisPriority = this.settings.priority === undefined ? PlanarClipMaskPriority.RealityModel : this.settings.priority;\r\n for (const ref of context.viewport.getTileTreeRefs()) {\r\n const tree = ref.treeOwner.load();\r\n if (tree && tree.modelId !== classifiedModelId && ref.planarClipMaskPriority > thisPriority)\r\n viewTrees.push(ref);\r\n }\r\n\r\n return viewTrees;\r\n }\r\n\r\n // For all other modes we need to let the tree refs in the view state decide which refs need to be drawn\r\n // since batched tiles cannot turn on/off individual models just by their tile tree refs.\r\n // Keep calling this until loaded so that the range is valid.\r\n if (!this._allLoaded) {\r\n this._tileTreeRefs = new Array<TileTreeReference>();\r\n if (this.settings.modelIds && context.viewport.view.isSpatialView()) {\r\n context.viewport.view.collectMaskRefs(this.settings.modelIds, this._tileTreeRefs, maskRange);\r\n }\r\n this._allLoaded = this._tileTreeRefs.every((treeRef) => treeRef.treeOwner.load() !== undefined);\r\n maskRange.clone(this._maskRange);\r\n } else // If already loaded, just set the maskRange to the saved maskRange.\r\n this._maskRange.clone(maskRange);\r\n\r\n return this._allLoaded ? this._tileTreeRefs : undefined;\r\n }\r\n\r\n // Returns any potential FeatureSymbology overrides for drawing the planar clip mask.\r\n public getPlanarClipMaskSymbologyOverrides(context: SceneContext, featureSymbologySource: FeatureSymbology.Source): FeatureSymbology.Overrides | undefined {\r\n this._usingViewportOverrides = this._overridesModelVisibility = false;\r\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).\r\n const overrideModels = context.viewport.view.isSpatialView() ? context.viewport.view.getModelsNotInMask(this.settings.modelIds, PlanarClipMaskMode.Priority === this.settings.mode) : undefined;\r\n\r\n const noSubCategoryOrElementIds = !this.settings.subCategoryOrElementIds;\r\n if (noSubCategoryOrElementIds && !overrideModels)\r\n return undefined;\r\n\r\n const ovrBasedOnContext = PlanarClipMaskMode.Priority === this.settings.mode || PlanarClipMaskMode.Models === this.settings.mode || noSubCategoryOrElementIds;\r\n const viewport = overrideModels && ovrBasedOnContext ? context.viewport : undefined;\r\n const overrides = FeatureSymbology.Overrides.withSource(featureSymbologySource, viewport);\r\n\r\n if (overrideModels) {\r\n this._overridesModelVisibility = true;\r\n // overrideModels is used for batched models. For those, we need to create model overrides to turn off models that are\r\n // not wanted in the mask (using transparency) no matter what mask mode is being used.\r\n const appOff = FeatureAppearance.fromTransparency(1.0);\r\n // For Priority or Models mode, we need to start with the current overrides and modify them\r\n if (ovrBasedOnContext) {\r\n this._usingViewportOverrides = true; // Set flag to use listener since context.viewport might change afterwards.\r\n overrides.addInvisibleElementOverridesToNeverDrawn(); // need this for fully trans element overrides to not participate in mask\r\n overrideModels.forEach((modelId: string) => {\r\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\r\n });\r\n return overrides;\r\n }\r\n // Otherwise, we just start with a default overrides and modify it.\r\n overrideModels.forEach((modelId: string) => {\r\n overrides.override({ modelId, appearance: appOff, onConflict: \"replace\" });\r\n });\r\n }\r\n\r\n // Add overrides to turn things on or off based on the subcategories or elements in the mask settings.\r\n switch (this.settings.mode) {\r\n case PlanarClipMaskMode.IncludeElements: {\r\n overrides.setAlwaysDrawnSet(this.settings.subCategoryOrElementIds ?? [], true);\r\n return overrides;\r\n }\r\n case PlanarClipMaskMode.ExcludeElements: {\r\n overrides.ignoreSubCategory = true;\r\n overrides.setNeverDrawnSet(this.settings.subCategoryOrElementIds ?? []);\r\n return overrides;\r\n }\r\n case PlanarClipMaskMode.IncludeSubCategories: {\r\n for (const subCategoryId of this.settings.subCategoryOrElementIds ?? [])\r\n overrides.setVisibleSubCategory(subCategoryId);\r\n return overrides;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\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
|
-
|
|
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;
|
|
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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* @module WebGL
|
|
7
7
|
*/
|
|
8
8
|
import { desync, sync } from "./Sync";
|
|
9
|
+
import { assert } from "@itwin/core-bentley";
|
|
9
10
|
const scratchRgb = new Float32Array(3);
|
|
10
11
|
const noOverrideRgb = new Float32Array([-1.0, -1.0, -1.0]);
|
|
11
12
|
/** Maintains uniform variable state associated with the Batch currently being drawn by a Target.
|
|
@@ -26,19 +27,29 @@ export class BatchUniforms {
|
|
|
26
27
|
this.state = batchState;
|
|
27
28
|
this._target = target;
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
+
clearCurrentBatch() {
|
|
31
|
+
this._setCurrentBatch(undefined, undefined);
|
|
32
|
+
}
|
|
33
|
+
setCurrentBatch(batch, provider) {
|
|
34
|
+
this._setCurrentBatch(batch, provider);
|
|
35
|
+
}
|
|
36
|
+
_setCurrentBatch(batch, provider) {
|
|
30
37
|
desync(this);
|
|
31
|
-
|
|
38
|
+
let overrides;
|
|
39
|
+
if (undefined !== batch) {
|
|
40
|
+
assert(undefined !== provider);
|
|
41
|
+
overrides = batch.getOverrides(this._target, provider);
|
|
32
42
|
this.state.push(batch, false);
|
|
33
|
-
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
34
45
|
this.state.pop();
|
|
46
|
+
}
|
|
35
47
|
const batchId = this.state.currentBatchId;
|
|
36
48
|
this._scratchUint32[0] = batchId;
|
|
37
49
|
this._batchId[0] = this._scratchBytes[0];
|
|
38
50
|
this._batchId[1] = this._scratchBytes[1];
|
|
39
51
|
this._batchId[2] = this._scratchBytes[2];
|
|
40
52
|
this._batchId[3] = this._scratchBytes[3];
|
|
41
|
-
const overrides = undefined !== batch ? batch.getOverrides(this._target) : undefined;
|
|
42
53
|
this._overrides = (undefined !== overrides && overrides.anyOverridden) ? overrides : undefined;
|
|
43
54
|
let sensors;
|
|
44
55
|
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":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { BatchState } from \"./BatchState\";\r\nimport { FeatureOverrides } from \"./FeatureOverrides\";\r\nimport { Batch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { Target } from \"./Target\";\r\nimport { FeatureMode } from \"./TechniqueFlags\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Contours } from \"./Contours\";\r\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\r\n\r\nconst scratchRgb = new Float32Array(3);\r\nconst noOverrideRgb = new Float32Array([-1.0, -1.0, -1.0]);\r\n\r\n/** Maintains uniform variable state associated with the Batch currently being drawn by a Target.\r\n * @internal\r\n */\r\nexport class BatchUniforms {\r\n public readonly state: BatchState;\r\n private readonly _target: Target;\r\n private _featureMode = FeatureMode.None;\r\n public syncKey = 0;\r\n\r\n private _overrides?: FeatureOverrides;\r\n private _sensors?: ThematicSensors;\r\n private _contours?: Contours;\r\n private _batchId = new Float32Array(4);\r\n\r\n private _scratchBytes = new Uint8Array(4);\r\n private _scratchUint32 = new Uint32Array(this._scratchBytes.buffer);\r\n\r\n public constructor(target: Target, batchState: BatchState) {\r\n this.state = batchState;\r\n this._target = target;\r\n }\r\n\r\n public setCurrentBatch(batch: Batch | undefined): void {\r\n desync(this);\r\n\r\n if (undefined !== batch)\r\n this.state.push(batch, false);\r\n else\r\n this.state.pop();\r\n\r\n const batchId = this.state.currentBatchId;\r\n this._scratchUint32[0] = batchId;\r\n this._batchId[0] = this._scratchBytes[0];\r\n this._batchId[1] = this._scratchBytes[1];\r\n this._batchId[2] = this._scratchBytes[2];\r\n this._batchId[3] = this._scratchBytes[3];\r\n\r\n const overrides = undefined !== batch ? batch.getOverrides(this._target) : undefined;\r\n this._overrides = (undefined !== overrides && overrides.anyOverridden) ? overrides : undefined;\r\n\r\n let sensors: ThematicSensors | undefined;\r\n if (undefined !== batch && this._target.wantThematicSensors) {\r\n const distanceCutoff = this._target.plan.thematic?.sensorSettings.distanceCutoff ?? 0;\r\n if (distanceCutoff > 0) // if we have a distance cutoff, we want to create per-batch sensor textures\r\n sensors = batch.getThematicSensors(this._target);\r\n }\r\n this._sensors = sensors;\r\n\r\n if (undefined !== this._overrides)\r\n this._featureMode = FeatureMode.Overrides;\r\n else if (0 !== batchId)\r\n this._featureMode = FeatureMode.Pick;\r\n else\r\n this._featureMode = FeatureMode.None;\r\n\r\n this._contours = undefined !== batch && this.wantContourLines ? batch.getContours(this._target) : undefined;\r\n }\r\n\r\n public resetBatchState(): void {\r\n this.state.reset();\r\n }\r\n\r\n public get featureMode(): FeatureMode { return this._featureMode; }\r\n\r\n public bindNumThematicSensors(uniform: UniformHandle): void {\r\n if (undefined !== this._sensors)\r\n this._sensors.bindNumSensors(uniform);\r\n }\r\n\r\n public bindThematicSensors(uniform: UniformHandle): void {\r\n if (undefined !== this._sensors)\r\n this._sensors.bindTexture(uniform);\r\n }\r\n\r\n public get wantContourLines(): boolean {\r\n const contours = this._target.currentBranch.contourLine;\r\n return undefined !== contours && contours.displayContours && contours.groups.length > 0;\r\n }\r\n\r\n public bindContourLUT(uniform: UniformHandle): void {\r\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\r\n if (undefined !== this._contours)\r\n this._contours.bindContourLUT(uniform);\r\n }\r\n\r\n public bindContourLUTWidth(uniform: UniformHandle): void {\r\n if (!sync(this, uniform)) {\r\n if (undefined === this._contours)\r\n uniform.setUniform1ui(0);\r\n else\r\n this._contours.bindContourLUTWidth(uniform);\r\n }\r\n }\r\n\r\n public bindLUT(uniform: UniformHandle): void {\r\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\r\n if (undefined !== this._overrides)\r\n this._overrides.bindLUT(uniform);\r\n }\r\n\r\n public bindLUTParams(uniform: UniformHandle): void {\r\n if (undefined !== this._overrides && !sync(this, uniform))\r\n this._overrides.bindLUTParams(uniform);\r\n }\r\n\r\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n if (undefined !== this._overrides)\r\n this._overrides.bindUniformSymbologyFlags(uniform);\r\n else\r\n uniform.setUniform1f(0);\r\n }\r\n\r\n public bindBatchId(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._batchId);\r\n }\r\n\r\n public bindUniformColorOverride(uniform: UniformHandle): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n if (undefined !== this._overrides) {\r\n const uo = this._overrides.getUniformOverrides();\r\n if (uo[0] & OvrFlags.Rgb) {\r\n scratchRgb[0] = uo[4] / 255.0;\r\n scratchRgb[1] = uo[5] / 255.0;\r\n scratchRgb[2] = uo[6] / 255.0;\r\n uniform.setUniform3fv(scratchRgb);\r\n } else {\r\n uniform.setUniform3fv(noOverrideRgb);\r\n }\r\n } else {\r\n uniform.setUniform3fv(noOverrideRgb);\r\n }\r\n }\r\n\r\n public bindUniformTransparencyOverride(uniform: UniformHandle): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n if (undefined !== this._overrides) {\r\n const uo = this._overrides.getUniformOverrides();\r\n if (uo[0] & OvrFlags.Alpha) {\r\n uniform.setUniform1f(uo[7]/255.0);\r\n } else {\r\n uniform.setUniform1f(-1.0);\r\n }\r\n } else {\r\n uniform.setUniform1f(-1.0);\r\n }\r\n }\r\n\r\n public bindUniformNonLocatable(uniform: UniformHandle, ignoreNonLocatable: boolean): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n let nonLocatable = 0;\r\n if (!ignoreNonLocatable && undefined !== this._overrides) {\r\n const uo = this._overrides.getUniformOverrides();\r\n nonLocatable = (uo[0] & OvrFlags.NonLocatable) ? 1 : 0;\r\n }\r\n uniform.setUniform1i(nonLocatable);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BatchUniforms.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/BatchUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { BatchState } from \"./BatchState\";\r\nimport { FeatureOverrides } from \"./FeatureOverrides\";\r\nimport { Batch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { Target } from \"./Target\";\r\nimport { FeatureMode } from \"./TechniqueFlags\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Contours } from \"./Contours\";\r\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\r\nimport { FeatureAppearanceProvider } from \"@itwin/core-common\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\n\r\nconst scratchRgb = new Float32Array(3);\r\nconst noOverrideRgb = new Float32Array([-1.0, -1.0, -1.0]);\r\n\r\n/** Maintains uniform variable state associated with the Batch currently being drawn by a Target.\r\n * @internal\r\n */\r\nexport class BatchUniforms {\r\n public readonly state: BatchState;\r\n private readonly _target: Target;\r\n private _featureMode = FeatureMode.None;\r\n public syncKey = 0;\r\n\r\n private _overrides?: FeatureOverrides;\r\n private _sensors?: ThematicSensors;\r\n private _contours?: Contours;\r\n private _batchId = new Float32Array(4);\r\n\r\n private _scratchBytes = new Uint8Array(4);\r\n private _scratchUint32 = new Uint32Array(this._scratchBytes.buffer);\r\n\r\n public constructor(target: Target, batchState: BatchState) {\r\n this.state = batchState;\r\n this._target = target;\r\n }\r\n\r\n public clearCurrentBatch(): void {\r\n this._setCurrentBatch(undefined, undefined);\r\n }\r\n\r\n public setCurrentBatch(batch: Batch, provider: FeatureAppearanceProvider): void {\r\n this._setCurrentBatch(batch, provider);\r\n }\r\n\r\n private _setCurrentBatch(batch: Batch | undefined, provider: FeatureAppearanceProvider | undefined): void {\r\n desync(this);\r\n\r\n let overrides;\r\n if (undefined !== batch) {\r\n assert(undefined !== provider);\r\n overrides = batch.getOverrides(this._target, provider);\r\n this.state.push(batch, false);\r\n } else {\r\n this.state.pop();\r\n }\r\n\r\n const batchId = this.state.currentBatchId;\r\n this._scratchUint32[0] = batchId;\r\n this._batchId[0] = this._scratchBytes[0];\r\n this._batchId[1] = this._scratchBytes[1];\r\n this._batchId[2] = this._scratchBytes[2];\r\n this._batchId[3] = this._scratchBytes[3];\r\n\r\n this._overrides = (undefined !== overrides && overrides.anyOverridden) ? overrides : undefined;\r\n\r\n let sensors: ThematicSensors | undefined;\r\n if (undefined !== batch && this._target.wantThematicSensors) {\r\n const distanceCutoff = this._target.plan.thematic?.sensorSettings.distanceCutoff ?? 0;\r\n if (distanceCutoff > 0) // if we have a distance cutoff, we want to create per-batch sensor textures\r\n sensors = batch.getThematicSensors(this._target);\r\n }\r\n this._sensors = sensors;\r\n\r\n if (undefined !== this._overrides)\r\n this._featureMode = FeatureMode.Overrides;\r\n else if (0 !== batchId)\r\n this._featureMode = FeatureMode.Pick;\r\n else\r\n this._featureMode = FeatureMode.None;\r\n\r\n this._contours = undefined !== batch && this.wantContourLines ? batch.getContours(this._target) : undefined;\r\n }\r\n\r\n public resetBatchState(): void {\r\n this.state.reset();\r\n }\r\n\r\n public get featureMode(): FeatureMode { return this._featureMode; }\r\n\r\n public bindNumThematicSensors(uniform: UniformHandle): void {\r\n if (undefined !== this._sensors)\r\n this._sensors.bindNumSensors(uniform);\r\n }\r\n\r\n public bindThematicSensors(uniform: UniformHandle): void {\r\n if (undefined !== this._sensors)\r\n this._sensors.bindTexture(uniform);\r\n }\r\n\r\n public get wantContourLines(): boolean {\r\n const contours = this._target.currentBranch.contourLine;\r\n return undefined !== contours && contours.displayContours && contours.groups.length > 0;\r\n }\r\n\r\n public bindContourLUT(uniform: UniformHandle): void {\r\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\r\n if (undefined !== this._contours)\r\n this._contours.bindContourLUT(uniform);\r\n }\r\n\r\n public bindContourLUTWidth(uniform: UniformHandle): void {\r\n if (!sync(this, uniform)) {\r\n if (undefined === this._contours)\r\n uniform.setUniform1ui(0);\r\n else\r\n this._contours.bindContourLUTWidth(uniform);\r\n }\r\n }\r\n\r\n public bindLUT(uniform: UniformHandle): void {\r\n // Note we can't use sync() here because a different texture may have been assigned to the desired texture unit\r\n if (undefined !== this._overrides)\r\n this._overrides.bindLUT(uniform);\r\n }\r\n\r\n public bindLUTParams(uniform: UniformHandle): void {\r\n if (undefined !== this._overrides && !sync(this, uniform))\r\n this._overrides.bindLUTParams(uniform);\r\n }\r\n\r\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n if (undefined !== this._overrides)\r\n this._overrides.bindUniformSymbologyFlags(uniform);\r\n else\r\n uniform.setUniform1f(0);\r\n }\r\n\r\n public bindBatchId(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._batchId);\r\n }\r\n\r\n public bindUniformColorOverride(uniform: UniformHandle): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n if (undefined !== this._overrides) {\r\n const uo = this._overrides.getUniformOverrides();\r\n if (uo[0] & OvrFlags.Rgb) {\r\n scratchRgb[0] = uo[4] / 255.0;\r\n scratchRgb[1] = uo[5] / 255.0;\r\n scratchRgb[2] = uo[6] / 255.0;\r\n uniform.setUniform3fv(scratchRgb);\r\n } else {\r\n uniform.setUniform3fv(noOverrideRgb);\r\n }\r\n } else {\r\n uniform.setUniform3fv(noOverrideRgb);\r\n }\r\n }\r\n\r\n public bindUniformTransparencyOverride(uniform: UniformHandle): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n if (undefined !== this._overrides) {\r\n const uo = this._overrides.getUniformOverrides();\r\n if (uo[0] & OvrFlags.Alpha) {\r\n uniform.setUniform1f(uo[7]/255.0);\r\n } else {\r\n uniform.setUniform1f(-1.0);\r\n }\r\n } else {\r\n uniform.setUniform1f(-1.0);\r\n }\r\n }\r\n\r\n public bindUniformNonLocatable(uniform: UniformHandle, ignoreNonLocatable: boolean): void {\r\n if (sync(this, uniform))\r\n return;\r\n\r\n let nonLocatable = 0;\r\n if (!ignoreNonLocatable && undefined !== this._overrides) {\r\n const uo = this._overrides.getUniformOverrides();\r\n nonLocatable = (uo[0] & OvrFlags.NonLocatable) ? 1 : 0;\r\n }\r\n uniform.setUniform1i(nonLocatable);\r\n }\r\n}\r\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;
|
|
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"}
|
|
@@ -74,7 +74,7 @@ export class FeatureOverrides {
|
|
|
74
74
|
assert(undefined !== this._lut.dataBytes);
|
|
75
75
|
return this._lut.dataBytes;
|
|
76
76
|
}
|
|
77
|
-
_initialize(map, ovrs, pickExcludes, hilite, flashed) {
|
|
77
|
+
_initialize(provider, map, ovrs, pickExcludes, hilite, flashed) {
|
|
78
78
|
const nFeatures = map.numFeatures;
|
|
79
79
|
const dims = computeDimensions(nFeatures, 3, 0, System.instance.maxTextureSize);
|
|
80
80
|
const width = dims.width;
|
|
@@ -84,17 +84,17 @@ export class FeatureOverrides {
|
|
|
84
84
|
this._lutParams[1] = height;
|
|
85
85
|
const data = new Uint8Array(width * height * 4);
|
|
86
86
|
const creator = new Texture2DDataUpdater(data);
|
|
87
|
-
this.buildLookupTable(creator, map, ovrs, pickExcludes, flashed, hilite);
|
|
87
|
+
this.buildLookupTable(provider, creator, map, ovrs, pickExcludes, flashed, hilite);
|
|
88
88
|
return TextureHandle.createForData(width, height, data, true, GL.Texture.WrapMode.ClampToEdge);
|
|
89
89
|
}
|
|
90
|
-
_update(map, lut, pickExcludes, flashed, hilites, ovrs) {
|
|
90
|
+
_update(provider, map, lut, pickExcludes, flashed, hilites, ovrs) {
|
|
91
91
|
const updater = new Texture2DDataUpdater(expectDefined(lut.dataBytes));
|
|
92
92
|
if (undefined === ovrs) {
|
|
93
93
|
this.updateFlashedAndHilited(updater, map, pickExcludes, flashed, hilites);
|
|
94
94
|
}
|
|
95
95
|
else {
|
|
96
96
|
assert(undefined !== hilites);
|
|
97
|
-
this.buildLookupTable(updater, map, ovrs, pickExcludes, flashed, hilites);
|
|
97
|
+
this.buildLookupTable(provider, updater, map, ovrs, pickExcludes, flashed, hilites);
|
|
98
98
|
}
|
|
99
99
|
lut.update(updater);
|
|
100
100
|
}
|
|
@@ -117,7 +117,7 @@ export class FeatureOverrides {
|
|
|
117
117
|
}
|
|
118
118
|
return curFlags;
|
|
119
119
|
}
|
|
120
|
-
buildLookupTable(data, map, ovr, pickExclude, flashedIdParts, hilites) {
|
|
120
|
+
buildLookupTable(provider, data, map, ovr, pickExclude, flashedIdParts, hilites) {
|
|
121
121
|
const allowHilite = true !== this._options.noHilite;
|
|
122
122
|
const allowFlash = true !== this._options.noFlash;
|
|
123
123
|
const allowEmphasis = true !== this._options.noEmphasis;
|
|
@@ -145,7 +145,7 @@ export class FeatureOverrides {
|
|
|
145
145
|
prevModelId.upper = feature.modelId.upper;
|
|
146
146
|
isModelHilited = allowHilite && hilites.models.hasPair(feature.modelId);
|
|
147
147
|
}
|
|
148
|
-
const app =
|
|
148
|
+
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);
|
|
149
149
|
// NB: If the appearance is fully transparent, then:
|
|
150
150
|
// - For normal ("primary") models, getAppearance() returns undefined.
|
|
151
151
|
// - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.
|
|
@@ -305,19 +305,19 @@ export class FeatureOverrides {
|
|
|
305
305
|
this._cleanup = undefined;
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
-
initFromMap(map) {
|
|
308
|
+
initFromMap(map, provider) {
|
|
309
309
|
const nFeatures = map.numFeatures;
|
|
310
310
|
assert(0 < nFeatures);
|
|
311
311
|
this._lut = dispose(this._lut);
|
|
312
312
|
const ovrs = this.target.currentFeatureSymbologyOverrides;
|
|
313
313
|
this._mostRecentSymbologyOverrides = ovrs;
|
|
314
314
|
const hilite = this.target.hilites;
|
|
315
|
-
this._lut = this._initialize(map, ovrs, this.target.pickExclusions, hilite, this.target.flashed);
|
|
315
|
+
this._lut = this._initialize(provider, map, ovrs, this.target.pickExclusions, hilite, this.target.flashed);
|
|
316
316
|
this._lastFlashId = Id64.invalid;
|
|
317
317
|
this._hiliteSyncObserver = {};
|
|
318
318
|
this._pickExclusionsSyncObserver = {};
|
|
319
319
|
}
|
|
320
|
-
update(features) {
|
|
320
|
+
update(features, provider) {
|
|
321
321
|
let ovrs = this.target.currentFeatureSymbologyOverrides;
|
|
322
322
|
const ovrsUpdated = ovrs !== this._mostRecentSymbologyOverrides;
|
|
323
323
|
if (ovrsUpdated)
|
|
@@ -331,7 +331,7 @@ export class FeatureOverrides {
|
|
|
331
331
|
if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId || pickExcludesUpdated) {
|
|
332
332
|
// _lut can be undefined if context was lost, (gl.createTexture returns null)
|
|
333
333
|
if (this._lut) {
|
|
334
|
-
this._update(features, this._lut, undefined !== ovrs || pickExcludesUpdated ? this.target.pickExclusions : undefined, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);
|
|
334
|
+
this._update(provider, features, this._lut, undefined !== ovrs || pickExcludesUpdated ? this.target.pickExclusions : undefined, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);
|
|
335
335
|
}
|
|
336
336
|
this._lastFlashId = flashedId;
|
|
337
337
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureOverrides.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, expectDefined, Id64 } from \"@itwin/core-bentley\";\r\nimport { PackedFeature, RenderFeatureTable } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../../../render/FeatureSymbology\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { EmphasisFlags, TextureUnit } from \"./RenderFlags\";\r\nimport { sync, SyncObserver } from \"./Sync\";\r\nimport { System } from \"./System\";\r\nimport { Hilites, Target } from \"./Target\";\r\nimport { Texture2DDataUpdater, Texture2DHandle, TextureHandle } from \"./Texture\";\r\nimport { BatchOptions } from \"../../../common/render/BatchOptions\";\r\nimport { DisplayParams } from \"../../../common/internal/render/DisplayParams\";\r\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\r\nimport { computeDimensions } from \"../../../common/internal/render/VertexTable\";\r\n\r\nexport function isFeatureHilited(feature: PackedFeature, hilites: Hilites, isModelHilited: boolean): boolean {\r\n if (hilites.isEmpty)\r\n return false;\r\n\r\n if (\"union\" === hilites.modelSubCategoryMode)\r\n return isModelHilited || hilites.elements.hasPair(feature.elementId) || hilites.subcategories.hasPair(feature.subCategoryId);\r\n\r\n return hilites.elements.hasPair(feature.elementId) || (isModelHilited && hilites.subcategories.hasPair(feature.subCategoryId));\r\n}\r\n\r\n/** @internal */\r\nexport type FeatureOverridesCleanup = () => void;\r\n\r\nconst scratchPackedFeature = PackedFeature.createWithIndex();\r\n\r\n/** @internal */\r\nexport class FeatureOverrides implements WebGLDisposable {\r\n public readonly target: Target;\r\n private readonly _options: BatchOptions;\r\n private _lut?: Texture2DHandle;\r\n private _mostRecentSymbologyOverrides?: FeatureSymbology.Overrides;\r\n private _lastFlashId = Id64.invalid;\r\n private _hiliteSyncObserver: SyncObserver = {};\r\n private _pickExclusionsSyncObserver: SyncObserver = {};\r\n private _anyOverridden = true;\r\n private _allHidden = true;\r\n private _anyTranslucent = true;\r\n private _anyViewIndependentTranslucent = true;\r\n private _anyOpaque = true;\r\n private _anyHilited = true;\r\n private _lutParams = new Float32Array(2);\r\n private _uniformSymbologyFlags: EmphasisFlags = EmphasisFlags.None;\r\n private _cleanup?: FeatureOverridesCleanup;\r\n\r\n public get anyOverridden() { return this._anyOverridden; }\r\n public get allHidden() { return this._allHidden; }\r\n public get anyTranslucent() { return this._anyTranslucent; }\r\n public get anyViewIndependentTranslucent() { return this._anyViewIndependentTranslucent; }\r\n public get anyOpaque() { return this._anyOpaque; }\r\n public get anyHilited() { return this._anyHilited; }\r\n\r\n /** For tests. */\r\n public get lutData(): Uint8Array | undefined { return this._lut?.dataBytes; }\r\n public get byteLength(): number { return undefined !== this._lut ? this._lut.bytesUsed : 0; }\r\n public get isUniform() { return 3 === this._lutParams[0] && 1 === this._lutParams[1]; }\r\n\r\n private updateUniformSymbologyFlags(): void {\r\n this._uniformSymbologyFlags = EmphasisFlags.None;\r\n if (!this.isUniform || !this._lut?.dataBytes)\r\n return;\r\n\r\n let flags = expectDefined(this._lut.dataBytes[0]);\r\n if (0 !== (flags & OvrFlags.Flashed))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Flashed;\r\n\r\n if (0 !== (flags & OvrFlags.NonLocatable))\r\n this._uniformSymbologyFlags |= EmphasisFlags.NonLocatable;\r\n\r\n if (!this._anyHilited)\r\n return;\r\n\r\n flags = expectDefined(this._lut.dataBytes[1]) << 8;\r\n if (0 !== (flags & OvrFlags.Hilited))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Hilite;\r\n\r\n if (0 !== (flags & OvrFlags.Emphasized))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Emphasized;\r\n }\r\n\r\n public getUniformOverrides(): Uint8Array {\r\n assert(this.isUniform);\r\n assert(undefined !== this._lut);\r\n assert(undefined !== this._lut.dataBytes);\r\n return this._lut.dataBytes;\r\n }\r\n\r\n private _initialize(map: RenderFeatureTable, ovrs: FeatureSymbology.Overrides, pickExcludes: Id64.Uint32Set, hilite: Hilites, flashed?: Id64.Uint32Pair): Texture2DHandle | undefined {\r\n const nFeatures = map.numFeatures;\r\n const dims = computeDimensions(nFeatures, 3, 0, System.instance.maxTextureSize);\r\n const width = dims.width;\r\n const height = dims.height;\r\n assert(width * height >= nFeatures);\r\n\r\n this._lutParams[0] = width;\r\n this._lutParams[1] = height;\r\n\r\n const data = new Uint8Array(width * height * 4);\r\n const creator = new Texture2DDataUpdater(data);\r\n this.buildLookupTable(creator, map, ovrs, pickExcludes, flashed, hilite);\r\n\r\n return TextureHandle.createForData(width, height, data, true, GL.Texture.WrapMode.ClampToEdge);\r\n }\r\n\r\n private _update(map: RenderFeatureTable, lut: Texture2DHandle, pickExcludes: Id64.Uint32Set | undefined, flashed?: Id64.Uint32Pair, hilites?: Hilites, ovrs?: FeatureSymbology.Overrides) {\r\n const updater = new Texture2DDataUpdater(expectDefined(lut.dataBytes));\r\n\r\n if (undefined === ovrs) {\r\n this.updateFlashedAndHilited(updater, map, pickExcludes, flashed, hilites);\r\n } else {\r\n assert(undefined !== hilites);\r\n this.buildLookupTable(updater, map, ovrs, pickExcludes, flashed, hilites);\r\n }\r\n\r\n lut.update(updater);\r\n }\r\n\r\n private setTransparency(transparency: number, viewDependentTransparency: true | undefined, data: Texture2DDataUpdater, transparencyByteIndex: number, curFlags: OvrFlags): OvrFlags {\r\n // transparency in range [0, 1]...convert to byte and invert so 0=transparent...\r\n let alpha = 1.0 - transparency;\r\n alpha = Math.floor(0xff * alpha + 0.5);\r\n if ((0xff - alpha) < DisplayParams.minTransparency)\r\n alpha = 0xff;\r\n\r\n data.setByteAtIndex(transparencyByteIndex, alpha);\r\n if (0xff === alpha) {\r\n this._anyOpaque = true;\r\n } else {\r\n this._anyTranslucent = true;\r\n if (!viewDependentTransparency) {\r\n curFlags |= OvrFlags.ViewIndependentTransparency;\r\n this._anyViewIndependentTranslucent = true;\r\n }\r\n }\r\n\r\n return curFlags;\r\n }\r\n\r\n private buildLookupTable(data: Texture2DDataUpdater, map: RenderFeatureTable, ovr: FeatureSymbology.Overrides, pickExclude: Id64.Uint32Set | undefined, flashedIdParts: Id64.Uint32Pair | undefined, hilites: Hilites) {\r\n const allowHilite = true !== this._options.noHilite;\r\n const allowFlash = true !== this._options.noFlash;\r\n const allowEmphasis = true !== this._options.noEmphasis;\r\n\r\n let isModelHilited = false;\r\n const prevModelId = { lower: -1, upper: -1 };\r\n\r\n this._anyOpaque = this._anyTranslucent = this._anyViewIndependentTranslucent = this._anyHilited = false;\r\n\r\n let nHidden = 0;\r\n let nOverridden = 0;\r\n\r\n // NB: We currently use 3 RGBA values per feature as follows:\r\n // [0]\r\n // RG = override flags (see OvrFlags enum)\r\n // B = line code\r\n // A = line weight (if we need an extra byte in future, could combine code+weight into a single byte).\r\n // [1]\r\n // RGB = rgb\r\n // A = alpha\r\n // [2]\r\n // RGB = line rgb\r\n // A = line alpha\r\n for (const feature of map.iterable(scratchPackedFeature)) {\r\n const i = feature.index;\r\n const dataIndex = i * 4 * 3;\r\n\r\n if (prevModelId.lower !== feature.modelId.lower || prevModelId.upper !== feature.modelId.upper) {\r\n prevModelId.lower = feature.modelId.lower;\r\n prevModelId.upper = feature.modelId.upper;\r\n isModelHilited = allowHilite && hilites.models.hasPair(feature.modelId);\r\n }\r\n\r\n const app = this.target.currentBranch.getFeatureAppearance(\r\n ovr,\r\n feature.elementId.lower, feature.elementId.upper,\r\n feature.subCategoryId.lower, feature.subCategoryId.upper,\r\n feature.geometryClass,\r\n feature.modelId.lower, feature.modelId.upper,\r\n map.type, feature.animationNodeId);\r\n\r\n // NB: If the appearance is fully transparent, then:\r\n // - For normal (\"primary\") models, getAppearance() returns undefined.\r\n // - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.\r\n // (The latter is how we clip the classified model using the classifiers).\r\n if (undefined === app) {\r\n // The feature is not visible. We don't care about any of the other overrides, because we're not going to render it.\r\n data.setOvrFlagsAtIndex(dataIndex, OvrFlags.Visibility);\r\n nHidden++;\r\n nOverridden++;\r\n continue;\r\n }\r\n\r\n let flags = app.nonLocatable ? OvrFlags.NonLocatable : OvrFlags.None;\r\n if (allowHilite && isFeatureHilited(feature, hilites, isModelHilited)) {\r\n flags |= OvrFlags.Hilited;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (allowEmphasis && app.emphasized) {\r\n flags |= OvrFlags.Emphasized;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (app.overridesRgb && app.rgb) {\r\n flags |= OvrFlags.Rgb;\r\n const rgb = app.rgb;\r\n data.setByteAtIndex(dataIndex + 4, rgb.r);\r\n data.setByteAtIndex(dataIndex + 5, rgb.g);\r\n data.setByteAtIndex(dataIndex + 6, rgb.b);\r\n }\r\n\r\n if (undefined !== app.transparency) {\r\n flags |= OvrFlags.Alpha;\r\n flags = this.setTransparency(app.transparency, app.viewDependentTransparency, data, dataIndex + 7, flags);\r\n }\r\n\r\n const lineRgb = app.getLineRgb();\r\n if (lineRgb) {\r\n flags |= OvrFlags.LineRgb;\r\n data.setByteAtIndex(dataIndex + 8, lineRgb.r);\r\n data.setByteAtIndex(dataIndex + 9, lineRgb.g);\r\n data.setByteAtIndex(dataIndex + 10, lineRgb.b);\r\n }\r\n\r\n const lineTransp = app.getLineTransparency();\r\n if (undefined !== lineTransp) {\r\n flags |= OvrFlags.LineAlpha;\r\n flags = this.setTransparency(lineTransp, app.viewDependentTransparency, data, dataIndex + 11, flags);\r\n }\r\n\r\n if (app.overridesWeight && app.weight) {\r\n flags |= OvrFlags.Weight;\r\n let weight = app.weight;\r\n weight = Math.min(31, weight);\r\n weight = Math.max(1, weight);\r\n data.setByteAtIndex(dataIndex + 3, weight);\r\n }\r\n\r\n if (app.overridesLinePixels && app.linePixels) {\r\n flags |= OvrFlags.LineCode;\r\n const lineCode = LineCode.valueFromLinePixels(app.linePixels);\r\n data.setByteAtIndex(dataIndex + 2, lineCode);\r\n }\r\n\r\n if (app.ignoresMaterial)\r\n flags |= OvrFlags.IgnoreMaterial;\r\n\r\n if (allowFlash && undefined !== flashedIdParts && feature.elementId.lower === flashedIdParts.lower && feature.elementId.upper === flashedIdParts.upper)\r\n flags |= OvrFlags.Flashed;\r\n\r\n if (pickExclude?.hasPair(feature.elementId)) {\r\n flags |= OvrFlags.InvisibleDuringPick;\r\n ++nHidden;\r\n }\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, flags);\r\n if (OvrFlags.None !== flags)\r\n nOverridden++;\r\n }\r\n\r\n this._allHidden = (nHidden === map.numFeatures);\r\n this._anyOverridden = (nOverridden > 0);\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n // NB: If hilites is undefined, it means that the hilited set has not changed.\r\n private updateFlashedAndHilited(data: Texture2DDataUpdater, map: RenderFeatureTable, pickExcludes: Id64.Uint32Set | undefined, flashed?: Id64.Uint32Pair, hilites?: Hilites) {\r\n if (!hilites || true === this._options.noHilite) {\r\n this.updateFlashed(data, map, pickExcludes, flashed);\r\n return;\r\n }\r\n\r\n const allowFlash = true !== this._options.noFlash;\r\n const intersect = \"intersection\" === hilites.modelSubCategoryMode;\r\n\r\n this._anyOverridden = this._anyHilited = false;\r\n for (const feature of map.iterable(scratchPackedFeature)) {\r\n const dataIndex = feature.index * 4 * 3;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter. We can't flash it and don't want to hilite it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n const isModelHilited = hilites.models.hasPair(feature.modelId);\r\n let isHilited = isModelHilited && !intersect;\r\n if (!isHilited)\r\n isHilited = hilites.elements.hasPair(feature.elementId);\r\n\r\n if (!isHilited)\r\n if (isModelHilited || !intersect)\r\n isHilited = hilites.subcategories.hasPair(feature.subCategoryId);\r\n\r\n let isFlashed = false;\r\n if (flashed && allowFlash)\r\n isFlashed = feature.elementId.lower === flashed.lower && feature.elementId.upper === flashed.upper;\r\n\r\n let newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n newFlags = isHilited ? (newFlags | OvrFlags.Hilited) : (newFlags & ~OvrFlags.Hilited);\r\n if (pickExcludes) {\r\n newFlags = pickExcludes.hasPair(feature.elementId) ? (newFlags | OvrFlags.InvisibleDuringPick) : (newFlags & ~OvrFlags.InvisibleDuringPick);\r\n }\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags) {\r\n this._anyOverridden = true;\r\n this._anyHilited = this._anyHilited || isHilited || OvrFlags.None !== (newFlags & OvrFlags.Emphasized);\r\n }\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private updateFlashed(data: Texture2DDataUpdater, map: RenderFeatureTable, pickExcludes: Id64.Uint32Set | undefined, flashed?: Id64.Uint32Pair): void {\r\n if (true === this._options.noFlash && !pickExcludes)\r\n return;\r\n\r\n this._anyOverridden = false;\r\n const elemId = { lower: 0, upper: 0 };\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i * 4 * 3;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter and we can't flash it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n let isFlashed = false;\r\n let thisElemId: Id64.Uint32Pair | undefined;\r\n if (flashed && !this._options.noFlash) {\r\n thisElemId = map.getElementIdPair(i, elemId);\r\n isFlashed = thisElemId.lower === flashed.lower && thisElemId.upper === flashed.upper;\r\n }\r\n\r\n let newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n if (pickExcludes) {\r\n if (!thisElemId) {\r\n thisElemId = map.getElementIdPair(i, elemId);\r\n }\r\n\r\n newFlags = pickExcludes.hasPair(thisElemId) ? (newFlags | OvrFlags.InvisibleDuringPick) : (newFlags & ~OvrFlags.InvisibleDuringPick);\r\n }\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags)\r\n this._anyOverridden = true;\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private constructor(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n this.target = target;\r\n this._options = options;\r\n this._cleanup = cleanup;\r\n }\r\n\r\n public static createFromTarget(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n return new FeatureOverrides(target, options, cleanup);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._lut; }\r\n\r\n public [Symbol.dispose]() {\r\n this._lut = dispose(this._lut);\r\n if (this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n public initFromMap(map: RenderFeatureTable) {\r\n const nFeatures = map.numFeatures;\r\n assert(0 < nFeatures);\r\n\r\n this._lut = dispose(this._lut);\r\n\r\n const ovrs: FeatureSymbology.Overrides = this.target.currentFeatureSymbologyOverrides;\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n const hilite = this.target.hilites;\r\n this._lut = this._initialize(map, ovrs, this.target.pickExclusions, hilite, this.target.flashed);\r\n this._lastFlashId = Id64.invalid;\r\n this._hiliteSyncObserver = {};\r\n this._pickExclusionsSyncObserver = {};\r\n }\r\n\r\n public update(features: RenderFeatureTable) {\r\n let ovrs: FeatureSymbology.Overrides | undefined = this.target.currentFeatureSymbologyOverrides;\r\n const ovrsUpdated = ovrs !== this._mostRecentSymbologyOverrides;\r\n if (ovrsUpdated)\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n else\r\n ovrs = undefined;\r\n\r\n const flashedId = this.target.flashedId;\r\n\r\n const hilite = this.target.hilites;\r\n const hiliteUpdated = !sync(this.target.hiliteSyncTarget, this._hiliteSyncObserver);\r\n const pickExcludesUpdated = !sync(this.target.pickExclusionsSyncTarget, this._pickExclusionsSyncObserver);\r\n\r\n if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId || pickExcludesUpdated) {\r\n // _lut can be undefined if context was lost, (gl.createTexture returns null)\r\n if (this._lut) {\r\n this._update(\r\n features,\r\n this._lut,\r\n undefined !== ovrs || pickExcludesUpdated ? this.target.pickExclusions : undefined,\r\n this.target.flashed,\r\n undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs,\r\n );\r\n }\r\n\r\n this._lastFlashId = flashedId;\r\n }\r\n }\r\n\r\n public bindLUTParams(uniform: UniformHandle): void {\r\n uniform.setUniform2fv(this._lutParams);\r\n }\r\n\r\n public bindLUT(uniform: UniformHandle): void {\r\n if (this._lut)\r\n this._lut.bindSampler(uniform, TextureUnit.FeatureSymbology);\r\n }\r\n\r\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\r\n uniform.setUniform1f(this._uniformSymbologyFlags);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"FeatureOverrides.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, expectDefined, Id64 } from \"@itwin/core-bentley\";\r\nimport { FeatureAppearanceProvider, PackedFeature, RenderFeatureTable } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../../../render/FeatureSymbology\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { EmphasisFlags, TextureUnit } from \"./RenderFlags\";\r\nimport { sync, SyncObserver } from \"./Sync\";\r\nimport { System } from \"./System\";\r\nimport { Hilites, Target } from \"./Target\";\r\nimport { Texture2DDataUpdater, Texture2DHandle, TextureHandle } from \"./Texture\";\r\nimport { BatchOptions } from \"../../../common/render/BatchOptions\";\r\nimport { DisplayParams } from \"../../../common/internal/render/DisplayParams\";\r\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\r\nimport { computeDimensions } from \"../../../common/internal/render/VertexTable\";\r\n\r\nexport function isFeatureHilited(feature: PackedFeature, hilites: Hilites, isModelHilited: boolean): boolean {\r\n if (hilites.isEmpty)\r\n return false;\r\n\r\n if (\"union\" === hilites.modelSubCategoryMode)\r\n return isModelHilited || hilites.elements.hasPair(feature.elementId) || hilites.subcategories.hasPair(feature.subCategoryId);\r\n\r\n return hilites.elements.hasPair(feature.elementId) || (isModelHilited && hilites.subcategories.hasPair(feature.subCategoryId));\r\n}\r\n\r\n/** @internal */\r\nexport type FeatureOverridesCleanup = () => void;\r\n\r\nconst scratchPackedFeature = PackedFeature.createWithIndex();\r\n\r\n/** @internal */\r\nexport class FeatureOverrides implements WebGLDisposable {\r\n public readonly target: Target;\r\n private readonly _options: BatchOptions;\r\n private _lut?: Texture2DHandle;\r\n private _mostRecentSymbologyOverrides?: FeatureSymbology.Overrides;\r\n private _lastFlashId = Id64.invalid;\r\n private _hiliteSyncObserver: SyncObserver = {};\r\n private _pickExclusionsSyncObserver: SyncObserver = {};\r\n private _anyOverridden = true;\r\n private _allHidden = true;\r\n private _anyTranslucent = true;\r\n private _anyViewIndependentTranslucent = true;\r\n private _anyOpaque = true;\r\n private _anyHilited = true;\r\n private _lutParams = new Float32Array(2);\r\n private _uniformSymbologyFlags: EmphasisFlags = EmphasisFlags.None;\r\n private _cleanup?: FeatureOverridesCleanup;\r\n\r\n public get anyOverridden() { return this._anyOverridden; }\r\n public get allHidden() { return this._allHidden; }\r\n public get anyTranslucent() { return this._anyTranslucent; }\r\n public get anyViewIndependentTranslucent() { return this._anyViewIndependentTranslucent; }\r\n public get anyOpaque() { return this._anyOpaque; }\r\n public get anyHilited() { return this._anyHilited; }\r\n\r\n /** For tests. */\r\n public get lutData(): Uint8Array | undefined { return this._lut?.dataBytes; }\r\n public get byteLength(): number { return undefined !== this._lut ? this._lut.bytesUsed : 0; }\r\n public get isUniform() { return 3 === this._lutParams[0] && 1 === this._lutParams[1]; }\r\n\r\n private updateUniformSymbologyFlags(): void {\r\n this._uniformSymbologyFlags = EmphasisFlags.None;\r\n if (!this.isUniform || !this._lut?.dataBytes)\r\n return;\r\n\r\n let flags = expectDefined(this._lut.dataBytes[0]);\r\n if (0 !== (flags & OvrFlags.Flashed))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Flashed;\r\n\r\n if (0 !== (flags & OvrFlags.NonLocatable))\r\n this._uniformSymbologyFlags |= EmphasisFlags.NonLocatable;\r\n\r\n if (!this._anyHilited)\r\n return;\r\n\r\n flags = expectDefined(this._lut.dataBytes[1]) << 8;\r\n if (0 !== (flags & OvrFlags.Hilited))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Hilite;\r\n\r\n if (0 !== (flags & OvrFlags.Emphasized))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Emphasized;\r\n }\r\n\r\n public getUniformOverrides(): Uint8Array {\r\n assert(this.isUniform);\r\n assert(undefined !== this._lut);\r\n assert(undefined !== this._lut.dataBytes);\r\n return this._lut.dataBytes;\r\n }\r\n\r\n private _initialize(provider: FeatureAppearanceProvider, map: RenderFeatureTable, ovrs: FeatureSymbology.Overrides, pickExcludes: Id64.Uint32Set, hilite: Hilites, flashed?: Id64.Uint32Pair): Texture2DHandle | undefined {\r\n const nFeatures = map.numFeatures;\r\n const dims = computeDimensions(nFeatures, 3, 0, System.instance.maxTextureSize);\r\n const width = dims.width;\r\n const height = dims.height;\r\n assert(width * height >= nFeatures);\r\n\r\n this._lutParams[0] = width;\r\n this._lutParams[1] = height;\r\n\r\n const data = new Uint8Array(width * height * 4);\r\n const creator = new Texture2DDataUpdater(data);\r\n this.buildLookupTable(provider, creator, map, ovrs, pickExcludes, flashed, hilite);\r\n\r\n return TextureHandle.createForData(width, height, data, true, GL.Texture.WrapMode.ClampToEdge);\r\n }\r\n\r\n private _update(provider: FeatureAppearanceProvider, map: RenderFeatureTable, lut: Texture2DHandle, pickExcludes: Id64.Uint32Set | undefined, flashed?: Id64.Uint32Pair, hilites?: Hilites, ovrs?: FeatureSymbology.Overrides) {\r\n const updater = new Texture2DDataUpdater(expectDefined(lut.dataBytes));\r\n\r\n if (undefined === ovrs) {\r\n this.updateFlashedAndHilited(updater, map, pickExcludes, flashed, hilites);\r\n } else {\r\n assert(undefined !== hilites);\r\n this.buildLookupTable(provider, updater, map, ovrs, pickExcludes, flashed, hilites);\r\n }\r\n\r\n lut.update(updater);\r\n }\r\n\r\n private setTransparency(transparency: number, viewDependentTransparency: true | undefined, data: Texture2DDataUpdater, transparencyByteIndex: number, curFlags: OvrFlags): OvrFlags {\r\n // transparency in range [0, 1]...convert to byte and invert so 0=transparent...\r\n let alpha = 1.0 - transparency;\r\n alpha = Math.floor(0xff * alpha + 0.5);\r\n if ((0xff - alpha) < DisplayParams.minTransparency)\r\n alpha = 0xff;\r\n\r\n data.setByteAtIndex(transparencyByteIndex, alpha);\r\n if (0xff === alpha) {\r\n this._anyOpaque = true;\r\n } else {\r\n this._anyTranslucent = true;\r\n if (!viewDependentTransparency) {\r\n curFlags |= OvrFlags.ViewIndependentTransparency;\r\n this._anyViewIndependentTranslucent = true;\r\n }\r\n }\r\n\r\n return curFlags;\r\n }\r\n\r\n private buildLookupTable(\r\n provider: FeatureAppearanceProvider,\r\n data: Texture2DDataUpdater,\r\n map: RenderFeatureTable,\r\n ovr: FeatureSymbology.Overrides,\r\n pickExclude: Id64.Uint32Set | undefined,\r\n flashedIdParts: Id64.Uint32Pair | undefined,\r\n hilites: Hilites\r\n ) {\r\n const allowHilite = true !== this._options.noHilite;\r\n const allowFlash = true !== this._options.noFlash;\r\n const allowEmphasis = true !== this._options.noEmphasis;\r\n\r\n let isModelHilited = false;\r\n const prevModelId = { lower: -1, upper: -1 };\r\n\r\n this._anyOpaque = this._anyTranslucent = this._anyViewIndependentTranslucent = this._anyHilited = false;\r\n\r\n let nHidden = 0;\r\n let nOverridden = 0;\r\n\r\n // NB: We currently use 3 RGBA values per feature as follows:\r\n // [0]\r\n // RG = override flags (see OvrFlags enum)\r\n // B = line code\r\n // A = line weight (if we need an extra byte in future, could combine code+weight into a single byte).\r\n // [1]\r\n // RGB = rgb\r\n // A = alpha\r\n // [2]\r\n // RGB = line rgb\r\n // A = line alpha\r\n for (const feature of map.iterable(scratchPackedFeature)) {\r\n const i = feature.index;\r\n const dataIndex = i * 4 * 3;\r\n\r\n if (prevModelId.lower !== feature.modelId.lower || prevModelId.upper !== feature.modelId.upper) {\r\n prevModelId.lower = feature.modelId.lower;\r\n prevModelId.upper = feature.modelId.upper;\r\n isModelHilited = allowHilite && hilites.models.hasPair(feature.modelId);\r\n }\r\n\r\n const app = provider.getFeatureAppearance(\r\n ovr,\r\n feature.elementId.lower, feature.elementId.upper,\r\n feature.subCategoryId.lower, feature.subCategoryId.upper,\r\n feature.geometryClass,\r\n feature.modelId.lower, feature.modelId.upper,\r\n map.type, feature.animationNodeId);\r\n\r\n // NB: If the appearance is fully transparent, then:\r\n // - For normal (\"primary\") models, getAppearance() returns undefined.\r\n // - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.\r\n // (The latter is how we clip the classified model using the classifiers).\r\n if (undefined === app) {\r\n // The feature is not visible. We don't care about any of the other overrides, because we're not going to render it.\r\n data.setOvrFlagsAtIndex(dataIndex, OvrFlags.Visibility);\r\n nHidden++;\r\n nOverridden++;\r\n continue;\r\n }\r\n\r\n let flags = app.nonLocatable ? OvrFlags.NonLocatable : OvrFlags.None;\r\n if (allowHilite && isFeatureHilited(feature, hilites, isModelHilited)) {\r\n flags |= OvrFlags.Hilited;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (allowEmphasis && app.emphasized) {\r\n flags |= OvrFlags.Emphasized;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (app.overridesRgb && app.rgb) {\r\n flags |= OvrFlags.Rgb;\r\n const rgb = app.rgb;\r\n data.setByteAtIndex(dataIndex + 4, rgb.r);\r\n data.setByteAtIndex(dataIndex + 5, rgb.g);\r\n data.setByteAtIndex(dataIndex + 6, rgb.b);\r\n }\r\n\r\n if (undefined !== app.transparency) {\r\n flags |= OvrFlags.Alpha;\r\n flags = this.setTransparency(app.transparency, app.viewDependentTransparency, data, dataIndex + 7, flags);\r\n }\r\n\r\n const lineRgb = app.getLineRgb();\r\n if (lineRgb) {\r\n flags |= OvrFlags.LineRgb;\r\n data.setByteAtIndex(dataIndex + 8, lineRgb.r);\r\n data.setByteAtIndex(dataIndex + 9, lineRgb.g);\r\n data.setByteAtIndex(dataIndex + 10, lineRgb.b);\r\n }\r\n\r\n const lineTransp = app.getLineTransparency();\r\n if (undefined !== lineTransp) {\r\n flags |= OvrFlags.LineAlpha;\r\n flags = this.setTransparency(lineTransp, app.viewDependentTransparency, data, dataIndex + 11, flags);\r\n }\r\n\r\n if (app.overridesWeight && app.weight) {\r\n flags |= OvrFlags.Weight;\r\n let weight = app.weight;\r\n weight = Math.min(31, weight);\r\n weight = Math.max(1, weight);\r\n data.setByteAtIndex(dataIndex + 3, weight);\r\n }\r\n\r\n if (app.overridesLinePixels && app.linePixels) {\r\n flags |= OvrFlags.LineCode;\r\n const lineCode = LineCode.valueFromLinePixels(app.linePixels);\r\n data.setByteAtIndex(dataIndex + 2, lineCode);\r\n }\r\n\r\n if (app.ignoresMaterial)\r\n flags |= OvrFlags.IgnoreMaterial;\r\n\r\n if (allowFlash && undefined !== flashedIdParts && feature.elementId.lower === flashedIdParts.lower && feature.elementId.upper === flashedIdParts.upper)\r\n flags |= OvrFlags.Flashed;\r\n\r\n if (pickExclude?.hasPair(feature.elementId)) {\r\n flags |= OvrFlags.InvisibleDuringPick;\r\n ++nHidden;\r\n }\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, flags);\r\n if (OvrFlags.None !== flags)\r\n nOverridden++;\r\n }\r\n\r\n this._allHidden = (nHidden === map.numFeatures);\r\n this._anyOverridden = (nOverridden > 0);\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n // NB: If hilites is undefined, it means that the hilited set has not changed.\r\n private updateFlashedAndHilited(data: Texture2DDataUpdater, map: RenderFeatureTable, pickExcludes: Id64.Uint32Set | undefined, flashed?: Id64.Uint32Pair, hilites?: Hilites) {\r\n if (!hilites || true === this._options.noHilite) {\r\n this.updateFlashed(data, map, pickExcludes, flashed);\r\n return;\r\n }\r\n\r\n const allowFlash = true !== this._options.noFlash;\r\n const intersect = \"intersection\" === hilites.modelSubCategoryMode;\r\n\r\n this._anyOverridden = this._anyHilited = false;\r\n for (const feature of map.iterable(scratchPackedFeature)) {\r\n const dataIndex = feature.index * 4 * 3;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter. We can't flash it and don't want to hilite it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n const isModelHilited = hilites.models.hasPair(feature.modelId);\r\n let isHilited = isModelHilited && !intersect;\r\n if (!isHilited)\r\n isHilited = hilites.elements.hasPair(feature.elementId);\r\n\r\n if (!isHilited)\r\n if (isModelHilited || !intersect)\r\n isHilited = hilites.subcategories.hasPair(feature.subCategoryId);\r\n\r\n let isFlashed = false;\r\n if (flashed && allowFlash)\r\n isFlashed = feature.elementId.lower === flashed.lower && feature.elementId.upper === flashed.upper;\r\n\r\n let newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n newFlags = isHilited ? (newFlags | OvrFlags.Hilited) : (newFlags & ~OvrFlags.Hilited);\r\n if (pickExcludes) {\r\n newFlags = pickExcludes.hasPair(feature.elementId) ? (newFlags | OvrFlags.InvisibleDuringPick) : (newFlags & ~OvrFlags.InvisibleDuringPick);\r\n }\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags) {\r\n this._anyOverridden = true;\r\n this._anyHilited = this._anyHilited || isHilited || OvrFlags.None !== (newFlags & OvrFlags.Emphasized);\r\n }\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private updateFlashed(data: Texture2DDataUpdater, map: RenderFeatureTable, pickExcludes: Id64.Uint32Set | undefined, flashed?: Id64.Uint32Pair): void {\r\n if (true === this._options.noFlash && !pickExcludes)\r\n return;\r\n\r\n this._anyOverridden = false;\r\n const elemId = { lower: 0, upper: 0 };\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i * 4 * 3;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter and we can't flash it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n let isFlashed = false;\r\n let thisElemId: Id64.Uint32Pair | undefined;\r\n if (flashed && !this._options.noFlash) {\r\n thisElemId = map.getElementIdPair(i, elemId);\r\n isFlashed = thisElemId.lower === flashed.lower && thisElemId.upper === flashed.upper;\r\n }\r\n\r\n let newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n if (pickExcludes) {\r\n if (!thisElemId) {\r\n thisElemId = map.getElementIdPair(i, elemId);\r\n }\r\n\r\n newFlags = pickExcludes.hasPair(thisElemId) ? (newFlags | OvrFlags.InvisibleDuringPick) : (newFlags & ~OvrFlags.InvisibleDuringPick);\r\n }\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags)\r\n this._anyOverridden = true;\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private constructor(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n this.target = target;\r\n this._options = options;\r\n this._cleanup = cleanup;\r\n }\r\n\r\n public static createFromTarget(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n return new FeatureOverrides(target, options, cleanup);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._lut; }\r\n\r\n public [Symbol.dispose]() {\r\n this._lut = dispose(this._lut);\r\n if (this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n public initFromMap(map: RenderFeatureTable, provider: FeatureAppearanceProvider) {\r\n const nFeatures = map.numFeatures;\r\n assert(0 < nFeatures);\r\n\r\n this._lut = dispose(this._lut);\r\n\r\n const ovrs: FeatureSymbology.Overrides = this.target.currentFeatureSymbologyOverrides;\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n const hilite = this.target.hilites;\r\n this._lut = this._initialize(provider, map, ovrs, this.target.pickExclusions, hilite, this.target.flashed);\r\n this._lastFlashId = Id64.invalid;\r\n this._hiliteSyncObserver = {};\r\n this._pickExclusionsSyncObserver = {};\r\n }\r\n\r\n public update(features: RenderFeatureTable, provider: FeatureAppearanceProvider) {\r\n let ovrs: FeatureSymbology.Overrides | undefined = this.target.currentFeatureSymbologyOverrides;\r\n const ovrsUpdated = ovrs !== this._mostRecentSymbologyOverrides;\r\n if (ovrsUpdated)\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n else\r\n ovrs = undefined;\r\n\r\n const flashedId = this.target.flashedId;\r\n\r\n const hilite = this.target.hilites;\r\n const hiliteUpdated = !sync(this.target.hiliteSyncTarget, this._hiliteSyncObserver);\r\n const pickExcludesUpdated = !sync(this.target.pickExclusionsSyncTarget, this._pickExclusionsSyncObserver);\r\n\r\n if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId || pickExcludesUpdated) {\r\n // _lut can be undefined if context was lost, (gl.createTexture returns null)\r\n if (this._lut) {\r\n this._update(\r\n provider,\r\n features,\r\n this._lut,\r\n undefined !== ovrs || pickExcludesUpdated ? this.target.pickExclusions : undefined,\r\n this.target.flashed,\r\n undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs,\r\n );\r\n }\r\n\r\n this._lastFlashId = flashedId;\r\n }\r\n }\r\n\r\n public bindLUTParams(uniform: UniformHandle): void {\r\n uniform.setUniform2fv(this._lutParams);\r\n }\r\n\r\n public bindLUT(uniform: UniformHandle): void {\r\n if (this._lut)\r\n this._lut.bindSampler(uniform, TextureUnit.FeatureSymbology);\r\n }\r\n\r\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\r\n uniform.setUniform1f(this._uniformSymbologyFlags);\r\n }\r\n}\r\n"]}
|
|
@@ -66,7 +66,7 @@ export declare class PerTargetBatchData {
|
|
|
66
66
|
constructor(target: Target);
|
|
67
67
|
[Symbol.dispose](): void;
|
|
68
68
|
getThematicSensors(batch: Batch): ThematicSensors;
|
|
69
|
-
getFeatureOverrides(batch: Batch): FeatureOverrides;
|
|
69
|
+
getFeatureOverrides(batch: Batch, provider: FeatureAppearanceProvider): FeatureOverrides;
|
|
70
70
|
getContours(batch: Batch): Contours;
|
|
71
71
|
collectStatistics(stats: RenderMemory.Statistics): void;
|
|
72
72
|
/** Exposed strictly for tests. */
|
|
@@ -85,7 +85,7 @@ export declare class PerTargetData {
|
|
|
85
85
|
onTargetDisposed(target: Target): void;
|
|
86
86
|
collectStatistics(stats: RenderMemory.Statistics): void;
|
|
87
87
|
getThematicSensors(target: Target): ThematicSensors;
|
|
88
|
-
getFeatureOverrides(target: Target): FeatureOverrides;
|
|
88
|
+
getFeatureOverrides(target: Target, provider: FeatureAppearanceProvider): FeatureOverrides;
|
|
89
89
|
getContours(target: Target): Contours;
|
|
90
90
|
private getBatchData;
|
|
91
91
|
}
|
|
@@ -117,7 +117,7 @@ export declare class Batch extends Graphic {
|
|
|
117
117
|
addCommands(commands: RenderCommands): void;
|
|
118
118
|
get isPickable(): boolean;
|
|
119
119
|
getThematicSensors(target: Target): ThematicSensors;
|
|
120
|
-
getOverrides(target: Target): FeatureOverrides;
|
|
120
|
+
getOverrides(target: Target, provider: FeatureAppearanceProvider): FeatureOverrides;
|
|
121
121
|
getContours(target: Target): Contours;
|
|
122
122
|
onTargetDisposed(target: Target): void;
|
|
123
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graphic.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/Graphic.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAmB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAuB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxJ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,gBAAgB;AAChB,8BAAsB,OAAQ,SAAQ,aAAc,YAAW,eAAe;aAC5D,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAC5D,aAAoB,UAAU,IAAI,OAAO,CAAC;IAC1C,aAAoB,UAAU,IAAI,OAAO,CAAC;IACnC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IACrE,WAAW,IAAI,SAAS,GAAG,SAAS;CAC5C;AAED,qBAAa,YAAa,SAAQ,OAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEhB,OAAO,EAAE,OAAO;IAKnC,IAAW,OAAO,IAAI,aAAa,CAA0B;IAE7D,OAAO,CAAC,WAAW,CAAS;IAC5B,IAAW,UAAU,IAAI,OAAO,CAA6B;IACtD,OAAO,IAAI,IAAI;IACf,cAAc,IAAI,IAAI;IAGtB,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAI9C,UAAU,CAAC,KAAK,EAAE,OAAO;IAIlC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAGlD,IAAoB,UAAU,IAAI,OAAO,CAExC;IACe,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAGnE,WAAW,IAAI,SAAS,GAAG,SAAS;CAGrD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,6CAA6C;AAC7C,qBAAa,kBAAkB;IAC7B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,6DAAoE;IACxG,SAAS,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC/B,SAAS,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC;gBAE1B,MAAM,EAAE,MAAM;IAI1B,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IASxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAWjD,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"Graphic.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/Graphic.ts"],"names":[],"mappings":"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"}
|