@itwin/core-frontend 3.0.0-dev.131 → 3.0.0-dev.136
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/SheetViewState.js +2 -0
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +20 -5
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +26 -3
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +46 -7
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +0 -2
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +3 -1
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +1 -2
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +1 -0
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -0
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +1 -0
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +20 -18
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +1 -0
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +0 -3
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +0 -3
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js +5 -0
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +74 -29
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -1
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +10 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.js +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -2
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -2
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.js +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.js +17 -2
- package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +2 -2
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +6 -6
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +2 -2
- package/lib/cjs/render/webgl/glsl/Fragment.js +10 -10
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -2
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +5 -2
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
- package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts +9 -0
- package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
- package/lib/cjs/render/webgl/glsl/Wiremesh.js +40 -0
- package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -0
- package/lib/cjs/tile/B3dmReader.d.ts +1 -1
- package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
- package/lib/cjs/tile/B3dmReader.js +4 -4
- package/lib/cjs/tile/B3dmReader.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +3 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +33 -1
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/I3dmReader.d.ts +1 -1
- package/lib/cjs/tile/I3dmReader.d.ts.map +1 -1
- package/lib/cjs/tile/I3dmReader.js +4 -4
- package/lib/cjs/tile/I3dmReader.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +2 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +29 -10
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +3 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/SheetViewState.js +2 -0
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js +18 -4
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +26 -3
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +45 -7
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +0 -2
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +3 -1
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +1 -2
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +1 -0
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -0
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +1 -0
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +20 -18
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +1 -0
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +0 -3
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +0 -3
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js +5 -0
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +74 -29
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -1
- package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +10 -1
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/esm/render/webgl/glsl/Blur.js +1 -1
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -2
- package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -2
- package/lib/esm/render/webgl/glsl/Combine3Textures.js +1 -1
- package/lib/esm/render/webgl/glsl/CombineTextures.js +1 -1
- package/lib/esm/render/webgl/glsl/Composite.js +1 -1
- package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyColor.js +17 -2
- package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +2 -2
- package/lib/esm/render/webgl/glsl/CopyStencil.js +6 -6
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +2 -2
- package/lib/esm/render/webgl/glsl/Fragment.js +10 -10
- package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -2
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +5 -2
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.js +2 -2
- package/lib/esm/render/webgl/glsl/Wiremesh.d.ts +9 -0
- package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
- package/lib/esm/render/webgl/glsl/Wiremesh.js +36 -0
- package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -0
- package/lib/esm/tile/B3dmReader.d.ts +1 -1
- package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
- package/lib/esm/tile/B3dmReader.js +4 -4
- package/lib/esm/tile/B3dmReader.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +3 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +33 -1
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/I3dmReader.d.ts +1 -1
- package/lib/esm/tile/I3dmReader.d.ts.map +1 -1
- package/lib/esm/tile/I3dmReader.js +4 -4
- package/lib/esm/tile/I3dmReader.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +2 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +30 -11
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +3 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/package.json +22 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mesh.js","sourceRoot":"","sources":["../../../../src/render/webgl/Mesh.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 { Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport { FeatureIndexType, FillFlags, LinePixels, RenderMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { InstancedGraphicParams } from \"../InstancedGraphicParams\";\r\nimport { MeshParams, SegmentEdgeParams, SilhouetteParams, SurfaceType, TesselatedPolyline, VertexIndices } from \"../primitives/VertexTable\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderGeometry } from \"../RenderSystem\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { CachedGeometry, LUTGeometry, PolylineBuffers } from \"./CachedGeometry\";\r\nimport { ColorInfo } from \"./ColorInfo\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { ShaderProgramParams } from \"./DrawCommand\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\nimport { GL } from \"./GL\";\r\nimport { Graphic } from \"./Graphic\";\r\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\r\nimport { InstanceBuffers, PatternBuffers } from \"./InstancedGeometry\";\r\nimport { createMaterialInfo, MaterialInfo } from \"./Material\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderOrder, RenderPass, SurfaceBitIndex } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { Texture } from \"./Texture\";\r\nimport { VertexLUT } from \"./VertexLUT\";\r\n\r\n/** @internal */\r\nexport class MeshData implements WebGLDisposable {\r\n public readonly edgeWidth: number;\r\n public readonly hasFeatures: boolean;\r\n public readonly uniformFeatureId?: number; // Used strictly by BatchPrimitiveCommand.computeIsFlashed for flashing volume classification primitives.\r\n public readonly texture?: Texture;\r\n public readonly materialInfo?: MaterialInfo;\r\n public readonly type: SurfaceType;\r\n public readonly fillFlags: FillFlags;\r\n public readonly edgeLineCode: number; // Must call LineCode.valueFromLinePixels(val: LinePixels) and set the output to edgeLineCode\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly hasFixedNormals: boolean; // Fixed normals will not be flipped to face front (Terrain skirts).\r\n public readonly lut: VertexLUT;\r\n public readonly viewIndependentOrigin?: Point3d;\r\n private readonly _textureAlwaysDisplayed: boolean;\r\n\r\n private constructor(lut: VertexLUT, params: MeshParams, viOrigin: Point3d | undefined) {\r\n this.lut = lut;\r\n this.viewIndependentOrigin = viOrigin;\r\n\r\n this.hasFeatures = FeatureIndexType.Empty !== params.vertices.featureIndexType;\r\n if (FeatureIndexType.Uniform === params.vertices.featureIndexType)\r\n this.uniformFeatureId = params.vertices.uniformFeatureID;\r\n\r\n if (undefined !== params.surface.textureMapping) {\r\n this.texture = params.surface.textureMapping.texture as Texture;\r\n this._textureAlwaysDisplayed = params.surface.textureMapping.alwaysDisplayed;\r\n } else {\r\n this.texture = undefined;\r\n this._textureAlwaysDisplayed = false;\r\n }\r\n\r\n this.materialInfo = createMaterialInfo(params.surface.material);\r\n\r\n this.type = params.surface.type;\r\n this.fillFlags = params.surface.fillFlags;\r\n this.isPlanar = params.isPlanar;\r\n this.hasBakedLighting = params.surface.hasBakedLighting;\r\n this.hasFixedNormals = params.surface.hasFixedNormals;\r\n const edges = params.edges;\r\n this.edgeWidth = undefined !== edges ? edges.weight : 1;\r\n this.edgeLineCode = LineCode.valueFromLinePixels(undefined !== edges ? edges.linePixels : LinePixels.Solid);\r\n }\r\n\r\n public static create(params: MeshParams, viOrigin: Point3d | undefined): MeshData | undefined {\r\n const lut = VertexLUT.createFromVertexTable(params.vertices, params.auxChannels);\r\n return undefined !== lut ? new MeshData(lut, params, viOrigin) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this.texture && this.lut.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this.lut);\r\n if (this._ownsTexture)\r\n this.texture!.dispose();\r\n }\r\n\r\n public get isGlyph() { return undefined !== this.texture && this.texture.isGlyph; }\r\n public get isTextureAlwaysDisplayed() { return this.isGlyph || this._textureAlwaysDisplayed; }\r\n\r\n // Returns true if no one else owns this texture. Implies that the texture should be disposed when this object is disposed, and the texture's memory should be tracked as belonging to this object.\r\n private get _ownsTexture(): boolean {\r\n return undefined !== this.texture && !this.texture?.hasOwner;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addVertexTable(this.lut.bytesUsed);\r\n if (this._ownsTexture)\r\n stats.addTexture(this.texture!.bytesUsed);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshRenderGeometry {\r\n public readonly data: MeshData;\r\n public readonly surface?: SurfaceGeometry;\r\n public readonly segmentEdges?: EdgeGeometry;\r\n public readonly silhouetteEdges?: SilhouetteEdgeGeometry;\r\n public readonly polylineEdges?: PolylineEdgeGeometry;\r\n public readonly range: Range3d;\r\n\r\n private constructor(data: MeshData, params: MeshParams) {\r\n this.data = data;\r\n this.range = params.vertices.qparams.computeRange();\r\n this.surface = SurfaceGeometry.create(data, params.surface.indices);\r\n const edges = params.edges;\r\n if (!edges || data.type === SurfaceType.VolumeClassifier)\r\n return;\r\n\r\n if (edges.silhouettes)\r\n this.silhouetteEdges = SilhouetteEdgeGeometry.createSilhouettes(data, edges.silhouettes);\r\n\r\n if (edges.segments)\r\n this.segmentEdges = EdgeGeometry.create(data, edges.segments);\r\n\r\n if (edges.polylines)\r\n this.polylineEdges = PolylineEdgeGeometry.create(data, edges.polylines);\r\n }\r\n\r\n public static create(params: MeshParams, viewIndependentOrigin: Point3d | undefined): MeshRenderGeometry | undefined {\r\n const data = MeshData.create(params, viewIndependentOrigin);\r\n return data ? new this(data, params) : undefined;\r\n }\r\n\r\n public dispose() {\r\n dispose(this.data);\r\n dispose(this.surface);\r\n dispose(this.segmentEdges);\r\n dispose(this.silhouetteEdges);\r\n dispose(this.polylineEdges);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics) {\r\n this.data.collectStatistics(stats);\r\n this.surface?.collectStatistics(stats);\r\n this.segmentEdges?.collectStatistics(stats);\r\n this.silhouetteEdges?.collectStatistics(stats);\r\n this.polylineEdges?.collectStatistics(stats);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshGraphic extends Graphic {\r\n public readonly meshData: MeshData;\r\n private readonly _primitives: Primitive[] = [];\r\n private readonly _instances?: InstanceBuffers | PatternBuffers;\r\n\r\n public static create(geometry: MeshRenderGeometry, instances?: InstancedGraphicParams | PatternBuffers): MeshGraphic | undefined {\r\n let buffers;\r\n if (instances) {\r\n if (instances instanceof PatternBuffers) {\r\n buffers = instances;\r\n } else {\r\n const instancesRange = instances.range ?? InstanceBuffers.computeRange(geometry.range, instances.transforms, instances.transformCenter);\r\n buffers = InstanceBuffers.create(instances, instancesRange);\r\n if (!buffers)\r\n return undefined;\r\n }\r\n }\r\n\r\n return new MeshGraphic(geometry, buffers);\r\n }\r\n\r\n private addPrimitive(geometry: RenderGeometry | undefined) {\r\n if (!geometry)\r\n return;\r\n\r\n assert(geometry instanceof CachedGeometry);\r\n const primitive = Primitive.createShared(geometry, this._instances);\r\n if (primitive)\r\n this._primitives.push(primitive);\r\n }\r\n\r\n private constructor(geometry: MeshRenderGeometry, instances?: InstanceBuffers | PatternBuffers) {\r\n super();\r\n this.meshData = geometry.data;\r\n this._instances = instances;\r\n\r\n this.addPrimitive(geometry.surface);\r\n this.addPrimitive(geometry.segmentEdges);\r\n this.addPrimitive(geometry.silhouetteEdges);\r\n this.addPrimitive(geometry.polylineEdges);\r\n }\r\n\r\n public get isDisposed(): boolean { return this.meshData.isDisposed && 0 === this._primitives.length; }\r\n public get isPickable() { return false; }\r\n\r\n public dispose() {\r\n for (const primitive of this._primitives)\r\n dispose(primitive);\r\n\r\n dispose(this.meshData);\r\n dispose(this._instances);\r\n this._primitives.length = 0;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.meshData.collectStatistics(stats);\r\n this._primitives.forEach((prim) => prim.collectStatistics(stats));\r\n this._instances?.collectStatistics(stats);\r\n }\r\n\r\n public addCommands(cmds: RenderCommands): void { this._primitives.forEach((prim) => prim.addCommands(cmds)); }\r\n public override addHiliteCommands(cmds: RenderCommands, pass: RenderPass): void { this._primitives.forEach((prim) => prim.addHiliteCommands(cmds, pass)); }\r\n\r\n public get surfaceType(): SurfaceType { return this.meshData.type; }\r\n}\r\n\r\n/** Defines one aspect of the geometry of a mesh (surface or edges)\r\n * @internal\r\n */\r\nexport abstract class MeshGeometry extends LUTGeometry {\r\n public readonly mesh: MeshData;\r\n protected readonly _numIndices: number;\r\n\r\n public override get asMesh() { return this; }\r\n protected override _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); }\r\n\r\n // Convenience accessors...\r\n public get edgeWidth() { return this.mesh.edgeWidth; }\r\n public get edgeLineCode() { return this.mesh.edgeLineCode; }\r\n public override get hasFeatures() { return this.mesh.hasFeatures; }\r\n public get surfaceType() { return this.mesh.type; }\r\n public get fillFlags() { return this.mesh.fillFlags; }\r\n public get isPlanar() { return this.mesh.isPlanar; }\r\n public get colorInfo(): ColorInfo { return this.mesh.lut.colorInfo; }\r\n public get uniformColor(): FloatRgba | undefined { return this.colorInfo.isUniform ? this.colorInfo.uniform : undefined; }\r\n public get texture() { return this.mesh.texture; }\r\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\r\n public get hasFixedNormals() { return this.mesh.hasFixedNormals; }\r\n public get lut() { return this.mesh.lut; }\r\n public get hasScalarAnimation() { return this.mesh.lut.hasScalarAnimation; }\r\n\r\n protected constructor(mesh: MeshData, numIndices: number) {\r\n super(mesh.viewIndependentOrigin);\r\n this._numIndices = numIndices;\r\n this.mesh = mesh;\r\n }\r\n\r\n protected computeEdgeWeight(params: ShaderProgramParams): number {\r\n return params.target.computeEdgeWeight(params.renderPass, this.edgeWidth);\r\n }\r\n protected computeEdgeLineCode(params: ShaderProgramParams): number {\r\n return params.target.computeEdgeLineCode(params.renderPass, this.edgeLineCode);\r\n }\r\n protected computeEdgeColor(target: Target): ColorInfo {\r\n return target.computeEdgeColor(this.colorInfo);\r\n }\r\n protected computeEdgePass(target: Target): RenderPass {\r\n if (target.isDrawingShadowMap)\r\n return RenderPass.None;\r\n\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.SmoothShade === vf.renderMode && !vf.visibleEdges) {\r\n return RenderPass.None;\r\n }\r\n\r\n // Only want translucent edges in wireframe mode.\r\n const isTranslucent = RenderMode.Wireframe === vf.renderMode && vf.transparency && this.colorInfo.hasTranslucency;\r\n return isTranslucent ? RenderPass.Translucent : RenderPass.OpaqueLinear;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class EdgeGeometry extends MeshGeometry {\r\n public readonly buffers: BuffersContainer;\r\n protected readonly _indices: BufferHandle;\r\n protected readonly _endPointAndQuadIndices: BufferHandle;\r\n\r\n public get lutBuffers() { return this.buffers; }\r\n public override get asSurface() { return undefined; }\r\n public override get asEdge() { return this; }\r\n public override get asSilhouette(): SilhouetteEdgeGeometry | undefined { return undefined; }\r\n\r\n public static create(mesh: MeshData, edges: SegmentEdgeParams): EdgeGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(edges.indices.data);\r\n const endPointBuffer = BufferHandle.createArrayBuffer(edges.endPointAndQuadIndices);\r\n return undefined !== indexBuffer && undefined !== endPointBuffer ? new EdgeGeometry(indexBuffer, endPointBuffer, edges.indices.length, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this.buffers.isDisposed\r\n && this._indices.isDisposed\r\n && this._endPointAndQuadIndices.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n dispose(this.buffers);\r\n dispose(this._indices);\r\n dispose(this._endPointAndQuadIndices);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addVisibleEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed);\r\n }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this.buffers;\r\n\r\n bufs.bind();\r\n System.instance.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n }\r\n\r\n protected _wantWoWReversal(_target: Target): boolean { return true; }\r\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\r\n public get techniqueId(): TechniqueId { return TechniqueId.Edge; }\r\n public getRenderPass(target: Target): RenderPass { return this.computeEdgePass(target); }\r\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\r\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\r\n public get endPointAndQuadIndices(): BufferHandle { return this._endPointAndQuadIndices; }\r\n public override wantMonochrome(target: Target): boolean {\r\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\r\n }\r\n\r\n protected constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this.buffers = BuffersContainer.create();\r\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Edge, false);\r\n const attrEndPointAndQuadIndices = AttributeMap.findAttribute(\"a_endPointAndQuadIndices\", TechniqueId.Edge, false);\r\n assert(attrPos !== undefined);\r\n assert(attrEndPointAndQuadIndices !== undefined);\r\n this.buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this.buffers.addBuffer(endPointAndQuadsIndices, [BufferParameters.create(attrEndPointAndQuadIndices.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._indices = indices;\r\n this._endPointAndQuadIndices = endPointAndQuadsIndices;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class SilhouetteEdgeGeometry extends EdgeGeometry {\r\n private readonly _normalPairs: BufferHandle;\r\n\r\n public override get asSilhouette() { return this; }\r\n\r\n public static createSilhouettes(mesh: MeshData, params: SilhouetteParams): SilhouetteEdgeGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(params.indices.data);\r\n const endPointBuffer = BufferHandle.createArrayBuffer(params.endPointAndQuadIndices);\r\n const normalsBuffer = BufferHandle.createArrayBuffer(params.normalPairs);\r\n return undefined !== indexBuffer && undefined !== endPointBuffer && undefined !== normalsBuffer ? new SilhouetteEdgeGeometry(indexBuffer, endPointBuffer, normalsBuffer, params.indices.length, mesh) : undefined;\r\n }\r\n\r\n public override get isDisposed(): boolean { return super.isDisposed && this._normalPairs.isDisposed; }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this._normalPairs);\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addSilhouetteEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed + this._normalPairs.bytesUsed);\r\n }\r\n\r\n public override get techniqueId(): TechniqueId { return TechniqueId.SilhouetteEdge; }\r\n public override get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarSilhouette : RenderOrder.Silhouette; }\r\n public get normalPairs(): BufferHandle { return this._normalPairs; }\r\n\r\n private constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, normalPairs: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(indices, endPointAndQuadsIndices, numIndices, mesh);\r\n const attrNormals = AttributeMap.findAttribute(\"a_normals\", TechniqueId.SilhouetteEdge, false);\r\n assert(attrNormals !== undefined);\r\n this.buffers.addBuffer(normalPairs, [BufferParameters.create(attrNormals.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._normalPairs = normalPairs;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PolylineEdgeGeometry extends MeshGeometry {\r\n private _buffers: PolylineBuffers;\r\n\r\n public get lutBuffers() { return this._buffers.buffers; }\r\n\r\n public static create(mesh: MeshData, polyline: TesselatedPolyline): PolylineEdgeGeometry | undefined {\r\n const buffers = PolylineBuffers.create(polyline);\r\n return undefined !== buffers ? new PolylineEdgeGeometry(polyline.indices.length, buffers, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._buffers.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this._buffers);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._buffers.collectStatistics(stats, RenderMemory.BufferType.PolylineEdges);\r\n }\r\n\r\n protected _wantWoWReversal(_target: Target): boolean { return true; }\r\n protected override _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); }\r\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\r\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\r\n public get techniqueId(): TechniqueId { return TechniqueId.Polyline; }\r\n public getRenderPass(target: Target): RenderPass { return this.computeEdgePass(target); }\r\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\r\n public override get polylineBuffers(): PolylineBuffers { return this._buffers; }\r\n\r\n public override wantMonochrome(target: Target): boolean {\r\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\r\n }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const gl = System.instance;\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers.buffers;\r\n\r\n bufs.bind();\r\n gl.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n }\r\n\r\n private constructor(numIndices: number, buffers: PolylineBuffers, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this._buffers = buffers;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function wantMaterials(vf: ViewFlags): boolean {\r\n return vf.materials && RenderMode.SmoothShade === vf.renderMode;\r\n}\r\n\r\nfunction wantLighting(vf: ViewFlags) {\r\n return RenderMode.SmoothShade === vf.renderMode && vf.lighting;\r\n}\r\n\r\n/** @internal */\r\nexport class SurfaceGeometry extends MeshGeometry {\r\n private readonly _buffers: BuffersContainer;\r\n private readonly _indices: BufferHandle;\r\n\r\n public get lutBuffers() { return this._buffers; }\r\n\r\n public static create(mesh: MeshData, indices: VertexIndices): SurfaceGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\r\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this._buffers.isDisposed\r\n && this._indices.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n dispose(this._buffers);\r\n dispose(this._indices);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addSurface(this._indices.bytesUsed);\r\n }\r\n\r\n public get isLit() { return SurfaceType.Lit === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get isTexturedType() { return SurfaceType.Textured === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get hasTexture() { return this.isTexturedType && undefined !== this.texture; }\r\n public get isGlyph() { return this.mesh.isGlyph; }\r\n public override get alwaysRenderTranslucent() { return this.isGlyph; }\r\n public get isTileSection() { return undefined !== this.texture && this.texture.isTileSection; }\r\n public get isClassifier() { return SurfaceType.VolumeClassifier === this.surfaceType; }\r\n public override get supportsThematicDisplay() {\r\n return !this.isGlyph;\r\n }\r\n\r\n public override get allowColorOverride() {\r\n // Text background color should not be overridden by feature symbology overrides - otherwise it becomes unreadable...\r\n // We don't actually know if we have text.\r\n // We do know that text background color uses blanking fill. So do ImageGraphics, so they're also going to forbid overriding their color.\r\n return FillFlags.Blanking !== (this.fillFlags & FillFlags.Blanking);\r\n }\r\n\r\n public override get asSurface() { return this; }\r\n public override get asEdge() { return undefined; }\r\n public override get asSilhouette() { return undefined; }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const system = System.instance;\r\n\r\n // If we can't write depth in the fragment shader, use polygonOffset to force blanking regions to draw behind.\r\n const offset = RenderOrder.BlankingRegion === this.renderOrder && !system.supportsLogZBuffer;\r\n if (offset) {\r\n system.context.enable(GL.POLYGON_OFFSET_FILL);\r\n system.context.polygonOffset(1.0, 1.0);\r\n }\r\n\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers;\r\n bufs.bind();\r\n const primType = system.drawSurfacesAsWiremesh ? GL.PrimitiveType.Lines : GL.PrimitiveType.Triangles;\r\n system.drawArrays(primType, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n\r\n if (offset)\r\n system.context.disable(GL.POLYGON_OFFSET_FILL);\r\n }\r\n\r\n public override wantMixMonochromeColor(target: Target): boolean {\r\n // Text relies on white-on-white reversal.\r\n return !this.isGlyph && (this.isLitSurface || this.wantTextures(target, this.hasTexture));\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.Surface; }\r\n public override get isLitSurface() { return this.isLit; }\r\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\r\n public override get hasFixedNormals() { return this.mesh.hasFixedNormals; }\r\n public get renderOrder(): RenderOrder {\r\n if (FillFlags.Behind === (this.fillFlags & FillFlags.Behind))\r\n return RenderOrder.BlankingRegion;\r\n\r\n let order = this.isLit ? RenderOrder.LitSurface : RenderOrder.UnlitSurface;\r\n if (this.isPlanar)\r\n order = order | RenderOrder.PlanarBit;\r\n\r\n return order;\r\n }\r\n\r\n public override getColor(target: Target) {\r\n if (FillFlags.Background === (this.fillFlags & FillFlags.Background))\r\n return target.uniforms.style.backgroundColorInfo;\r\n else\r\n return this.colorInfo;\r\n }\r\n\r\n public getRenderPass(target: Target): RenderPass {\r\n // Classifiers have a dedicated pass\r\n if (this.isClassifier)\r\n return RenderPass.Classification;\r\n\r\n const opaquePass = this.isPlanar ? RenderPass.OpaquePlanar : RenderPass.OpaqueGeneral;\r\n\r\n // When reading pixels, glyphs are always opaque. Otherwise always transparent (for anti-aliasing).\r\n if (this.isGlyph)\r\n return target.isReadPixelsInProgress ? opaquePass : RenderPass.Translucent;\r\n\r\n const vf = target.currentViewFlags;\r\n\r\n // When rendering thematic isolines, we need translucency because they have anti-aliasing.\r\n if (target.wantThematicDisplay && this.supportsThematicDisplay && target.uniforms.thematic.wantIsoLines)\r\n return RenderPass.Translucent;\r\n\r\n // In wireframe, unless fill is explicitly enabled for planar region, surface does not draw\r\n if (RenderMode.Wireframe === vf.renderMode && !this.mesh.isTextureAlwaysDisplayed) {\r\n const fillFlags = this.fillFlags;\r\n const showFill = FillFlags.Always === (fillFlags & FillFlags.Always) || (vf.fill && FillFlags.ByView === (fillFlags & FillFlags.ByView));\r\n if (!showFill)\r\n return RenderPass.None;\r\n }\r\n\r\n // If transparency disabled by render mode or view flag, always draw opaque.\r\n if (!vf.transparency || RenderMode.SolidFill === vf.renderMode || RenderMode.HiddenLine === vf.renderMode)\r\n return opaquePass;\r\n\r\n // We have 3 sources of alpha: the material, the texture, and the color.\r\n // Base alpha comes from the material if it overrides it; otherwise from the color.\r\n // The texture's alpha is multiplied by the base alpha.\r\n // So we must draw in the translucent pass if the texture has transparency OR the base alpha is less than 1.\r\n let hasAlpha = false;\r\n const mat = wantMaterials(vf) ? this.mesh.materialInfo : undefined;\r\n if (undefined !== mat && mat.overridesAlpha)\r\n hasAlpha = mat.hasTranslucency;\r\n else\r\n hasAlpha = this.getColor(target).hasTranslucency;\r\n\r\n if (!hasAlpha) {\r\n const tex = this.wantTextures(target, true) ? this.texture : undefined;\r\n hasAlpha = undefined !== tex && tex.hasTranslucency;\r\n }\r\n\r\n return hasAlpha ? RenderPass.Translucent : opaquePass;\r\n }\r\n\r\n protected _wantWoWReversal(target: Target): boolean {\r\n const fillFlags = this.fillFlags;\r\n if (FillFlags.None !== (fillFlags & FillFlags.Background))\r\n return false; // fill color explicitly from background\r\n\r\n if (FillFlags.None !== (fillFlags & FillFlags.Always))\r\n return true; // fill displayed even in wireframe\r\n\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.Wireframe === vf.renderMode || vf.visibleEdges)\r\n return false; // never invert surfaces when edges are displayed\r\n\r\n if (this.isLit && wantLighting(vf))\r\n return false;\r\n\r\n // Don't invert white pixels of textures...\r\n return !this.wantTextures(target, this.hasTexture);\r\n }\r\n\r\n public override get materialInfo(): MaterialInfo | undefined { return this.mesh.materialInfo; }\r\n\r\n public useTexture(params: ShaderProgramParams): boolean {\r\n return this.wantTextures(params.target, this.hasTexture);\r\n }\r\n\r\n public computeSurfaceFlags(params: ShaderProgramParams, flags: Int32Array): void {\r\n const target = params.target;\r\n const vf = target.currentViewFlags;\r\n\r\n const useMaterial = wantMaterials(vf);\r\n flags[SurfaceBitIndex.IgnoreMaterial] = useMaterial ? 0 : 1;\r\n flags[SurfaceBitIndex.HasMaterialAtlas] = useMaterial && this.hasMaterialAtlas ? 1 : 0;\r\n\r\n flags[SurfaceBitIndex.ApplyLighting] = 0;\r\n flags[SurfaceBitIndex.NoFaceFront] = 0;\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 0;\r\n if (this.isLit) {\r\n flags[SurfaceBitIndex.HasNormals] = 1;\r\n if (wantLighting(vf)) {\r\n flags[SurfaceBitIndex.ApplyLighting] = 1;\r\n if (this.hasFixedNormals)\r\n flags[SurfaceBitIndex.NoFaceFront] = 1;\r\n }\r\n\r\n // Textured meshes store normal in place of color index.\r\n // Untextured lit meshes store normal where textured meshes would store UV coords.\r\n // Tell shader where to find normal.\r\n if (!this.isTexturedType) {\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 1;\r\n }\r\n } else {\r\n flags[SurfaceBitIndex.HasNormals] = 0;\r\n }\r\n\r\n flags[SurfaceBitIndex.HasTexture] = this.useTexture(params) ? 1 : 0;\r\n\r\n // The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.\r\n flags[SurfaceBitIndex.TransparencyThreshold] = params.target.isDrawingShadowMap ? 1 : 0;\r\n flags[SurfaceBitIndex.BackgroundFill] = 0;\r\n switch (params.renderPass) {\r\n // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.Translucent:\r\n case RenderPass.WorldOverlay:\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers: {\r\n const mode = vf.renderMode;\r\n if (!this.isGlyph && (RenderMode.HiddenLine === mode || RenderMode.SolidFill === mode)) {\r\n flags[SurfaceBitIndex.TransparencyThreshold] = 1;\r\n if (RenderMode.HiddenLine === mode && FillFlags.Always !== (this.fillFlags & FillFlags.Always)) {\r\n // fill flags test for text - doesn't render with bg fill in hidden line mode.\r\n flags[SurfaceBitIndex.BackgroundFill] = 1;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private constructor(indices: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this._buffers = BuffersContainer.create();\r\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Surface, false);\r\n assert(undefined !== attrPos);\r\n this._buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._indices = indices;\r\n }\r\n\r\n private wantTextures(target: Target, surfaceTextureExists: boolean): boolean {\r\n if (this.hasScalarAnimation && undefined !== target.analysisTexture)\r\n return true;\r\n\r\n if (!surfaceTextureExists)\r\n return false;\r\n\r\n if (this.mesh.isTextureAlwaysDisplayed)\r\n return true;\r\n\r\n if (this.supportsThematicDisplay && target.wantThematicDisplay)\r\n return false;\r\n\r\n const fill = this.fillFlags;\r\n const flags = target.currentViewFlags;\r\n\r\n // ###TODO need to distinguish between gradient fill and actual textures...\r\n switch (flags.renderMode) {\r\n case RenderMode.SmoothShade:\r\n return flags.textures;\r\n case RenderMode.Wireframe:\r\n return FillFlags.Always === (fill & FillFlags.Always) || (flags.fill && FillFlags.ByView === (fill & FillFlags.ByView));\r\n default:\r\n return FillFlags.Always === (fill & FillFlags.Always);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Mesh.js","sourceRoot":"","sources":["../../../../src/render/webgl/Mesh.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 { Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport { FeatureIndexType, FillFlags, LinePixels, RenderMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { InstancedGraphicParams } from \"../InstancedGraphicParams\";\r\nimport { MeshParams, SegmentEdgeParams, SilhouetteParams, SurfaceType, TesselatedPolyline, VertexIndices } from \"../primitives/VertexTable\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderGeometry } from \"../RenderSystem\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { CachedGeometry, LUTGeometry, PolylineBuffers } from \"./CachedGeometry\";\r\nimport { ColorInfo } from \"./ColorInfo\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { ShaderProgramParams } from \"./DrawCommand\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\nimport { GL } from \"./GL\";\r\nimport { Graphic } from \"./Graphic\";\r\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\r\nimport { InstanceBuffers, PatternBuffers } from \"./InstancedGeometry\";\r\nimport { createMaterialInfo, MaterialInfo } from \"./Material\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderOrder, RenderPass, SurfaceBitIndex } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { Texture } from \"./Texture\";\r\nimport { VertexLUT } from \"./VertexLUT\";\r\n\r\n/** @internal */\r\nexport class MeshData implements WebGLDisposable {\r\n public readonly edgeWidth: number;\r\n public readonly hasFeatures: boolean;\r\n public readonly uniformFeatureId?: number; // Used strictly by BatchPrimitiveCommand.computeIsFlashed for flashing volume classification primitives.\r\n public readonly texture?: Texture;\r\n public readonly materialInfo?: MaterialInfo;\r\n public readonly type: SurfaceType;\r\n public readonly fillFlags: FillFlags;\r\n public readonly edgeLineCode: number; // Must call LineCode.valueFromLinePixels(val: LinePixels) and set the output to edgeLineCode\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly hasFixedNormals: boolean; // Fixed normals will not be flipped to face front (Terrain skirts).\r\n public readonly lut: VertexLUT;\r\n public readonly viewIndependentOrigin?: Point3d;\r\n private readonly _textureAlwaysDisplayed: boolean;\r\n\r\n private constructor(lut: VertexLUT, params: MeshParams, viOrigin: Point3d | undefined) {\r\n this.lut = lut;\r\n this.viewIndependentOrigin = viOrigin;\r\n\r\n this.hasFeatures = FeatureIndexType.Empty !== params.vertices.featureIndexType;\r\n if (FeatureIndexType.Uniform === params.vertices.featureIndexType)\r\n this.uniformFeatureId = params.vertices.uniformFeatureID;\r\n\r\n if (undefined !== params.surface.textureMapping) {\r\n this.texture = params.surface.textureMapping.texture as Texture;\r\n this._textureAlwaysDisplayed = params.surface.textureMapping.alwaysDisplayed;\r\n } else {\r\n this.texture = undefined;\r\n this._textureAlwaysDisplayed = false;\r\n }\r\n\r\n this.materialInfo = createMaterialInfo(params.surface.material);\r\n\r\n this.type = params.surface.type;\r\n this.fillFlags = params.surface.fillFlags;\r\n this.isPlanar = params.isPlanar;\r\n this.hasBakedLighting = params.surface.hasBakedLighting;\r\n this.hasFixedNormals = params.surface.hasFixedNormals;\r\n const edges = params.edges;\r\n this.edgeWidth = undefined !== edges ? edges.weight : 1;\r\n this.edgeLineCode = LineCode.valueFromLinePixels(undefined !== edges ? edges.linePixels : LinePixels.Solid);\r\n }\r\n\r\n public static create(params: MeshParams, viOrigin: Point3d | undefined): MeshData | undefined {\r\n const lut = VertexLUT.createFromVertexTable(params.vertices, params.auxChannels);\r\n return undefined !== lut ? new MeshData(lut, params, viOrigin) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this.texture && this.lut.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this.lut);\r\n if (this._ownsTexture)\r\n this.texture!.dispose();\r\n }\r\n\r\n public get isGlyph() { return undefined !== this.texture && this.texture.isGlyph; }\r\n public get isTextureAlwaysDisplayed() { return this.isGlyph || this._textureAlwaysDisplayed; }\r\n\r\n // Returns true if no one else owns this texture. Implies that the texture should be disposed when this object is disposed, and the texture's memory should be tracked as belonging to this object.\r\n private get _ownsTexture(): boolean {\r\n return undefined !== this.texture && !this.texture?.hasOwner;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addVertexTable(this.lut.bytesUsed);\r\n if (this._ownsTexture)\r\n stats.addTexture(this.texture!.bytesUsed);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshRenderGeometry {\r\n public readonly data: MeshData;\r\n public readonly surface?: SurfaceGeometry;\r\n public readonly segmentEdges?: EdgeGeometry;\r\n public readonly silhouetteEdges?: SilhouetteEdgeGeometry;\r\n public readonly polylineEdges?: PolylineEdgeGeometry;\r\n public readonly range: Range3d;\r\n\r\n private constructor(data: MeshData, params: MeshParams) {\r\n this.data = data;\r\n this.range = params.vertices.qparams.computeRange();\r\n this.surface = SurfaceGeometry.create(data, params.surface.indices);\r\n const edges = params.edges;\r\n if (!edges || data.type === SurfaceType.VolumeClassifier)\r\n return;\r\n\r\n if (edges.silhouettes)\r\n this.silhouetteEdges = SilhouetteEdgeGeometry.createSilhouettes(data, edges.silhouettes);\r\n\r\n if (edges.segments)\r\n this.segmentEdges = EdgeGeometry.create(data, edges.segments);\r\n\r\n if (edges.polylines)\r\n this.polylineEdges = PolylineEdgeGeometry.create(data, edges.polylines);\r\n }\r\n\r\n public static create(params: MeshParams, viewIndependentOrigin: Point3d | undefined): MeshRenderGeometry | undefined {\r\n const data = MeshData.create(params, viewIndependentOrigin);\r\n return data ? new this(data, params) : undefined;\r\n }\r\n\r\n public dispose() {\r\n dispose(this.data);\r\n dispose(this.surface);\r\n dispose(this.segmentEdges);\r\n dispose(this.silhouetteEdges);\r\n dispose(this.polylineEdges);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics) {\r\n this.data.collectStatistics(stats);\r\n this.surface?.collectStatistics(stats);\r\n this.segmentEdges?.collectStatistics(stats);\r\n this.silhouetteEdges?.collectStatistics(stats);\r\n this.polylineEdges?.collectStatistics(stats);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshGraphic extends Graphic {\r\n public readonly meshData: MeshData;\r\n private readonly _primitives: Primitive[] = [];\r\n private readonly _instances?: InstanceBuffers | PatternBuffers;\r\n\r\n public static create(geometry: MeshRenderGeometry, instances?: InstancedGraphicParams | PatternBuffers): MeshGraphic | undefined {\r\n let buffers;\r\n if (instances) {\r\n if (instances instanceof PatternBuffers) {\r\n buffers = instances;\r\n } else {\r\n const instancesRange = instances.range ?? InstanceBuffers.computeRange(geometry.range, instances.transforms, instances.transformCenter);\r\n buffers = InstanceBuffers.create(instances, instancesRange);\r\n if (!buffers)\r\n return undefined;\r\n }\r\n }\r\n\r\n return new MeshGraphic(geometry, buffers);\r\n }\r\n\r\n private addPrimitive(geometry: RenderGeometry | undefined) {\r\n if (!geometry)\r\n return;\r\n\r\n assert(geometry instanceof CachedGeometry);\r\n const primitive = Primitive.createShared(geometry, this._instances);\r\n if (primitive)\r\n this._primitives.push(primitive);\r\n }\r\n\r\n private constructor(geometry: MeshRenderGeometry, instances?: InstanceBuffers | PatternBuffers) {\r\n super();\r\n this.meshData = geometry.data;\r\n this._instances = instances;\r\n\r\n this.addPrimitive(geometry.surface);\r\n this.addPrimitive(geometry.segmentEdges);\r\n this.addPrimitive(geometry.silhouetteEdges);\r\n this.addPrimitive(geometry.polylineEdges);\r\n }\r\n\r\n public get isDisposed(): boolean { return this.meshData.isDisposed && 0 === this._primitives.length; }\r\n public get isPickable() { return false; }\r\n\r\n public dispose() {\r\n for (const primitive of this._primitives)\r\n dispose(primitive);\r\n\r\n dispose(this.meshData);\r\n dispose(this._instances);\r\n this._primitives.length = 0;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.meshData.collectStatistics(stats);\r\n this._primitives.forEach((prim) => prim.collectStatistics(stats));\r\n this._instances?.collectStatistics(stats);\r\n }\r\n\r\n public addCommands(cmds: RenderCommands): void { this._primitives.forEach((prim) => prim.addCommands(cmds)); }\r\n public override addHiliteCommands(cmds: RenderCommands, pass: RenderPass): void { this._primitives.forEach((prim) => prim.addHiliteCommands(cmds, pass)); }\r\n\r\n public get surfaceType(): SurfaceType { return this.meshData.type; }\r\n}\r\n\r\n/** Defines one aspect of the geometry of a mesh (surface or edges)\r\n * @internal\r\n */\r\nexport abstract class MeshGeometry extends LUTGeometry {\r\n public readonly mesh: MeshData;\r\n protected readonly _numIndices: number;\r\n\r\n public override get asMesh() { return this; }\r\n protected override _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); }\r\n\r\n // Convenience accessors...\r\n public get edgeWidth() { return this.mesh.edgeWidth; }\r\n public get edgeLineCode() { return this.mesh.edgeLineCode; }\r\n public override get hasFeatures() { return this.mesh.hasFeatures; }\r\n public get surfaceType() { return this.mesh.type; }\r\n public get fillFlags() { return this.mesh.fillFlags; }\r\n public get isPlanar() { return this.mesh.isPlanar; }\r\n public get colorInfo(): ColorInfo { return this.mesh.lut.colorInfo; }\r\n public get uniformColor(): FloatRgba | undefined { return this.colorInfo.isUniform ? this.colorInfo.uniform : undefined; }\r\n public get texture() { return this.mesh.texture; }\r\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\r\n public get hasFixedNormals() { return this.mesh.hasFixedNormals; }\r\n public get lut() { return this.mesh.lut; }\r\n public get hasScalarAnimation() { return this.mesh.lut.hasScalarAnimation; }\r\n\r\n protected constructor(mesh: MeshData, numIndices: number) {\r\n super(mesh.viewIndependentOrigin);\r\n this._numIndices = numIndices;\r\n this.mesh = mesh;\r\n }\r\n\r\n protected computeEdgeWeight(params: ShaderProgramParams): number {\r\n return params.target.computeEdgeWeight(params.renderPass, this.edgeWidth);\r\n }\r\n protected computeEdgeLineCode(params: ShaderProgramParams): number {\r\n return params.target.computeEdgeLineCode(params.renderPass, this.edgeLineCode);\r\n }\r\n protected computeEdgeColor(target: Target): ColorInfo {\r\n return target.computeEdgeColor(this.colorInfo);\r\n }\r\n protected computeEdgePass(target: Target): RenderPass {\r\n if (target.isDrawingShadowMap)\r\n return RenderPass.None;\r\n\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.SmoothShade === vf.renderMode && !vf.visibleEdges) {\r\n return RenderPass.None;\r\n }\r\n\r\n // Only want translucent edges in wireframe mode.\r\n const isTranslucent = RenderMode.Wireframe === vf.renderMode && vf.transparency && this.colorInfo.hasTranslucency;\r\n return isTranslucent ? RenderPass.Translucent : RenderPass.OpaqueLinear;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class EdgeGeometry extends MeshGeometry {\r\n public readonly buffers: BuffersContainer;\r\n protected readonly _indices: BufferHandle;\r\n protected readonly _endPointAndQuadIndices: BufferHandle;\r\n\r\n public get lutBuffers() { return this.buffers; }\r\n public override get asSurface() { return undefined; }\r\n public override get asEdge() { return this; }\r\n public override get asSilhouette(): SilhouetteEdgeGeometry | undefined { return undefined; }\r\n\r\n public static create(mesh: MeshData, edges: SegmentEdgeParams): EdgeGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(edges.indices.data);\r\n const endPointBuffer = BufferHandle.createArrayBuffer(edges.endPointAndQuadIndices);\r\n return undefined !== indexBuffer && undefined !== endPointBuffer ? new EdgeGeometry(indexBuffer, endPointBuffer, edges.indices.length, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this.buffers.isDisposed\r\n && this._indices.isDisposed\r\n && this._endPointAndQuadIndices.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n dispose(this.buffers);\r\n dispose(this._indices);\r\n dispose(this._endPointAndQuadIndices);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addVisibleEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed);\r\n }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this.buffers;\r\n\r\n bufs.bind();\r\n System.instance.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n }\r\n\r\n protected _wantWoWReversal(_target: Target): boolean { return true; }\r\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\r\n public get techniqueId(): TechniqueId { return TechniqueId.Edge; }\r\n public getRenderPass(target: Target): RenderPass { return this.computeEdgePass(target); }\r\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\r\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\r\n public get endPointAndQuadIndices(): BufferHandle { return this._endPointAndQuadIndices; }\r\n public override wantMonochrome(target: Target): boolean {\r\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\r\n }\r\n\r\n protected constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this.buffers = BuffersContainer.create();\r\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Edge, false);\r\n const attrEndPointAndQuadIndices = AttributeMap.findAttribute(\"a_endPointAndQuadIndices\", TechniqueId.Edge, false);\r\n assert(attrPos !== undefined);\r\n assert(attrEndPointAndQuadIndices !== undefined);\r\n this.buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this.buffers.addBuffer(endPointAndQuadsIndices, [BufferParameters.create(attrEndPointAndQuadIndices.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._indices = indices;\r\n this._endPointAndQuadIndices = endPointAndQuadsIndices;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class SilhouetteEdgeGeometry extends EdgeGeometry {\r\n private readonly _normalPairs: BufferHandle;\r\n\r\n public override get asSilhouette() { return this; }\r\n\r\n public static createSilhouettes(mesh: MeshData, params: SilhouetteParams): SilhouetteEdgeGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(params.indices.data);\r\n const endPointBuffer = BufferHandle.createArrayBuffer(params.endPointAndQuadIndices);\r\n const normalsBuffer = BufferHandle.createArrayBuffer(params.normalPairs);\r\n return undefined !== indexBuffer && undefined !== endPointBuffer && undefined !== normalsBuffer ? new SilhouetteEdgeGeometry(indexBuffer, endPointBuffer, normalsBuffer, params.indices.length, mesh) : undefined;\r\n }\r\n\r\n public override get isDisposed(): boolean { return super.isDisposed && this._normalPairs.isDisposed; }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this._normalPairs);\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addSilhouetteEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed + this._normalPairs.bytesUsed);\r\n }\r\n\r\n public override get techniqueId(): TechniqueId { return TechniqueId.SilhouetteEdge; }\r\n public override get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarSilhouette : RenderOrder.Silhouette; }\r\n public get normalPairs(): BufferHandle { return this._normalPairs; }\r\n\r\n private constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, normalPairs: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(indices, endPointAndQuadsIndices, numIndices, mesh);\r\n const attrNormals = AttributeMap.findAttribute(\"a_normals\", TechniqueId.SilhouetteEdge, false);\r\n assert(attrNormals !== undefined);\r\n this.buffers.addBuffer(normalPairs, [BufferParameters.create(attrNormals.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._normalPairs = normalPairs;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PolylineEdgeGeometry extends MeshGeometry {\r\n private _buffers: PolylineBuffers;\r\n\r\n public get lutBuffers() { return this._buffers.buffers; }\r\n\r\n public static create(mesh: MeshData, polyline: TesselatedPolyline): PolylineEdgeGeometry | undefined {\r\n const buffers = PolylineBuffers.create(polyline);\r\n return undefined !== buffers ? new PolylineEdgeGeometry(polyline.indices.length, buffers, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._buffers.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this._buffers);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._buffers.collectStatistics(stats, RenderMemory.BufferType.PolylineEdges);\r\n }\r\n\r\n protected _wantWoWReversal(_target: Target): boolean { return true; }\r\n protected override _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); }\r\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\r\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\r\n public get techniqueId(): TechniqueId { return TechniqueId.Polyline; }\r\n public getRenderPass(target: Target): RenderPass { return this.computeEdgePass(target); }\r\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\r\n public override get polylineBuffers(): PolylineBuffers { return this._buffers; }\r\n\r\n public override wantMonochrome(target: Target): boolean {\r\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\r\n }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const gl = System.instance;\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers.buffers;\r\n\r\n bufs.bind();\r\n gl.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n }\r\n\r\n private constructor(numIndices: number, buffers: PolylineBuffers, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this._buffers = buffers;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function wantMaterials(vf: ViewFlags): boolean {\r\n return vf.materials && RenderMode.SmoothShade === vf.renderMode;\r\n}\r\n\r\nfunction wantLighting(vf: ViewFlags) {\r\n return RenderMode.SmoothShade === vf.renderMode && vf.lighting;\r\n}\r\n\r\n/** @internal */\r\nexport class SurfaceGeometry extends MeshGeometry {\r\n private readonly _buffers: BuffersContainer;\r\n private readonly _indices: BufferHandle;\r\n\r\n public get lutBuffers() { return this._buffers; }\r\n\r\n public static create(mesh: MeshData, indices: VertexIndices): SurfaceGeometry | undefined {\r\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\r\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh) : undefined;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this._buffers.isDisposed\r\n && this._indices.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n dispose(this._buffers);\r\n dispose(this._indices);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addSurface(this._indices.bytesUsed);\r\n }\r\n\r\n public get isLit() { return SurfaceType.Lit === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get isTexturedType() { return SurfaceType.Textured === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\r\n public get hasTexture() { return this.isTexturedType && undefined !== this.texture; }\r\n public get isGlyph() { return this.mesh.isGlyph; }\r\n public override get alwaysRenderTranslucent() { return this.isGlyph; }\r\n public get isTileSection() { return undefined !== this.texture && this.texture.isTileSection; }\r\n public get isClassifier() { return SurfaceType.VolumeClassifier === this.surfaceType; }\r\n public override get supportsThematicDisplay() {\r\n return !this.isGlyph;\r\n }\r\n\r\n public override get allowColorOverride() {\r\n // Text background color should not be overridden by feature symbology overrides - otherwise it becomes unreadable...\r\n // We don't actually know if we have text.\r\n // We do know that text background color uses blanking fill. So do ImageGraphics, so they're also going to forbid overriding their color.\r\n return FillFlags.Blanking !== (this.fillFlags & FillFlags.Blanking);\r\n }\r\n\r\n public override get asSurface() { return this; }\r\n public override get asEdge() { return undefined; }\r\n public override get asSilhouette() { return undefined; }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const system = System.instance;\r\n\r\n // If we can't write depth in the fragment shader, use polygonOffset to force blanking regions to draw behind.\r\n const offset = RenderOrder.BlankingRegion === this.renderOrder && !system.supportsLogZBuffer;\r\n if (offset) {\r\n system.context.enable(GL.POLYGON_OFFSET_FILL);\r\n system.context.polygonOffset(1.0, 1.0);\r\n }\r\n\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers;\r\n bufs.bind();\r\n system.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\r\n bufs.unbind();\r\n\r\n if (offset)\r\n system.context.disable(GL.POLYGON_OFFSET_FILL);\r\n }\r\n\r\n public override wantMixMonochromeColor(target: Target): boolean {\r\n // Text relies on white-on-white reversal.\r\n return !this.isGlyph && (this.isLitSurface || this.wantTextures(target, this.hasTexture));\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.Surface; }\r\n public override get isLitSurface() { return this.isLit; }\r\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\r\n public override get hasFixedNormals() { return this.mesh.hasFixedNormals; }\r\n public get renderOrder(): RenderOrder {\r\n if (FillFlags.Behind === (this.fillFlags & FillFlags.Behind))\r\n return RenderOrder.BlankingRegion;\r\n\r\n let order = this.isLit ? RenderOrder.LitSurface : RenderOrder.UnlitSurface;\r\n if (this.isPlanar)\r\n order = order | RenderOrder.PlanarBit;\r\n\r\n return order;\r\n }\r\n\r\n public override getColor(target: Target) {\r\n if (FillFlags.Background === (this.fillFlags & FillFlags.Background))\r\n return target.uniforms.style.backgroundColorInfo;\r\n else\r\n return this.colorInfo;\r\n }\r\n\r\n public getRenderPass(target: Target): RenderPass {\r\n // Classifiers have a dedicated pass\r\n if (this.isClassifier)\r\n return RenderPass.Classification;\r\n\r\n const opaquePass = this.isPlanar ? RenderPass.OpaquePlanar : RenderPass.OpaqueGeneral;\r\n\r\n // When reading pixels, glyphs are always opaque. Otherwise always transparent (for anti-aliasing).\r\n if (this.isGlyph)\r\n return target.isReadPixelsInProgress ? opaquePass : RenderPass.Translucent;\r\n\r\n const vf = target.currentViewFlags;\r\n\r\n // When rendering thematic isolines, we need translucency because they have anti-aliasing.\r\n if (target.wantThematicDisplay && this.supportsThematicDisplay && target.uniforms.thematic.wantIsoLines)\r\n return RenderPass.Translucent;\r\n\r\n // In wireframe, unless fill is explicitly enabled for planar region, surface does not draw\r\n if (RenderMode.Wireframe === vf.renderMode && !this.mesh.isTextureAlwaysDisplayed) {\r\n const fillFlags = this.fillFlags;\r\n const showFill = FillFlags.Always === (fillFlags & FillFlags.Always) || (vf.fill && FillFlags.ByView === (fillFlags & FillFlags.ByView));\r\n if (!showFill)\r\n return RenderPass.None;\r\n }\r\n\r\n // If transparency disabled by render mode or view flag, always draw opaque.\r\n if (!vf.transparency || RenderMode.SolidFill === vf.renderMode || RenderMode.HiddenLine === vf.renderMode)\r\n return opaquePass;\r\n\r\n // We have 3 sources of alpha: the material, the texture, and the color.\r\n // Base alpha comes from the material if it overrides it; otherwise from the color.\r\n // The texture's alpha is multiplied by the base alpha.\r\n // So we must draw in the translucent pass if the texture has transparency OR the base alpha is less than 1.\r\n let hasAlpha = false;\r\n const mat = wantMaterials(vf) ? this.mesh.materialInfo : undefined;\r\n if (undefined !== mat && mat.overridesAlpha)\r\n hasAlpha = mat.hasTranslucency;\r\n else\r\n hasAlpha = this.getColor(target).hasTranslucency;\r\n\r\n if (!hasAlpha) {\r\n const tex = this.wantTextures(target, true) ? this.texture : undefined;\r\n hasAlpha = undefined !== tex && tex.hasTranslucency;\r\n }\r\n\r\n return hasAlpha ? RenderPass.Translucent : opaquePass;\r\n }\r\n\r\n protected _wantWoWReversal(target: Target): boolean {\r\n const fillFlags = this.fillFlags;\r\n if (FillFlags.None !== (fillFlags & FillFlags.Background))\r\n return false; // fill color explicitly from background\r\n\r\n if (FillFlags.None !== (fillFlags & FillFlags.Always))\r\n return true; // fill displayed even in wireframe\r\n\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.Wireframe === vf.renderMode || vf.visibleEdges)\r\n return false; // never invert surfaces when edges are displayed\r\n\r\n if (this.isLit && wantLighting(vf))\r\n return false;\r\n\r\n // Don't invert white pixels of textures...\r\n return !this.wantTextures(target, this.hasTexture);\r\n }\r\n\r\n public override get materialInfo(): MaterialInfo | undefined { return this.mesh.materialInfo; }\r\n\r\n public useTexture(params: ShaderProgramParams): boolean {\r\n return this.wantTextures(params.target, this.hasTexture);\r\n }\r\n\r\n public computeSurfaceFlags(params: ShaderProgramParams, flags: Int32Array): void {\r\n const target = params.target;\r\n const vf = target.currentViewFlags;\r\n\r\n const useMaterial = wantMaterials(vf);\r\n flags[SurfaceBitIndex.IgnoreMaterial] = useMaterial ? 0 : 1;\r\n flags[SurfaceBitIndex.HasMaterialAtlas] = useMaterial && this.hasMaterialAtlas ? 1 : 0;\r\n\r\n flags[SurfaceBitIndex.ApplyLighting] = 0;\r\n flags[SurfaceBitIndex.NoFaceFront] = 0;\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 0;\r\n if (this.isLit) {\r\n flags[SurfaceBitIndex.HasNormals] = 1;\r\n if (wantLighting(vf)) {\r\n flags[SurfaceBitIndex.ApplyLighting] = 1;\r\n if (this.hasFixedNormals)\r\n flags[SurfaceBitIndex.NoFaceFront] = 1;\r\n }\r\n\r\n // Textured meshes store normal in place of color index.\r\n // Untextured lit meshes store normal where textured meshes would store UV coords.\r\n // Tell shader where to find normal.\r\n if (!this.isTexturedType) {\r\n flags[SurfaceBitIndex.HasColorAndNormal] = 1;\r\n }\r\n } else {\r\n flags[SurfaceBitIndex.HasNormals] = 0;\r\n }\r\n\r\n flags[SurfaceBitIndex.HasTexture] = this.useTexture(params) ? 1 : 0;\r\n\r\n // The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.\r\n flags[SurfaceBitIndex.TransparencyThreshold] = params.target.isDrawingShadowMap ? 1 : 0;\r\n flags[SurfaceBitIndex.BackgroundFill] = 0;\r\n switch (params.renderPass) {\r\n // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.Translucent:\r\n case RenderPass.WorldOverlay:\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers: {\r\n const mode = vf.renderMode;\r\n if (!this.isGlyph && (RenderMode.HiddenLine === mode || RenderMode.SolidFill === mode)) {\r\n flags[SurfaceBitIndex.TransparencyThreshold] = 1;\r\n if (RenderMode.HiddenLine === mode && FillFlags.Always !== (this.fillFlags & FillFlags.Always)) {\r\n // fill flags test for text - doesn't render with bg fill in hidden line mode.\r\n flags[SurfaceBitIndex.BackgroundFill] = 1;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private constructor(indices: BufferHandle, numIndices: number, mesh: MeshData) {\r\n super(mesh, numIndices);\r\n this._buffers = BuffersContainer.create();\r\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Surface, false);\r\n assert(undefined !== attrPos);\r\n this._buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this._indices = indices;\r\n }\r\n\r\n private wantTextures(target: Target, surfaceTextureExists: boolean): boolean {\r\n if (this.hasScalarAnimation && undefined !== target.analysisTexture)\r\n return true;\r\n\r\n if (!surfaceTextureExists)\r\n return false;\r\n\r\n if (this.mesh.isTextureAlwaysDisplayed)\r\n return true;\r\n\r\n if (this.supportsThematicDisplay && target.wantThematicDisplay)\r\n return false;\r\n\r\n const fill = this.fillFlags;\r\n const flags = target.currentViewFlags;\r\n\r\n // ###TODO need to distinguish between gradient fill and actual textures...\r\n switch (flags.renderMode) {\r\n case RenderMode.SmoothShade:\r\n return flags.textures;\r\n case RenderMode.Wireframe:\r\n return FillFlags.Always === (fill & FillFlags.Always) || (flags.fill && FillFlags.ByView === (fill & FillFlags.ByView));\r\n default:\r\n return FillFlags.Always === (fill & FillFlags.Always);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarClassifier.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PlanarClassifier.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -467,6 +467,7 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
|
|
|
467
467
|
system.context.viewport(0, 0, this._width, this._height);
|
|
468
468
|
const vf = target.currentViewFlags.copy({
|
|
469
469
|
renderMode: core_common_1.RenderMode.SmoothShade,
|
|
470
|
+
wiremesh: false,
|
|
470
471
|
transparency: !this.isClassifyingPointCloud,
|
|
471
472
|
textures: false,
|
|
472
473
|
lighting: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarClassifier.js","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Matrix4d, Plane3dByOriginAndUnitNormal, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Frustum, FrustumPlanes, RenderMode, RenderTexture, SpatialClassifier, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay,\r\n} from \"@itwin/core-common\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { GraphicsCollectorDrawArgs, SpatialClassifierTileTreeReference, TileTreeReference } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState3d } from \"../../ViewState\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { PlanarClassifierTarget, RenderPlanarClassifier } from \"../RenderPlanarClassifier\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { CachedGeometry, Combine3TexturesGeometry, CombineTexturesGeometry, ViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands } from \"./DrawCommand\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { PlanarTextureProjection } from \"./PlanarTextureProjection\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\nexport enum PlanarClassifierContent { None = 0, MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3 }\r\n\r\nfunction createTexture(handle: TextureHandle): Texture {\r\n return new Texture({\r\n handle,\r\n ownership: \"external\",\r\n type: RenderTexture.Type.TileSection,\r\n });\r\n}\r\n\r\nfunction createTextureHandle(width: number, height: number, heightMult = 1.0) { return TextureHandle.createForAttachment(width, height * heightMult, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte); }\r\n\r\nclass ClassifierTextures implements WebGLDisposable {\r\n private constructor(public readonly color: Texture,\r\n public readonly feature: Texture,\r\n public readonly hilite: Texture) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.color.isDisposed\r\n && this.feature.isDisposed\r\n && this.hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.color);\r\n dispose(this.feature);\r\n dispose(this.hilite);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addPlanarClassifier(this.color.bytesUsed);\r\n stats.addPlanarClassifier(this.feature.bytesUsed);\r\n stats.addPlanarClassifier(this.hilite.bytesUsed);\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierTextures | undefined {\r\n const hColor = createTextureHandle(width, height);\r\n const hFeature = createTextureHandle(width, height);\r\n const hHilite = createTextureHandle(width, height);\r\n if (!hColor || !hFeature || !hHilite)\r\n return undefined;\r\n\r\n const color = createTexture(hColor);\r\n const feature = createTexture(hFeature);\r\n const hilite = createTexture(hHilite);\r\n if (!color || !feature || !hilite)\r\n return undefined;\r\n\r\n return new ClassifierTextures(color, feature, hilite);\r\n }\r\n}\r\n\r\nabstract class ClassifierFrameBuffers implements WebGLDisposable {\r\n protected constructor(\r\n public readonly textures: ClassifierTextures,\r\n private readonly _hilite: FrameBuffer) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.textures.isDisposed && this._hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.textures);\r\n dispose(this._hilite);\r\n }\r\n\r\n public abstract draw(cmds: DrawCommands, target: Target): void;\r\n\r\n public drawHilite(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.frameBufferStack.execute(this._hilite, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.execute(target, cmds, RenderPass.Hilite);\r\n });\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierFrameBuffers | undefined {\r\n const textures = ClassifierTextures.create(width, height);\r\n if (undefined === textures)\r\n return undefined;\r\n\r\n const hiliteFbo = FrameBuffer.create([textures.hilite.texture]);\r\n if (undefined === hiliteFbo)\r\n return undefined;\r\n\r\n if (System.instance.capabilities.supportsDrawBuffers)\r\n return ClassifierMRTFrameBuffers.createMRT(textures, hiliteFbo);\r\n else\r\n return ClassifierMPFrameBuffers.createMP(textures, hiliteFbo);\r\n }\r\n}\r\n\r\nclass ClassifierMRTFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _fbo: FrameBuffer;\r\n private readonly _clearGeom: ViewportQuadGeometry;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, fbo: FrameBuffer, geom: ViewportQuadGeometry) {\r\n super(textures, hilite);\r\n this._fbo = fbo;\r\n this._clearGeom = geom;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._fbo.isDisposed\r\n && this._clearGeom.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._fbo);\r\n dispose(this._clearGeom);\r\n super.dispose();\r\n }\r\n\r\n public static createMRT(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMRTFrameBuffers | undefined {\r\n const fbo = FrameBuffer.create([textures.color.texture, textures.feature.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n const geom = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n return undefined !== geom ? new ClassifierMRTFrameBuffers(textures, hilite, fbo, geom) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n System.instance.frameBufferStack.execute(this._fbo, true, false, () => {\r\n target.techniques.draw(getDrawParams(target, this._clearGeom));\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierMPFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _color: FrameBuffer;\r\n private readonly _feature: FrameBuffer;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, color: FrameBuffer, feature: FrameBuffer) {\r\n super(textures, hilite);\r\n this._color = color;\r\n this._feature = feature;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._color.isDisposed\r\n && this._feature.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._color);\r\n dispose(this._feature);\r\n super.dispose();\r\n }\r\n\r\n public static createMP(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMPFrameBuffers | undefined {\r\n const color = FrameBuffer.create([textures.color.texture]);\r\n const feature = FrameBuffer.create([textures.feature.texture]);\r\n return undefined !== color && undefined !== feature ? new ClassifierMPFrameBuffers(textures, hilite, color, feature) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n const draw = (feature: boolean) => {\r\n const fbo = feature ? this._feature : this._color;\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.compositor.currentRenderTargetIndex = feature ? 1 : 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n };\r\n\r\n draw(false);\r\n draw(true);\r\n }\r\n}\r\n\r\ninterface TextureAndFbo {\r\n texture: Texture;\r\n fbo: FrameBuffer;\r\n}\r\n\r\nabstract class SingleTextureFrameBuffer implements WebGLDisposable {\r\n public texture: Texture;\r\n protected fbo: FrameBuffer;\r\n public get isDisposed(): boolean { return this.texture.isDisposed && this.fbo.isDisposed; }\r\n public collectStatistics(stats: RenderMemory.Statistics): void { stats.addPlanarClassifier(this.texture.bytesUsed); }\r\n protected constructor(textureAndFbo: TextureAndFbo) {\r\n this.texture = textureAndFbo.texture;\r\n this.fbo = textureAndFbo.fbo;\r\n }\r\n public dispose(): void {\r\n dispose(this.texture);\r\n dispose(this.fbo);\r\n }\r\n public static createTextureAndFrameBuffer(width: number, height: number): TextureAndFbo | undefined {\r\n const hTexture = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n if (!hTexture)\r\n return undefined;\r\n\r\n const texture = new Texture({ type: RenderTexture.Type.TileSection, ownership: \"external\", handle: hTexture });\r\n if (!texture)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([texture.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n return { texture, fbo };\r\n }\r\n}\r\nclass MaskFrameBuffer extends SingleTextureFrameBuffer {\r\n public static create(width: number, height: number): MaskFrameBuffer | undefined {\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, height);\r\n return undefined === textureFbo ? undefined : new MaskFrameBuffer(textureFbo);\r\n }\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n if (!System.instance.capabilities.supportsDrawBuffers)\r\n target.compositor.currentRenderTargetIndex = 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\nabstract class CombineTexturesFrameBuffer extends SingleTextureFrameBuffer {\r\n constructor(textureAndFbo: TextureAndFbo, private _combineGeom: CachedGeometry, private _width: number, private _height: number, private _heightMult: number) { super(textureAndFbo); }\r\n public compose(target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.context.viewport(0, 0, this._width, this._heightMult * this._height);\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.draw(getDrawParams(target, this._combineGeom));\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = CombineTexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 2 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierCombinationBuffer(textureFbo, combineGeom, width, height, 2);\r\n }\r\n}\r\nclass ClassifierAndMaskCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture, mask: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = Combine3TexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!, mask.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 3 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierAndMaskCombinationBuffer(textureFbo, combineGeom, width, height, 3);\r\n }\r\n}\r\n\r\nconst scratchPrevRenderState = new RenderState();\r\n\r\n/** @internal */\r\nexport class PlanarClassifier extends RenderPlanarClassifier implements RenderMemory.Consumer, WebGLDisposable {\r\n private _classifierBuffers?: ClassifierFrameBuffers;\r\n private _maskBuffer?: MaskFrameBuffer;\r\n private _classifierCombinedBuffer?: ClassifierCombinationBuffer;\r\n private _classifierAndMaskCombinedBuffer?: ClassifierAndMaskCombinationBuffer;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics?: RenderGraphic[];\r\n private readonly _classifierGraphics: RenderGraphic[] = [];\r\n private readonly _maskGraphics: RenderGraphic[] = [];\r\n private _frustum?: Frustum;\r\n private _width = 0;\r\n private _height = 0;\r\n private _baseBatchId = 0;\r\n private _anyHilited = false;\r\n private _anyOpaque = false;\r\n private _anyTranslucent = false;\r\n private _classifier?: SpatialClassifier;\r\n private readonly _plane = Plane3dByOriginAndUnitNormal.create(new Point3d(0, 0, 0), new Vector3d(0, 0, 1))!; // TBD -- Support other planes - default to X-Y for now.\r\n private readonly _renderState = new RenderState();\r\n private readonly _renderCommands: RenderCommands;\r\n private readonly _branchStack = new BranchStack();\r\n private readonly _batchState: BatchState;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _classifierTreeRef?: TileTreeReference;\r\n private _planarClipMaskOverrides?: FeatureSymbology.Overrides;\r\n private _contentMode: PlanarClassifierContent = PlanarClassifierContent.None;\r\n\r\n private static _postProjectionMatrix = Matrix4d.createRowValues(\r\n 0, 1, 0, 0,\r\n 0, 0, -1, 0,\r\n 1, 0, 0, 0,\r\n 0, 0, 0, 1);\r\n private _debugFrustum?: Frustum;\r\n private _doDebugFrustum = false;\r\n private _debugFrustumGraphic?: RenderGraphic = undefined;\r\n private _isClassifyingPointCloud?: boolean; // we will detect this the first time we draw\r\n private readonly _bgColor = ColorDef.from(0, 0, 0, 255);\r\n\r\n private constructor(classifier: SpatialClassifier | undefined, target: Target) {\r\n super();\r\n this._classifier = classifier;\r\n\r\n const flags = this._renderState.flags;\r\n flags.depthMask = flags.blend = flags.depthTest = false;\r\n\r\n this._batchState = new BatchState(this._branchStack);\r\n this._renderCommands = new RenderCommands(target, this._branchStack, this._batchState);\r\n }\r\n\r\n public getParams(params: Float32Array): void {\r\n params[0] = this.insideDisplay;\r\n params[1] = this.outsideDisplay;\r\n params[2] = this._contentMode;\r\n if (this._planarClipMask?.settings.invert) // If the mask sense is inverted, negate the contentMode to indicate this to the shader.\r\n params[2] = - params[2];\r\n\r\n params[3] = (this._planarClipMask?.settings.transparency === undefined) ? -1 : this._planarClipMask.settings.transparency;\r\n\r\n }\r\n\r\n public get hiliteTexture(): Texture | undefined { return undefined !== this._classifierBuffers ? this._classifierBuffers.textures.hilite : undefined; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n // public get properties(): SpatialClassifier { return this._classifier; }\r\n public get baseBatchId(): number { return this._baseBatchId; }\r\n public get anyHilited(): boolean { return this._anyHilited; }\r\n public get anyOpaque(): boolean { return this._anyOpaque; }\r\n public get anyTranslucent(): boolean { return this._anyTranslucent; }\r\n public get insideDisplay(): SpatialClassifierInsideDisplay { return this._classifier ? this._classifier.flags.inside : SpatialClassifierInsideDisplay.Off; }\r\n public get outsideDisplay(): SpatialClassifierOutsideDisplay { return this._classifier ? this._classifier.flags.outside : SpatialClassifierOutsideDisplay.On; }\r\n public get isClassifyingPointCloud(): boolean { return true === this._isClassifyingPointCloud; }\r\n\r\n public addGraphic(graphic: RenderGraphic) {\r\n this._graphics!.push(graphic);\r\n }\r\n\r\n public static create(properties: SpatialClassifier | undefined, target: Target): PlanarClassifier {\r\n return new PlanarClassifier(properties, target);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._classifierBuffers)\r\n this._classifierBuffers.textures.collectStatistics(stats);\r\n\r\n if (undefined !== this._maskBuffer)\r\n this._maskBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierCombinedBuffer)\r\n this._classifierCombinedBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierAndMaskCombinedBuffer)\r\n this._classifierAndMaskCombinedBuffer.collectStatistics(stats);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._classifierBuffers; }\r\n\r\n public dispose() {\r\n this._classifierBuffers = dispose(this._classifierBuffers);\r\n this._maskBuffer = dispose(this._maskBuffer);\r\n this._classifierCombinedBuffer = dispose(this._classifierCombinedBuffer);\r\n this._classifierAndMaskCombinedBuffer = dispose(this._classifierAndMaskCombinedBuffer);\r\n }\r\n\r\n public get texture(): Texture | undefined {\r\n switch (this._contentMode) {\r\n case PlanarClassifierContent.None:\r\n return undefined;\r\n case PlanarClassifierContent.ClassifierOnly:\r\n return this._classifierCombinedBuffer?.texture;\r\n case PlanarClassifierContent.MaskOnly:\r\n return this._maskBuffer?.texture;\r\n case PlanarClassifierContent.ClassifierAndMask:\r\n return this._classifierAndMaskCombinedBuffer?.texture;\r\n }\r\n }\r\n\r\n private pushBatches(batchState: BatchState, graphics: RenderGraphic[]) {\r\n graphics.forEach((graphic) => {\r\n if (graphic instanceof Batch) {\r\n batchState.push(graphic, true);\r\n batchState.pop();\r\n } else if (graphic instanceof Branch) {\r\n this.pushBatches(batchState, graphic.branch.entries);\r\n }\r\n });\r\n }\r\n\r\n public pushBatchState(batchState: BatchState) {\r\n this._baseBatchId = batchState.nextBatchId - 1;\r\n if (undefined !== this._classifierGraphics)\r\n this.pushBatches(batchState, this._classifierGraphics);\r\n }\r\n\r\n public setSource(classifierTreeRef?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState) {\r\n this._classifierTreeRef = classifierTreeRef;\r\n this._classifier = classifierTreeRef?.activeClassifier;\r\n this._planarClipMask = planarClipMask;\r\n }\r\n\r\n public collectGraphics(context: SceneContext, target: PlanarClassifierTarget): void {\r\n this._classifierGraphics.length = this._maskGraphics.length = 0;\r\n if (undefined === context.viewingSpace)\r\n return;\r\n\r\n const viewState = context.viewingSpace.view as ViewState3d;\r\n if (undefined === viewState)\r\n return;\r\n\r\n // TBD - Refine resolution calculation -- increase height based on viewing angle.\r\n // But make sure that we don't make it larger than the hardware supports, keeping in mind that we will be doubling the height later.\r\n const requiredHeight = Math.min(Math.max(context.target.viewRect.width, context.target.viewRect.height), System.instance.capabilities.maxTextureSize / 2);\r\n const requiredWidth = requiredHeight;\r\n\r\n if (requiredWidth !== this._width || requiredHeight !== this._height)\r\n this.dispose();\r\n\r\n this._width = requiredWidth;\r\n this._height = requiredHeight;\r\n const maskTrees = this._planarClipMask?.getTileTrees(viewState, target.modelId);\r\n if (!maskTrees && !this._classifierTreeRef)\r\n return;\r\n\r\n const allTrees = maskTrees ? maskTrees.slice() : new Array<TileTreeReference>();\r\n if (this._classifierTreeRef)\r\n allTrees.push(this._classifierTreeRef);\r\n\r\n const projection = PlanarTextureProjection.computePlanarTextureProjection(this._plane, context, target, allTrees, viewState, this._width, this._height);\r\n if (!projection.textureFrustum || !projection.projectionMatrix || !projection.worldToViewMap)\r\n return;\r\n\r\n this._projectionMatrix = projection.projectionMatrix;\r\n this._frustum = projection.textureFrustum;\r\n this._debugFrustum = projection.debugFrustum;\r\n this._planarClipMaskOverrides = this._planarClipMask?.getPlanarClipMaskSymbologyOverrides();\r\n\r\n const drawTree = (treeRef: TileTreeReference, graphics: RenderGraphic[]) => {\r\n this._graphics = graphics;\r\n const drawArgs = GraphicsCollectorDrawArgs.create(context, this, treeRef, new FrustumPlanes(this._frustum), projection.worldToViewMap!);\r\n if (undefined !== drawArgs)\r\n treeRef.draw(drawArgs);\r\n\r\n this._graphics = undefined;\r\n };\r\n if (this._classifierTreeRef)\r\n drawTree(this._classifierTreeRef, this._classifierGraphics);\r\n\r\n if (maskTrees)\r\n maskTrees.forEach((maskTree) => drawTree(maskTree, this._maskGraphics));\r\n\r\n // Shader behaves slightly differently when classifying surfaces vs point clouds.\r\n this._isClassifyingPointCloud = target.isPointCloud;\r\n\r\n if (this._doDebugFrustum) {\r\n this._debugFrustumGraphic = dispose(this._debugFrustumGraphic);\r\n const builder = context.createSceneGraphicBuilder();\r\n\r\n builder.setSymbology(ColorDef.green, ColorDef.green, 1);\r\n builder.addFrustum(context.viewingSpace.getFrustum());\r\n builder.setSymbology(ColorDef.red, ColorDef.red, 1);\r\n builder.addFrustum(this._debugFrustum!);\r\n builder.setSymbology(ColorDef.white, ColorDef.white, 1);\r\n builder.addFrustum(this._frustum);\r\n this._debugFrustumGraphic = builder.finish();\r\n }\r\n }\r\n\r\n public draw(target: Target) {\r\n if (undefined === this._frustum)\r\n return;\r\n\r\n this._contentMode = PlanarClassifierContent.None;\r\n let combinationBuffer: ClassifierCombinationBuffer | undefined;\r\n if (this._classifierGraphics.length === 0) {\r\n if (this._maskGraphics.length === 0) {\r\n return;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.MaskOnly;\r\n }\r\n } else {\r\n if (undefined === this._classifierBuffers) {\r\n this._classifierBuffers = ClassifierFrameBuffers.create(this._width, this._height);\r\n if (undefined === this._classifierBuffers)\r\n return;\r\n }\r\n if (this._maskGraphics.length === 0) {\r\n if (undefined === this._classifierCombinedBuffer) {\r\n combinationBuffer = this._classifierCombinedBuffer = ClassifierCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature);\r\n if (undefined === this._classifierCombinedBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.ClassifierOnly;\r\n combinationBuffer = this._classifierCombinedBuffer;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n if (undefined === this._classifierAndMaskCombinedBuffer) {\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer = ClassifierAndMaskCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature, this._maskBuffer.texture);\r\n if (undefined === this._classifierAndMaskCombinedBuffer)\r\n return;\r\n }\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer;\r\n this._contentMode = PlanarClassifierContent.ClassifierAndMask;\r\n }\r\n }\r\n\r\n if (undefined !== this._debugFrustumGraphic)\r\n target.graphics.foreground.push(this._debugFrustumGraphic);\r\n\r\n // Temporarily override the Target's state.\r\n const system = System.instance;\r\n const prevState = system.currentRenderState.clone(scratchPrevRenderState);\r\n system.context.viewport(0, 0, this._width, this._height);\r\n\r\n const vf = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n transparency: !this.isClassifyingPointCloud, // point clouds don't support transparency.\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n system.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n const prevOverrides = target.currentFeatureSymbologyOverrides;\r\n\r\n target.uniforms.style.changeBackgroundColor(this._bgColor); // Avoid white on white reversal. Will be reset in changeRenderPlan below.\r\n target.changeFrustum(this._frustum, this._frustum.getFraction(), true);\r\n this._anyTranslucent = false;\r\n\r\n const prevProjMatrix = target.uniforms.frustum.projectionMatrix;\r\n target.uniforms.frustum.changeProjectionMatrix(PlanarClassifier._postProjectionMatrix.multiplyMatrixMatrix(prevProjMatrix));\r\n target.uniforms.branch.changeRenderPlan(vf, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = this._renderCommands;\r\n const getDrawCommands = (graphics: RenderGraphic[]) => {\r\n this._batchState.reset();\r\n renderCommands.reset(target, this._branchStack, this._batchState);\r\n renderCommands.collectGraphicsForPlanarProjection(graphics);\r\n\r\n // Draw the classifiers into our attachments.\r\n // When using Display.ElementColor, the color and transparency come from the classifier geometry. Therefore we may need to draw the classified geometry\r\n // in a different pass - or both passes - depending on the transparency of the classifiers.\r\n // NB: \"Outside\" geometry by definition cannot take color/transparency from element...\r\n const cmds = renderCommands.getCommands(RenderPass.OpaquePlanar);\r\n\r\n // NB: We don't strictly require the classifier geometry to be planar, and sometimes (e.g., \"planar\" polyface/bspsurf) we do not detect planarity.\r\n cmds.push(...renderCommands.getCommands(RenderPass.OpaqueGeneral));\r\n this._anyOpaque = cmds.length > 0;\r\n const transCmds = renderCommands.getCommands(RenderPass.Translucent);\r\n if (transCmds.length > 0) {\r\n cmds.push(...transCmds);\r\n this._anyTranslucent = true;\r\n }\r\n return cmds;\r\n };\r\n\r\n if (this._classifierGraphics.length > 0 && this._classifierBuffers) {\r\n this._classifierBuffers.draw(getDrawCommands(this._classifierGraphics), target);\r\n\r\n // Draw any hilited classifiers.\r\n const hiliteCommands = renderCommands.getCommands(RenderPass.Hilite);\r\n this._anyHilited = 0 !== hiliteCommands.length;\r\n if (this._anyHilited)\r\n this._classifierBuffers.drawHilite(hiliteCommands, target);\r\n }\r\n if (this._maskGraphics.length > 0 && this._maskBuffer) {\r\n if (this._planarClipMaskOverrides)\r\n target.overrideFeatureSymbology(this._planarClipMaskOverrides);\r\n if (this._planarClipMask && this._planarClipMask.settings.transparency !== undefined && this._planarClipMask.settings.transparency > 0.0)\r\n this._anyTranslucent = true;\r\n\r\n this._maskBuffer.draw(getDrawCommands(this._maskGraphics), target);\r\n\r\n }\r\n if (combinationBuffer)\r\n combinationBuffer.compose(target);\r\n\r\n this._batchState.reset();\r\n target.changeRenderPlan(prevPlan);\r\n target.overrideFeatureSymbology(prevOverrides);\r\n\r\n system.applyRenderState(prevState);\r\n system.context.viewport(0, 0, target.viewRect.width, target.viewRect.height);\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"PlanarClassifier.js","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Matrix4d, Plane3dByOriginAndUnitNormal, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Frustum, FrustumPlanes, RenderMode, RenderTexture, SpatialClassifier, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay,\r\n} from \"@itwin/core-common\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { GraphicsCollectorDrawArgs, SpatialClassifierTileTreeReference, TileTreeReference } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState3d } from \"../../ViewState\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { PlanarClassifierTarget, RenderPlanarClassifier } from \"../RenderPlanarClassifier\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { CachedGeometry, Combine3TexturesGeometry, CombineTexturesGeometry, ViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands } from \"./DrawCommand\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { PlanarTextureProjection } from \"./PlanarTextureProjection\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\nexport enum PlanarClassifierContent { None = 0, MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3 }\r\n\r\nfunction createTexture(handle: TextureHandle): Texture {\r\n return new Texture({\r\n handle,\r\n ownership: \"external\",\r\n type: RenderTexture.Type.TileSection,\r\n });\r\n}\r\n\r\nfunction createTextureHandle(width: number, height: number, heightMult = 1.0) { return TextureHandle.createForAttachment(width, height * heightMult, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte); }\r\n\r\nclass ClassifierTextures implements WebGLDisposable {\r\n private constructor(public readonly color: Texture,\r\n public readonly feature: Texture,\r\n public readonly hilite: Texture) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.color.isDisposed\r\n && this.feature.isDisposed\r\n && this.hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.color);\r\n dispose(this.feature);\r\n dispose(this.hilite);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n stats.addPlanarClassifier(this.color.bytesUsed);\r\n stats.addPlanarClassifier(this.feature.bytesUsed);\r\n stats.addPlanarClassifier(this.hilite.bytesUsed);\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierTextures | undefined {\r\n const hColor = createTextureHandle(width, height);\r\n const hFeature = createTextureHandle(width, height);\r\n const hHilite = createTextureHandle(width, height);\r\n if (!hColor || !hFeature || !hHilite)\r\n return undefined;\r\n\r\n const color = createTexture(hColor);\r\n const feature = createTexture(hFeature);\r\n const hilite = createTexture(hHilite);\r\n if (!color || !feature || !hilite)\r\n return undefined;\r\n\r\n return new ClassifierTextures(color, feature, hilite);\r\n }\r\n}\r\n\r\nabstract class ClassifierFrameBuffers implements WebGLDisposable {\r\n protected constructor(\r\n public readonly textures: ClassifierTextures,\r\n private readonly _hilite: FrameBuffer) { }\r\n\r\n public get isDisposed(): boolean {\r\n return this.textures.isDisposed && this._hilite.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.textures);\r\n dispose(this._hilite);\r\n }\r\n\r\n public abstract draw(cmds: DrawCommands, target: Target): void;\r\n\r\n public drawHilite(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.frameBufferStack.execute(this._hilite, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.execute(target, cmds, RenderPass.Hilite);\r\n });\r\n }\r\n\r\n public static create(width: number, height: number): ClassifierFrameBuffers | undefined {\r\n const textures = ClassifierTextures.create(width, height);\r\n if (undefined === textures)\r\n return undefined;\r\n\r\n const hiliteFbo = FrameBuffer.create([textures.hilite.texture]);\r\n if (undefined === hiliteFbo)\r\n return undefined;\r\n\r\n if (System.instance.capabilities.supportsDrawBuffers)\r\n return ClassifierMRTFrameBuffers.createMRT(textures, hiliteFbo);\r\n else\r\n return ClassifierMPFrameBuffers.createMP(textures, hiliteFbo);\r\n }\r\n}\r\n\r\nclass ClassifierMRTFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _fbo: FrameBuffer;\r\n private readonly _clearGeom: ViewportQuadGeometry;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, fbo: FrameBuffer, geom: ViewportQuadGeometry) {\r\n super(textures, hilite);\r\n this._fbo = fbo;\r\n this._clearGeom = geom;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._fbo.isDisposed\r\n && this._clearGeom.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._fbo);\r\n dispose(this._clearGeom);\r\n super.dispose();\r\n }\r\n\r\n public static createMRT(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMRTFrameBuffers | undefined {\r\n const fbo = FrameBuffer.create([textures.color.texture, textures.feature.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n const geom = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n return undefined !== geom ? new ClassifierMRTFrameBuffers(textures, hilite, fbo, geom) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n System.instance.frameBufferStack.execute(this._fbo, true, false, () => {\r\n target.techniques.draw(getDrawParams(target, this._clearGeom));\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierMPFrameBuffers extends ClassifierFrameBuffers {\r\n private readonly _color: FrameBuffer;\r\n private readonly _feature: FrameBuffer;\r\n\r\n private constructor(textures: ClassifierTextures, hilite: FrameBuffer, color: FrameBuffer, feature: FrameBuffer) {\r\n super(textures, hilite);\r\n this._color = color;\r\n this._feature = feature;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && this._color.isDisposed\r\n && this._feature.isDisposed;\r\n }\r\n\r\n public override dispose(): void {\r\n dispose(this._color);\r\n dispose(this._feature);\r\n super.dispose();\r\n }\r\n\r\n public static createMP(textures: ClassifierTextures, hilite: FrameBuffer): ClassifierMPFrameBuffers | undefined {\r\n const color = FrameBuffer.create([textures.color.texture]);\r\n const feature = FrameBuffer.create([textures.feature.texture]);\r\n return undefined !== color && undefined !== feature ? new ClassifierMPFrameBuffers(textures, hilite, color, feature) : undefined;\r\n }\r\n\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n const draw = (feature: boolean) => {\r\n const fbo = feature ? this._feature : this._color;\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.compositor.currentRenderTargetIndex = feature ? 1 : 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n };\r\n\r\n draw(false);\r\n draw(true);\r\n }\r\n}\r\n\r\ninterface TextureAndFbo {\r\n texture: Texture;\r\n fbo: FrameBuffer;\r\n}\r\n\r\nabstract class SingleTextureFrameBuffer implements WebGLDisposable {\r\n public texture: Texture;\r\n protected fbo: FrameBuffer;\r\n public get isDisposed(): boolean { return this.texture.isDisposed && this.fbo.isDisposed; }\r\n public collectStatistics(stats: RenderMemory.Statistics): void { stats.addPlanarClassifier(this.texture.bytesUsed); }\r\n protected constructor(textureAndFbo: TextureAndFbo) {\r\n this.texture = textureAndFbo.texture;\r\n this.fbo = textureAndFbo.fbo;\r\n }\r\n public dispose(): void {\r\n dispose(this.texture);\r\n dispose(this.fbo);\r\n }\r\n public static createTextureAndFrameBuffer(width: number, height: number): TextureAndFbo | undefined {\r\n const hTexture = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n if (!hTexture)\r\n return undefined;\r\n\r\n const texture = new Texture({ type: RenderTexture.Type.TileSection, ownership: \"external\", handle: hTexture });\r\n if (!texture)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([texture.texture]);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n return { texture, fbo };\r\n }\r\n}\r\nclass MaskFrameBuffer extends SingleTextureFrameBuffer {\r\n public static create(width: number, height: number): MaskFrameBuffer | undefined {\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, height);\r\n return undefined === textureFbo ? undefined : new MaskFrameBuffer(textureFbo);\r\n }\r\n public draw(cmds: DrawCommands, target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n if (!System.instance.capabilities.supportsDrawBuffers)\r\n target.compositor.currentRenderTargetIndex = 0;\r\n target.techniques.execute(target, cmds, RenderPass.PlanarClassification);\r\n });\r\n }\r\n}\r\nabstract class CombineTexturesFrameBuffer extends SingleTextureFrameBuffer {\r\n constructor(textureAndFbo: TextureAndFbo, private _combineGeom: CachedGeometry, private _width: number, private _height: number, private _heightMult: number) { super(textureAndFbo); }\r\n public compose(target: Target): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.context.viewport(0, 0, this._width, this._heightMult * this._height);\r\n system.frameBufferStack.execute(this.fbo, true, false, () => {\r\n gl.clearColor(0, 0, 0, 0);\r\n gl.clear(GL.BufferBit.Color);\r\n target.techniques.draw(getDrawParams(target, this._combineGeom));\r\n });\r\n }\r\n}\r\n\r\nclass ClassifierCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = CombineTexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 2 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierCombinationBuffer(textureFbo, combineGeom, width, height, 2);\r\n }\r\n}\r\nclass ClassifierAndMaskCombinationBuffer extends CombineTexturesFrameBuffer {\r\n public static create(width: number, height: number, classifierColor: Texture, classifierFeature: Texture, mask: Texture): ClassifierAndMaskCombinationBuffer | undefined {\r\n const combineGeom = Combine3TexturesGeometry.createGeometry(classifierColor.texture.getHandle()!, classifierFeature.texture.getHandle()!, mask.texture.getHandle()!);\r\n if (undefined === combineGeom)\r\n return undefined;\r\n\r\n const textureFbo = SingleTextureFrameBuffer.createTextureAndFrameBuffer(width, 3 * height);\r\n return undefined === textureFbo ? undefined : new ClassifierAndMaskCombinationBuffer(textureFbo, combineGeom, width, height, 3);\r\n }\r\n}\r\n\r\nconst scratchPrevRenderState = new RenderState();\r\n\r\n/** @internal */\r\nexport class PlanarClassifier extends RenderPlanarClassifier implements RenderMemory.Consumer, WebGLDisposable {\r\n private _classifierBuffers?: ClassifierFrameBuffers;\r\n private _maskBuffer?: MaskFrameBuffer;\r\n private _classifierCombinedBuffer?: ClassifierCombinationBuffer;\r\n private _classifierAndMaskCombinedBuffer?: ClassifierAndMaskCombinationBuffer;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics?: RenderGraphic[];\r\n private readonly _classifierGraphics: RenderGraphic[] = [];\r\n private readonly _maskGraphics: RenderGraphic[] = [];\r\n private _frustum?: Frustum;\r\n private _width = 0;\r\n private _height = 0;\r\n private _baseBatchId = 0;\r\n private _anyHilited = false;\r\n private _anyOpaque = false;\r\n private _anyTranslucent = false;\r\n private _classifier?: SpatialClassifier;\r\n private readonly _plane = Plane3dByOriginAndUnitNormal.create(new Point3d(0, 0, 0), new Vector3d(0, 0, 1))!; // TBD -- Support other planes - default to X-Y for now.\r\n private readonly _renderState = new RenderState();\r\n private readonly _renderCommands: RenderCommands;\r\n private readonly _branchStack = new BranchStack();\r\n private readonly _batchState: BatchState;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _classifierTreeRef?: TileTreeReference;\r\n private _planarClipMaskOverrides?: FeatureSymbology.Overrides;\r\n private _contentMode: PlanarClassifierContent = PlanarClassifierContent.None;\r\n\r\n private static _postProjectionMatrix = Matrix4d.createRowValues(\r\n 0, 1, 0, 0,\r\n 0, 0, -1, 0,\r\n 1, 0, 0, 0,\r\n 0, 0, 0, 1);\r\n private _debugFrustum?: Frustum;\r\n private _doDebugFrustum = false;\r\n private _debugFrustumGraphic?: RenderGraphic = undefined;\r\n private _isClassifyingPointCloud?: boolean; // we will detect this the first time we draw\r\n private readonly _bgColor = ColorDef.from(0, 0, 0, 255);\r\n\r\n private constructor(classifier: SpatialClassifier | undefined, target: Target) {\r\n super();\r\n this._classifier = classifier;\r\n\r\n const flags = this._renderState.flags;\r\n flags.depthMask = flags.blend = flags.depthTest = false;\r\n\r\n this._batchState = new BatchState(this._branchStack);\r\n this._renderCommands = new RenderCommands(target, this._branchStack, this._batchState);\r\n }\r\n\r\n public getParams(params: Float32Array): void {\r\n params[0] = this.insideDisplay;\r\n params[1] = this.outsideDisplay;\r\n params[2] = this._contentMode;\r\n if (this._planarClipMask?.settings.invert) // If the mask sense is inverted, negate the contentMode to indicate this to the shader.\r\n params[2] = - params[2];\r\n\r\n params[3] = (this._planarClipMask?.settings.transparency === undefined) ? -1 : this._planarClipMask.settings.transparency;\r\n\r\n }\r\n\r\n public get hiliteTexture(): Texture | undefined { return undefined !== this._classifierBuffers ? this._classifierBuffers.textures.hilite : undefined; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n // public get properties(): SpatialClassifier { return this._classifier; }\r\n public get baseBatchId(): number { return this._baseBatchId; }\r\n public get anyHilited(): boolean { return this._anyHilited; }\r\n public get anyOpaque(): boolean { return this._anyOpaque; }\r\n public get anyTranslucent(): boolean { return this._anyTranslucent; }\r\n public get insideDisplay(): SpatialClassifierInsideDisplay { return this._classifier ? this._classifier.flags.inside : SpatialClassifierInsideDisplay.Off; }\r\n public get outsideDisplay(): SpatialClassifierOutsideDisplay { return this._classifier ? this._classifier.flags.outside : SpatialClassifierOutsideDisplay.On; }\r\n public get isClassifyingPointCloud(): boolean { return true === this._isClassifyingPointCloud; }\r\n\r\n public addGraphic(graphic: RenderGraphic) {\r\n this._graphics!.push(graphic);\r\n }\r\n\r\n public static create(properties: SpatialClassifier | undefined, target: Target): PlanarClassifier {\r\n return new PlanarClassifier(properties, target);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._classifierBuffers)\r\n this._classifierBuffers.textures.collectStatistics(stats);\r\n\r\n if (undefined !== this._maskBuffer)\r\n this._maskBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierCombinedBuffer)\r\n this._classifierCombinedBuffer.collectStatistics(stats);\r\n\r\n if (undefined !== this._classifierAndMaskCombinedBuffer)\r\n this._classifierAndMaskCombinedBuffer.collectStatistics(stats);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._classifierBuffers; }\r\n\r\n public dispose() {\r\n this._classifierBuffers = dispose(this._classifierBuffers);\r\n this._maskBuffer = dispose(this._maskBuffer);\r\n this._classifierCombinedBuffer = dispose(this._classifierCombinedBuffer);\r\n this._classifierAndMaskCombinedBuffer = dispose(this._classifierAndMaskCombinedBuffer);\r\n }\r\n\r\n public get texture(): Texture | undefined {\r\n switch (this._contentMode) {\r\n case PlanarClassifierContent.None:\r\n return undefined;\r\n case PlanarClassifierContent.ClassifierOnly:\r\n return this._classifierCombinedBuffer?.texture;\r\n case PlanarClassifierContent.MaskOnly:\r\n return this._maskBuffer?.texture;\r\n case PlanarClassifierContent.ClassifierAndMask:\r\n return this._classifierAndMaskCombinedBuffer?.texture;\r\n }\r\n }\r\n\r\n private pushBatches(batchState: BatchState, graphics: RenderGraphic[]) {\r\n graphics.forEach((graphic) => {\r\n if (graphic instanceof Batch) {\r\n batchState.push(graphic, true);\r\n batchState.pop();\r\n } else if (graphic instanceof Branch) {\r\n this.pushBatches(batchState, graphic.branch.entries);\r\n }\r\n });\r\n }\r\n\r\n public pushBatchState(batchState: BatchState) {\r\n this._baseBatchId = batchState.nextBatchId - 1;\r\n if (undefined !== this._classifierGraphics)\r\n this.pushBatches(batchState, this._classifierGraphics);\r\n }\r\n\r\n public setSource(classifierTreeRef?: SpatialClassifierTileTreeReference, planarClipMask?: PlanarClipMaskState) {\r\n this._classifierTreeRef = classifierTreeRef;\r\n this._classifier = classifierTreeRef?.activeClassifier;\r\n this._planarClipMask = planarClipMask;\r\n }\r\n\r\n public collectGraphics(context: SceneContext, target: PlanarClassifierTarget): void {\r\n this._classifierGraphics.length = this._maskGraphics.length = 0;\r\n if (undefined === context.viewingSpace)\r\n return;\r\n\r\n const viewState = context.viewingSpace.view as ViewState3d;\r\n if (undefined === viewState)\r\n return;\r\n\r\n // TBD - Refine resolution calculation -- increase height based on viewing angle.\r\n // But make sure that we don't make it larger than the hardware supports, keeping in mind that we will be doubling the height later.\r\n const requiredHeight = Math.min(Math.max(context.target.viewRect.width, context.target.viewRect.height), System.instance.capabilities.maxTextureSize / 2);\r\n const requiredWidth = requiredHeight;\r\n\r\n if (requiredWidth !== this._width || requiredHeight !== this._height)\r\n this.dispose();\r\n\r\n this._width = requiredWidth;\r\n this._height = requiredHeight;\r\n const maskTrees = this._planarClipMask?.getTileTrees(viewState, target.modelId);\r\n if (!maskTrees && !this._classifierTreeRef)\r\n return;\r\n\r\n const allTrees = maskTrees ? maskTrees.slice() : new Array<TileTreeReference>();\r\n if (this._classifierTreeRef)\r\n allTrees.push(this._classifierTreeRef);\r\n\r\n const projection = PlanarTextureProjection.computePlanarTextureProjection(this._plane, context, target, allTrees, viewState, this._width, this._height);\r\n if (!projection.textureFrustum || !projection.projectionMatrix || !projection.worldToViewMap)\r\n return;\r\n\r\n this._projectionMatrix = projection.projectionMatrix;\r\n this._frustum = projection.textureFrustum;\r\n this._debugFrustum = projection.debugFrustum;\r\n this._planarClipMaskOverrides = this._planarClipMask?.getPlanarClipMaskSymbologyOverrides();\r\n\r\n const drawTree = (treeRef: TileTreeReference, graphics: RenderGraphic[]) => {\r\n this._graphics = graphics;\r\n const drawArgs = GraphicsCollectorDrawArgs.create(context, this, treeRef, new FrustumPlanes(this._frustum), projection.worldToViewMap!);\r\n if (undefined !== drawArgs)\r\n treeRef.draw(drawArgs);\r\n\r\n this._graphics = undefined;\r\n };\r\n if (this._classifierTreeRef)\r\n drawTree(this._classifierTreeRef, this._classifierGraphics);\r\n\r\n if (maskTrees)\r\n maskTrees.forEach((maskTree) => drawTree(maskTree, this._maskGraphics));\r\n\r\n // Shader behaves slightly differently when classifying surfaces vs point clouds.\r\n this._isClassifyingPointCloud = target.isPointCloud;\r\n\r\n if (this._doDebugFrustum) {\r\n this._debugFrustumGraphic = dispose(this._debugFrustumGraphic);\r\n const builder = context.createSceneGraphicBuilder();\r\n\r\n builder.setSymbology(ColorDef.green, ColorDef.green, 1);\r\n builder.addFrustum(context.viewingSpace.getFrustum());\r\n builder.setSymbology(ColorDef.red, ColorDef.red, 1);\r\n builder.addFrustum(this._debugFrustum!);\r\n builder.setSymbology(ColorDef.white, ColorDef.white, 1);\r\n builder.addFrustum(this._frustum);\r\n this._debugFrustumGraphic = builder.finish();\r\n }\r\n }\r\n\r\n public draw(target: Target) {\r\n if (undefined === this._frustum)\r\n return;\r\n\r\n this._contentMode = PlanarClassifierContent.None;\r\n let combinationBuffer: ClassifierCombinationBuffer | undefined;\r\n if (this._classifierGraphics.length === 0) {\r\n if (this._maskGraphics.length === 0) {\r\n return;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.MaskOnly;\r\n }\r\n } else {\r\n if (undefined === this._classifierBuffers) {\r\n this._classifierBuffers = ClassifierFrameBuffers.create(this._width, this._height);\r\n if (undefined === this._classifierBuffers)\r\n return;\r\n }\r\n if (this._maskGraphics.length === 0) {\r\n if (undefined === this._classifierCombinedBuffer) {\r\n combinationBuffer = this._classifierCombinedBuffer = ClassifierCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature);\r\n if (undefined === this._classifierCombinedBuffer)\r\n return;\r\n }\r\n this._contentMode = PlanarClassifierContent.ClassifierOnly;\r\n combinationBuffer = this._classifierCombinedBuffer;\r\n } else {\r\n if (undefined === this._maskBuffer) {\r\n this._maskBuffer = MaskFrameBuffer.create(this._width, this._height);\r\n if (undefined === this._maskBuffer)\r\n return;\r\n }\r\n if (undefined === this._classifierAndMaskCombinedBuffer) {\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer = ClassifierAndMaskCombinationBuffer.create(this._width, this._height, this._classifierBuffers.textures.color, this._classifierBuffers.textures.feature, this._maskBuffer.texture);\r\n if (undefined === this._classifierAndMaskCombinedBuffer)\r\n return;\r\n }\r\n combinationBuffer = this._classifierAndMaskCombinedBuffer;\r\n this._contentMode = PlanarClassifierContent.ClassifierAndMask;\r\n }\r\n }\r\n\r\n if (undefined !== this._debugFrustumGraphic)\r\n target.graphics.foreground.push(this._debugFrustumGraphic);\r\n\r\n // Temporarily override the Target's state.\r\n const system = System.instance;\r\n const prevState = system.currentRenderState.clone(scratchPrevRenderState);\r\n system.context.viewport(0, 0, this._width, this._height);\r\n\r\n const vf = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: !this.isClassifyingPointCloud, // point clouds don't support transparency.\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n system.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n const prevOverrides = target.currentFeatureSymbologyOverrides;\r\n\r\n target.uniforms.style.changeBackgroundColor(this._bgColor); // Avoid white on white reversal. Will be reset in changeRenderPlan below.\r\n target.changeFrustum(this._frustum, this._frustum.getFraction(), true);\r\n this._anyTranslucent = false;\r\n\r\n const prevProjMatrix = target.uniforms.frustum.projectionMatrix;\r\n target.uniforms.frustum.changeProjectionMatrix(PlanarClassifier._postProjectionMatrix.multiplyMatrixMatrix(prevProjMatrix));\r\n target.uniforms.branch.changeRenderPlan(vf, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = this._renderCommands;\r\n const getDrawCommands = (graphics: RenderGraphic[]) => {\r\n this._batchState.reset();\r\n renderCommands.reset(target, this._branchStack, this._batchState);\r\n renderCommands.collectGraphicsForPlanarProjection(graphics);\r\n\r\n // Draw the classifiers into our attachments.\r\n // When using Display.ElementColor, the color and transparency come from the classifier geometry. Therefore we may need to draw the classified geometry\r\n // in a different pass - or both passes - depending on the transparency of the classifiers.\r\n // NB: \"Outside\" geometry by definition cannot take color/transparency from element...\r\n const cmds = renderCommands.getCommands(RenderPass.OpaquePlanar);\r\n\r\n // NB: We don't strictly require the classifier geometry to be planar, and sometimes (e.g., \"planar\" polyface/bspsurf) we do not detect planarity.\r\n cmds.push(...renderCommands.getCommands(RenderPass.OpaqueGeneral));\r\n this._anyOpaque = cmds.length > 0;\r\n const transCmds = renderCommands.getCommands(RenderPass.Translucent);\r\n if (transCmds.length > 0) {\r\n cmds.push(...transCmds);\r\n this._anyTranslucent = true;\r\n }\r\n return cmds;\r\n };\r\n\r\n if (this._classifierGraphics.length > 0 && this._classifierBuffers) {\r\n this._classifierBuffers.draw(getDrawCommands(this._classifierGraphics), target);\r\n\r\n // Draw any hilited classifiers.\r\n const hiliteCommands = renderCommands.getCommands(RenderPass.Hilite);\r\n this._anyHilited = 0 !== hiliteCommands.length;\r\n if (this._anyHilited)\r\n this._classifierBuffers.drawHilite(hiliteCommands, target);\r\n }\r\n if (this._maskGraphics.length > 0 && this._maskBuffer) {\r\n if (this._planarClipMaskOverrides)\r\n target.overrideFeatureSymbology(this._planarClipMaskOverrides);\r\n if (this._planarClipMask && this._planarClipMask.settings.transparency !== undefined && this._planarClipMask.settings.transparency > 0.0)\r\n this._anyTranslucent = true;\r\n\r\n this._maskBuffer.draw(getDrawCommands(this._maskGraphics), target);\r\n\r\n }\r\n if (combinationBuffer)\r\n combinationBuffer.compose(target);\r\n\r\n this._batchState.reset();\r\n target.changeRenderPlan(prevPlan);\r\n target.overrideFeatureSymbology(prevOverrides);\r\n\r\n system.applyRenderState(prevState);\r\n system.context.viewport(0, 0, target.viewRect.width, target.viewRect.height);\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarTextureProjection.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarTextureProjection.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EACgD,KAAK,EAAY,QAAQ,EAAE,4BAA4B,EAAW,OAAO,EACvH,SAAS,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAkC,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAA4H;WAErJ,8BAA8B,CAAC,YAAY,EAAE,4BAA4B,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;QAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;WA6I/Y,uBAAuB,CAAC,MAAM,EAAE,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"PlanarTextureProjection.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarTextureProjection.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EACgD,KAAK,EAAY,QAAQ,EAAE,4BAA4B,EAAW,OAAO,EACvH,SAAS,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAkC,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAA4H;WAErJ,8BAA8B,CAAC,YAAY,EAAE,4BAA4B,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;QAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;WA6I/Y,uBAAuB,CAAC,MAAM,EAAE,MAAM;;;;CAsBrD"}
|
|
@@ -149,6 +149,7 @@ class PlanarTextureProjection {
|
|
|
149
149
|
state.flags.depthTest = false;
|
|
150
150
|
const viewFlags = target.currentViewFlags.copy({
|
|
151
151
|
renderMode: core_common_1.RenderMode.SmoothShade,
|
|
152
|
+
wiremesh: false,
|
|
152
153
|
transparency: false,
|
|
153
154
|
textures: false,
|
|
154
155
|
lighting: false,
|