@itwin/core-frontend 4.0.0-dev.46 → 4.0.0-dev.50
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/ElementLocateManager.js +1 -1
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +2 -0
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +2 -0
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +2 -0
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +8 -4
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/render/MockRender.d.ts +4 -4
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +13 -4
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +16 -13
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +2 -2
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.js +2 -2
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/webgl/BatchState.d.ts +3 -2
- package/lib/cjs/render/webgl/BatchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BatchState.js +4 -3
- package/lib/cjs/render/webgl/BatchState.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +4 -2
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.d.ts +3 -3
- package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +24 -28
- package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts +3 -3
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +13 -4
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +2 -2
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +6 -7
- package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +24 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +27 -3
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +3 -2
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +34 -25
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts +5 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +2 -0
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +5 -1
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/ElementLocateManager.js +1 -1
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +2 -0
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/ViewState.d.ts +2 -0
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +2 -0
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +8 -4
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/render/MockRender.d.ts +4 -4
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/Pixel.d.ts +13 -4
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +17 -14
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +2 -2
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/VisibleFeature.js +2 -2
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/webgl/BatchState.d.ts +3 -2
- package/lib/esm/render/webgl/BatchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BatchState.js +4 -3
- package/lib/esm/render/webgl/BatchState.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +4 -2
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.d.ts +3 -3
- package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js +24 -28
- package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts +3 -3
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +1 -1
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +14 -5
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +2 -2
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +7 -8
- package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +24 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +24 -1
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +3 -2
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +35 -26
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts +5 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +2 -0
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +5 -1
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +4 -0
- package/package.json +19 -19
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
|
-
import { PackedFeature,
|
|
4
|
+
import { PackedFeature, RenderFeatureTable } from "@itwin/core-common";
|
|
5
5
|
import { BatchOptions } from "../GraphicBuilder";
|
|
6
6
|
import { WebGLDisposable } from "./Disposable";
|
|
7
7
|
import { UniformHandle } from "./UniformHandle";
|
|
@@ -47,8 +47,8 @@ export declare class FeatureOverrides implements WebGLDisposable {
|
|
|
47
47
|
static createFromTarget(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined): FeatureOverrides;
|
|
48
48
|
get isDisposed(): boolean;
|
|
49
49
|
dispose(): void;
|
|
50
|
-
initFromMap(map:
|
|
51
|
-
update(features:
|
|
50
|
+
initFromMap(map: RenderFeatureTable): void;
|
|
51
|
+
update(features: RenderFeatureTable): void;
|
|
52
52
|
bindLUTParams(uniform: UniformHandle): void;
|
|
53
53
|
bindLUT(uniform: UniformHandle): void;
|
|
54
54
|
bindUniformSymbologyFlags(uniform: UniformHandle): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureOverrides.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,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;AAkC3C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAQ3G;AAED,gBAAgB;AAChB,oBAAY,uBAAuB,GAAG,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FeatureOverrides.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,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;AAkC3C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAQ3G;AAED,gBAAgB;AAChB,oBAAY,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,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,gBAAgB;IA0HxB,OAAO,CAAC,uBAAuB;IA6C/B,OAAO,CAAC,aAAa;IA8BrB,OAAO;WAMO,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,GAAG,SAAS;IAIlH,IAAW,UAAU,IAAI,OAAO,CAAoC;IAE7D,OAAO;IAQP,WAAW,CAAC,GAAG,EAAE,kBAAkB;IAcnC,MAAM,CAAC,QAAQ,EAAE,kBAAkB;IAuBnC,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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* @module WebGL
|
|
7
7
|
*/
|
|
8
8
|
import { assert, dispose, Id64 } from "@itwin/core-bentley";
|
|
9
|
+
import { PackedFeature } from "@itwin/core-common";
|
|
9
10
|
import { DisplayParams } from "../primitives/DisplayParams";
|
|
10
11
|
import { LineCode } from "./LineCode";
|
|
11
12
|
import { GL } from "./GL";
|
|
@@ -43,6 +44,7 @@ export function isFeatureHilited(feature, hilites, isModelHilited) {
|
|
|
43
44
|
return isModelHilited || hilites.elements.hasPair(feature.elementId) || hilites.subcategories.hasPair(feature.subCategoryId);
|
|
44
45
|
return hilites.elements.hasPair(feature.elementId) || (isModelHilited && hilites.subcategories.hasPair(feature.subCategoryId));
|
|
45
46
|
}
|
|
47
|
+
const scratchPackedFeature = PackedFeature.createWithIndex();
|
|
46
48
|
/** @internal */
|
|
47
49
|
export class FeatureOverrides {
|
|
48
50
|
constructor(target, options, cleanup) {
|
|
@@ -121,8 +123,8 @@ export class FeatureOverrides {
|
|
|
121
123
|
const allowHilite = true !== this._options.noHilite;
|
|
122
124
|
const allowFlash = true !== this._options.noFlash;
|
|
123
125
|
const allowEmphasis = true !== this._options.noEmphasis;
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
+
let isModelHilited = false;
|
|
127
|
+
const prevModelId = { lower: -1, upper: -1 };
|
|
126
128
|
this._anyOpaque = this._anyTranslucent = this._anyViewIndependentTranslucent = this._anyHilited = false;
|
|
127
129
|
let nHidden = 0;
|
|
128
130
|
let nOverridden = 0;
|
|
@@ -134,10 +136,15 @@ export class FeatureOverrides {
|
|
|
134
136
|
// [1]
|
|
135
137
|
// RGB = rgb
|
|
136
138
|
// A = alpha
|
|
137
|
-
for (
|
|
138
|
-
const
|
|
139
|
+
for (const feature of map.iterable(scratchPackedFeature)) {
|
|
140
|
+
const i = feature.index;
|
|
139
141
|
const dataIndex = i * 4 * 2;
|
|
140
|
-
|
|
142
|
+
if (prevModelId.lower !== feature.modelId.lower || prevModelId.upper !== feature.modelId.upper) {
|
|
143
|
+
prevModelId.lower = feature.modelId.lower;
|
|
144
|
+
prevModelId.upper = feature.modelId.upper;
|
|
145
|
+
isModelHilited = allowHilite && hilites.models.hasPair(feature.modelId);
|
|
146
|
+
}
|
|
147
|
+
const app = this.target.currentBranch.getFeatureAppearance(ovr, feature.elementId.lower, feature.elementId.upper, feature.subCategoryId.lower, feature.subCategoryId.upper, feature.geometryClass, feature.modelId.lower, feature.modelId.upper, map.type, feature.animationNodeId);
|
|
141
148
|
// NB: If the appearance is fully transparent, then:
|
|
142
149
|
// - For normal ("primary") models, getAppearance() returns undefined.
|
|
143
150
|
// - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.
|
|
@@ -216,37 +223,25 @@ export class FeatureOverrides {
|
|
|
216
223
|
}
|
|
217
224
|
const allowFlash = true !== this._options.noFlash;
|
|
218
225
|
const intersect = "intersection" === hilites.modelSubCategoryMode;
|
|
219
|
-
let isModelHilited = false;
|
|
220
|
-
if (!hilites.models.isEmpty) {
|
|
221
|
-
const modelId = Id64.getUint32Pair(map.modelId);
|
|
222
|
-
isModelHilited = hilites.models.hasPair(modelId);
|
|
223
|
-
}
|
|
224
226
|
this._anyOverridden = this._anyHilited = false;
|
|
225
|
-
for (
|
|
226
|
-
const dataIndex =
|
|
227
|
+
for (const feature of map.iterable(scratchPackedFeature)) {
|
|
228
|
+
const dataIndex = feature.index * 4 * 2;
|
|
227
229
|
const oldFlags = data.getOvrFlagsAtIndex(dataIndex);
|
|
228
230
|
if (0 /* None */ !== (oldFlags & 1 /* Visibility */)) {
|
|
229
231
|
// If it's invisible, none of the other flags matter. We can't flash it and don't want to hilite it.
|
|
230
232
|
this._anyOverridden = true;
|
|
231
233
|
continue;
|
|
232
234
|
}
|
|
233
|
-
|
|
235
|
+
const isModelHilited = hilites.models.hasPair(feature.modelId);
|
|
234
236
|
let isHilited = isModelHilited && !intersect;
|
|
235
|
-
if (!isHilited
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
if (isModelHilited || !intersect) {
|
|
241
|
-
const subcat = map.getSubCategoryIdPair(i);
|
|
242
|
-
isHilited = hilites.subcategories.hasPair(subcat);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
237
|
+
if (!isHilited)
|
|
238
|
+
isHilited = hilites.elements.hasPair(feature.elementId);
|
|
239
|
+
if (!isHilited)
|
|
240
|
+
if (isModelHilited || !intersect)
|
|
241
|
+
isHilited = hilites.subcategories.hasPair(feature.subCategoryId);
|
|
245
242
|
let isFlashed = false;
|
|
246
|
-
if (flashed && allowFlash)
|
|
247
|
-
|
|
248
|
-
isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;
|
|
249
|
-
}
|
|
243
|
+
if (flashed && allowFlash)
|
|
244
|
+
isFlashed = feature.elementId.lower === flashed.lower && feature.elementId.upper === flashed.upper;
|
|
250
245
|
let newFlags = isFlashed ? (oldFlags | 16 /* Flashed */) : (oldFlags & ~16 /* Flashed */);
|
|
251
246
|
newFlags = isHilited ? (newFlags | 256 /* Hilited */) : (newFlags & ~256 /* Hilited */);
|
|
252
247
|
data.setOvrFlagsAtIndex(dataIndex, newFlags);
|
|
@@ -261,6 +256,7 @@ export class FeatureOverrides {
|
|
|
261
256
|
if (true === this._options.noFlash)
|
|
262
257
|
return;
|
|
263
258
|
this._anyOverridden = false;
|
|
259
|
+
const elemId = { lower: 0, upper: 0 };
|
|
264
260
|
for (let i = 0; i < map.numFeatures; i++) {
|
|
265
261
|
const dataIndex = i * 4 * 2;
|
|
266
262
|
const oldFlags = data.getOvrFlagsAtIndex(dataIndex);
|
|
@@ -271,7 +267,7 @@ export class FeatureOverrides {
|
|
|
271
267
|
}
|
|
272
268
|
let isFlashed = false;
|
|
273
269
|
if (flashed) {
|
|
274
|
-
|
|
270
|
+
map.getElementIdPair(i, elemId);
|
|
275
271
|
isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;
|
|
276
272
|
}
|
|
277
273
|
const newFlags = isFlashed ? (oldFlags | 16 /* Flashed */) : (oldFlags & ~16 /* Flashed */);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureOverrides.js","sourceRoot":"","sources":["../../../../src/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, Id64 } from \"@itwin/core-bentley\";\r\nimport { PackedFeature, PackedFeatureTable } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { DisplayParams } from \"../primitives/DisplayParams\";\r\nimport { BatchOptions } from \"../GraphicBuilder\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { EmphasisFlags, OvrFlags, 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\n\r\nfunction computeWidthAndHeight(nEntries: number, nRgbaPerEntry: number, nExtraRgba: number = 0, nTables: number = 1): { width: number, height: number } {\r\n const maxSize = System.instance.maxTextureSize;\r\n const nRgba = nEntries * nRgbaPerEntry * nTables + nExtraRgba;\r\n\r\n if (nRgba < maxSize)\r\n return { width: nRgba, height: 1 };\r\n\r\n // Make roughly square to reduce unused space in last row\r\n let width = Math.ceil(Math.sqrt(nRgba));\r\n\r\n // Ensure a given entry's RGBA values all fit on the same row.\r\n const remainder = width % nRgbaPerEntry;\r\n if (0 !== remainder) {\r\n width += nRgbaPerEntry - remainder;\r\n }\r\n\r\n // Compute height\r\n const height = Math.ceil(nRgba / width);\r\n\r\n assert(height <= maxSize);\r\n assert(width <= maxSize);\r\n assert(width * height >= nRgba);\r\n assert(Math.floor(height) === height);\r\n assert(Math.floor(width) === width);\r\n\r\n // Row padding should never be necessary...\r\n assert(0 === width % nRgbaPerEntry);\r\n\r\n return { width, height };\r\n}\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\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 _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 2 === 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)\r\n return;\r\n\r\n let flags = 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 = 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: PackedFeatureTable, ovrs: FeatureSymbology.Overrides, hilite: Hilites, flashed?: Id64.Uint32Pair): Texture2DHandle | undefined {\r\n const nFeatures = map.numFeatures;\r\n const dims = computeWidthAndHeight(nFeatures, 2);\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, 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: PackedFeatureTable, lut: Texture2DHandle, flashed?: Id64.Uint32Pair, hilites?: Hilites, ovrs?: FeatureSymbology.Overrides) {\r\n const updater = new Texture2DDataUpdater(lut.dataBytes!);\r\n\r\n if (undefined === ovrs) {\r\n this.updateFlashedAndHilited(updater, map, flashed, hilites);\r\n } else {\r\n assert(undefined !== hilites);\r\n this.buildLookupTable(updater, map, ovrs, flashed, hilites);\r\n }\r\n\r\n lut.update(updater);\r\n }\r\n\r\n private buildLookupTable(data: Texture2DDataUpdater, map: PackedFeatureTable, ovr: FeatureSymbology.Overrides, 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 const modelIdParts = Id64.getUint32Pair(map.modelId);\r\n const isModelHilited = allowHilite && hilites.models.hasPair(modelIdParts);\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 2 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 for (let i = 0; i < map.numFeatures; i++) {\r\n const feature = map.getPackedFeature(i);\r\n const dataIndex = i * 4 * 2;\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 modelIdParts.lower, modelIdParts.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 // transparency in range [0, 1]...convert to byte and invert so 0=transparent...\r\n flags |= OvrFlags.Alpha;\r\n let alpha = 1.0 - app.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(dataIndex + 7, alpha);\r\n if (0xff === alpha) {\r\n this._anyOpaque = true;\r\n } else {\r\n this._anyTranslucent = true;\r\n if (!app.viewDependentTransparency) {\r\n flags |= OvrFlags.ViewIndependentTransparency;\r\n this._anyViewIndependentTranslucent = true;\r\n }\r\n }\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 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: PackedFeatureTable, flashed?: Id64.Uint32Pair, hilites?: Hilites) {\r\n if (!hilites || true === this._options.noHilite) {\r\n this.updateFlashed(data, map, 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 let isModelHilited = false;\r\n if (!hilites.models.isEmpty) {\r\n const modelId = Id64.getUint32Pair(map.modelId);\r\n isModelHilited = hilites.models.hasPair(modelId);\r\n }\r\n\r\n this._anyOverridden = this._anyHilited = false;\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i* 4 * 2;\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 let elemId;\r\n let isHilited = isModelHilited && !intersect;\r\n if (!isHilited && !hilites.elements.isEmpty) {\r\n elemId = map.getElementIdPair(i);\r\n isHilited = hilites.elements.hasPair(elemId);\r\n }\r\n\r\n if (!isHilited && !hilites.subcategories.isEmpty) {\r\n if (isModelHilited || !intersect) {\r\n const subcat = map.getSubCategoryIdPair(i);\r\n isHilited = hilites.subcategories.hasPair(subcat);\r\n }\r\n }\r\n\r\n let isFlashed = false;\r\n if (flashed && allowFlash) {\r\n elemId = elemId ?? map.getElementIdPair(i);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\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\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: PackedFeatureTable, flashed?: Id64.Uint32Pair): void {\r\n if (true === this._options.noFlash)\r\n return;\r\n\r\n this._anyOverridden = false;\r\n\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i * 4 * 2;\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 if (flashed) {\r\n const elemId = map.getElementIdPair(i);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\r\n\r\n const newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\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 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: PackedFeatureTable) {\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, hilite, this.target.flashed);\r\n this._lastFlashId = Id64.invalid;\r\n this._hiliteSyncObserver = {};\r\n }\r\n\r\n public update(features: PackedFeatureTable) {\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 hiliteSyncTarget = this.target.hiliteSyncTarget;\r\n const hiliteUpdated = !sync(hiliteSyncTarget, this._hiliteSyncObserver);\r\n\r\n const hilite = this.target.hilites;\r\n if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId) {\r\n // _lut can be undefined if context was lost, (gl.createTexture returns null)\r\n if (this._lut)\r\n this._update(features, this._lut, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);\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/render/webgl/FeatureOverrides.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B,OAAO,EAA2B,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,IAAI,EAAgB,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAmB,aAAa,EAAE,MAAM,WAAW,CAAC;AAEjF,SAAS,qBAAqB,CAAC,QAAgB,EAAE,aAAqB,EAAE,aAAqB,CAAC,EAAE,UAAkB,CAAC;IACjH,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;IAE9D,IAAI,KAAK,GAAG,OAAO;QACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAErC,yDAAyD;IACzD,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,8DAA8D;IAC9D,MAAM,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC;IACxC,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,KAAK,IAAI,aAAa,GAAG,SAAS,CAAC;KACpC;IAED,iBAAiB;IACjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAExC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;IAC1B,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IAEpC,2CAA2C;IAC3C,MAAM,CAAC,CAAC,KAAK,KAAK,GAAG,aAAa,CAAC,CAAC;IAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAsB,EAAE,OAAgB,EAAE,cAAuB;IAChG,IAAI,OAAO,CAAC,OAAO;QACjB,OAAO,KAAK,CAAC;IAEf,IAAI,OAAO,KAAK,OAAO,CAAC,oBAAoB;QAC1C,OAAO,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAE/H,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AACjI,CAAC;AAKD,MAAM,oBAAoB,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;AAE7D,gBAAgB;AAChB,MAAM,OAAO,gBAAgB;IA8R3B,YAAoB,MAAc,EAAE,OAAqB,EAAE,OAA4C;QAzR/F,iBAAY,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,wBAAmB,GAAiB,EAAE,CAAC;QACvC,mBAAc,GAAG,IAAI,CAAC;QACtB,eAAU,GAAG,IAAI,CAAC;QAClB,oBAAe,GAAG,IAAI,CAAC;QACvB,mCAA8B,GAAG,IAAI,CAAC;QACtC,eAAU,GAAG,IAAI,CAAC;QAClB,gBAAW,GAAG,IAAI,CAAC;QACnB,eAAU,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,2BAAsB,gBAAqC;QAiRjE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAjRD,IAAW,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1D,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAW,cAAc,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5D,IAAW,6BAA6B,KAAK,OAAO,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC1F,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEpD,iBAAiB;IACjB,IAAW,OAAO,KAA6B,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7E,IAAW,UAAU,KAAa,OAAO,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAW,SAAS,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,2BAA2B;QACjC,IAAI,CAAC,sBAAsB,eAAqB,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI;YAC/B,OAAO;QAET,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,KAAK,mBAAmB,CAAC;YAClC,IAAI,CAAC,sBAAsB,mBAAyB,CAAC;QAEvD,IAAI,CAAC,KAAK,CAAC,KAAK,wBAAwB,CAAC;YACvC,IAAI,CAAC,sBAAsB,wBAA8B,CAAC;QAE5D,IAAI,CAAC,IAAI,CAAC,WAAW;YACnB,OAAO;QAET,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK,oBAAmB,CAAC;YAClC,IAAI,CAAC,sBAAsB,kBAAwB,CAAC;QAEtD,IAAI,CAAC,KAAK,CAAC,KAAK,uBAAsB,CAAC;YACrC,IAAI,CAAC,sBAAsB,sBAA4B,CAAC;IAC5D,CAAC;IAEM,mBAAmB;QACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,GAAuB,EAAE,IAAgC,EAAE,MAAe,EAAE,OAAyB;QACvH,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC;QAClC,MAAM,IAAI,GAAG,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,SAAS,CAAC,CAAC;QAEpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAE5B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3D,OAAO,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjG,CAAC;IAEO,OAAO,CAAC,GAAuB,EAAE,GAAoB,EAAE,OAAyB,EAAE,OAAiB,EAAE,IAAiC;QAC5I,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAU,CAAC,CAAC;QAEzD,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC9D;aAAM;YACL,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAC7D;QAED,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAEO,gBAAgB,CAAC,IAA0B,EAAE,GAAuB,EAAE,GAA+B,EAAE,cAA2C,EAAE,OAAgB;QAC1K,MAAM,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAExD,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QAE7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAExG,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,6DAA6D;QAC7D,OAAO;QACP,+CAA+C;QAC/C,qBAAqB;QACrB,2GAA2G;QAC3G,OAAO;QACP,iBAAiB;QACjB,iBAAiB;QACjB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;YACxD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;YACxB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC9F,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC1C,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC1C,cAAc,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACzE;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAoB,CACxD,GAAG,EACH,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,EAChD,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,EACxD,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAC5C,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;YAErC,oDAAoD;YACpD,uEAAuE;YACvE,gJAAgJ;YAChJ,0EAA0E;YAC1E,IAAI,SAAS,KAAK,GAAG,EAAE;gBACrB,oHAAoH;gBACpH,IAAI,CAAC,kBAAkB,CAAC,SAAS,qBAAsB,CAAC;gBACxD,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,CAAC;gBACd,SAAS;aACV;YAED,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,uBAAuB,CAAC,aAAc,CAAC;YACrE,IAAI,WAAW,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE;gBACrE,KAAK,qBAAoB,CAAC;gBAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;YAED,IAAI,aAAa,IAAI,GAAG,CAAC,UAAU,EAAE;gBACnC,KAAK,wBAAuB,CAAC;gBAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;YAED,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,EAAE;gBAC/B,KAAK,eAAgB,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3C;YAED,IAAI,SAAS,KAAK,GAAG,CAAC,YAAY,EAAE;gBAClC,gFAAgF;gBAChF,KAAK,iBAAkB,CAAC;gBACxB,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC;gBACnC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,eAAe;oBAChD,KAAK,GAAG,IAAI,CAAC;gBAEf,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC1C,IAAI,IAAI,KAAK,KAAK,EAAE;oBAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;iBACxB;qBAAM;oBACL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE;wBAClC,KAAK,0CAAwC,CAAC;wBAC9C,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;qBAC5C;iBACF;aACF;YAED,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE;gBACrC,KAAK,oBAAmB,CAAC;gBACzB,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;gBACxB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC9B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;aAC5C;YAED,IAAI,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,UAAU,EAAE;gBAC7C,KAAK,qBAAqB,CAAC;gBAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC9D,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;aAC9C;YAED,IAAI,GAAG,CAAC,eAAe;gBACrB,KAAK,0BAA2B,CAAC;YAEnC,IAAI,UAAU,IAAI,SAAS,KAAK,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK;gBACpJ,KAAK,oBAAoB,CAAC;YAE5B,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1C,IAAI,iBAAkB,KAAK;gBACzB,WAAW,EAAE,CAAC;SACjB;QAED,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAED,8EAA8E;IACtE,uBAAuB,CAAC,IAA0B,EAAE,GAAuB,EAAE,OAAyB,EAAE,OAAiB;QAC/H,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO;SACR;QAED,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAClD,MAAM,SAAS,GAAG,cAAc,KAAK,OAAO,CAAC,oBAAoB,CAAC;QAElE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;YACxD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,iBAAkB,CAAC,QAAQ,qBAAsB,CAAC,EAAE;gBACtD,oGAAoG;gBACpG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,SAAS;aACV;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/D,IAAI,SAAS,GAAG,cAAc,IAAI,CAAC,SAAS,CAAC;YAC7C,IAAI,CAAC,SAAS;gBACZ,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE1D,IAAI,CAAC,SAAS;gBACZ,IAAI,cAAc,IAAI,CAAC,SAAS;oBAC9B,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAErE,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,OAAO,IAAI,UAAU;gBACvB,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;YAErG,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC;YAC1F,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,oBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,kBAAiB,CAAC,CAAC;YAEtF,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,iBAAkB,QAAQ,EAAE;gBAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,SAAS,IAAI,iBAAkB,CAAC,QAAQ,uBAAsB,CAAC,CAAC;aACxG;SACF;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAEO,aAAa,CAAC,IAA0B,EAAE,GAAuB,EAAE,OAAyB;QAClG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO;YAChC,OAAO;QAET,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,iBAAkB,CAAC,QAAQ,qBAAsB,CAAC,EAAE;gBACtD,2EAA2E;gBAC3E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,SAAS;aACV;YAED,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,OAAO,EAAE;gBACX,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChC,SAAS,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;aAC9E;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC;YAC5F,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,iBAAkB,QAAQ;gBAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAQM,MAAM,CAAC,gBAAgB,CAAC,MAAc,EAAE,OAAqB,EAAE,OAA4C;QAChH,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;SAC3B;IACH,CAAC;IAEM,WAAW,CAAC,GAAuB;QACxC,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC;QAClC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAEtB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAI,GAA+B,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC;QACtF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,QAA4B;QACxC,IAAI,IAAI,GAA2C,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC;QAChG,MAAM,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,6BAA6B,CAAC;QAChE,IAAI,WAAW;YACb,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;;YAE1C,IAAI,GAAG,SAAS,CAAC;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACtD,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAExE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACnC,IAAI,WAAW,IAAI,aAAa,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;YACnE,6EAA6E;YAC7E,IAAI,IAAI,CAAC,IAAI;gBACX,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEzH,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;IACH,CAAC;IAEM,aAAa,CAAC,OAAsB;QACzC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO,CAAC,OAAsB;QACnC,IAAI,IAAI,CAAC,IAAI;YACX,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAEM,yBAAyB,CAAC,OAAsB;QACrD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpD,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 WebGL\r\n */\r\n\r\nimport { assert, dispose, Id64 } from \"@itwin/core-bentley\";\r\nimport { PackedFeature, RenderFeatureTable } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { DisplayParams } from \"../primitives/DisplayParams\";\r\nimport { BatchOptions } from \"../GraphicBuilder\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { EmphasisFlags, OvrFlags, 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\n\r\nfunction computeWidthAndHeight(nEntries: number, nRgbaPerEntry: number, nExtraRgba: number = 0, nTables: number = 1): { width: number, height: number } {\r\n const maxSize = System.instance.maxTextureSize;\r\n const nRgba = nEntries * nRgbaPerEntry * nTables + nExtraRgba;\r\n\r\n if (nRgba < maxSize)\r\n return { width: nRgba, height: 1 };\r\n\r\n // Make roughly square to reduce unused space in last row\r\n let width = Math.ceil(Math.sqrt(nRgba));\r\n\r\n // Ensure a given entry's RGBA values all fit on the same row.\r\n const remainder = width % nRgbaPerEntry;\r\n if (0 !== remainder) {\r\n width += nRgbaPerEntry - remainder;\r\n }\r\n\r\n // Compute height\r\n const height = Math.ceil(nRgba / width);\r\n\r\n assert(height <= maxSize);\r\n assert(width <= maxSize);\r\n assert(width * height >= nRgba);\r\n assert(Math.floor(height) === height);\r\n assert(Math.floor(width) === width);\r\n\r\n // Row padding should never be necessary...\r\n assert(0 === width % nRgbaPerEntry);\r\n\r\n return { width, height };\r\n}\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 _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 2 === 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)\r\n return;\r\n\r\n let flags = 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 = 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, hilite: Hilites, flashed?: Id64.Uint32Pair): Texture2DHandle | undefined {\r\n const nFeatures = map.numFeatures;\r\n const dims = computeWidthAndHeight(nFeatures, 2);\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, 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, flashed?: Id64.Uint32Pair, hilites?: Hilites, ovrs?: FeatureSymbology.Overrides) {\r\n const updater = new Texture2DDataUpdater(lut.dataBytes!);\r\n\r\n if (undefined === ovrs) {\r\n this.updateFlashedAndHilited(updater, map, flashed, hilites);\r\n } else {\r\n assert(undefined !== hilites);\r\n this.buildLookupTable(updater, map, ovrs, flashed, hilites);\r\n }\r\n\r\n lut.update(updater);\r\n }\r\n\r\n private buildLookupTable(data: Texture2DDataUpdater, map: RenderFeatureTable, ovr: FeatureSymbology.Overrides, 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 2 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 for (const feature of map.iterable(scratchPackedFeature)) {\r\n const i = feature.index;\r\n const dataIndex = i * 4 * 2;\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 // transparency in range [0, 1]...convert to byte and invert so 0=transparent...\r\n flags |= OvrFlags.Alpha;\r\n let alpha = 1.0 - app.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(dataIndex + 7, alpha);\r\n if (0xff === alpha) {\r\n this._anyOpaque = true;\r\n } else {\r\n this._anyTranslucent = true;\r\n if (!app.viewDependentTransparency) {\r\n flags |= OvrFlags.ViewIndependentTransparency;\r\n this._anyViewIndependentTranslucent = true;\r\n }\r\n }\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 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, flashed?: Id64.Uint32Pair, hilites?: Hilites) {\r\n if (!hilites || true === this._options.noHilite) {\r\n this.updateFlashed(data, map, 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 * 2;\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\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, flashed?: Id64.Uint32Pair): void {\r\n if (true === this._options.noFlash)\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 * 2;\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 if (flashed) {\r\n map.getElementIdPair(i, elemId);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\r\n\r\n const newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\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 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, hilite, this.target.flashed);\r\n this._lastFlashId = Id64.invalid;\r\n this._hiliteSyncObserver = {};\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 hiliteSyncTarget = this.target.hiliteSyncTarget;\r\n const hiliteUpdated = !sync(hiliteSyncTarget, this._hiliteSyncObserver);\r\n\r\n const hilite = this.target.hilites;\r\n if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId) {\r\n // _lut can be undefined if context was lost, (gl.createTexture returns null)\r\n if (this._lut)\r\n this._update(features, this._lut, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);\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,7 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
|
-
import { ElementAlignedBox3d, FeatureAppearanceProvider,
|
|
4
|
+
import { ElementAlignedBox3d, FeatureAppearanceProvider, RenderFeatureTable, ViewFlags } from "@itwin/core-common";
|
|
5
5
|
import { Transform } from "@itwin/core-geometry";
|
|
6
6
|
import { IModelConnection } from "../../IModelConnection";
|
|
7
7
|
import { FeatureSymbology } from "../FeatureSymbology";
|
|
@@ -81,7 +81,7 @@ export declare class PerTargetData {
|
|
|
81
81
|
/** @internal */
|
|
82
82
|
export declare class Batch extends Graphic {
|
|
83
83
|
readonly graphic: RenderGraphic;
|
|
84
|
-
readonly featureTable:
|
|
84
|
+
readonly featureTable: RenderFeatureTable;
|
|
85
85
|
readonly range: ElementAlignedBox3d;
|
|
86
86
|
private readonly _context;
|
|
87
87
|
/** Public strictly for tests. */
|
|
@@ -93,7 +93,7 @@ export declare class Batch extends Graphic {
|
|
|
93
93
|
get batchIModel(): IModelConnection | undefined;
|
|
94
94
|
setContext(batchId: number, iModel: IModelConnection | undefined): void;
|
|
95
95
|
resetContext(): void;
|
|
96
|
-
constructor(graphic: RenderGraphic, features:
|
|
96
|
+
constructor(graphic: RenderGraphic, features: RenderFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions);
|
|
97
97
|
private _isDisposed;
|
|
98
98
|
get isDisposed(): boolean;
|
|
99
99
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graphic.js","sourceRoot":"","sources":["../../../../src/render/webgl/Graphic.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { ElementAlignedBox3d, FeatureAppearanceProvider, PackedFeatureTable, ThematicDisplayMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { GraphicBranch, GraphicBranchFrustum, GraphicBranchOptions } from \"../GraphicBranch\";\r\nimport { BatchOptions } from \"../GraphicBuilder\";\r\nimport { GraphicList, RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { EdgeSettings } from \"./EdgeSettings\";\r\nimport { FeatureOverrides } from \"./FeatureOverrides\";\r\nimport { PlanarClassifier } from \"./PlanarClassifier\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\nimport { TextureDrape } from \"./TextureDrape\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\n\r\n/** @internal */\r\nexport abstract class Graphic extends RenderGraphic implements WebGLDisposable {\r\n public abstract addCommands(_commands: RenderCommands): void;\r\n public abstract get isDisposed(): boolean;\r\n public abstract get isPickable(): boolean;\r\n public addHiliteCommands(_commands: RenderCommands, _pass: RenderPass): void { assert(false); }\r\n public toPrimitive(): Primitive | undefined { return undefined; }\r\n}\r\n\r\nexport class GraphicOwner extends Graphic {\r\n private readonly _graphic: Graphic;\r\n\r\n public constructor(graphic: Graphic) {\r\n super();\r\n this._graphic = graphic;\r\n }\r\n\r\n public get graphic(): RenderGraphic { return this._graphic; }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n public dispose(): void { this._isDisposed = true; }\r\n public disposeGraphic(): void {\r\n this.graphic.dispose();\r\n }\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.graphic.collectStatistics(stats);\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n this._graphic.addCommands(commands);\r\n }\r\n public override get isPickable(): boolean {\r\n return this._graphic.isPickable;\r\n }\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n this._graphic.addHiliteCommands(commands, pass);\r\n }\r\n public override toPrimitive(): Primitive | undefined {\r\n return this._graphic.toPrimitive();\r\n }\r\n}\r\n\r\n/** Transiently assigned to a Batch while rendering a frame, reset afterward. Used to provide context for pick IDs.\r\n * @internal\r\n */\r\nexport interface BatchContext {\r\n batchId: number;\r\n iModel?: IModelConnection;\r\n}\r\n\r\n/** @internal exported strictly for tests. */\r\nexport class PerTargetBatchData {\r\n public readonly target: Target;\r\n protected readonly _featureOverrides = new Map<FeatureSymbology.Source | undefined, FeatureOverrides>();\r\n protected _thematicSensors?: ThematicSensors;\r\n\r\n public constructor(target: Target) {\r\n this.target = target;\r\n }\r\n\r\n public dispose(): void {\r\n this._thematicSensors = dispose(this._thematicSensors);\r\n for (const value of this._featureOverrides.values())\r\n dispose(value);\r\n\r\n this._featureOverrides.clear();\r\n }\r\n\r\n public getThematicSensors(batch: Batch): ThematicSensors {\r\n if (this._thematicSensors && !this._thematicSensors.matchesTarget(this.target))\r\n this._thematicSensors = dispose(this._thematicSensors);\r\n\r\n if (!this._thematicSensors)\r\n this._thematicSensors = ThematicSensors.create(this.target, batch.range);\r\n\r\n this._thematicSensors.update(this.target.uniforms.frustum.viewMatrix);\r\n return this._thematicSensors;\r\n }\r\n\r\n public getFeatureOverrides(batch: Batch): FeatureOverrides {\r\n const source = this.target.currentFeatureSymbologyOverrides?.source;\r\n let ovrs = this._featureOverrides.get(source);\r\n if (!ovrs) {\r\n const cleanup = source ? source.onSourceDisposed.addOnce(() => this.onSourceDisposed(source)) : undefined;\r\n this._featureOverrides.set(source, ovrs = FeatureOverrides.createFromTarget(this.target, batch.options, cleanup));\r\n ovrs.initFromMap(batch.featureTable);\r\n }\r\n\r\n ovrs.update(batch.featureTable);\r\n return ovrs;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (this._thematicSensors)\r\n stats.addThematicTexture(this._thematicSensors.bytesUsed);\r\n\r\n for (const ovrs of this._featureOverrides.values())\r\n stats.addFeatureOverrides(ovrs.byteLength);\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public get featureOverrides() { return this._featureOverrides; }\r\n\r\n private onSourceDisposed(source: FeatureSymbology.Source): void {\r\n const ovrs = this._featureOverrides.get(source);\r\n if (ovrs) {\r\n this._featureOverrides.delete(source);\r\n ovrs.dispose();\r\n }\r\n }\r\n}\r\n\r\n/** @internal exported strictly for tests. */\r\nexport class PerTargetData {\r\n private readonly _batch: Batch;\r\n private readonly _data: PerTargetBatchData[] = [];\r\n\r\n public constructor(batch: Batch) {\r\n this._batch = batch;\r\n }\r\n\r\n public dispose(): void {\r\n for (const data of this._data) {\r\n data.target.onBatchDisposed(this._batch);\r\n data.dispose();\r\n }\r\n\r\n this._data.length = 0;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this._data.length === 0;\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public get data(): PerTargetBatchData[] { return this._data; }\r\n\r\n public onTargetDisposed(target: Target): void {\r\n const index = this._data.findIndex((x) => x.target === target);\r\n if (-1 === index)\r\n return;\r\n\r\n const data = this._data[index];\r\n data.dispose();\r\n this._data.splice(index, 1);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n for (const data of this._data)\r\n data.collectStatistics(stats);\r\n }\r\n\r\n public getThematicSensors(target: Target): ThematicSensors {\r\n return this.getBatchData(target).getThematicSensors(this._batch);\r\n }\r\n\r\n public getFeatureOverrides(target: Target): FeatureOverrides {\r\n return this.getBatchData(target).getFeatureOverrides(this._batch);\r\n }\r\n\r\n private getBatchData(target: Target): PerTargetBatchData {\r\n let data = this._data.find((x) => x.target === target);\r\n if (!data) {\r\n this._data.push(data = new PerTargetBatchData(target));\r\n target.addBatch(this._batch);\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Batch extends Graphic {\r\n public readonly graphic: RenderGraphic;\r\n public readonly featureTable: PackedFeatureTable;\r\n public readonly range: ElementAlignedBox3d;\r\n private readonly _context: BatchContext = { batchId: 0 };\r\n /** Public strictly for tests. */\r\n public readonly perTargetData = new PerTargetData(this);\r\n public readonly options: BatchOptions;\r\n\r\n // Chiefly for debugging.\r\n public get tileId(): string | undefined {\r\n return this.options.tileId;\r\n }\r\n\r\n public get locateOnly(): boolean {\r\n return true === this.options.locateOnly;\r\n }\r\n\r\n public get batchId() { return this._context.batchId; }\r\n public get batchIModel() { return this._context.iModel; }\r\n public setContext(batchId: number, iModel: IModelConnection | undefined) {\r\n this._context.batchId = batchId;\r\n this._context.iModel = iModel;\r\n }\r\n public resetContext() {\r\n this._context.batchId = 0;\r\n this._context.iModel = undefined;\r\n }\r\n\r\n public constructor(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions) {\r\n super();\r\n this.graphic = graphic;\r\n this.featureTable = features;\r\n this.range = range;\r\n this.options = options ?? {};\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean {\r\n return this._isDisposed && this.perTargetData.isDisposed;\r\n }\r\n\r\n // Note: This does not remove FeatureOverrides from the array, but rather disposes of the WebGL resources they contain\r\n public dispose() {\r\n dispose(this.graphic);\r\n\r\n this.perTargetData.dispose();\r\n this._isDisposed = true;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.graphic.collectStatistics(stats);\r\n stats.addFeatureTable(this.featureTable.byteLength);\r\n this.perTargetData.collectStatistics(stats);\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n commands.addBatch(this);\r\n }\r\n\r\n public override get isPickable(): boolean {\r\n return true;\r\n }\r\n\r\n public getThematicSensors(target: Target): ThematicSensors {\r\n assert(target.plan.thematic !== undefined, \"thematic display settings must exist\");\r\n assert(target.plan.thematic.displayMode === ThematicDisplayMode.InverseDistanceWeightedSensors, \"thematic display mode must be sensor-based\");\r\n assert(target.plan.thematic.sensorSettings.sensors.length > 0, \"must have at least one sensor to process\");\r\n\r\n return this.perTargetData.getThematicSensors(target);\r\n }\r\n\r\n public getOverrides(target: Target): FeatureOverrides {\r\n return this.perTargetData.getFeatureOverrides(target);\r\n }\r\n\r\n public onTargetDisposed(target: Target) {\r\n this.perTargetData.onTargetDisposed(target);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Branch extends Graphic {\r\n public readonly branch: GraphicBranch;\r\n public localToWorldTransform: Transform;\r\n public readonly clips?: ClipVolume;\r\n public readonly planarClassifier?: PlanarClassifier;\r\n public readonly textureDrape?: TextureDrape;\r\n public readonly layerClassifiers?: Map<number, PlanarClassifier>;\r\n public readonly edgeSettings?: EdgeSettings;\r\n public readonly iModel?: IModelConnection; // used chiefly for readPixels to identify context of picked Ids.\r\n public readonly frustum?: GraphicBranchFrustum;\r\n public readonly appearanceProvider?: FeatureAppearanceProvider;\r\n public readonly secondaryClassifiers?: PlanarClassifier[];\r\n\r\n public constructor(branch: GraphicBranch, localToWorld: Transform, viewFlags?: ViewFlags, opts?: GraphicBranchOptions) {\r\n super();\r\n this.branch = branch;\r\n this.localToWorldTransform = localToWorld;\r\n\r\n if (undefined !== viewFlags)\r\n branch.setViewFlags(viewFlags);\r\n\r\n if (!opts)\r\n return;\r\n\r\n this.appearanceProvider = opts.appearanceProvider;\r\n this.clips = opts.clipVolume as ClipVolume | undefined;\r\n this.iModel = opts.iModel;\r\n this.frustum = opts.frustum;\r\n\r\n if (opts.hline)\r\n this.edgeSettings = EdgeSettings.create(opts.hline);\r\n\r\n if (opts.classifierOrDrape instanceof PlanarClassifier)\r\n this.planarClassifier = opts.classifierOrDrape;\r\n else if (opts.classifierOrDrape instanceof TextureDrape)\r\n this.textureDrape = opts.classifierOrDrape;\r\n\r\n if (opts.secondaryClassifiers) {\r\n this.secondaryClassifiers = new Array<PlanarClassifier>();\r\n opts.secondaryClassifiers.forEach((classifier) => {\r\n if (classifier instanceof PlanarClassifier)\r\n this.secondaryClassifiers?.push(classifier);\r\n });\r\n }\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return 0 === this.branch.entries.length;\r\n }\r\n\r\n public dispose() {\r\n this.branch.dispose();\r\n }\r\n\r\n public override get isPickable(): boolean {\r\n return this.branch.entries.some((gf) => (gf as Graphic).isPickable);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.branch.collectStatistics(stats);\r\n }\r\n\r\n private shouldAddCommands(commands: RenderCommands): boolean {\r\n const nodeId = commands.target.getAnimationTransformNodeId(this.branch.animationNodeId);\r\n return undefined === nodeId || nodeId === commands.target.currentAnimationTransformNodeId;\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n if (this.shouldAddCommands(commands))\r\n commands.addBranch(this);\r\n }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n if (this.shouldAddCommands(commands))\r\n commands.addHiliteBranch(this, pass);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AnimationTransformBranch extends Graphic {\r\n public readonly nodeId: number;\r\n public readonly graphic: Graphic;\r\n\r\n public constructor(graphic: RenderGraphic, nodeId: number) {\r\n super();\r\n assert(graphic instanceof Graphic);\r\n this.graphic = graphic;\r\n this.nodeId = nodeId;\r\n }\r\n\r\n public override dispose() {\r\n this.graphic.dispose();\r\n }\r\n\r\n public override get isDisposed() {\r\n return this.graphic.isDisposed;\r\n }\r\n\r\n public override get isPickable() {\r\n return this.graphic.isPickable;\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics) {\r\n this.graphic.collectStatistics(stats);\r\n }\r\n\r\n public override addCommands(commands: RenderCommands) {\r\n commands.target.currentAnimationTransformNodeId = this.nodeId;\r\n this.graphic.addCommands(commands);\r\n commands.target.currentAnimationTransformNodeId = undefined;\r\n }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass) {\r\n commands.target.currentAnimationTransformNodeId = this.nodeId;\r\n this.graphic.addHiliteCommands(commands, pass);\r\n commands.target.currentAnimationTransformNodeId = undefined;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WorldDecorations extends Branch {\r\n public constructor(viewFlags: ViewFlags) {\r\n super(new GraphicBranch(), Transform.identity, viewFlags);\r\n\r\n // World decorations ignore all the symbology overrides for the \"scene\" geometry...\r\n this.branch.symbologyOverrides = new FeatureSymbology.Overrides();\r\n }\r\n\r\n public init(decs: GraphicList): void {\r\n this.branch.clear();\r\n for (const dec of decs) {\r\n this.branch.add(dec);\r\n }\r\n }\r\n}\r\n/** @internal */\r\nexport class GraphicsArray extends Graphic {\r\n // Note: We assume the graphics array we get contains undisposed graphics to start\r\n constructor(public graphics: RenderGraphic[]) { super(); }\r\n\r\n public get isDisposed(): boolean { return 0 === this.graphics.length; }\r\n\r\n public override get isPickable(): boolean {\r\n return this.graphics.some((x) => (x as Graphic).isPickable);\r\n }\r\n\r\n public dispose() {\r\n for (const graphic of this.graphics)\r\n dispose(graphic);\r\n this.graphics.length = 0;\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n for (const graphic of this.graphics) {\r\n (graphic as Graphic).addCommands(commands);\r\n }\r\n }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n for (const graphic of this.graphics) {\r\n (graphic as Graphic).addHiliteCommands(commands, pass);\r\n }\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n for (const graphic of this.graphics)\r\n graphic.collectStatistics(stats);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Graphic.js","sourceRoot":"","sources":["../../../../src/render/webgl/Graphic.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { ElementAlignedBox3d, FeatureAppearanceProvider, RenderFeatureTable, ThematicDisplayMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { GraphicBranch, GraphicBranchFrustum, GraphicBranchOptions } from \"../GraphicBranch\";\r\nimport { BatchOptions } from \"../GraphicBuilder\";\r\nimport { GraphicList, RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { EdgeSettings } from \"./EdgeSettings\";\r\nimport { FeatureOverrides } from \"./FeatureOverrides\";\r\nimport { PlanarClassifier } from \"./PlanarClassifier\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\nimport { TextureDrape } from \"./TextureDrape\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\n\r\n/** @internal */\r\nexport abstract class Graphic extends RenderGraphic implements WebGLDisposable {\r\n public abstract addCommands(_commands: RenderCommands): void;\r\n public abstract get isDisposed(): boolean;\r\n public abstract get isPickable(): boolean;\r\n public addHiliteCommands(_commands: RenderCommands, _pass: RenderPass): void { assert(false); }\r\n public toPrimitive(): Primitive | undefined { return undefined; }\r\n}\r\n\r\nexport class GraphicOwner extends Graphic {\r\n private readonly _graphic: Graphic;\r\n\r\n public constructor(graphic: Graphic) {\r\n super();\r\n this._graphic = graphic;\r\n }\r\n\r\n public get graphic(): RenderGraphic { return this._graphic; }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n public dispose(): void { this._isDisposed = true; }\r\n public disposeGraphic(): void {\r\n this.graphic.dispose();\r\n }\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.graphic.collectStatistics(stats);\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n this._graphic.addCommands(commands);\r\n }\r\n public override get isPickable(): boolean {\r\n return this._graphic.isPickable;\r\n }\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n this._graphic.addHiliteCommands(commands, pass);\r\n }\r\n public override toPrimitive(): Primitive | undefined {\r\n return this._graphic.toPrimitive();\r\n }\r\n}\r\n\r\n/** Transiently assigned to a Batch while rendering a frame, reset afterward. Used to provide context for pick IDs.\r\n * @internal\r\n */\r\nexport interface BatchContext {\r\n batchId: number;\r\n iModel?: IModelConnection;\r\n}\r\n\r\n/** @internal exported strictly for tests. */\r\nexport class PerTargetBatchData {\r\n public readonly target: Target;\r\n protected readonly _featureOverrides = new Map<FeatureSymbology.Source | undefined, FeatureOverrides>();\r\n protected _thematicSensors?: ThematicSensors;\r\n\r\n public constructor(target: Target) {\r\n this.target = target;\r\n }\r\n\r\n public dispose(): void {\r\n this._thematicSensors = dispose(this._thematicSensors);\r\n for (const value of this._featureOverrides.values())\r\n dispose(value);\r\n\r\n this._featureOverrides.clear();\r\n }\r\n\r\n public getThematicSensors(batch: Batch): ThematicSensors {\r\n if (this._thematicSensors && !this._thematicSensors.matchesTarget(this.target))\r\n this._thematicSensors = dispose(this._thematicSensors);\r\n\r\n if (!this._thematicSensors)\r\n this._thematicSensors = ThematicSensors.create(this.target, batch.range);\r\n\r\n this._thematicSensors.update(this.target.uniforms.frustum.viewMatrix);\r\n return this._thematicSensors;\r\n }\r\n\r\n public getFeatureOverrides(batch: Batch): FeatureOverrides {\r\n const source = this.target.currentFeatureSymbologyOverrides?.source;\r\n let ovrs = this._featureOverrides.get(source);\r\n if (!ovrs) {\r\n const cleanup = source ? source.onSourceDisposed.addOnce(() => this.onSourceDisposed(source)) : undefined;\r\n this._featureOverrides.set(source, ovrs = FeatureOverrides.createFromTarget(this.target, batch.options, cleanup));\r\n ovrs.initFromMap(batch.featureTable);\r\n }\r\n\r\n ovrs.update(batch.featureTable);\r\n return ovrs;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (this._thematicSensors)\r\n stats.addThematicTexture(this._thematicSensors.bytesUsed);\r\n\r\n for (const ovrs of this._featureOverrides.values())\r\n stats.addFeatureOverrides(ovrs.byteLength);\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public get featureOverrides() { return this._featureOverrides; }\r\n\r\n private onSourceDisposed(source: FeatureSymbology.Source): void {\r\n const ovrs = this._featureOverrides.get(source);\r\n if (ovrs) {\r\n this._featureOverrides.delete(source);\r\n ovrs.dispose();\r\n }\r\n }\r\n}\r\n\r\n/** @internal exported strictly for tests. */\r\nexport class PerTargetData {\r\n private readonly _batch: Batch;\r\n private readonly _data: PerTargetBatchData[] = [];\r\n\r\n public constructor(batch: Batch) {\r\n this._batch = batch;\r\n }\r\n\r\n public dispose(): void {\r\n for (const data of this._data) {\r\n data.target.onBatchDisposed(this._batch);\r\n data.dispose();\r\n }\r\n\r\n this._data.length = 0;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this._data.length === 0;\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public get data(): PerTargetBatchData[] { return this._data; }\r\n\r\n public onTargetDisposed(target: Target): void {\r\n const index = this._data.findIndex((x) => x.target === target);\r\n if (-1 === index)\r\n return;\r\n\r\n const data = this._data[index];\r\n data.dispose();\r\n this._data.splice(index, 1);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n for (const data of this._data)\r\n data.collectStatistics(stats);\r\n }\r\n\r\n public getThematicSensors(target: Target): ThematicSensors {\r\n return this.getBatchData(target).getThematicSensors(this._batch);\r\n }\r\n\r\n public getFeatureOverrides(target: Target): FeatureOverrides {\r\n return this.getBatchData(target).getFeatureOverrides(this._batch);\r\n }\r\n\r\n private getBatchData(target: Target): PerTargetBatchData {\r\n let data = this._data.find((x) => x.target === target);\r\n if (!data) {\r\n this._data.push(data = new PerTargetBatchData(target));\r\n target.addBatch(this._batch);\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Batch extends Graphic {\r\n public readonly graphic: RenderGraphic;\r\n public readonly featureTable: RenderFeatureTable;\r\n public readonly range: ElementAlignedBox3d;\r\n private readonly _context: BatchContext = { batchId: 0 };\r\n /** Public strictly for tests. */\r\n public readonly perTargetData = new PerTargetData(this);\r\n public readonly options: BatchOptions;\r\n\r\n // Chiefly for debugging.\r\n public get tileId(): string | undefined {\r\n return this.options.tileId;\r\n }\r\n\r\n public get locateOnly(): boolean {\r\n return true === this.options.locateOnly;\r\n }\r\n\r\n public get batchId() { return this._context.batchId; }\r\n public get batchIModel() { return this._context.iModel; }\r\n public setContext(batchId: number, iModel: IModelConnection | undefined) {\r\n this._context.batchId = batchId;\r\n this._context.iModel = iModel;\r\n }\r\n public resetContext() {\r\n this._context.batchId = 0;\r\n this._context.iModel = undefined;\r\n }\r\n\r\n public constructor(graphic: RenderGraphic, features: RenderFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions) {\r\n super();\r\n this.graphic = graphic;\r\n this.featureTable = features;\r\n this.range = range;\r\n this.options = options ?? {};\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean {\r\n return this._isDisposed && this.perTargetData.isDisposed;\r\n }\r\n\r\n // Note: This does not remove FeatureOverrides from the array, but rather disposes of the WebGL resources they contain\r\n public dispose() {\r\n dispose(this.graphic);\r\n\r\n this.perTargetData.dispose();\r\n this._isDisposed = true;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.graphic.collectStatistics(stats);\r\n stats.addFeatureTable(this.featureTable.byteLength);\r\n this.perTargetData.collectStatistics(stats);\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n commands.addBatch(this);\r\n }\r\n\r\n public override get isPickable(): boolean {\r\n return true;\r\n }\r\n\r\n public getThematicSensors(target: Target): ThematicSensors {\r\n assert(target.plan.thematic !== undefined, \"thematic display settings must exist\");\r\n assert(target.plan.thematic.displayMode === ThematicDisplayMode.InverseDistanceWeightedSensors, \"thematic display mode must be sensor-based\");\r\n assert(target.plan.thematic.sensorSettings.sensors.length > 0, \"must have at least one sensor to process\");\r\n\r\n return this.perTargetData.getThematicSensors(target);\r\n }\r\n\r\n public getOverrides(target: Target): FeatureOverrides {\r\n return this.perTargetData.getFeatureOverrides(target);\r\n }\r\n\r\n public onTargetDisposed(target: Target) {\r\n this.perTargetData.onTargetDisposed(target);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Branch extends Graphic {\r\n public readonly branch: GraphicBranch;\r\n public localToWorldTransform: Transform;\r\n public readonly clips?: ClipVolume;\r\n public readonly planarClassifier?: PlanarClassifier;\r\n public readonly textureDrape?: TextureDrape;\r\n public readonly layerClassifiers?: Map<number, PlanarClassifier>;\r\n public readonly edgeSettings?: EdgeSettings;\r\n public readonly iModel?: IModelConnection; // used chiefly for readPixels to identify context of picked Ids.\r\n public readonly frustum?: GraphicBranchFrustum;\r\n public readonly appearanceProvider?: FeatureAppearanceProvider;\r\n public readonly secondaryClassifiers?: PlanarClassifier[];\r\n\r\n public constructor(branch: GraphicBranch, localToWorld: Transform, viewFlags?: ViewFlags, opts?: GraphicBranchOptions) {\r\n super();\r\n this.branch = branch;\r\n this.localToWorldTransform = localToWorld;\r\n\r\n if (undefined !== viewFlags)\r\n branch.setViewFlags(viewFlags);\r\n\r\n if (!opts)\r\n return;\r\n\r\n this.appearanceProvider = opts.appearanceProvider;\r\n this.clips = opts.clipVolume as ClipVolume | undefined;\r\n this.iModel = opts.iModel;\r\n this.frustum = opts.frustum;\r\n\r\n if (opts.hline)\r\n this.edgeSettings = EdgeSettings.create(opts.hline);\r\n\r\n if (opts.classifierOrDrape instanceof PlanarClassifier)\r\n this.planarClassifier = opts.classifierOrDrape;\r\n else if (opts.classifierOrDrape instanceof TextureDrape)\r\n this.textureDrape = opts.classifierOrDrape;\r\n\r\n if (opts.secondaryClassifiers) {\r\n this.secondaryClassifiers = new Array<PlanarClassifier>();\r\n opts.secondaryClassifiers.forEach((classifier) => {\r\n if (classifier instanceof PlanarClassifier)\r\n this.secondaryClassifiers?.push(classifier);\r\n });\r\n }\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return 0 === this.branch.entries.length;\r\n }\r\n\r\n public dispose() {\r\n this.branch.dispose();\r\n }\r\n\r\n public override get isPickable(): boolean {\r\n return this.branch.entries.some((gf) => (gf as Graphic).isPickable);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.branch.collectStatistics(stats);\r\n }\r\n\r\n private shouldAddCommands(commands: RenderCommands): boolean {\r\n const nodeId = commands.target.getAnimationTransformNodeId(this.branch.animationNodeId);\r\n return undefined === nodeId || nodeId === commands.target.currentAnimationTransformNodeId;\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n if (this.shouldAddCommands(commands))\r\n commands.addBranch(this);\r\n }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n if (this.shouldAddCommands(commands))\r\n commands.addHiliteBranch(this, pass);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AnimationTransformBranch extends Graphic {\r\n public readonly nodeId: number;\r\n public readonly graphic: Graphic;\r\n\r\n public constructor(graphic: RenderGraphic, nodeId: number) {\r\n super();\r\n assert(graphic instanceof Graphic);\r\n this.graphic = graphic;\r\n this.nodeId = nodeId;\r\n }\r\n\r\n public override dispose() {\r\n this.graphic.dispose();\r\n }\r\n\r\n public override get isDisposed() {\r\n return this.graphic.isDisposed;\r\n }\r\n\r\n public override get isPickable() {\r\n return this.graphic.isPickable;\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics) {\r\n this.graphic.collectStatistics(stats);\r\n }\r\n\r\n public override addCommands(commands: RenderCommands) {\r\n commands.target.currentAnimationTransformNodeId = this.nodeId;\r\n this.graphic.addCommands(commands);\r\n commands.target.currentAnimationTransformNodeId = undefined;\r\n }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass) {\r\n commands.target.currentAnimationTransformNodeId = this.nodeId;\r\n this.graphic.addHiliteCommands(commands, pass);\r\n commands.target.currentAnimationTransformNodeId = undefined;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WorldDecorations extends Branch {\r\n public constructor(viewFlags: ViewFlags) {\r\n super(new GraphicBranch(), Transform.identity, viewFlags);\r\n\r\n // World decorations ignore all the symbology overrides for the \"scene\" geometry...\r\n this.branch.symbologyOverrides = new FeatureSymbology.Overrides();\r\n }\r\n\r\n public init(decs: GraphicList): void {\r\n this.branch.clear();\r\n for (const dec of decs) {\r\n this.branch.add(dec);\r\n }\r\n }\r\n}\r\n/** @internal */\r\nexport class GraphicsArray extends Graphic {\r\n // Note: We assume the graphics array we get contains undisposed graphics to start\r\n constructor(public graphics: RenderGraphic[]) { super(); }\r\n\r\n public get isDisposed(): boolean { return 0 === this.graphics.length; }\r\n\r\n public override get isPickable(): boolean {\r\n return this.graphics.some((x) => (x as Graphic).isPickable);\r\n }\r\n\r\n public dispose() {\r\n for (const graphic of this.graphics)\r\n dispose(graphic);\r\n this.graphics.length = 0;\r\n }\r\n\r\n public addCommands(commands: RenderCommands): void {\r\n for (const graphic of this.graphics) {\r\n (graphic as Graphic).addCommands(commands);\r\n }\r\n }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n for (const graphic of this.graphics) {\r\n (graphic as Graphic).addHiliteCommands(commands, pass);\r\n }\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n for (const graphic of this.graphics)\r\n graphic.collectStatistics(stats);\r\n }\r\n}\r\n"]}
|
|
@@ -541,7 +541,7 @@ export class RenderCommands {
|
|
|
541
541
|
}
|
|
542
542
|
// If we have an active volume classifier then force all batches for the reality data being classified into a special render pass.
|
|
543
543
|
let savedForcedRenderPass = 255 /* None */;
|
|
544
|
-
if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.
|
|
544
|
+
if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.batchModelId === this.target.activeVolumeClassifierModelId) {
|
|
545
545
|
savedForcedRenderPass = this._forcedRenderPass;
|
|
546
546
|
this._forcedRenderPass = 20 /* VolumeClassifiedRealityData */;
|
|
547
547
|
}
|