@itwin/core-frontend 5.4.0-dev.6 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +70 -1
  2. package/lib/cjs/IModelApp.d.ts +12 -0
  3. package/lib/cjs/IModelApp.d.ts.map +1 -1
  4. package/lib/cjs/IModelApp.js +9 -0
  5. package/lib/cjs/IModelApp.js.map +1 -1
  6. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  7. package/lib/cjs/IModelConnection.js +6 -2
  8. package/lib/cjs/IModelConnection.js.map +1 -1
  9. package/lib/cjs/SheetViewState.d.ts +7 -5
  10. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  11. package/lib/cjs/SheetViewState.js +52 -683
  12. package/lib/cjs/SheetViewState.js.map +1 -1
  13. package/lib/cjs/internal/SheetViewAttachments.d.ts +57 -0
  14. package/lib/cjs/internal/SheetViewAttachments.d.ts.map +1 -0
  15. package/lib/cjs/internal/SheetViewAttachments.js +336 -0
  16. package/lib/cjs/internal/SheetViewAttachments.js.map +1 -0
  17. package/lib/cjs/internal/ViewAttachmentRenderer.d.ts +32 -0
  18. package/lib/cjs/internal/ViewAttachmentRenderer.d.ts.map +1 -0
  19. package/lib/cjs/internal/ViewAttachmentRenderer.js +462 -0
  20. package/lib/cjs/internal/ViewAttachmentRenderer.js.map +1 -0
  21. package/lib/cjs/internal/render/webgl/SceneCompositor.js +1 -1
  22. package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
  23. package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
  24. package/lib/cjs/internal/render/webgl/ShaderBuilder.js +8 -1
  25. package/lib/cjs/internal/render/webgl/ShaderBuilder.js.map +1 -1
  26. package/lib/cjs/properties/AngleDescription.js +4 -4
  27. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  28. package/lib/cjs/properties/LengthDescription.js +9 -9
  29. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  30. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  31. package/lib/cjs/quantity-formatting/QuantityFormatter.js +9 -8
  32. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  33. package/lib/cjs/tools/EventController.js +1 -1
  34. package/lib/cjs/tools/EventController.js.map +1 -1
  35. package/lib/cjs/tools/MeasureTool.js +21 -21
  36. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  37. package/lib/esm/IModelApp.d.ts +12 -0
  38. package/lib/esm/IModelApp.d.ts.map +1 -1
  39. package/lib/esm/IModelApp.js +9 -0
  40. package/lib/esm/IModelApp.js.map +1 -1
  41. package/lib/esm/IModelConnection.d.ts.map +1 -1
  42. package/lib/esm/IModelConnection.js +7 -3
  43. package/lib/esm/IModelConnection.js.map +1 -1
  44. package/lib/esm/SheetViewState.d.ts +7 -5
  45. package/lib/esm/SheetViewState.d.ts.map +1 -1
  46. package/lib/esm/SheetViewState.js +55 -686
  47. package/lib/esm/SheetViewState.js.map +1 -1
  48. package/lib/esm/internal/SheetViewAttachments.d.ts +57 -0
  49. package/lib/esm/internal/SheetViewAttachments.d.ts.map +1 -0
  50. package/lib/esm/internal/SheetViewAttachments.js +332 -0
  51. package/lib/esm/internal/SheetViewAttachments.js.map +1 -0
  52. package/lib/esm/internal/ViewAttachmentRenderer.d.ts +32 -0
  53. package/lib/esm/internal/ViewAttachmentRenderer.d.ts.map +1 -0
  54. package/lib/esm/internal/ViewAttachmentRenderer.js +459 -0
  55. package/lib/esm/internal/ViewAttachmentRenderer.js.map +1 -0
  56. package/lib/esm/internal/render/webgl/SceneCompositor.js +1 -1
  57. package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
  58. package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
  59. package/lib/esm/internal/render/webgl/ShaderBuilder.js +8 -1
  60. package/lib/esm/internal/render/webgl/ShaderBuilder.js.map +1 -1
  61. package/lib/esm/properties/AngleDescription.js +4 -4
  62. package/lib/esm/properties/AngleDescription.js.map +1 -1
  63. package/lib/esm/properties/LengthDescription.js +9 -9
  64. package/lib/esm/properties/LengthDescription.js.map +1 -1
  65. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  66. package/lib/esm/quantity-formatting/QuantityFormatter.js +9 -8
  67. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  68. package/lib/esm/tools/EventController.js +1 -1
  69. package/lib/esm/tools/EventController.js.map +1 -1
  70. package/lib/esm/tools/MeasureTool.js +21 -21
  71. package/lib/esm/tools/MeasureTool.js.map +1 -1
  72. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  73. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  74. package/package.json +21 -21
@@ -1 +1 @@
1
- {"version":3,"file":"SceneCompositor.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SceneCompositor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, expectDefined, Id64String } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ModelFeature, PointCloudDisplaySettings, RenderFeatureTable, RenderMode, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay,\r\n} from \"@itwin/core-common\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { IModelConnection } from \"../../../IModelConnection\";\r\nimport { SceneContext } from \"../../../ViewContext\";\r\nimport { ViewRect } from \"../../../common/ViewRect\";\r\nimport { Pixel } from \"../../../render/Pixel\";\r\nimport { GraphicList } from \"../../../render/RenderGraphic\";\r\nimport { RenderMemory } from \"../../../render/RenderMemory\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport {\r\n AmbientOcclusionGeometry, BlurGeometry, BlurType, BoundaryType, CachedGeometry, CompositeGeometry, CopyPickBufferGeometry,\r\n SingleTexturedViewportQuadGeometry, ViewportQuadGeometry, VolumeClassifierGeometry,\r\n} from \"./CachedGeometry\";\r\nimport { Debug } from \"./Diagnostics\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, extractFlashedVolumeClassifierCommands, extractHilitedVolumeClassifierCommands } from \"./DrawCommand\";\r\nimport { DepthBuffer, FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { IModelFrameLifecycle } from \"./IModelFrameLifecycle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { CompositeFlags, RenderOrder, RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { SolarShadowMap } from \"./SolarShadowMap\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { RenderBufferMultiSample } from \"./RenderBuffer\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { EDLMode, EyeDomeLighting } from \"./EDL\";\r\nimport { FrustumUniformType } from \"./FrustumUniforms\";\r\n\r\nexport function collectTextureStatistics(texture: TextureHandle | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== texture)\r\n stats.addTextureAttachment(texture.bytesUsed);\r\n}\r\n\r\nfunction collectMsBufferStatistics(msBuff: RenderBufferMultiSample | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== msBuff)\r\n stats.addTextureAttachment(msBuff.bytesUsed);\r\n}\r\n\r\n// Maintains the textures used by a SceneCompositor. The textures are reallocated when the dimensions of the viewport change.\r\nclass Textures implements WebGLDisposable, RenderMemory.Consumer {\r\n public accumulation?: TextureHandle;\r\n public revealage?: TextureHandle;\r\n public color?: TextureHandle;\r\n public featureId?: TextureHandle;\r\n public depthAndOrder?: TextureHandle;\r\n public depthAndOrderHidden?: TextureHandle; // only used if AO and multisampling\r\n public hilite?: TextureHandle;\r\n public occlusion?: TextureHandle;\r\n public occlusionBlur?: TextureHandle;\r\n public volClassBlend?: TextureHandle;\r\n public colorMsBuff?: RenderBufferMultiSample;\r\n public featureIdMsBuff?: RenderBufferMultiSample;\r\n public featureIdMsBuffHidden?: RenderBufferMultiSample;\r\n public depthAndOrderMsBuff?: RenderBufferMultiSample;\r\n public depthAndOrderMsBuffHidden?: RenderBufferMultiSample;\r\n public hiliteMsBuff?: RenderBufferMultiSample;\r\n public volClassBlendMsBuff?: RenderBufferMultiSample;\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.accumulation\r\n && undefined === this.revealage\r\n && undefined === this.color\r\n && undefined === this.featureId\r\n && undefined === this.depthAndOrder\r\n && undefined === this.depthAndOrderHidden\r\n && undefined === this.hilite\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionBlur\r\n && undefined === this.volClassBlend\r\n && undefined === this.colorMsBuff\r\n && undefined === this.featureIdMsBuff\r\n && undefined === this.featureIdMsBuffHidden\r\n && undefined === this.depthAndOrderMsBuff\r\n && undefined === this.depthAndOrderMsBuffHidden\r\n && undefined === this.hiliteMsBuff\r\n && undefined === this.volClassBlendMsBuff;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.accumulation = dispose(this.accumulation);\r\n this.revealage = dispose(this.revealage);\r\n this.color = dispose(this.color);\r\n this.featureId = dispose(this.featureId);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.depthAndOrderHidden = dispose(this.depthAndOrderHidden);\r\n this.hilite = dispose(this.hilite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.featureIdMsBuffHidden = dispose(this.featureIdMsBuffHidden);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.depthAndOrderMsBuffHidden = dispose(this.depthAndOrderMsBuffHidden);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectTextureStatistics(this.accumulation, stats);\r\n collectTextureStatistics(this.revealage, stats);\r\n collectTextureStatistics(this.color, stats);\r\n collectTextureStatistics(this.featureId, stats);\r\n collectTextureStatistics(this.depthAndOrder, stats);\r\n collectTextureStatistics(this.depthAndOrderHidden, stats);\r\n collectTextureStatistics(this.hilite, stats);\r\n collectTextureStatistics(this.occlusion, stats);\r\n collectTextureStatistics(this.occlusionBlur, stats);\r\n collectTextureStatistics(this.volClassBlend, stats);\r\n collectMsBufferStatistics(this.colorMsBuff, stats);\r\n collectMsBufferStatistics(this.featureIdMsBuff, stats);\r\n collectMsBufferStatistics(this.featureIdMsBuffHidden, stats);\r\n collectMsBufferStatistics(this.depthAndOrderMsBuff, stats);\r\n collectMsBufferStatistics(this.depthAndOrderMsBuffHidden, stats);\r\n collectMsBufferStatistics(this.hiliteMsBuff, stats);\r\n collectMsBufferStatistics(this.volClassBlendMsBuff, stats);\r\n }\r\n\r\n public init(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.accumulation);\r\n\r\n let pixelDataType: GL.Texture.DataType = GL.Texture.DataType.UnsignedByte;\r\n switch (System.instance.maxRenderType) {\r\n case RenderType.TextureFloat: {\r\n pixelDataType = GL.Texture.DataType.Float;\r\n break;\r\n }\r\n case RenderType.TextureHalfFloat: {\r\n pixelDataType = System.instance.context.HALF_FLOAT;\r\n break;\r\n }\r\n /* falls through */\r\n case RenderType.TextureUnsignedByte: {\r\n break;\r\n }\r\n }\r\n\r\n // NB: Both of these must be of the same type, because they are borrowed by pingpong and bound to the same frame buffer.\r\n this.accumulation = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n this.revealage = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n\r\n // Hilite texture is a simple on-off, but the smallest texture format WebGL allows us to use as output is RGBA with a byte per component.\r\n this.hilite = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.color = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.featureId = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.depthAndOrder = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n let rVal = undefined !== this.accumulation\r\n && undefined !== this.revealage\r\n && undefined !== this.color\r\n && undefined !== this.featureId\r\n && undefined !== this.depthAndOrder\r\n && undefined !== this.hilite;\r\n\r\n if (rVal && numSamples > 1) {\r\n rVal = this.enableMultiSampling(width, height, numSamples);\r\n }\r\n\r\n return rVal;\r\n }\r\n\r\n public enableOcclusion(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.occlusion && undefined === this.occlusionBlur);\r\n this.occlusion = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.occlusionBlur = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n let rVal = undefined !== this.occlusion && undefined !== this.occlusionBlur;\r\n if (numSamples > 1) {\r\n // If multisampling then we need a texture for storing depth and order for hidden edges.\r\n this.depthAndOrderHidden = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n rVal = rVal && undefined !== this.depthAndOrderHidden;\r\n }\r\n return rVal;\r\n }\r\n\r\n public disableOcclusion(): void {\r\n assert(undefined !== this.occlusion && undefined !== this.occlusionBlur);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.depthAndOrderHidden = dispose(this.depthAndOrderHidden);\r\n }\r\n\r\n public enableVolumeClassifier(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.volClassBlend);\r\n this.volClassBlend = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n let rVal = undefined !== this.volClassBlend;\r\n if (rVal && undefined !== numSamples && numSamples > 1) {\r\n this.volClassBlendMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n rVal = undefined !== this.volClassBlendMsBuff;\r\n }\r\n return rVal;\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public enableMultiSampling(width: number, height: number, numSamples: number): boolean {\r\n this.colorMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.featureIdMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.featureIdMsBuffHidden = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.depthAndOrderMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.depthAndOrderMsBuffHidden = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.hiliteMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n return undefined !== this.colorMsBuff\r\n && undefined !== this.featureIdMsBuff\r\n && undefined !== this.featureIdMsBuffHidden\r\n && undefined !== this.depthAndOrderMsBuff\r\n && undefined !== this.depthAndOrderMsBuffHidden\r\n && undefined !== this.hiliteMsBuff;\r\n }\r\n\r\n public disableMultiSampling(): boolean {\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.featureIdMsBuffHidden = dispose(this.featureIdMsBuffHidden);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.depthAndOrderMsBuffHidden = dispose(this.depthAndOrderMsBuffHidden);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n return true;\r\n }\r\n}\r\n\r\n// Maintains the framebuffers used by a SceneCompositor. The color attachments are supplied by a Textures object.\r\nclass FrameBuffers implements WebGLDisposable {\r\n public opaqueColor?: FrameBuffer;\r\n public opaqueAndCompositeColor?: FrameBuffer;\r\n public depthAndOrder?: FrameBuffer;\r\n public hilite?: FrameBuffer;\r\n public hiliteUsingStencil?: FrameBuffer;\r\n public stencilSet?: FrameBuffer;\r\n public occlusion?: FrameBuffer;\r\n public occlusionBlur?: FrameBuffer;\r\n public altZOnly?: FrameBuffer;\r\n public volClassCreateBlend?: FrameBuffer;\r\n public volClassCreateBlendAltZ?: FrameBuffer;\r\n public opaqueAll?: FrameBuffer;\r\n public opaqueAndCompositeAll?: FrameBuffer;\r\n public opaqueAndCompositeAllHidden?: FrameBuffer;\r\n public pingPong?: FrameBuffer;\r\n public pingPongMS?: FrameBuffer;\r\n public translucent?: FrameBuffer;\r\n public clearTranslucent?: FrameBuffer;\r\n public idsAndZ?: FrameBuffer;\r\n public idsAndAltZ?: FrameBuffer;\r\n public idsAndZComposite?: FrameBuffer;\r\n public idsAndAltZComposite?: FrameBuffer;\r\n public edlDrawCol?: FrameBuffer;\r\n\r\n public init(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n if (!this.initPotentialMSFbos(textures, depth, depthMS))\r\n return false;\r\n\r\n this.depthAndOrder = FrameBuffer.create([expectDefined(textures.depthAndOrder)], depth);\r\n this.hilite = FrameBuffer.create([expectDefined(textures.hilite)], depth);\r\n this.hiliteUsingStencil = FrameBuffer.create([expectDefined(textures.hilite)], depth);\r\n\r\n if (!this.depthAndOrder || !this.hilite || !this.hiliteUsingStencil)\r\n return false;\r\n\r\n assert(undefined === this.opaqueAll);\r\n\r\n if (!this.initPotentialMSMRTFbos(textures, depth, depthMS))\r\n return false;\r\n\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const colors = [textures.accumulation, textures.revealage];\r\n this.translucent = FrameBuffer.create(colors, depth);\r\n this.clearTranslucent = FrameBuffer.create(colors);\r\n\r\n // We borrow the SceneCompositor's accum and revealage textures for the surface pass.\r\n // First we render edges, writing to our textures.\r\n // Then we copy our textures to borrowed textures.\r\n // Finally we render surfaces, writing to our textures and reading from borrowed textures.\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const pingPong = [textures.accumulation, textures.revealage];\r\n this.pingPong = FrameBuffer.create(pingPong);\r\n\r\n return undefined !== this.translucent\r\n && undefined !== this.clearTranslucent\r\n && undefined !== this.pingPong;\r\n }\r\n\r\n private initPotentialMSFbos(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(undefined !== boundColor && undefined !== textures.color);\r\n if (undefined === depthMS) {\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth);\r\n } else {\r\n assert(undefined !== textures.colorMsBuff);\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n }\r\n return undefined !== this.opaqueColor\r\n && undefined !== this.opaqueAndCompositeColor;\r\n }\r\n\r\n private initPotentialMSMRTFbos(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(\r\n undefined !== boundColor &&\r\n undefined !== textures.color &&\r\n undefined !== textures.featureId &&\r\n undefined !== textures.depthAndOrder &&\r\n undefined !== textures.accumulation &&\r\n undefined !== textures.revealage\r\n );\r\n const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];\r\n\r\n if (undefined === depthMs) {\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth);\r\n } else {\r\n assert(\r\n undefined !== textures.colorMsBuff &&\r\n undefined !== textures.featureIdMsBuff &&\r\n undefined !== textures.featureIdMsBuffHidden &&\r\n undefined !== textures.depthAndOrderMsBuff &&\r\n undefined !== textures.depthAndOrderMsBuffHidden\r\n );\r\n const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];\r\n const colorAndPickFilters = [GL.MultiSampling.Filter.Linear, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n }\r\n\r\n return undefined !== this.opaqueAll\r\n && undefined !== this.opaqueAndCompositeAll;\r\n }\r\n\r\n public enableOcclusion(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n assert(undefined !== textures.occlusion && undefined !== textures.occlusionBlur);\r\n this.occlusion = FrameBuffer.create([textures.occlusion]);\r\n this.occlusionBlur = FrameBuffer.create([textures.occlusionBlur]);\r\n let rVal = undefined !== this.occlusion && undefined !== this.occlusionBlur;\r\n\r\n if (undefined === depthMs) {\r\n // If not using multisampling then we can use the accumulation and revealage textures for the hidden pick buffers,\r\n assert(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const colorAndPick = [textures.color, textures.accumulation, textures.revealage];\r\n this.opaqueAndCompositeAllHidden = FrameBuffer.create(colorAndPick, depth);\r\n rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden;\r\n } else {\r\n // If multisampling then we cannot use the revealage texture for depthAndOrder for the hidden edges since it is of the wrong type for blitting,\r\n // so instead use a special depthAndOrderHidden texture just for this purpose.\r\n // The featureId texture is not needed for hidden edges, so the accumulation texture can be used for it if we don't blit from the multisample bufffer into it.\r\n assert(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.depthAndOrderHidden);\r\n assert(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuffHidden);\r\n const colorAndPick = [textures.color, textures.accumulation, textures.depthAndOrderHidden];\r\n const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];\r\n const colorAndPickFilters = [GL.MultiSampling.Filter.Linear, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.opaqueAndCompositeAllHidden = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n // We will also need a frame buffer for copying the real pick data buffers into these hidden edge pick data buffers.\r\n const pingPong = [textures.accumulation, textures.depthAndOrderHidden];\r\n const pingPongMSBuffs = [textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];\r\n const pingPongFilters = [GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.pingPongMS = FrameBuffer.create(pingPong, depth, pingPongMSBuffs, pingPongFilters, depthMs);\r\n rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden && (undefined === depthMs || undefined !== this.pingPongMS);\r\n }\r\n\r\n return rVal;\r\n }\r\n\r\n public disableOcclusion(): void {\r\n if (undefined !== this.occlusion) {\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n }\r\n\r\n this.opaqueAndCompositeAllHidden = dispose(this.opaqueAndCompositeAllHidden);\r\n this.pingPongMS = dispose(this.pingPongMS);\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n if (undefined === boundColor)\r\n return;\r\n\r\n if (undefined === this.stencilSet) {\r\n if (undefined === textures.volClassBlend) {\r\n throw new Error(\"Volume classifier blend texture is not defined.\");\r\n }\r\n if (undefined !== depthMS) { // if multisampling use the multisampled depth everywhere\r\n if (undefined === textures.volClassBlendMsBuff) {\r\n throw new Error(\"Volume classifier blend multisample buffer is not defined.\");\r\n }\r\n this.stencilSet = FrameBuffer.create([], depth, [], [], depthMS);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth, [], [], volClassDepthMS);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend], depth, [textures.volClassBlendMsBuff], [GL.MultiSampling.Filter.Nearest], depthMS);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend], volClassDepth, [textures.volClassBlendMsBuff], [GL.MultiSampling.Filter.Nearest], volClassDepthMS);\r\n } else if (undefined !== volClassDepth) {\r\n this.stencilSet = FrameBuffer.create([], depth);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend], depth);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend], volClassDepth);\r\n }\r\n }\r\n\r\n if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {\r\n if (undefined !== volClassDepth) {\r\n let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];\r\n this.idsAndZ = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZ = FrameBuffer.create(ids, volClassDepth);\r\n ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];\r\n this.idsAndZComposite = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZComposite = FrameBuffer.create(ids, volClassDepth);\r\n }\r\n }\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.stencilSet) {\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n }\r\n\r\n if (undefined !== this.idsAndZ) {\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n }\r\n }\r\n\r\n public enableMultiSampling(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer): boolean {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n let rVal = this.initPotentialMSFbos(textures, depth, depthMS);\r\n\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n rVal = this.initPotentialMSMRTFbos(textures, depth, depthMS);\r\n return rVal;\r\n }\r\n\r\n public disableMultiSampling(textures: Textures, depth: DepthBuffer): boolean {\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n if (!this.initPotentialMSMRTFbos(textures, depth, undefined))\r\n return false;\r\n\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n return this.initPotentialMSFbos(textures, depth, undefined);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.opaqueColor && undefined === this.opaqueAndCompositeColor && undefined === this.depthAndOrder\r\n && undefined === this.hilite && undefined === this.hiliteUsingStencil && undefined === this.occlusion\r\n && undefined === this.occlusionBlur && undefined === this.stencilSet && undefined === this.altZOnly\r\n && undefined === this.volClassCreateBlend && undefined === this.volClassCreateBlendAltZ && undefined === this.opaqueAll\r\n && undefined === this.opaqueAndCompositeAll && undefined === this.opaqueAndCompositeAllHidden && undefined === this.pingPong\r\n && undefined === this.pingPongMS && undefined === this.translucent && undefined === this.clearTranslucent\r\n && undefined === this.idsAndZ && undefined === this.idsAndAltZ && undefined === this.idsAndZComposite\r\n && undefined === this.idsAndAltZComposite && undefined === this.edlDrawCol;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.hilite = dispose(this.hilite);\r\n this.hiliteUsingStencil = dispose(this.hiliteUsingStencil);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAllHidden);\r\n this.pingPong = dispose(this.pingPong);\r\n this.pingPongMS = dispose(this.pingPongMS);\r\n this.translucent = dispose(this.translucent);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n this.edlDrawCol = dispose(this.edlDrawCol);\r\n }\r\n}\r\n\r\nexport function collectGeometryStatistics(geom: CachedGeometry | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== geom)\r\n geom.collectStatistics(stats);\r\n}\r\n\r\n// Maintains the geometry used to execute screenspace operations for a SceneCompositor.\r\nclass Geometry implements WebGLDisposable, RenderMemory.Consumer {\r\n public composite?: CompositeGeometry;\r\n public volClassColorStencil?: ViewportQuadGeometry;\r\n public volClassCopyZ?: SingleTexturedViewportQuadGeometry;\r\n public volClassSetBlend?: VolumeClassifierGeometry;\r\n public volClassBlend?: SingleTexturedViewportQuadGeometry;\r\n public occlusion?: AmbientOcclusionGeometry;\r\n public occlusionXBlur?: BlurGeometry;\r\n public occlusionYBlur?: BlurGeometry;\r\n public copyPickBuffers?: CopyPickBufferGeometry;\r\n public clearTranslucent?: ViewportQuadGeometry;\r\n public clearPickAndColor?: ViewportQuadGeometry;\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectGeometryStatistics(this.composite, stats);\r\n collectGeometryStatistics(this.volClassColorStencil, stats);\r\n collectGeometryStatistics(this.volClassCopyZ, stats);\r\n collectGeometryStatistics(this.volClassSetBlend, stats);\r\n collectGeometryStatistics(this.volClassBlend, stats);\r\n collectGeometryStatistics(this.occlusion, stats);\r\n collectGeometryStatistics(this.occlusionXBlur, stats);\r\n collectGeometryStatistics(this.occlusionYBlur, stats);\r\n collectGeometryStatistics(this.copyPickBuffers, stats);\r\n collectGeometryStatistics(this.clearTranslucent, stats);\r\n collectGeometryStatistics(this.clearPickAndColor, stats);\r\n }\r\n\r\n public init(textures: Textures): boolean {\r\n assert(undefined === this.composite);\r\n this.composite = CompositeGeometry.createGeometry(\r\n expectDefined(textures.color?.getHandle()),\r\n expectDefined(textures.accumulation?.getHandle()),\r\n expectDefined(textures.revealage?.getHandle()), expectDefined(textures.hilite?.getHandle()));\r\n\r\n if (undefined === this.composite)\r\n return false;\r\n\r\n assert(undefined === this.copyPickBuffers);\r\n\r\n this.copyPickBuffers = CopyPickBufferGeometry.createGeometry(expectDefined(textures.featureId?.getHandle()), expectDefined(textures.depthAndOrder?.getHandle()));\r\n this.clearTranslucent = ViewportQuadGeometry.create(TechniqueId.OITClearTranslucent);\r\n this.clearPickAndColor = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n\r\n return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;\r\n }\r\n\r\n public enableOcclusion(textures: Textures, depth: DepthBuffer): void {\r\n assert(undefined !== textures.occlusion && undefined !== textures.occlusionBlur && undefined !== textures.depthAndOrder && undefined !== textures.occlusionBlur);\r\n expectDefined(this.composite).occlusion = textures.occlusion.getHandle();\r\n this.occlusion = AmbientOcclusionGeometry.createGeometry(expectDefined(textures.depthAndOrder.getHandle()), expectDefined(depth.getHandle()));\r\n this.occlusionXBlur = BlurGeometry.createGeometry(expectDefined(textures.occlusion.getHandle()), expectDefined(textures.depthAndOrder.getHandle()), undefined, new Vector2d(1.0, 0.0), BlurType.NoTest);\r\n const depthAndOrderHidden = (undefined === textures.depthAndOrderHidden ? textures.revealage?.getHandle() : textures.depthAndOrderHidden.getHandle());\r\n this.occlusionYBlur = BlurGeometry.createGeometry(expectDefined(textures.occlusionBlur.getHandle()), expectDefined(textures.depthAndOrder.getHandle()), depthAndOrderHidden, new Vector2d(0.0, 1.0), BlurType.TestOrder);\r\n }\r\n\r\n public disableOcclusion(): void {\r\n expectDefined(this.composite).occlusion = undefined;\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer): boolean {\r\n assert(undefined === this.volClassColorStencil && undefined === this.volClassCopyZ && undefined === this.volClassSetBlend && undefined === this.volClassBlend);\r\n this.volClassColorStencil = ViewportQuadGeometry.create(TechniqueId.VolClassColorUsingStencil);\r\n this.volClassCopyZ = SingleTexturedViewportQuadGeometry.createGeometry(expectDefined(depth.getHandle()), TechniqueId.VolClassCopyZ);\r\n this.volClassSetBlend = VolumeClassifierGeometry.createVCGeometry(expectDefined(depth.getHandle()));\r\n this.volClassBlend = SingleTexturedViewportQuadGeometry.createGeometry(expectDefined(textures.volClassBlend?.getHandle()), TechniqueId.VolClassBlend);\r\n return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend;\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.volClassColorStencil) {\r\n this.volClassColorStencil = dispose(this.volClassColorStencil);\r\n this.volClassCopyZ = dispose(this.volClassCopyZ);\r\n this.volClassSetBlend = dispose(this.volClassSetBlend);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n }\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.composite && undefined === this.occlusion && undefined === this.occlusionXBlur\r\n && undefined === this.occlusionYBlur && undefined === this.volClassColorStencil && undefined === this.volClassCopyZ\r\n && undefined === this.volClassSetBlend && undefined === this.volClassBlend && undefined === this.copyPickBuffers\r\n && undefined === this.clearTranslucent && undefined === this.clearPickAndColor;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.composite = dispose(this.composite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n this.disableVolumeClassifier();\r\n this.copyPickBuffers = dispose(this.copyPickBuffers);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.clearPickAndColor = dispose(this.clearPickAndColor);\r\n }\r\n}\r\n\r\ninterface BatchInfo {\r\n featureTable: RenderFeatureTable;\r\n iModel?: IModelConnection;\r\n transformFromIModel?: Transform;\r\n tileId?: string;\r\n viewAttachmentId?: Id64String;\r\n inSectionDrawingAttachment?: boolean;\r\n}\r\n\r\n// Represents a view of data read from a region of the frame buffer.\r\nclass PixelBuffer implements Pixel.Buffer {\r\n private readonly _rect: ViewRect;\r\n private readonly _selector: Pixel.Selector;\r\n private readonly _featureId?: Uint32Array;\r\n private readonly _depthAndOrder?: Uint32Array;\r\n private readonly _batchState: BatchState;\r\n private readonly _scratchModelFeature = ModelFeature.create();\r\n\r\n private get _numPixels(): number { return this._rect.width * this._rect.height; }\r\n\r\n private getPixelIndex(x: number, y: number): number {\r\n if (x < this._rect.left || y < this._rect.top)\r\n return this._numPixels;\r\n\r\n x -= this._rect.left;\r\n y -= this._rect.top;\r\n if (x >= this._rect.width || y >= this._rect.height)\r\n return this._numPixels;\r\n\r\n // NB: View coords have origin at top-left; GL at bottom-left. So our rows are upside-down.\r\n y = this._rect.height - 1 - y;\r\n return y * this._rect.width + x;\r\n }\r\n\r\n private getPixel32(data: Uint32Array, pixelIndex: number): number | undefined {\r\n return pixelIndex < data.length ? data[pixelIndex] : undefined;\r\n }\r\n\r\n private getFeature(pixelIndex: number, result: ModelFeature): ModelFeature | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n return undefined !== featureId ? this._batchState.getFeature(featureId, result) : undefined;\r\n }\r\n\r\n private getFeatureId(pixelIndex: number): number | undefined {\r\n return undefined !== this._featureId ? this.getPixel32(this._featureId, pixelIndex) : undefined;\r\n }\r\n\r\n private getBatchInfo(pixelIndex: number): BatchInfo | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n if (undefined !== featureId) {\r\n const batch = this._batchState.find(featureId);\r\n if (undefined !== batch) {\r\n return {\r\n featureTable: batch.featureTable,\r\n iModel: batch.batchIModel,\r\n transformFromIModel: batch.transformFromBatchIModel,\r\n tileId: batch.tileId,\r\n viewAttachmentId: batch.viewAttachmentId,\r\n inSectionDrawingAttachment: batch.inSectionDrawingAttachment,\r\n };\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private readonly _scratchUint32Array = new Uint32Array(1);\r\n private readonly _scratchUint8Array = new Uint8Array(this._scratchUint32Array.buffer);\r\n private readonly _scratchVector3d = new Vector3d();\r\n private readonly _mult = new Vector3d(1.0, 1.0 / 255.0, 1.0 / 65025.0);\r\n private decodeDepthRgba(depthAndOrder: number): number {\r\n this._scratchUint32Array[0] = depthAndOrder;\r\n const bytes = this._scratchUint8Array;\r\n const fpt = Vector3d.create(bytes[1] / 255.0, bytes[2] / 255.0, bytes[3] / 255.0, this._scratchVector3d);\r\n let depth = fpt.dotProduct(this._mult);\r\n\r\n assert(0.0 <= depth);\r\n assert(1.01 >= depth); // rounding error...\r\n\r\n depth = Math.min(1.0, depth);\r\n depth = Math.max(0.0, depth);\r\n\r\n return depth;\r\n }\r\n\r\n private decodeRenderOrderRgba(depthAndOrder: number): RenderOrder { return this.decodeUint8(depthAndOrder, 16); }\r\n private decodeUint8(rgba32: number, basis: number): number {\r\n this._scratchUint32Array[0] = rgba32;\r\n const encByte = this._scratchUint8Array[0];\r\n const enc = encByte / 255.0;\r\n const dec = Math.floor(basis * enc + 0.5);\r\n return dec;\r\n }\r\n\r\n\r\n private readonly _invalidPixelData = new Pixel.Data();\r\n public getPixel(x: number, y: number): Pixel.Data {\r\n const px = this._invalidPixelData;\r\n const index = this.getPixelIndex(x, y);\r\n if (index >= this._numPixels)\r\n return px;\r\n\r\n // Initialize to the defaults...\r\n let distanceFraction = px.distanceFraction;\r\n let geometryType = px.type;\r\n let planarity = px.planarity;\r\n\r\n const haveFeatureIds = Pixel.Selector.None !== (this._selector & Pixel.Selector.Feature);\r\n const feature = haveFeatureIds ? this.getFeature(index, this._scratchModelFeature) : undefined;\r\n const batchInfo = haveFeatureIds ? this.getBatchInfo(index) : undefined;\r\n if (Pixel.Selector.None !== (this._selector & Pixel.Selector.GeometryAndDistance) && undefined !== this._depthAndOrder) {\r\n const depthAndOrder = this.getPixel32(this._depthAndOrder, index);\r\n if (undefined !== depthAndOrder) {\r\n distanceFraction = this.decodeDepthRgba(depthAndOrder);\r\n\r\n const orderWithPlanarBit = this.decodeRenderOrderRgba(depthAndOrder);\r\n const order = orderWithPlanarBit & ~RenderOrder.PlanarBit;\r\n planarity = (orderWithPlanarBit === order) ? Pixel.Planarity.NonPlanar : Pixel.Planarity.Planar;\r\n switch (order) {\r\n case RenderOrder.None:\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n case RenderOrder.Background:\r\n case RenderOrder.BlankingRegion:\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n geometryType = Pixel.GeometryType.Surface;\r\n break;\r\n case RenderOrder.Linear:\r\n geometryType = Pixel.GeometryType.Linear;\r\n break;\r\n case RenderOrder.Edge:\r\n geometryType = Pixel.GeometryType.Edge;\r\n break;\r\n case RenderOrder.Silhouette:\r\n geometryType = Pixel.GeometryType.Silhouette;\r\n break;\r\n default:\r\n // ###TODO: may run into issues with point clouds - they are not written correctly in C++.\r\n assert(false, \"Invalid render order\");\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let featureTable, iModel, transformToIModel, tileId, viewAttachmentId, inSectionDrawingAttachment;\r\n if (undefined !== batchInfo) {\r\n featureTable = batchInfo.featureTable;\r\n iModel = batchInfo.iModel;\r\n transformToIModel = batchInfo.transformFromIModel;\r\n tileId = batchInfo.tileId;\r\n viewAttachmentId = batchInfo.viewAttachmentId;\r\n inSectionDrawingAttachment = batchInfo.inSectionDrawingAttachment;\r\n }\r\n\r\n return new Pixel.Data({\r\n feature,\r\n distanceFraction,\r\n type: geometryType,\r\n planarity,\r\n batchType: featureTable?.type,\r\n iModel,\r\n transformFromIModel: transformToIModel,\r\n tileId,\r\n viewAttachmentId,\r\n inSectionDrawingAttachment,\r\n });\r\n }\r\n\r\n private constructor(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor) {\r\n this._rect = rect.clone();\r\n this._selector = selector;\r\n this._batchState = compositor.target.uniforms.batch.state;\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.GeometryAndDistance)) {\r\n const depthAndOrderBytes = compositor.readDepthAndOrder(rect);\r\n if (undefined !== depthAndOrderBytes)\r\n this._depthAndOrder = new Uint32Array(depthAndOrderBytes.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.GeometryAndDistance;\r\n }\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.Feature)) {\r\n const features = compositor.readFeatureIds(rect);\r\n if (undefined !== features)\r\n this._featureId = new Uint32Array(features.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.Feature;\r\n }\r\n }\r\n\r\n public get isEmpty(): boolean { return Pixel.Selector.None === this._selector; }\r\n\r\n public static create(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor): Pixel.Buffer | undefined {\r\n const pdb = new PixelBuffer(rect, selector, compositor);\r\n return pdb.isEmpty ? undefined : pdb;\r\n }\r\n}\r\n\r\n/** Orchestrates rendering of the scene on behalf of a Target.\r\n * This base class exists only so we don't have to export all the types of the shared Compositor members like Textures, FrameBuffers, etc.\r\n * @internal\r\n */\r\nexport abstract class SceneCompositor implements WebGLDisposable, RenderMemory.Consumer {\r\n public readonly target: Target;\r\n public readonly solarShadowMap: SolarShadowMap;\r\n public readonly eyeDomeLighting: EyeDomeLighting;\r\n\r\n protected _needHiddenEdges: boolean;\r\n\r\n public abstract get isDisposed(): boolean;\r\n public abstract [Symbol.dispose](): void;\r\n public abstract preDraw(): void;\r\n public abstract draw(_commands: RenderCommands): void;\r\n public abstract drawForReadPixels(_commands: RenderCommands, sceneOverlays: GraphicList, worldOverlayDecorations: GraphicList | undefined, viewOverlayDecorations: GraphicList | undefined): void;\r\n public abstract readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined;\r\n public abstract readDepthAndOrder(rect: ViewRect): Uint8Array | undefined;\r\n public abstract readFeatureIds(rect: ViewRect): Uint8Array | undefined;\r\n public abstract updateSolarShadows(context: SceneContext | undefined): void;\r\n public abstract drawPrimitive(primitive: Primitive, exec: ShaderProgramExecutor, outputsToPick: boolean): void;\r\n public abstract forceBufferChange(): void;\r\n\r\n /** Obtain a framebuffer with a single spare RGBA texture that can be used for screen-space effect shaders. */\r\n public abstract get screenSpaceEffectFbo(): FrameBuffer;\r\n\r\n public abstract get featureIds(): TextureHandle;\r\n public abstract get depthAndOrder(): TextureHandle;\r\n public abstract get antialiasSamples(): number;\r\n\r\n public get needHiddenEdges(): boolean { return this._needHiddenEdges; }\r\n\r\n protected constructor(target: Target) {\r\n this.target = target;\r\n this.solarShadowMap = new SolarShadowMap(target);\r\n this.eyeDomeLighting = new EyeDomeLighting(target);\r\n this._needHiddenEdges = false;\r\n }\r\n\r\n public static create(target: Target): SceneCompositor {\r\n return new Compositor(target);\r\n }\r\n\r\n public abstract collectStatistics(stats: RenderMemory.Statistics): void;\r\n}\r\n\r\n// This describes what types of primitives a compositor should draw. See the `drawPrimitive` method of Compositor.\r\nenum PrimitiveDrawState {\r\n Both,\r\n Pickable,\r\n NonPickable,\r\n}\r\n\r\n// The actual base class. Specializations are provided based on whether or not multiple render targets are supported.\r\nclass Compositor extends SceneCompositor {\r\n protected _width: number = -1;\r\n protected _height: number = -1;\r\n protected _includeOcclusion: boolean = false;\r\n protected _textures = new Textures();\r\n protected _depth?: DepthBuffer;\r\n protected _depthMS?: DepthBuffer; // multisample depth buffer\r\n protected _fbos: FrameBuffers;\r\n protected _geom: Geometry;\r\n protected _readPickDataFromPingPong: boolean = true;\r\n protected _opaqueRenderState = new RenderState();\r\n protected _layerRenderState = new RenderState();\r\n protected _translucentRenderState = new RenderState();\r\n protected _hiliteRenderState = new RenderState();\r\n protected _noDepthMaskRenderState = new RenderState();\r\n protected _backgroundMapRenderState = new RenderState();\r\n protected _pointCloudRenderState = new RenderState();\r\n protected _debugStencil: number = 0; // 0 to draw stencil volumes normally, 1 to draw as opaque, 2 to draw blended\r\n protected _vcBranchState?: BranchState;\r\n protected _vcSetStencilRenderState?: RenderState;\r\n protected _vcCopyZRenderState?: RenderState;\r\n protected _vcColorRenderState?: RenderState;\r\n protected _vcBlendRenderState?: RenderState;\r\n protected _vcPickDataRenderState?: RenderState;\r\n protected _vcDebugRenderState?: RenderState;\r\n protected _vcAltDepthStencil?: DepthBuffer;\r\n protected _vcAltDepthStencilMS?: DepthBuffer;\r\n protected _haveVolumeClassifier: boolean = false;\r\n protected _antialiasSamples: number = 1;\r\n protected readonly _viewProjectionMatrix = new Matrix4();\r\n protected _primitiveDrawState = PrimitiveDrawState.Both; // used by drawPrimitive to decide whether a primitive needs to be drawn.\r\n\r\n public forceBufferChange(): void { this._width = this._height = -1; }\r\n public get featureIds(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }\r\n public get depthAndOrder(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }\r\n private get _samplerFbo(): FrameBuffer { return this._readPickDataFromPingPong ? expectDefined(this._fbos.pingPong) : expectDefined(this._fbos.opaqueAll); }\r\n private getSamplerTexture(index: number) { return this._samplerFbo.getColor(index); }\r\n\r\n public drawPrimitive(primitive: Primitive, exec: ShaderProgramExecutor, outputsToPick: boolean) {\r\n if ((outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.NonPickable) ||\r\n (!outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.Pickable))\r\n primitive.draw(exec);\r\n }\r\n\r\n protected clearOpaque(needComposite: boolean): void {\r\n const fbo = needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll);\r\n const system = System.instance;\r\n system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {\r\n // Clear pick data buffers to 0's and color buffer to background color\r\n // (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id\r\n // (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)\r\n system.applyRenderState(this._noDepthMaskRenderState);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.clearPickAndColor));\r\n this.target.techniques.draw(params);\r\n\r\n // Clear depth buffer\r\n system.applyRenderState(RenderState.defaults); // depthMask == true.\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n protected renderLayers(commands: RenderCommands, needComposite: boolean, pass: RenderPass): void {\r\n const fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll));\r\n const useMsBuffers = RenderPass.OpaqueLayers === pass && fbo.isMultisampled && this.useMsBuffers;\r\n this._readPickDataFromPingPong = !useMsBuffers;\r\n System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, pass, true);\r\n });\r\n\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected renderOpaque(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n if (CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion) && !renderForReadPixels) {\r\n this.renderOpaqueAO(commands);\r\n return;\r\n }\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fbStack = System.instance.frameBufferStack;\r\n\r\n // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).\r\n let fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll));\r\n const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;\r\n this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueLinear);\r\n this.drawPass(commands, RenderPass.OpaquePlanar, true);\r\n if (renderForReadPixels) {\r\n this.drawPass(commands, RenderPass.PointClouds, true); // don't need EDL for this\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true);\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(true);\r\n }\r\n });\r\n this._readPickDataFromPingPong = false;\r\n\r\n // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.\r\n if (!renderForReadPixels) {\r\n fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor));\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n // assume we are done with MS at this point, so update the non-MS buffers\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(needComposite);\r\n }\r\n }\r\n\r\n protected renderOpaqueAO(commands: RenderCommands) {\r\n const fbStack = System.instance.frameBufferStack;\r\n const haveHiddenEdges = 0 !== commands.getCommands(RenderPass.HiddenEdge).length;\r\n\r\n // Output the linear, planar, and pickable surfaces to color and pick data buffers.\r\n let fbo = expectDefined(this._fbos.opaqueAndCompositeAll);\r\n const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;\r\n this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueLinear);\r\n this.drawPass(commands, RenderPass.OpaquePlanar, true);\r\n this._primitiveDrawState = PrimitiveDrawState.Pickable;\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true);\r\n this._primitiveDrawState = PrimitiveDrawState.Both;\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(true);\r\n });\r\n this._readPickDataFromPingPong = false;\r\n\r\n // Output the non-pickable surfaces and hidden edges to just the color buffer.\r\n fbo = expectDefined(this._fbos.opaqueAndCompositeColor);\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this._primitiveDrawState = PrimitiveDrawState.NonPickable;\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n if (haveHiddenEdges)\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n this._primitiveDrawState = PrimitiveDrawState.Both;\r\n });\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(true);\r\n\r\n // If there are no hidden edges, then we're done & can run the AO passes using the normal depthAndOrder texture.\r\n if (haveHiddenEdges) {\r\n // AO needs the pick data (orderAndDepth) for the hidden edges. We don't want it in with the other pick data though since they are not pickable, so we will use other textures.\r\n // If not multisampling we will re-use the ping-pong/transparency textures since we are done with ping-ponging at this point and transparency happens later.\r\n // If multisampling then we will use the accumulation texture for featureIDs and a special texture for depthAndOrder since the revealage texture is not the right type for multisampling.\r\n // First we will need to copy what's in the pick buffers so far into the hidden pick buffers.\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n fbo = (useMsBuffers ? expectDefined(this._fbos.pingPongMS) : expectDefined(this._fbos.pingPong));\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n const params = getDrawParams(this.target, expectDefined(this._geom.copyPickBuffers));\r\n this.target.techniques.draw(params);\r\n });\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(false, 1); // only want to blit the depth/order target\r\n // Now draw the hidden edges, using an fbo which places their depth/order into the hidden pick buffers.\r\n // Since we are not writing to the actual pick buffers we let this._readPickDataFromPingPong remain false.\r\n fbo = expectDefined(this._fbos.opaqueAndCompositeAllHidden);\r\n this._primitiveDrawState = PrimitiveDrawState.Pickable;\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n this._primitiveDrawState = PrimitiveDrawState.Both;\r\n if (useMsBuffers) {\r\n // Only want to blit the color and depth/order targets as the featureId target is not blit-able and will generate a GL error.\r\n fbo.blitMsBuffersToTextures(false, 0);\r\n fbo.blitMsBuffersToTextures(false, 2);\r\n }\r\n this._needHiddenEdges = false;\r\n }\r\n\r\n this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture with the hidden edges to be read for the 2nd AO blur pass.\r\n this.renderAmbientOcclusion();\r\n this._needHiddenEdges = false;\r\n }\r\n\r\n protected renderPointClouds(commands: RenderCommands, compositeFlags: CompositeFlags) {\r\n const is3d = FrustumUniformType.Perspective === this.target.uniforms.frustum.type;\r\n // separate individual point clouds and get their point cloud settings\r\n const pointClouds: Array<SinglePointCloudData> = [];\r\n let pcs: PointCloudDisplaySettings | undefined;\r\n const cmds = commands.getCommands(RenderPass.PointClouds);\r\n let curPC: SinglePointCloudData | undefined;\r\n let pushDepth = 0;\r\n for (const cmd of cmds) {\r\n if (\"pushBranch\" === cmd.opcode) { // should be first command\r\n ++pushDepth;\r\n if (pushDepth === 1) {\r\n pcs = cmd.branch.branch.realityModelDisplaySettings?.pointCloud;\r\n this.target.uniforms.realityModel.pointCloud.updateRange(cmd.branch.branch.realityModelRange,\r\n this.target, cmd.branch.localToWorldTransform, is3d);\r\n pointClouds.push(curPC = { pcs, cmds: [cmd] });\r\n } else {\r\n assert(undefined !== curPC);\r\n curPC.cmds.push(cmd);\r\n }\r\n } else {\r\n if (\"popBranch\" === cmd.opcode)\r\n --pushDepth;\r\n assert(undefined !== curPC);\r\n curPC.cmds.push(cmd);\r\n }\r\n }\r\n\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor));\r\n const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;\r\n const system = System.instance;\r\n const fbStack = system.frameBufferStack;\r\n\r\n this._readPickDataFromPingPong = false;\r\n\r\n for (const pc of pointClouds) {\r\n pcs = pc.pcs;\r\n let edlOn = pcs?.edlMode !== \"off\" && is3d;\r\n if (edlOn) {\r\n if (undefined === this._textures.hilite)\r\n edlOn = false;\r\n else {\r\n // create fbo on fly if not present, or has changed (from MS)\r\n // ###TODO consider not drawing point clouds to MS buffers, at least if EDL, it isn't worth the overhead.\r\n // would have to blit depth before draw, use depth for draw, then run shader to copy depth back to MSAA\r\n // at end, wherever color buf changed (test alpha, else discard)\r\n // this would also simplify this code considerably\r\n let drawColBufs;\r\n if (undefined !== this._fbos.edlDrawCol)\r\n drawColBufs = this._fbos.edlDrawCol.getColorTargets(useMsBuffers, 0);\r\n if (undefined === this._fbos.edlDrawCol || this._textures.hilite !== drawColBufs?.tex || this._textures.hiliteMsBuff !== drawColBufs.msBuf) {\r\n this._fbos.edlDrawCol = dispose(this._fbos.edlDrawCol);\r\n const filters = [GL.MultiSampling.Filter.Linear];\r\n if (useMsBuffers)\r\n this._fbos.edlDrawCol = FrameBuffer.create([this._textures.hilite], this._depth,\r\n useMsBuffers && this._textures.hiliteMsBuff ? [this._textures.hiliteMsBuff] : undefined, filters, this._depthMS);\r\n else\r\n this._fbos.edlDrawCol = FrameBuffer.create([this._textures.hilite], this._depth);\r\n }\r\n if (undefined === this._fbos.edlDrawCol)\r\n edlOn = false;\r\n else { // can draw EDL\r\n // first draw pointcloud to borrowed hilite texture(MS) and regular depth(MS) buffers\r\n fbStack.execute(this._fbos.edlDrawCol, true, useMsBuffers, () => {\r\n system.context.clearColor(0, 0, 0, 0);\r\n system.context.clear(GL.BufferBit.Color);\r\n system.applyRenderState(this.getRenderState(RenderPass.PointClouds));\r\n this.target.techniques.execute(this.target, pc.cmds, RenderPass.PointClouds);\r\n });\r\n if (useMsBuffers)\r\n this._fbos.edlDrawCol.blitMsBuffersToTextures(true, 0); // need to read the non-MS depth and hilite buffers\r\n\r\n // next process buffers to generate EDL (depth buffer is passed during init)\r\n this.target.beginPerfMetricRecord(\"Calc EDL\"); // ### todo keep? (probably)\r\n const sts = this.eyeDomeLighting.draw({\r\n edlMode: pc.pcs?.edlMode === \"full\" ? EDLMode.Full : EDLMode.On,\r\n edlFilter: !!pcs?.edlFilter,\r\n useMsBuffers,\r\n inputTex: this._textures.hilite,\r\n curFbo: fbo,\r\n });\r\n this.target.endPerfMetricRecord();\r\n if (!sts) {\r\n edlOn = false;\r\n }\r\n }\r\n }\r\n }\r\n if (!edlOn) {\r\n // draw the regular way\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n system.applyRenderState(this.getRenderState(RenderPass.PointClouds));\r\n this.target.techniques.execute(this.target, pc.cmds, RenderPass.PointClouds);\r\n });\r\n }\r\n }\r\n }\r\n\r\n protected renderForVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const fbStack = System.instance.frameBufferStack;\r\n\r\n if (renderForReadPixels || needAO) {\r\n this._readPickDataFromPingPong = true;\r\n fbStack.execute(needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll), true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n } else {\r\n this._readPickDataFromPingPong = false;\r\n fbStack.execute(needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor), true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n }\r\n }\r\n\r\n protected renderIndexedClassifierForReadPixels(cmds: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, needComposite: boolean) {\r\n this._readPickDataFromPingPong = true;\r\n const fbo = (renderForIntersectingVolumes ? (needComposite ? expectDefined(this._fbos.idsAndZComposite) : expectDefined(this._fbos.idsAndZ))\r\n : (needComposite ? expectDefined(this._fbos.idsAndAltZComposite) : expectDefined(this._fbos.idsAndAltZ)));\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(state);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n });\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected clearTranslucent() {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.clearTranslucent), true, false, () => {\r\n const params = getDrawParams(this.target, expectDefined(this._geom.clearTranslucent));\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n\r\n protected renderTranslucent(commands: RenderCommands) {\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.translucent), true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n }\r\n\r\n protected getBackgroundFbo(needComposite: boolean): FrameBuffer {\r\n return needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor);\r\n }\r\n\r\n protected pingPong() {\r\n if (expectDefined(this._fbos.opaqueAll).isMultisampled && this.useMsBuffers) {\r\n // If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.\r\n this._fbos.opaqueAll?.blitMsBuffersToTextures(false, 1);\r\n this._fbos.opaqueAll?.blitMsBuffersToTextures(false, 2);\r\n } else {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.pingPong), true, this.useMsBuffers, () => {\r\n const params = getDrawParams(this.target, expectDefined(this._geom.copyPickBuffers));\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n }\r\n\r\n public get antialiasSamples(): number { return this._antialiasSamples; }\r\n\r\n protected get useMsBuffers(): boolean { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }\r\n\r\n protected enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n\r\n protected disableVolumeClassifierFbos(): void {\r\n this._fbos.disableVolumeClassifier();\r\n }\r\n\r\n /** This function generates a texture that contains ambient occlusion information to be applied later. */\r\n protected renderAmbientOcclusion() {\r\n const system = System.instance;\r\n\r\n // Render unblurred ambient occlusion based on depth buffer\r\n let fbo = expectDefined(this._fbos.occlusion);\r\n this.target.beginPerfMetricRecord(\"Compute AO\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.occlusion));\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the X-blurred ambient occlusion based on unblurred ambient occlusion\r\n fbo = expectDefined(this._fbos.occlusionBlur);\r\n this.target.beginPerfMetricRecord(\"Blur AO X\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.occlusionXBlur));\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)\r\n fbo = expectDefined(this._fbos.occlusion);\r\n this.target.beginPerfMetricRecord(\"Blur AO Y\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.occlusionYBlur));\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n }\r\n\r\n public constructor(target: Target) {\r\n super(target);\r\n this._fbos = new FrameBuffers();\r\n this._geom = new Geometry();\r\n\r\n this._opaqueRenderState.flags.depthTest = true;\r\n\r\n this._pointCloudRenderState.flags.depthTest = true;\r\n\r\n this._translucentRenderState.flags.depthMask = false;\r\n this._translucentRenderState.flags.blend = this._translucentRenderState.flags.depthTest = true;\r\n this._translucentRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n this._hiliteRenderState.flags.depthMask = false;\r\n this._hiliteRenderState.flags.blend = true;\r\n this._hiliteRenderState.blend.functionDestRgb = GL.BlendFactor.One;\r\n this._hiliteRenderState.blend.functionDestAlpha = GL.BlendFactor.One;\r\n\r\n this._noDepthMaskRenderState.flags.depthMask = false;\r\n\r\n // Background map supports transparency, even when depth is off, which is mostly useless but should blend with background color / skybox.\r\n this._backgroundMapRenderState.flags.depthMask = false;\r\n this._backgroundMapRenderState.flags.blend = true;\r\n this._backgroundMapRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n // Can't write depth without enabling depth test - so make depth test always pass\r\n this._layerRenderState.flags.depthTest = true;\r\n this._layerRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._layerRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._depth)\r\n stats.addTextureAttachment(this._depth.bytesUsed);\r\n if (undefined !== this._depthMS)\r\n stats.addTextureAttachment(this._depthMS.bytesUsed);\r\n this._textures.collectStatistics(stats);\r\n this._geom.collectStatistics(stats);\r\n }\r\n\r\n public preDraw(): boolean {\r\n const rect = this.target.viewRect;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const includeOcclusion = this.target.wantAmbientOcclusion;\r\n const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);\r\n let wantAntialiasSamples = this.target.antialiasSamples <= 1 ? 1 : this.target.antialiasSamples;\r\n if (wantAntialiasSamples > System.instance.maxAntialiasSamples)\r\n wantAntialiasSamples = System.instance.maxAntialiasSamples;\r\n\r\n const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);\r\n\r\n // If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.\r\n if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {\r\n this._width = width;\r\n this._height = height;\r\n this._antialiasSamples = wantAntialiasSamples;\r\n\r\n // init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.\r\n if (!this.init()) {\r\n assert(false, \"Failed to initialize scene compositor\");\r\n return false;\r\n }\r\n } else if (this._antialiasSamples !== wantAntialiasSamples) {\r\n // Turn on or off multisampling. Rather than just re-initializing, we can save the\r\n // non multisampled textures & FBOs and just try to add or delete the multisampled ones.\r\n this._antialiasSamples = wantAntialiasSamples;\r\n if (wantVolumeClassifier && this._haveVolumeClassifier) {\r\n // Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on\r\n // and is staying on, just disable volume classifiers and let them get re-enabled later.\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil[Symbol.dispose]();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n if (includeOcclusion && this._includeOcclusion) {\r\n // Multisampling and AO buffers are also somewhat co-dependent, so if AO is on\r\n // and is staying on, just disable AO and let it get re-enabled later.\r\n this._geom.disableOcclusion();\r\n this._fbos.disableOcclusion();\r\n this._textures.disableOcclusion();\r\n this._includeOcclusion = false;\r\n }\r\n if (this._antialiasSamples > 1) {\r\n if (!this.enableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n } else {\r\n if (!this.disableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // Allocate or free ambient occlusion-related resources if necessary\r\n if (includeOcclusion !== this._includeOcclusion) {\r\n this._includeOcclusion = includeOcclusion;\r\n if (includeOcclusion) {\r\n if (!this._textures.enableOcclusion(width, height, this._antialiasSamples)) {\r\n assert(false, \"Failed to initialize occlusion textures\");\r\n return false;\r\n }\r\n if (!this._fbos.enableOcclusion(this._textures, expectDefined(this._depth), this._depthMS)) {\r\n assert(false, \"Failed to initialize occlusion frame buffers\");\r\n return false;\r\n }\r\n this._geom.enableOcclusion(this._textures, expectDefined(this._depth));\r\n } else {\r\n this._geom.disableOcclusion();\r\n this._fbos.disableOcclusion();\r\n this._textures.disableOcclusion();\r\n }\r\n }\r\n\r\n // Allocate or free volume classifier-related resources if necessary.\r\n if (wantVolumeClassifier !== this._haveVolumeClassifier) {\r\n if (wantVolumeClassifier) {\r\n this._vcAltDepthStencil = System.instance.createDepthBuffer(width, height) as TextureHandle;\r\n if (undefined !== this._depthMS)\r\n this._vcAltDepthStencilMS = System.instance.createDepthBuffer(width, height, this._antialiasSamples) as TextureHandle;\r\n\r\n if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS))\r\n return false;\r\n\r\n if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples))\r\n return false;\r\n\r\n if (!this._geom.enableVolumeClassifier(this._textures, expectDefined(this._depth)))\r\n return false;\r\n\r\n this.enableVolumeClassifierFbos(this._textures, expectDefined(this._depth), this._vcAltDepthStencil, this._depthMS, this._vcAltDepthStencilMS);\r\n this._haveVolumeClassifier = true;\r\n } else {\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil[Symbol.dispose]();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public draw(commands: RenderCommands) {\r\n if (!this.preDraw())\r\n return;\r\n\r\n const compositeFlags = commands.compositeFlags;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n\r\n // Clear output targets\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n this.target.beginPerfMetricRecord(\"Clear Opaque\");\r\n this.clearOpaque(needComposite);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"backgroundTime\"); // includes skybox\r\n\r\n // Render the background\r\n this.target.beginPerfMetricRecord(\"Render Background\");\r\n this.renderBackground(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the sky box\r\n this.target.beginPerfMetricRecord(\"Render Skybox\");\r\n this.renderSkyBox(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the background map graphics\r\n this.target.beginPerfMetricRecord(\"Render Background Map\");\r\n this.renderBackgroundMap(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"backgroundTime\");\r\n\r\n // Enable clipping\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\");\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render volume classification first so that we only classify the reality data\r\n this.target.frameStatsCollector.beginTime(\"classifiersTime\");\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\");\r\n this.renderVolumeClassification(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"classifiersTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n\r\n // Render layers\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render opaque geometry\r\n this.target.frameStatsCollector.beginTime(\"onRenderOpaqueTime\");\r\n IModelFrameLifecycle.onRenderOpaque.raiseEvent({\r\n commands,\r\n needComposite,\r\n compositeFlags,\r\n fbo: this.getBackgroundFbo(needComposite),\r\n frameBufferStack: System.instance.frameBufferStack,\r\n });\r\n this.target.frameStatsCollector.endTime(\"onRenderOpaqueTime\");\r\n\r\n // Render point cloud geometry with possible EDL\r\n this.target.beginPerfMetricRecord(\"Render PointClouds\");\r\n this.renderPointClouds(commands, compositeFlags);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render opaque geometry\r\n this.target.beginPerfMetricRecord(\"Render Opaque\");\r\n this.renderOpaque(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"translucentTime\");\r\n\r\n // Render translucent layers\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n if (needComposite) {\r\n expectDefined(this._geom.composite).update(compositeFlags);\r\n this.target.beginPerfMetricRecord(\"Render Translucent\");\r\n this.clearTranslucent();\r\n this.renderTranslucent(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n this.target.beginPerfMetricRecord(\"Render Hilite\");\r\n this.renderHilite(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.beginPerfMetricRecord(\"Composite\");\r\n this.composite();\r\n this.target.endPerfMetricRecord();\r\n } else\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n // Render overlay Layers\r\n this.target.frameStatsCollector.beginTime(\"overlaysTime\");\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\");\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"overlaysTime\");\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n public get fullHeight(): number { return this.target.viewRect.height; }\r\n\r\n public drawForReadPixels(commands: RenderCommands, sceneOverlays: GraphicList, worldOverlayDecorations: GraphicList | undefined, viewOverlayDecorations: GraphicList | undefined): void {\r\n this.target.beginPerfMetricRecord(\"Render Background\", true);\r\n if (!this.preDraw()) {\r\n this.target.endPerfMetricRecord(true); // End Render Background record if returning\r\n assert(false);\r\n return;\r\n }\r\n\r\n this.clearOpaque(false);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // On entry the RenderCommands has been initialized for all scene graphics and pickable decorations with the exception of world overlays.\r\n // It's possible we have no pickable scene graphics or decorations, but do have pickable world overlays.\r\n const haveRenderCommands = !commands.isEmpty;\r\n if (haveRenderCommands) {\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\", true);\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\", true);\r\n this.renderVolumeClassification(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // RenderPass.BackgroundMap is used only when depth is turned off for the map.\r\n // Ensure it draws before any opaque geometry (including layers), without depth.\r\n this.target.beginPerfMetricRecord(\"Render background map\", true);\r\n this.target.drawingBackgroundForReadPixels = true;\r\n this.renderLayers(commands, false, RenderPass.BackgroundMap);\r\n this.target.drawingBackgroundForReadPixels = false;\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // PointClouds are rendered in Opaque pass for readPixels\r\n this.target.beginPerfMetricRecord(\"Render Opaque\", true);\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n if (!sceneOverlays.length && !worldOverlayDecorations?.length && !viewOverlayDecorations?.length)\r\n return;\r\n\r\n // Now populate the opaque passes with any pickable world overlays\r\n this.target.beginPerfMetricRecord(\"Overlay Draws\", true);\r\n commands.initForPickOverlays(sceneOverlays, worldOverlayDecorations, viewOverlayDecorations);\r\n if (commands.isEmpty) {\r\n this.target.endPerfMetricRecord(true); // End Overlay Draws record if returning\r\n return;\r\n }\r\n\r\n // Clear the depth buffer so that overlay decorations win the depth test.\r\n // (If *only* overlays exist, then clearOpaque() above already took care of this).\r\n if (haveRenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(expectDefined(this._fbos.opaqueColor), true, this.useMsBuffers, () => {\r\n system.applyRenderState(RenderState.defaults);\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n // Render overlays as opaque into the pick buffers. Make sure we use the decoration state (to ignore symbology overrides, esp. the non-locatable flag).\r\n const decState = this.target.decorationsState;\r\n const vf = decState.viewFlags;\r\n if (vf.transparency)\r\n decState.viewFlags = vf.copy({ transparency: false });\r\n\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord();\r\n decState.viewFlags = vf;\r\n }\r\n\r\n public readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined {\r\n return PixelBuffer.create(rect, selector, this);\r\n }\r\n\r\n public readDepthAndOrder(rect: ViewRect): Uint8Array | undefined {\r\n return this.readFrameBuffer(rect, this._fbos.depthAndOrder);\r\n }\r\n\r\n public readFeatureIds(rect: ViewRect): Uint8Array | undefined {\r\n const tex = this._textures.featureId;\r\n if (undefined === tex)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([tex]);\r\n const result = this.readFrameBuffer(rect, fbo);\r\n\r\n dispose(fbo);\r\n\r\n return result;\r\n }\r\n\r\n public updateSolarShadows(context: SceneContext | undefined): void {\r\n this.solarShadowMap.update(context);\r\n }\r\n\r\n public get screenSpaceEffectFbo(): FrameBuffer {\r\n assert(undefined !== this._fbos.hilite);\r\n return this._fbos.hilite;\r\n }\r\n\r\n private readFrameBuffer(rect: ViewRect, fbo?: FrameBuffer): Uint8Array | undefined {\r\n if (undefined === fbo || !Debug.isValidFrameBuffer)\r\n return undefined;\r\n\r\n // NB: ViewRect origin at top-left; GL origin at bottom-left\r\n const bottom = this.fullHeight - rect.bottom;\r\n const gl = System.instance.context;\r\n const bytes = new Uint8Array(rect.width * rect.height * 4);\r\n let result: Uint8Array | undefined = bytes;\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n try {\r\n gl.readPixels(rect.left, bottom, rect.width, rect.height, gl.RGBA, gl.UNSIGNED_BYTE, bytes);\r\n } catch {\r\n result = undefined;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._depth\r\n && undefined === this._vcAltDepthStencil\r\n && !this._includeOcclusion\r\n && this._textures.isDisposed\r\n && this._fbos.isDisposed\r\n && this._geom.isDisposed\r\n && !this._haveVolumeClassifier\r\n && this.solarShadowMap.isDisposed\r\n && this.eyeDomeLighting.isDisposed;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.reset();\r\n dispose(this.solarShadowMap);\r\n dispose(this.eyeDomeLighting);\r\n }\r\n\r\n // Resets anything that depends on the dimensions of the render target.\r\n // Does *not* dispose the solar shadow map.\r\n private reset() {\r\n this._depth = dispose(this._depth);\r\n this._depthMS = dispose(this._depthMS);\r\n this._vcAltDepthStencil = dispose(this._vcAltDepthStencil);\r\n this._includeOcclusion = false;\r\n dispose(this._textures);\r\n dispose(this._fbos);\r\n dispose(this._geom);\r\n this._haveVolumeClassifier = false;\r\n this.eyeDomeLighting.reset();\r\n }\r\n\r\n private init(): boolean {\r\n this.reset();\r\n this._depth = System.instance.createDepthBuffer(this._width, this._height, 1);\r\n if (this._antialiasSamples > 1)\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n else\r\n this._depthMS = undefined;\r\n if (this._depth !== undefined) {\r\n return this._textures.init(this._width, this._height, this._antialiasSamples)\r\n && this._fbos.init(this._textures, this._depth, this._depthMS)\r\n && this._geom.init(this._textures)\r\n && this.eyeDomeLighting.init(this._width, this._height, this._depth);\r\n }\r\n return false;\r\n }\r\n\r\n protected enableMultiSampling(): boolean {\r\n // Assume that non-multisampled stuff is already allocated. Just need to add multisampled textures, buffers, & geometry.\r\n assert(undefined === this._depthMS && undefined !== this._depth);\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n if (undefined === this._depthMS)\r\n return false;\r\n\r\n if (!this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples))\r\n return false;\r\n\r\n assert(undefined !== this._depth && undefined !== this._depthMS);\r\n return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);\r\n }\r\n\r\n protected disableMultiSampling(): boolean {\r\n assert(undefined !== this._depth);\r\n if (!this._fbos.disableMultiSampling(this._textures, this._depth))\r\n return false;\r\n\r\n // Want to disable multisampling without deleting & reallocating other stuff.\r\n this._depthMS = dispose(this._depthMS);\r\n assert(undefined !== this._depth);\r\n return this._textures.disableMultiSampling();\r\n }\r\n\r\n private renderBackgroundMap(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.BackgroundMap);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.BackgroundMap));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.BackgroundMap);\r\n });\r\n }\r\n\r\n private renderSkyBox(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.SkyBox);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.SkyBox));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.SkyBox);\r\n });\r\n }\r\n\r\n private renderBackground(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.Background);\r\n if (0 === cmds.length)\r\n return;\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.Background));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Background);\r\n });\r\n }\r\n\r\n private createVolumeClassifierStates() {\r\n // If we have already created a branch state for use in rendering the volume classifiers we must at least swap out its symbology overrides for the current one.\r\n if (undefined !== this._vcBranchState) {\r\n this._vcBranchState.symbologyOverrides = this.target.uniforms.branch.top.symbologyOverrides;\r\n return;\r\n }\r\n\r\n // Create a BranchState and several RenderStates to use when drawing the classifier volumes.\r\n // The BranchState needs to be created every time in case the symbology overrides changes.\r\n // It is based off of the current state, but turns off unnecessary and unwanted options, lighting being the most important.\r\n const top = this.target.uniforms.branch.top;\r\n const viewFlags = top.viewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n lighting: false,\r\n forceSurfaceDiscard: false,\r\n hiddenEdges: false,\r\n visibleEdges: false,\r\n materials: false,\r\n textures: false,\r\n transparency: false,\r\n });\r\n\r\n this._vcBranchState = new BranchState({\r\n symbologyOverrides: top.symbologyOverrides,\r\n viewFlags,\r\n transform: Transform.createIdentity(),\r\n clipVolume: top.clipVolume,\r\n planarClassifier: top.planarClassifier,\r\n iModel: top.iModel,\r\n is3d: top.is3d,\r\n edgeSettings: top.edgeSettings,\r\n contourLine: top.contourLine,\r\n });\r\n\r\n this._vcSetStencilRenderState = new RenderState();\r\n this._vcCopyZRenderState = new RenderState();\r\n this._vcColorRenderState = new RenderState();\r\n this._vcBlendRenderState = new RenderState();\r\n this._vcPickDataRenderState = new RenderState();\r\n\r\n this._vcCopyZRenderState.flags.depthTest = true;\r\n this._vcCopyZRenderState.flags.depthMask = true;\r\n this._vcCopyZRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._vcCopyZRenderState.flags.colorWrite = true;\r\n this._vcCopyZRenderState.flags.stencilTest = true;\r\n this._vcCopyZRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero;\r\n\r\n this._vcSetStencilRenderState.flags.depthTest = true;\r\n this._vcSetStencilRenderState.flags.depthMask = false;\r\n this._vcSetStencilRenderState.flags.colorWrite = false;\r\n this._vcSetStencilRenderState.flags.stencilTest = true;\r\n this._vcSetStencilRenderState.depthFunc = GL.DepthFunc.LessOrEqual;\r\n this._vcSetStencilRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.frontOperation.zFail = GL.StencilOperation.IncrWrap;\r\n this._vcSetStencilRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.backOperation.zFail = GL.StencilOperation.DecrWrap;\r\n\r\n this._vcPickDataRenderState.flags.depthTest = false;\r\n this._vcPickDataRenderState.flags.depthMask = false;\r\n this._vcPickDataRenderState.flags.colorWrite = true;\r\n this._vcPickDataRenderState.flags.stencilTest = true;\r\n this._vcPickDataRenderState.flags.cull = true;\r\n this._vcPickDataRenderState.cullFace = GL.CullFace.Front;\r\n this._vcPickDataRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcPickDataRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n // Let all of the operations remain at Keep so that the stencil will remain in tact for the subsequent blend draw to the color buffer.\r\n\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.colorWrite = true;\r\n this._vcColorRenderState.flags.stencilTest = true;\r\n this._vcColorRenderState.cullFace = GL.CullFace.Front;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.flags.blend = true; // blend func and color will be set before using\r\n\r\n this._vcBlendRenderState.flags.depthTest = false;\r\n this._vcBlendRenderState.flags.depthMask = false;\r\n this._vcBlendRenderState.flags.colorWrite = true;\r\n this._vcBlendRenderState.flags.stencilTest = false;\r\n this._vcBlendRenderState.flags.blend = true;\r\n this._vcBlendRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n\r\n if (this._debugStencil > 0) {\r\n this._vcDebugRenderState = new RenderState();\r\n this._vcDebugRenderState.flags.depthTest = true;\r\n this._vcDebugRenderState.flags.blend = true;\r\n this._vcDebugRenderState.blend.setBlendFunc(GL.BlendFactor.OneMinusConstColor, GL.BlendFactor.ConstColor);\r\n this._vcDebugRenderState.blend.color = [0.67, 0.67, 0.67, 1.0];\r\n }\r\n }\r\n\r\n private setAllStencilOps(state: RenderState, op: GL.StencilOperation): void {\r\n state.stencil.frontOperation.fail = op;\r\n state.stencil.frontOperation.zFail = op;\r\n state.stencil.frontOperation.zPass = op;\r\n state.stencil.backOperation.fail = op;\r\n state.stencil.backOperation.zFail = op;\r\n state.stencil.backOperation.zPass = op;\r\n }\r\n\r\n private renderIndexedVolumeClassifier(cmdsByIndex: DrawCommands, needComposite: boolean) {\r\n // Set the stencil for the given classifier stencil volume.\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.stencilSet), false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the pick data.\r\n this.renderIndexedClassifierForReadPixels(cmdsByIndex, expectDefined(this._vcPickDataRenderState), true, needComposite);\r\n }\r\n\r\n private renderVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n // Sometimes we need to render the classifier stencil volumes one at a time, if so draw them from the cmdsByIndex list\r\n const cmds = commands.getCommands(RenderPass.Classification);\r\n const cmdsByIndex = commands.getCommands(RenderPass.ClassificationByIndex);\r\n let numCmdsPerClassifier = 0;\r\n for (const cmd of cmdsByIndex) { // Figure out how many commands there are per index/primitive\r\n numCmdsPerClassifier++;\r\n if (\"drawPrimitive\" === cmd.opcode) {\r\n numCmdsPerClassifier += numCmdsPerClassifier - 1;\r\n break;\r\n }\r\n }\r\n const cmdsForVC = commands.getCommands(RenderPass.VolumeClassifiedRealityData);\r\n if (!this.target.activeVolumeClassifierProps || (renderForReadPixels && 0 === cmds.length) || 0 === cmdsForVC.length)\r\n return;\r\n\r\n let outsideFlags = this.target.activeVolumeClassifierProps.flags.outside;\r\n let insideFlags = this.target.activeVolumeClassifierProps.flags.inside;\r\n\r\n if (this.target.wantThematicDisplay) {\r\n if (outsideFlags !== SpatialClassifierOutsideDisplay.Off)\r\n outsideFlags = SpatialClassifierOutsideDisplay.On;\r\n if (insideFlags !== SpatialClassifierInsideDisplay.Off)\r\n insideFlags = SpatialClassifierInsideDisplay.On;\r\n }\r\n\r\n // Render the geometry which we are going to classify.\r\n this.renderForVolumeClassification(commands, compositeFlags, renderForReadPixels);\r\n\r\n this.createVolumeClassifierStates();\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fboColorAndZ = this.getBackgroundFbo(needComposite);\r\n\r\n if (this._debugStencil > 0) {\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n if (1 === this._debugStencil) {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.OpaqueGeneral));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n } else {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcDebugRenderState));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if (undefined === this._fbos.altZOnly || undefined === this._fbos.stencilSet)\r\n return;\r\n\r\n if (renderForReadPixels && this.target.vcSupportIntersectingVolumes) {\r\n // Clear the stencil.\r\n fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n });\r\n\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier)\r\n this.renderIndexedVolumeClassifier(cmdsByIndex.slice(i, i + numCmdsPerClassifier), needComposite);\r\n\r\n return;\r\n }\r\n\r\n const needOutsideDraw = SpatialClassifierOutsideDisplay.On !== outsideFlags;\r\n const needInsideDraw = SpatialClassifierInsideDisplay.On !== insideFlags;\r\n const doColorByElement = SpatialClassifierInsideDisplay.ElementColor === insideFlags || renderForReadPixels;\r\n const doColorByElementForIntersectingVolumes = this.target.vcSupportIntersectingVolumes;\r\n const needAltZ = (doColorByElement && !doColorByElementForIntersectingVolumes) || needOutsideDraw;\r\n let zOnlyFbo = this._fbos.stencilSet;\r\n let volClassBlendFbo = this._fbos.volClassCreateBlend;\r\n let volClassBlendReadZTexture = expectDefined(this._vcAltDepthStencil?.getHandle());\r\n let volClassBlendReadZTextureFbo = this._fbos.altZOnly;\r\n if (!needAltZ) {\r\n // Initialize the blend texture and the stencil.\r\n assert(undefined !== volClassBlendFbo);\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n System.instance.context.clearColor(0.0, 0.0, 0.0, 0.0);\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Color | GL.BufferBit.Stencil);\r\n });\r\n } else {\r\n // If we are doing color-by-element for the inside do not care about intersecting volumes or we need to color the outside\r\n // then we need to copy the Z buffer and set up a different zbuffer/stencil to render in.\r\n zOnlyFbo = this._fbos.altZOnly;\r\n volClassBlendFbo = this._fbos.volClassCreateBlendAltZ;\r\n assert(undefined !== volClassBlendFbo);\r\n volClassBlendReadZTexture = expectDefined(this._depth?.getHandle());\r\n volClassBlendReadZTextureFbo = this._fbos.stencilSet;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n // Copy the current Z into the Alt-Z. At the same time go ahead and clear the stencil and the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n System.instance.applyRenderState(expectDefined(this._vcCopyZRenderState));\r\n\r\n this.target.techniques.draw(getDrawParams(this.target, expectDefined(this._geom.volClassCopyZ))); // This method uses the EXT_frag_depth extension\r\n\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n this.target.popBranch();\r\n });\r\n }\r\n\r\n if (renderForReadPixels) {\r\n // Set the stencil for all of the classifier volumes.\r\n System.instance.frameBufferStack.execute(this._fbos.altZOnly, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n // After we create the stencil we need to clear the Z for the next step (so also must turn on z writing temporarily).\r\n expectDefined(this._vcSetStencilRenderState).flags.depthMask = true;\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n expectDefined(this._vcSetStencilRenderState).flags.depthMask = false;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n if (undefined === this._vcColorRenderState || undefined === this._vcBranchState) {\r\n throw new Error(\"this._vcColorRenderState or this._vcBranchState is undefined\");\r\n }\r\n this.target.pushState(this._vcBranchState);\r\n this._vcColorRenderState.flags.depthTest = true;\r\n this._vcColorRenderState.flags.depthMask = true;\r\n this._vcColorRenderState.flags.cull = true;\r\n this._vcColorRenderState.flags.blend = false;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ?.texture;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n this.renderIndexedClassifierForReadPixels(cmds, this._vcColorRenderState, false, needComposite);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.cull = false;\r\n this._vcColorRenderState.flags.blend = true;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n return;\r\n }\r\n\r\n if ((needOutsideDraw && cmds.length > 0) || (needInsideDraw && !(doColorByElement && doColorByElementForIntersectingVolumes))) {\r\n // Set the stencil using all of the volume classifiers. This will be used to do the outside and/or the inside if they need to be done.\r\n // If we are not modifying the outside and the inside is using color-by-element for intersecting volumes, then the stencil will get set later.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n }\r\n if (needOutsideDraw) {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n if (undefined === this._geom.volClassSetBlend || undefined === this._vcColorRenderState) {\r\n throw new Error(\"this._geom.volClassSetBlend or this._vcColorRenderState is undefined\");\r\n }\r\n this._geom.volClassSetBlend.boundaryType = BoundaryType.Outside;\r\n this._geom.volClassSetBlend.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.flags.blend = false;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.Equal; // temp swap the functions so we get what is not set in the stencil\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.Equal;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Keep); // don't clear the stencil since we'll use it again\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState.flags.blend = true;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Zero);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined); // unbind the depth buffer that we used as a texture as we'll need it as an output later\r\n });\r\n }\r\n if (needInsideDraw) {\r\n if (!doColorByElement) {\r\n // In this case our stencil is already set and it is all getting colored the same, so we can just draw with a viewport quad to color it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n if (undefined === this._geom.volClassSetBlend || undefined === this._vcColorRenderState) {\r\n throw new Error(\"this._geom.volClassSetBlend or this._vcColorRenderState is undefined\");\r\n }\r\n this._geom.volClassSetBlend.boundaryType = BoundaryType.Inside;\r\n this._geom.volClassSetBlend.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n } else if (doColorByElementForIntersectingVolumes) {\r\n // If we have intersecting classifier volumes, then we must stencil them individually to get their colors in the blend texture.\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier) {\r\n const nxtCmds = cmdsByIndex.slice(i, i + numCmdsPerClassifier);\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil. Just render the volume normally (us opaque pass), but use blending to modify the source alpha that gets written to the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n if (undefined === this._vcColorRenderState || undefined === this._vcBranchState) {\r\n throw new Error(\"this._vcColorRenderState or this._vcBranchState is undefined\");\r\n }\r\n this.target.pushState(this._vcBranchState);\r\n this._vcColorRenderState.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState.flags.cull = true;\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n this.target.activeVolumeClassifierTexture = undefined; // make sure this texture is undefined so we do not use the planar classification shader\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.OpaqueGeneral);\r\n this._vcColorRenderState.flags.cull = false;\r\n this.target.popBranch();\r\n });\r\n }\r\n } else {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n if (undefined === this._vcColorRenderState || undefined === this._vcBranchState) {\r\n throw new Error(\"this._vcColorRenderState or this._vcBranchState is undefined\");\r\n }\r\n // For coloring the inside by element color we will draw the inside using the the classifiers themselves.\r\n // To do this we need to first clear our Alt-Z. The shader will then test and write Z and will discard\r\n // anything that is in front of the reality model by reading the Z texture from the standard Z buffer (which has the reality mesh Z's in it).\r\n // What we end up with is the closest volume behind the terrain which works if the classifier volumes do not intersect.\r\n // Since we need the blend texture to have alpha in it, we will use blending just to modify the alpha that gets written.\r\n this.target.pushState(this._vcBranchState);\r\n this._vcColorRenderState.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState.flags.depthTest = true;\r\n this._vcColorRenderState.flags.depthMask = true;\r\n this._vcColorRenderState.flags.cull = true;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ?.texture;\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.cull = false;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n });\r\n }\r\n }\r\n\r\n // Handle the selected classifier volumes. Note though that if color-by-element is being used, then the selected volumes are already hilited\r\n // and this stage can be skipped. In order for this to work the list of commands needs to get reduced to only the ones which draw hilited volumes.\r\n // We cannot use the hillite shader to draw them since it doesn't handle logZ properly (it doesn't need to since it is only used elsewhere when Z write is turned off)\r\n // and we don't really want another whole set of hilite shaders just for this.\r\n const cmdsSelected = extractHilitedVolumeClassifierCommands(this.target.hilites, commands.getCommands(RenderPass.HiliteClassification));\r\n commands.replaceCommands(RenderPass.HiliteClassification, cmdsSelected); // replace the hilite command list for use in hilite pass as well.\r\n // if (cmdsSelected.length > 0 && insideFlags !== this.target.activeVolumeClassifierProps!.flags.selected) {\r\n if (!doColorByElement && cmdsSelected.length > 0 && insideFlags !== SpatialClassifierInsideDisplay.Hilite) { // assume selected ones are always hilited\r\n // Set the stencil using just the hilited volume classifiers.\r\n fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n if (needAltZ) {\r\n // If we are using the alternate Z then the stencil that goes with the original Z has not been cleared yet, so clear it here.\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n }\r\n\r\n this.target.techniques.execute(this.target, cmdsSelected, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n if (undefined === this._fbos.volClassCreateBlend) {\r\n throw new Error(\"this._fbos.volClassCreateBlend is undefined\");\r\n }\r\n fbStack.execute(this._fbos.volClassCreateBlend, false, this.useMsBuffers, () => {\r\n if (undefined === this._geom.volClassSetBlend || undefined === this._vcColorRenderState) {\r\n throw new Error(\"this._geom.volClassSetBlend or this._vcColorRenderState is undefined\");\r\n }\r\n this._geom.volClassSetBlend.boundaryType = BoundaryType.Selected;\r\n this._geom.volClassSetBlend.texture = expectDefined(this._vcAltDepthStencil?.getHandle()); // need to attach the alt depth instead of the real one since it is bound to the frame buffer\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n }\r\n\r\n // Now modify the color of the reality mesh by using the blend texture to blend with it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers) {\r\n volClassBlendFbo.blitMsBuffersToTextures(false); // make sure the volClassBlend texture that we are about to read has been blitted\r\n }\r\n\r\n fbStack.execute(fboColorAndZ, false, this.useMsBuffers, () => {\r\n if (undefined === this._vcBlendRenderState || undefined === this._geom.volClassBlend) {\r\n throw new Error(\"this._vcBlendRenderState or this._geom.volClassBlend is undefined\");\r\n }\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcBlendRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcBlendRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassBlend);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n\r\n // Process the flashed classifier if there is one.\r\n // Like the selected volumes, we do not need to do this step if we used by-element-color since the flashing is included in the element color.\r\n const flashedClassifierCmds = extractFlashedVolumeClassifierCommands(this.target.flashedId, cmdsByIndex, numCmdsPerClassifier);\r\n if (undefined !== flashedClassifierCmds && !doColorByElement) {\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, RenderPass.OpaqueGeneral);\r\n this.target.popBranch();\r\n });\r\n\r\n // Process the stencil to flash the contents.\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n if (undefined === this._vcColorRenderState || undefined === this._geom.volClassColorStencil) {\r\n throw new Error(\"this._vcColorRenderState or this._geom.volClassColorStencil is undefined\");\r\n }\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.blend.color = [1.0, 1.0, 1.0, this.target.flashIntensity * 0.2];\r\n this._vcColorRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassColorStencil);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n });\r\n }\r\n }\r\n\r\n private renderHilite(commands: RenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(expectDefined(this._fbos.hilite), true, false, () => {\r\n // Clear the hilite buffer.\r\n system.context.clearColor(0, 0, 0, 0);\r\n system.context.clear(GL.BufferBit.Color);\r\n // Draw the normal hilite geometry.\r\n this.drawPass(commands, RenderPass.Hilite);\r\n });\r\n\r\n // Process planar classifiers\r\n const planarClassifierCmds = commands.getCommands(RenderPass.HilitePlanarClassification);\r\n if (0 !== planarClassifierCmds.length) {\r\n system.frameBufferStack.execute(expectDefined(this._fbos.hiliteUsingStencil), true, false, () => {\r\n system.applyRenderState(this._opaqueRenderState);\r\n this.target.techniques.execute(this.target, planarClassifierCmds, RenderPass.HilitePlanarClassification);\r\n });\r\n }\r\n\r\n // Process the volume classifiers.\r\n const vcHiliteCmds = commands.getCommands(RenderPass.HiliteClassification);\r\n if (0 !== vcHiliteCmds.length && undefined !== this._vcBranchState) {\r\n // Set the stencil for the given classifier stencil volume.\r\n system.frameBufferStack.execute(expectDefined(this._fbos.stencilSet), false, false, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n system.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the hilite data.\r\n system.frameBufferStack.execute(expectDefined(this._fbos.hiliteUsingStencil), true, false, () => {\r\n system.applyRenderState(expectDefined(this._vcPickDataRenderState));\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n });\r\n }\r\n }\r\n\r\n private composite() {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.composite));\r\n this.target.techniques.draw(params);\r\n }\r\n\r\n protected getRenderState(pass: RenderPass): RenderState {\r\n switch (pass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n // NB: During pick, we don't want blending - it will mess up our pick buffer data and we don't care about the color data.\r\n // During normal draw, we don't use the pick buffers for anything, and we want color blending.\r\n // (We get away with this because surfaces always draw before their edges, and we're not depth-testing, so edges always draw atop surfaces without pick buffer testing).\r\n this._layerRenderState.flags.blend = !this.target.isReadPixelsInProgress;\r\n\r\n // Transparent non-overlay Layers are drawn between opaque and translucent passes. Test depth, don't write it, so that they blend with opaque.\r\n this._layerRenderState.flags.depthMask = RenderPass.TranslucentLayers !== pass;\r\n this._layerRenderState.depthFunc = (RenderPass.TranslucentLayers === pass) ? GL.DepthFunc.Default : GL.DepthFunc.Always;\r\n return this._layerRenderState;\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.HilitePlanarClassification:\r\n return this._opaqueRenderState;\r\n case RenderPass.Translucent:\r\n return this._translucentRenderState;\r\n case RenderPass.Hilite:\r\n return this._hiliteRenderState;\r\n case RenderPass.BackgroundMap:\r\n return this._backgroundMapRenderState;\r\n case RenderPass.PointClouds:\r\n return this._pointCloudRenderState;\r\n default:\r\n return this._noDepthMaskRenderState;\r\n }\r\n }\r\n\r\n protected drawPass(commands: RenderCommands, pass: RenderPass, pingPong: boolean = false, cmdPass: RenderPass = RenderPass.None) {\r\n const cmds = commands.getCommands(RenderPass.None !== cmdPass ? cmdPass : pass);\r\n if (0 === cmds.length) {\r\n return;\r\n } else if (pingPong) {\r\n this.pingPong();\r\n }\r\n\r\n System.instance.applyRenderState(this.getRenderState(pass));\r\n this.target.techniques.execute(this.target, cmds, pass);\r\n }\r\n}\r\n\r\ninterface SinglePointCloudData {\r\n pcs?: PointCloudDisplaySettings;\r\n cmds: DrawCommands;\r\n}\r\n"]}
1
+ {"version":3,"file":"SceneCompositor.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SceneCompositor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, expectDefined, Id64String } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ModelFeature, PointCloudDisplaySettings, RenderFeatureTable, RenderMode, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay,\r\n} from \"@itwin/core-common\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { IModelConnection } from \"../../../IModelConnection\";\r\nimport { SceneContext } from \"../../../ViewContext\";\r\nimport { ViewRect } from \"../../../common/ViewRect\";\r\nimport { Pixel } from \"../../../render/Pixel\";\r\nimport { GraphicList } from \"../../../render/RenderGraphic\";\r\nimport { RenderMemory } from \"../../../render/RenderMemory\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport {\r\n AmbientOcclusionGeometry, BlurGeometry, BlurType, BoundaryType, CachedGeometry, CompositeGeometry, CopyPickBufferGeometry,\r\n SingleTexturedViewportQuadGeometry, ViewportQuadGeometry, VolumeClassifierGeometry,\r\n} from \"./CachedGeometry\";\r\nimport { Debug } from \"./Diagnostics\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, extractFlashedVolumeClassifierCommands, extractHilitedVolumeClassifierCommands } from \"./DrawCommand\";\r\nimport { DepthBuffer, FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { IModelFrameLifecycle } from \"./IModelFrameLifecycle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { CompositeFlags, RenderOrder, RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { SolarShadowMap } from \"./SolarShadowMap\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { RenderBufferMultiSample } from \"./RenderBuffer\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { EDLMode, EyeDomeLighting } from \"./EDL\";\r\nimport { FrustumUniformType } from \"./FrustumUniforms\";\r\n\r\nexport function collectTextureStatistics(texture: TextureHandle | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== texture)\r\n stats.addTextureAttachment(texture.bytesUsed);\r\n}\r\n\r\nfunction collectMsBufferStatistics(msBuff: RenderBufferMultiSample | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== msBuff)\r\n stats.addTextureAttachment(msBuff.bytesUsed);\r\n}\r\n\r\n// Maintains the textures used by a SceneCompositor. The textures are reallocated when the dimensions of the viewport change.\r\nclass Textures implements WebGLDisposable, RenderMemory.Consumer {\r\n public accumulation?: TextureHandle;\r\n public revealage?: TextureHandle;\r\n public color?: TextureHandle;\r\n public featureId?: TextureHandle;\r\n public depthAndOrder?: TextureHandle;\r\n public depthAndOrderHidden?: TextureHandle; // only used if AO and multisampling\r\n public hilite?: TextureHandle;\r\n public occlusion?: TextureHandle;\r\n public occlusionBlur?: TextureHandle;\r\n public volClassBlend?: TextureHandle;\r\n public colorMsBuff?: RenderBufferMultiSample;\r\n public featureIdMsBuff?: RenderBufferMultiSample;\r\n public featureIdMsBuffHidden?: RenderBufferMultiSample;\r\n public depthAndOrderMsBuff?: RenderBufferMultiSample;\r\n public depthAndOrderMsBuffHidden?: RenderBufferMultiSample;\r\n public hiliteMsBuff?: RenderBufferMultiSample;\r\n public volClassBlendMsBuff?: RenderBufferMultiSample;\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.accumulation\r\n && undefined === this.revealage\r\n && undefined === this.color\r\n && undefined === this.featureId\r\n && undefined === this.depthAndOrder\r\n && undefined === this.depthAndOrderHidden\r\n && undefined === this.hilite\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionBlur\r\n && undefined === this.volClassBlend\r\n && undefined === this.colorMsBuff\r\n && undefined === this.featureIdMsBuff\r\n && undefined === this.featureIdMsBuffHidden\r\n && undefined === this.depthAndOrderMsBuff\r\n && undefined === this.depthAndOrderMsBuffHidden\r\n && undefined === this.hiliteMsBuff\r\n && undefined === this.volClassBlendMsBuff;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.accumulation = dispose(this.accumulation);\r\n this.revealage = dispose(this.revealage);\r\n this.color = dispose(this.color);\r\n this.featureId = dispose(this.featureId);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.depthAndOrderHidden = dispose(this.depthAndOrderHidden);\r\n this.hilite = dispose(this.hilite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.featureIdMsBuffHidden = dispose(this.featureIdMsBuffHidden);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.depthAndOrderMsBuffHidden = dispose(this.depthAndOrderMsBuffHidden);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectTextureStatistics(this.accumulation, stats);\r\n collectTextureStatistics(this.revealage, stats);\r\n collectTextureStatistics(this.color, stats);\r\n collectTextureStatistics(this.featureId, stats);\r\n collectTextureStatistics(this.depthAndOrder, stats);\r\n collectTextureStatistics(this.depthAndOrderHidden, stats);\r\n collectTextureStatistics(this.hilite, stats);\r\n collectTextureStatistics(this.occlusion, stats);\r\n collectTextureStatistics(this.occlusionBlur, stats);\r\n collectTextureStatistics(this.volClassBlend, stats);\r\n collectMsBufferStatistics(this.colorMsBuff, stats);\r\n collectMsBufferStatistics(this.featureIdMsBuff, stats);\r\n collectMsBufferStatistics(this.featureIdMsBuffHidden, stats);\r\n collectMsBufferStatistics(this.depthAndOrderMsBuff, stats);\r\n collectMsBufferStatistics(this.depthAndOrderMsBuffHidden, stats);\r\n collectMsBufferStatistics(this.hiliteMsBuff, stats);\r\n collectMsBufferStatistics(this.volClassBlendMsBuff, stats);\r\n }\r\n\r\n public init(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.accumulation);\r\n\r\n let pixelDataType: GL.Texture.DataType = GL.Texture.DataType.UnsignedByte;\r\n switch (System.instance.maxRenderType) {\r\n case RenderType.TextureFloat: {\r\n pixelDataType = GL.Texture.DataType.Float;\r\n break;\r\n }\r\n case RenderType.TextureHalfFloat: {\r\n pixelDataType = System.instance.context.HALF_FLOAT;\r\n break;\r\n }\r\n /* falls through */\r\n case RenderType.TextureUnsignedByte: {\r\n break;\r\n }\r\n }\r\n\r\n // NB: Both of these must be of the same type, because they are borrowed by pingpong and bound to the same frame buffer.\r\n this.accumulation = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n this.revealage = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n\r\n // Hilite texture is a simple on-off, but the smallest texture format WebGL allows us to use as output is RGBA with a byte per component.\r\n this.hilite = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.color = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.featureId = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.depthAndOrder = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n let rVal = undefined !== this.accumulation\r\n && undefined !== this.revealage\r\n && undefined !== this.color\r\n && undefined !== this.featureId\r\n && undefined !== this.depthAndOrder\r\n && undefined !== this.hilite;\r\n\r\n if (rVal && numSamples > 1) {\r\n rVal = this.enableMultiSampling(width, height, numSamples);\r\n }\r\n\r\n return rVal;\r\n }\r\n\r\n public enableOcclusion(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.occlusion && undefined === this.occlusionBlur);\r\n this.occlusion = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.occlusionBlur = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n let rVal = undefined !== this.occlusion && undefined !== this.occlusionBlur;\r\n if (numSamples > 1) {\r\n // If multisampling then we need a texture for storing depth and order for hidden edges.\r\n this.depthAndOrderHidden = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n rVal = rVal && undefined !== this.depthAndOrderHidden;\r\n }\r\n return rVal;\r\n }\r\n\r\n public disableOcclusion(): void {\r\n assert(undefined !== this.occlusion && undefined !== this.occlusionBlur);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.depthAndOrderHidden = dispose(this.depthAndOrderHidden);\r\n }\r\n\r\n public enableVolumeClassifier(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.volClassBlend);\r\n this.volClassBlend = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n let rVal = undefined !== this.volClassBlend;\r\n if (rVal && undefined !== numSamples && numSamples > 1) {\r\n this.volClassBlendMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n rVal = undefined !== this.volClassBlendMsBuff;\r\n }\r\n return rVal;\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public enableMultiSampling(width: number, height: number, numSamples: number): boolean {\r\n this.colorMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.featureIdMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.featureIdMsBuffHidden = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.depthAndOrderMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.depthAndOrderMsBuffHidden = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.hiliteMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n return undefined !== this.colorMsBuff\r\n && undefined !== this.featureIdMsBuff\r\n && undefined !== this.featureIdMsBuffHidden\r\n && undefined !== this.depthAndOrderMsBuff\r\n && undefined !== this.depthAndOrderMsBuffHidden\r\n && undefined !== this.hiliteMsBuff;\r\n }\r\n\r\n public disableMultiSampling(): boolean {\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.featureIdMsBuffHidden = dispose(this.featureIdMsBuffHidden);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.depthAndOrderMsBuffHidden = dispose(this.depthAndOrderMsBuffHidden);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n return true;\r\n }\r\n}\r\n\r\n// Maintains the framebuffers used by a SceneCompositor. The color attachments are supplied by a Textures object.\r\nclass FrameBuffers implements WebGLDisposable {\r\n public opaqueColor?: FrameBuffer;\r\n public opaqueAndCompositeColor?: FrameBuffer;\r\n public depthAndOrder?: FrameBuffer;\r\n public hilite?: FrameBuffer;\r\n public hiliteUsingStencil?: FrameBuffer;\r\n public stencilSet?: FrameBuffer;\r\n public occlusion?: FrameBuffer;\r\n public occlusionBlur?: FrameBuffer;\r\n public altZOnly?: FrameBuffer;\r\n public volClassCreateBlend?: FrameBuffer;\r\n public volClassCreateBlendAltZ?: FrameBuffer;\r\n public opaqueAll?: FrameBuffer;\r\n public opaqueAndCompositeAll?: FrameBuffer;\r\n public opaqueAndCompositeAllHidden?: FrameBuffer;\r\n public pingPong?: FrameBuffer;\r\n public pingPongMS?: FrameBuffer;\r\n public translucent?: FrameBuffer;\r\n public clearTranslucent?: FrameBuffer;\r\n public idsAndZ?: FrameBuffer;\r\n public idsAndAltZ?: FrameBuffer;\r\n public idsAndZComposite?: FrameBuffer;\r\n public idsAndAltZComposite?: FrameBuffer;\r\n public edlDrawCol?: FrameBuffer;\r\n\r\n public init(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n if (!this.initPotentialMSFbos(textures, depth, depthMS))\r\n return false;\r\n\r\n this.depthAndOrder = FrameBuffer.create([expectDefined(textures.depthAndOrder)], depth);\r\n this.hilite = FrameBuffer.create([expectDefined(textures.hilite)], depth);\r\n this.hiliteUsingStencil = FrameBuffer.create([expectDefined(textures.hilite)], depth);\r\n\r\n if (!this.depthAndOrder || !this.hilite || !this.hiliteUsingStencil)\r\n return false;\r\n\r\n assert(undefined === this.opaqueAll);\r\n\r\n if (!this.initPotentialMSMRTFbos(textures, depth, depthMS))\r\n return false;\r\n\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const colors = [textures.accumulation, textures.revealage];\r\n this.translucent = FrameBuffer.create(colors, depth);\r\n this.clearTranslucent = FrameBuffer.create(colors);\r\n\r\n // We borrow the SceneCompositor's accum and revealage textures for the surface pass.\r\n // First we render edges, writing to our textures.\r\n // Then we copy our textures to borrowed textures.\r\n // Finally we render surfaces, writing to our textures and reading from borrowed textures.\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const pingPong = [textures.accumulation, textures.revealage];\r\n this.pingPong = FrameBuffer.create(pingPong);\r\n\r\n return undefined !== this.translucent\r\n && undefined !== this.clearTranslucent\r\n && undefined !== this.pingPong;\r\n }\r\n\r\n private initPotentialMSFbos(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(undefined !== boundColor && undefined !== textures.color);\r\n if (undefined === depthMS) {\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth);\r\n } else {\r\n assert(undefined !== textures.colorMsBuff);\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n }\r\n return undefined !== this.opaqueColor\r\n && undefined !== this.opaqueAndCompositeColor;\r\n }\r\n\r\n private initPotentialMSMRTFbos(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(\r\n undefined !== boundColor &&\r\n undefined !== textures.color &&\r\n undefined !== textures.featureId &&\r\n undefined !== textures.depthAndOrder &&\r\n undefined !== textures.accumulation &&\r\n undefined !== textures.revealage\r\n );\r\n const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];\r\n\r\n if (undefined === depthMs) {\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth);\r\n } else {\r\n assert(\r\n undefined !== textures.colorMsBuff &&\r\n undefined !== textures.featureIdMsBuff &&\r\n undefined !== textures.featureIdMsBuffHidden &&\r\n undefined !== textures.depthAndOrderMsBuff &&\r\n undefined !== textures.depthAndOrderMsBuffHidden\r\n );\r\n const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];\r\n const colorAndPickFilters = [GL.MultiSampling.Filter.Linear, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n }\r\n\r\n return undefined !== this.opaqueAll\r\n && undefined !== this.opaqueAndCompositeAll;\r\n }\r\n\r\n public enableOcclusion(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n assert(undefined !== textures.occlusion && undefined !== textures.occlusionBlur);\r\n this.occlusion = FrameBuffer.create([textures.occlusion]);\r\n this.occlusionBlur = FrameBuffer.create([textures.occlusionBlur]);\r\n let rVal = undefined !== this.occlusion && undefined !== this.occlusionBlur;\r\n\r\n if (undefined === depthMs) {\r\n // If not using multisampling then we can use the accumulation and revealage textures for the hidden pick buffers,\r\n assert(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const colorAndPick = [textures.color, textures.accumulation, textures.revealage];\r\n this.opaqueAndCompositeAllHidden = FrameBuffer.create(colorAndPick, depth);\r\n rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden;\r\n } else {\r\n // If multisampling then we cannot use the revealage texture for depthAndOrder for the hidden edges since it is of the wrong type for blitting,\r\n // so instead use a special depthAndOrderHidden texture just for this purpose.\r\n // The featureId texture is not needed for hidden edges, so the accumulation texture can be used for it if we don't blit from the multisample bufffer into it.\r\n assert(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.depthAndOrderHidden);\r\n assert(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuffHidden);\r\n const colorAndPick = [textures.color, textures.accumulation, textures.depthAndOrderHidden];\r\n const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];\r\n const colorAndPickFilters = [GL.MultiSampling.Filter.Linear, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.opaqueAndCompositeAllHidden = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n // We will also need a frame buffer for copying the real pick data buffers into these hidden edge pick data buffers.\r\n const pingPong = [textures.accumulation, textures.depthAndOrderHidden];\r\n const pingPongMSBuffs = [textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];\r\n const pingPongFilters = [GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.pingPongMS = FrameBuffer.create(pingPong, depth, pingPongMSBuffs, pingPongFilters, depthMs);\r\n rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden && (undefined === depthMs || undefined !== this.pingPongMS);\r\n }\r\n\r\n return rVal;\r\n }\r\n\r\n public disableOcclusion(): void {\r\n if (undefined !== this.occlusion) {\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n }\r\n\r\n this.opaqueAndCompositeAllHidden = dispose(this.opaqueAndCompositeAllHidden);\r\n this.pingPongMS = dispose(this.pingPongMS);\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n if (undefined === boundColor)\r\n return;\r\n\r\n if (undefined === this.stencilSet) {\r\n if (undefined === textures.volClassBlend) {\r\n throw new Error(\"Volume classifier blend texture is not defined.\");\r\n }\r\n if (undefined !== depthMS) { // if multisampling use the multisampled depth everywhere\r\n if (undefined === textures.volClassBlendMsBuff) {\r\n throw new Error(\"Volume classifier blend multisample buffer is not defined.\");\r\n }\r\n this.stencilSet = FrameBuffer.create([], depth, [], [], depthMS);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth, [], [], volClassDepthMS);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend], depth, [textures.volClassBlendMsBuff], [GL.MultiSampling.Filter.Nearest], depthMS);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend], volClassDepth, [textures.volClassBlendMsBuff], [GL.MultiSampling.Filter.Nearest], volClassDepthMS);\r\n } else if (undefined !== volClassDepth) {\r\n this.stencilSet = FrameBuffer.create([], depth);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend], depth);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend], volClassDepth);\r\n }\r\n }\r\n\r\n if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {\r\n if (undefined !== volClassDepth) {\r\n let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];\r\n this.idsAndZ = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZ = FrameBuffer.create(ids, volClassDepth);\r\n ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];\r\n this.idsAndZComposite = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZComposite = FrameBuffer.create(ids, volClassDepth);\r\n }\r\n }\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.stencilSet) {\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n }\r\n\r\n if (undefined !== this.idsAndZ) {\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n }\r\n }\r\n\r\n public enableMultiSampling(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer): boolean {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n let rVal = this.initPotentialMSFbos(textures, depth, depthMS);\r\n\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n rVal = this.initPotentialMSMRTFbos(textures, depth, depthMS);\r\n return rVal;\r\n }\r\n\r\n public disableMultiSampling(textures: Textures, depth: DepthBuffer): boolean {\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n if (!this.initPotentialMSMRTFbos(textures, depth, undefined))\r\n return false;\r\n\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n return this.initPotentialMSFbos(textures, depth, undefined);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.opaqueColor && undefined === this.opaqueAndCompositeColor && undefined === this.depthAndOrder\r\n && undefined === this.hilite && undefined === this.hiliteUsingStencil && undefined === this.occlusion\r\n && undefined === this.occlusionBlur && undefined === this.stencilSet && undefined === this.altZOnly\r\n && undefined === this.volClassCreateBlend && undefined === this.volClassCreateBlendAltZ && undefined === this.opaqueAll\r\n && undefined === this.opaqueAndCompositeAll && undefined === this.opaqueAndCompositeAllHidden && undefined === this.pingPong\r\n && undefined === this.pingPongMS && undefined === this.translucent && undefined === this.clearTranslucent\r\n && undefined === this.idsAndZ && undefined === this.idsAndAltZ && undefined === this.idsAndZComposite\r\n && undefined === this.idsAndAltZComposite && undefined === this.edlDrawCol;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.hilite = dispose(this.hilite);\r\n this.hiliteUsingStencil = dispose(this.hiliteUsingStencil);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAllHidden);\r\n this.pingPong = dispose(this.pingPong);\r\n this.pingPongMS = dispose(this.pingPongMS);\r\n this.translucent = dispose(this.translucent);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n this.edlDrawCol = dispose(this.edlDrawCol);\r\n }\r\n}\r\n\r\nexport function collectGeometryStatistics(geom: CachedGeometry | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== geom)\r\n geom.collectStatistics(stats);\r\n}\r\n\r\n// Maintains the geometry used to execute screenspace operations for a SceneCompositor.\r\nclass Geometry implements WebGLDisposable, RenderMemory.Consumer {\r\n public composite?: CompositeGeometry;\r\n public volClassColorStencil?: ViewportQuadGeometry;\r\n public volClassCopyZ?: SingleTexturedViewportQuadGeometry;\r\n public volClassSetBlend?: VolumeClassifierGeometry;\r\n public volClassBlend?: SingleTexturedViewportQuadGeometry;\r\n public occlusion?: AmbientOcclusionGeometry;\r\n public occlusionXBlur?: BlurGeometry;\r\n public occlusionYBlur?: BlurGeometry;\r\n public copyPickBuffers?: CopyPickBufferGeometry;\r\n public clearTranslucent?: ViewportQuadGeometry;\r\n public clearPickAndColor?: ViewportQuadGeometry;\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectGeometryStatistics(this.composite, stats);\r\n collectGeometryStatistics(this.volClassColorStencil, stats);\r\n collectGeometryStatistics(this.volClassCopyZ, stats);\r\n collectGeometryStatistics(this.volClassSetBlend, stats);\r\n collectGeometryStatistics(this.volClassBlend, stats);\r\n collectGeometryStatistics(this.occlusion, stats);\r\n collectGeometryStatistics(this.occlusionXBlur, stats);\r\n collectGeometryStatistics(this.occlusionYBlur, stats);\r\n collectGeometryStatistics(this.copyPickBuffers, stats);\r\n collectGeometryStatistics(this.clearTranslucent, stats);\r\n collectGeometryStatistics(this.clearPickAndColor, stats);\r\n }\r\n\r\n public init(textures: Textures): boolean {\r\n assert(undefined === this.composite);\r\n this.composite = CompositeGeometry.createGeometry(\r\n expectDefined(textures.color?.getHandle()),\r\n expectDefined(textures.accumulation?.getHandle()),\r\n expectDefined(textures.revealage?.getHandle()), expectDefined(textures.hilite?.getHandle()));\r\n\r\n if (undefined === this.composite)\r\n return false;\r\n\r\n assert(undefined === this.copyPickBuffers);\r\n\r\n this.copyPickBuffers = CopyPickBufferGeometry.createGeometry(expectDefined(textures.featureId?.getHandle()), expectDefined(textures.depthAndOrder?.getHandle()));\r\n this.clearTranslucent = ViewportQuadGeometry.create(TechniqueId.OITClearTranslucent);\r\n this.clearPickAndColor = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n\r\n return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;\r\n }\r\n\r\n public enableOcclusion(textures: Textures, depth: DepthBuffer): void {\r\n assert(undefined !== textures.occlusion && undefined !== textures.occlusionBlur && undefined !== textures.depthAndOrder && undefined !== textures.occlusionBlur);\r\n expectDefined(this.composite).occlusion = textures.occlusion.getHandle();\r\n this.occlusion = AmbientOcclusionGeometry.createGeometry(expectDefined(textures.depthAndOrder.getHandle()), expectDefined(depth.getHandle()));\r\n this.occlusionXBlur = BlurGeometry.createGeometry(expectDefined(textures.occlusion.getHandle()), expectDefined(textures.depthAndOrder.getHandle()), undefined, new Vector2d(1.0, 0.0), BlurType.NoTest);\r\n const depthAndOrderHidden = (undefined === textures.depthAndOrderHidden ? textures.revealage?.getHandle() : textures.depthAndOrderHidden.getHandle());\r\n this.occlusionYBlur = BlurGeometry.createGeometry(expectDefined(textures.occlusionBlur.getHandle()), expectDefined(textures.depthAndOrder.getHandle()), depthAndOrderHidden, new Vector2d(0.0, 1.0), BlurType.TestOrder);\r\n }\r\n\r\n public disableOcclusion(): void {\r\n expectDefined(this.composite).occlusion = undefined;\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer): boolean {\r\n assert(undefined === this.volClassColorStencil && undefined === this.volClassCopyZ && undefined === this.volClassSetBlend && undefined === this.volClassBlend);\r\n this.volClassColorStencil = ViewportQuadGeometry.create(TechniqueId.VolClassColorUsingStencil);\r\n this.volClassCopyZ = SingleTexturedViewportQuadGeometry.createGeometry(expectDefined(depth.getHandle()), TechniqueId.VolClassCopyZ);\r\n this.volClassSetBlend = VolumeClassifierGeometry.createVCGeometry(expectDefined(depth.getHandle()));\r\n this.volClassBlend = SingleTexturedViewportQuadGeometry.createGeometry(expectDefined(textures.volClassBlend?.getHandle()), TechniqueId.VolClassBlend);\r\n return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend;\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.volClassColorStencil) {\r\n this.volClassColorStencil = dispose(this.volClassColorStencil);\r\n this.volClassCopyZ = dispose(this.volClassCopyZ);\r\n this.volClassSetBlend = dispose(this.volClassSetBlend);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n }\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.composite && undefined === this.occlusion && undefined === this.occlusionXBlur\r\n && undefined === this.occlusionYBlur && undefined === this.volClassColorStencil && undefined === this.volClassCopyZ\r\n && undefined === this.volClassSetBlend && undefined === this.volClassBlend && undefined === this.copyPickBuffers\r\n && undefined === this.clearTranslucent && undefined === this.clearPickAndColor;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.composite = dispose(this.composite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n this.disableVolumeClassifier();\r\n this.copyPickBuffers = dispose(this.copyPickBuffers);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.clearPickAndColor = dispose(this.clearPickAndColor);\r\n }\r\n}\r\n\r\ninterface BatchInfo {\r\n featureTable: RenderFeatureTable;\r\n iModel?: IModelConnection;\r\n transformFromIModel?: Transform;\r\n tileId?: string;\r\n viewAttachmentId?: Id64String;\r\n inSectionDrawingAttachment?: boolean;\r\n}\r\n\r\n// Represents a view of data read from a region of the frame buffer.\r\nclass PixelBuffer implements Pixel.Buffer {\r\n private readonly _rect: ViewRect;\r\n private readonly _selector: Pixel.Selector;\r\n private readonly _featureId?: Uint32Array;\r\n private readonly _depthAndOrder?: Uint32Array;\r\n private readonly _batchState: BatchState;\r\n private readonly _scratchModelFeature = ModelFeature.create();\r\n\r\n private get _numPixels(): number { return this._rect.width * this._rect.height; }\r\n\r\n private getPixelIndex(x: number, y: number): number {\r\n if (x < this._rect.left || y < this._rect.top)\r\n return this._numPixels;\r\n\r\n x -= this._rect.left;\r\n y -= this._rect.top;\r\n if (x >= this._rect.width || y >= this._rect.height)\r\n return this._numPixels;\r\n\r\n // NB: View coords have origin at top-left; GL at bottom-left. So our rows are upside-down.\r\n y = this._rect.height - 1 - y;\r\n return y * this._rect.width + x;\r\n }\r\n\r\n private getPixel32(data: Uint32Array, pixelIndex: number): number | undefined {\r\n return pixelIndex < data.length ? data[pixelIndex] : undefined;\r\n }\r\n\r\n private getFeature(pixelIndex: number, result: ModelFeature): ModelFeature | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n return undefined !== featureId ? this._batchState.getFeature(featureId, result) : undefined;\r\n }\r\n\r\n private getFeatureId(pixelIndex: number): number | undefined {\r\n return undefined !== this._featureId ? this.getPixel32(this._featureId, pixelIndex) : undefined;\r\n }\r\n\r\n private getBatchInfo(pixelIndex: number): BatchInfo | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n if (undefined !== featureId) {\r\n const batch = this._batchState.find(featureId);\r\n if (undefined !== batch) {\r\n return {\r\n featureTable: batch.featureTable,\r\n iModel: batch.batchIModel,\r\n transformFromIModel: batch.transformFromBatchIModel,\r\n tileId: batch.tileId,\r\n viewAttachmentId: batch.viewAttachmentId,\r\n inSectionDrawingAttachment: batch.inSectionDrawingAttachment,\r\n };\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private readonly _scratchUint32Array = new Uint32Array(1);\r\n private readonly _scratchUint8Array = new Uint8Array(this._scratchUint32Array.buffer);\r\n private readonly _scratchVector3d = new Vector3d();\r\n private readonly _mult = new Vector3d(1.0, 1.0 / 255.0, 1.0 / 65025.0);\r\n private decodeDepthRgba(depthAndOrder: number): number {\r\n this._scratchUint32Array[0] = depthAndOrder;\r\n const bytes = this._scratchUint8Array;\r\n const fpt = Vector3d.create(bytes[1] / 255.0, bytes[2] / 255.0, bytes[3] / 255.0, this._scratchVector3d);\r\n let depth = fpt.dotProduct(this._mult);\r\n\r\n assert(0.0 <= depth);\r\n assert(1.01 >= depth); // rounding error...\r\n\r\n depth = Math.min(1.0, depth);\r\n depth = Math.max(0.0, depth);\r\n\r\n return depth;\r\n }\r\n\r\n private decodeRenderOrderRgba(depthAndOrder: number): RenderOrder { return this.decodeUint8(depthAndOrder, 16); }\r\n private decodeUint8(rgba32: number, basis: number): number {\r\n this._scratchUint32Array[0] = rgba32;\r\n const encByte = this._scratchUint8Array[0];\r\n const enc = encByte / 255.0;\r\n const dec = Math.floor(basis * enc + 0.5);\r\n return dec;\r\n }\r\n\r\n\r\n private readonly _invalidPixelData = new Pixel.Data();\r\n public getPixel(x: number, y: number): Pixel.Data {\r\n const px = this._invalidPixelData;\r\n const index = this.getPixelIndex(x, y);\r\n if (index >= this._numPixels)\r\n return px;\r\n\r\n // Initialize to the defaults...\r\n let distanceFraction = px.distanceFraction;\r\n let geometryType = px.type;\r\n let planarity = px.planarity;\r\n\r\n const haveFeatureIds = Pixel.Selector.None !== (this._selector & Pixel.Selector.Feature);\r\n const feature = haveFeatureIds ? this.getFeature(index, this._scratchModelFeature) : undefined;\r\n const batchInfo = haveFeatureIds ? this.getBatchInfo(index) : undefined;\r\n if (Pixel.Selector.None !== (this._selector & Pixel.Selector.GeometryAndDistance) && undefined !== this._depthAndOrder) {\r\n const depthAndOrder = this.getPixel32(this._depthAndOrder, index);\r\n if (undefined !== depthAndOrder) {\r\n distanceFraction = this.decodeDepthRgba(depthAndOrder);\r\n\r\n const orderWithPlanarBit = this.decodeRenderOrderRgba(depthAndOrder);\r\n const order = orderWithPlanarBit & ~RenderOrder.PlanarBit;\r\n planarity = (orderWithPlanarBit === order) ? Pixel.Planarity.NonPlanar : Pixel.Planarity.Planar;\r\n switch (order) {\r\n case RenderOrder.None:\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n case RenderOrder.Background:\r\n case RenderOrder.BlankingRegion:\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n geometryType = Pixel.GeometryType.Surface;\r\n break;\r\n case RenderOrder.Linear:\r\n geometryType = Pixel.GeometryType.Linear;\r\n break;\r\n case RenderOrder.Edge:\r\n geometryType = Pixel.GeometryType.Edge;\r\n break;\r\n case RenderOrder.Silhouette:\r\n geometryType = Pixel.GeometryType.Silhouette;\r\n break;\r\n default:\r\n // ###TODO: may run into issues with point clouds - they are not written correctly in C++.\r\n assert(false, \"Invalid render order\");\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let featureTable, iModel, transformToIModel, tileId, viewAttachmentId, inSectionDrawingAttachment;\r\n if (undefined !== batchInfo) {\r\n featureTable = batchInfo.featureTable;\r\n iModel = batchInfo.iModel;\r\n transformToIModel = batchInfo.transformFromIModel;\r\n tileId = batchInfo.tileId;\r\n viewAttachmentId = batchInfo.viewAttachmentId;\r\n inSectionDrawingAttachment = batchInfo.inSectionDrawingAttachment;\r\n }\r\n\r\n return new Pixel.Data({\r\n feature,\r\n distanceFraction,\r\n type: geometryType,\r\n planarity,\r\n batchType: featureTable?.type,\r\n iModel,\r\n transformFromIModel: transformToIModel,\r\n tileId,\r\n viewAttachmentId,\r\n inSectionDrawingAttachment,\r\n });\r\n }\r\n\r\n private constructor(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor) {\r\n this._rect = rect.clone();\r\n this._selector = selector;\r\n this._batchState = compositor.target.uniforms.batch.state;\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.GeometryAndDistance)) {\r\n const depthAndOrderBytes = compositor.readDepthAndOrder(rect);\r\n if (undefined !== depthAndOrderBytes)\r\n this._depthAndOrder = new Uint32Array(depthAndOrderBytes.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.GeometryAndDistance;\r\n }\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.Feature)) {\r\n const features = compositor.readFeatureIds(rect);\r\n if (undefined !== features)\r\n this._featureId = new Uint32Array(features.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.Feature;\r\n }\r\n }\r\n\r\n public get isEmpty(): boolean { return Pixel.Selector.None === this._selector; }\r\n\r\n public static create(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor): Pixel.Buffer | undefined {\r\n const pdb = new PixelBuffer(rect, selector, compositor);\r\n return pdb.isEmpty ? undefined : pdb;\r\n }\r\n}\r\n\r\n/** Orchestrates rendering of the scene on behalf of a Target.\r\n * This base class exists only so we don't have to export all the types of the shared Compositor members like Textures, FrameBuffers, etc.\r\n * @internal\r\n */\r\nexport abstract class SceneCompositor implements WebGLDisposable, RenderMemory.Consumer {\r\n public readonly target: Target;\r\n public readonly solarShadowMap: SolarShadowMap;\r\n public readonly eyeDomeLighting: EyeDomeLighting;\r\n\r\n protected _needHiddenEdges: boolean;\r\n\r\n public abstract get isDisposed(): boolean;\r\n public abstract [Symbol.dispose](): void;\r\n public abstract preDraw(): void;\r\n public abstract draw(_commands: RenderCommands): void;\r\n public abstract drawForReadPixels(_commands: RenderCommands, sceneOverlays: GraphicList, worldOverlayDecorations: GraphicList | undefined, viewOverlayDecorations: GraphicList | undefined): void;\r\n public abstract readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined;\r\n public abstract readDepthAndOrder(rect: ViewRect): Uint8Array | undefined;\r\n public abstract readFeatureIds(rect: ViewRect): Uint8Array | undefined;\r\n public abstract updateSolarShadows(context: SceneContext | undefined): void;\r\n public abstract drawPrimitive(primitive: Primitive, exec: ShaderProgramExecutor, outputsToPick: boolean): void;\r\n public abstract forceBufferChange(): void;\r\n\r\n /** Obtain a framebuffer with a single spare RGBA texture that can be used for screen-space effect shaders. */\r\n public abstract get screenSpaceEffectFbo(): FrameBuffer;\r\n\r\n public abstract get featureIds(): TextureHandle;\r\n public abstract get depthAndOrder(): TextureHandle;\r\n public abstract get antialiasSamples(): number;\r\n\r\n public get needHiddenEdges(): boolean { return this._needHiddenEdges; }\r\n\r\n protected constructor(target: Target) {\r\n this.target = target;\r\n this.solarShadowMap = new SolarShadowMap(target);\r\n this.eyeDomeLighting = new EyeDomeLighting(target);\r\n this._needHiddenEdges = false;\r\n }\r\n\r\n public static create(target: Target): SceneCompositor {\r\n return new Compositor(target);\r\n }\r\n\r\n public abstract collectStatistics(stats: RenderMemory.Statistics): void;\r\n}\r\n\r\n// This describes what types of primitives a compositor should draw. See the `drawPrimitive` method of Compositor.\r\nenum PrimitiveDrawState {\r\n Both,\r\n Pickable,\r\n NonPickable,\r\n}\r\n\r\n// The actual base class. Specializations are provided based on whether or not multiple render targets are supported.\r\nclass Compositor extends SceneCompositor {\r\n protected _width: number = -1;\r\n protected _height: number = -1;\r\n protected _includeOcclusion: boolean = false;\r\n protected _textures = new Textures();\r\n protected _depth?: DepthBuffer;\r\n protected _depthMS?: DepthBuffer; // multisample depth buffer\r\n protected _fbos: FrameBuffers;\r\n protected _geom: Geometry;\r\n protected _readPickDataFromPingPong: boolean = true;\r\n protected _opaqueRenderState = new RenderState();\r\n protected _layerRenderState = new RenderState();\r\n protected _translucentRenderState = new RenderState();\r\n protected _hiliteRenderState = new RenderState();\r\n protected _noDepthMaskRenderState = new RenderState();\r\n protected _backgroundMapRenderState = new RenderState();\r\n protected _pointCloudRenderState = new RenderState();\r\n protected _debugStencil: number = 0; // 0 to draw stencil volumes normally, 1 to draw as opaque, 2 to draw blended\r\n protected _vcBranchState?: BranchState;\r\n protected _vcSetStencilRenderState?: RenderState;\r\n protected _vcCopyZRenderState?: RenderState;\r\n protected _vcColorRenderState?: RenderState;\r\n protected _vcBlendRenderState?: RenderState;\r\n protected _vcPickDataRenderState?: RenderState;\r\n protected _vcDebugRenderState?: RenderState;\r\n protected _vcAltDepthStencil?: DepthBuffer;\r\n protected _vcAltDepthStencilMS?: DepthBuffer;\r\n protected _haveVolumeClassifier: boolean = false;\r\n protected _antialiasSamples: number = 1;\r\n protected readonly _viewProjectionMatrix = new Matrix4();\r\n protected _primitiveDrawState = PrimitiveDrawState.Both; // used by drawPrimitive to decide whether a primitive needs to be drawn.\r\n\r\n public forceBufferChange(): void { this._width = this._height = -1; }\r\n public get featureIds(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }\r\n public get depthAndOrder(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }\r\n private get _samplerFbo(): FrameBuffer { return this._readPickDataFromPingPong ? expectDefined(this._fbos.pingPong) : expectDefined(this._fbos.opaqueAll); }\r\n private getSamplerTexture(index: number) { return this._samplerFbo.getColor(index); }\r\n\r\n public drawPrimitive(primitive: Primitive, exec: ShaderProgramExecutor, outputsToPick: boolean) {\r\n if ((outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.NonPickable) ||\r\n (!outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.Pickable))\r\n primitive.draw(exec);\r\n }\r\n\r\n protected clearOpaque(needComposite: boolean): void {\r\n const fbo = needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll);\r\n const system = System.instance;\r\n system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {\r\n // Clear pick data buffers to 0's and color buffer to background color\r\n // (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id\r\n // (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)\r\n system.applyRenderState(this._noDepthMaskRenderState);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.clearPickAndColor));\r\n this.target.techniques.draw(params);\r\n\r\n // Clear depth buffer\r\n system.applyRenderState(RenderState.defaults); // depthMask == true.\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n protected renderLayers(commands: RenderCommands, needComposite: boolean, pass: RenderPass): void {\r\n const fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll));\r\n const useMsBuffers = RenderPass.OpaqueLayers === pass && fbo.isMultisampled && this.useMsBuffers;\r\n this._readPickDataFromPingPong = !useMsBuffers;\r\n System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, pass, true);\r\n });\r\n\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected renderOpaque(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n if (CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion) && !renderForReadPixels) {\r\n this.renderOpaqueAO(commands);\r\n return;\r\n }\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fbStack = System.instance.frameBufferStack;\r\n\r\n // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).\r\n let fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll));\r\n const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;\r\n this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueLinear);\r\n this.drawPass(commands, RenderPass.OpaquePlanar, true);\r\n if (renderForReadPixels) {\r\n this.drawPass(commands, RenderPass.PointClouds, true); // don't need EDL for this\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true);\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(true);\r\n }\r\n });\r\n this._readPickDataFromPingPong = false;\r\n\r\n // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.\r\n if (!renderForReadPixels) {\r\n fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor));\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n // assume we are done with MS at this point, so update the non-MS buffers\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(needComposite);\r\n }\r\n }\r\n\r\n protected renderOpaqueAO(commands: RenderCommands) {\r\n const fbStack = System.instance.frameBufferStack;\r\n const haveHiddenEdges = 0 !== commands.getCommands(RenderPass.HiddenEdge).length;\r\n\r\n // Output the linear, planar, and pickable surfaces to color and pick data buffers.\r\n let fbo = expectDefined(this._fbos.opaqueAndCompositeAll);\r\n const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;\r\n this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueLinear);\r\n this.drawPass(commands, RenderPass.OpaquePlanar, true);\r\n this._primitiveDrawState = PrimitiveDrawState.Pickable;\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true);\r\n this._primitiveDrawState = PrimitiveDrawState.Both;\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(true);\r\n });\r\n this._readPickDataFromPingPong = false;\r\n\r\n // Output the non-pickable surfaces and hidden edges to just the color buffer.\r\n fbo = expectDefined(this._fbos.opaqueAndCompositeColor);\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this._primitiveDrawState = PrimitiveDrawState.NonPickable;\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n if (haveHiddenEdges)\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n this._primitiveDrawState = PrimitiveDrawState.Both;\r\n });\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(true);\r\n\r\n // If there are no hidden edges, then we're done & can run the AO passes using the normal depthAndOrder texture.\r\n if (haveHiddenEdges) {\r\n // AO needs the pick data (orderAndDepth) for the hidden edges. We don't want it in with the other pick data though since they are not pickable, so we will use other textures.\r\n // If not multisampling we will re-use the ping-pong/transparency textures since we are done with ping-ponging at this point and transparency happens later.\r\n // If multisampling then we will use the accumulation texture for featureIDs and a special texture for depthAndOrder since the revealage texture is not the right type for multisampling.\r\n // First we will need to copy what's in the pick buffers so far into the hidden pick buffers.\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n fbo = (useMsBuffers ? expectDefined(this._fbos.pingPongMS) : expectDefined(this._fbos.pingPong));\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n const params = getDrawParams(this.target, expectDefined(this._geom.copyPickBuffers));\r\n this.target.techniques.draw(params);\r\n });\r\n if (useMsBuffers)\r\n fbo.blitMsBuffersToTextures(false, 1); // only want to blit the depth/order target\r\n // Now draw the hidden edges, using an fbo which places their depth/order into the hidden pick buffers.\r\n // Since we are not writing to the actual pick buffers we let this._readPickDataFromPingPong remain false.\r\n fbo = expectDefined(this._fbos.opaqueAndCompositeAllHidden);\r\n this._primitiveDrawState = PrimitiveDrawState.Pickable;\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n this._primitiveDrawState = PrimitiveDrawState.Both;\r\n if (useMsBuffers) {\r\n // Only want to blit the color and depth/order targets as the featureId target is not blit-able and will generate a GL error.\r\n fbo.blitMsBuffersToTextures(false, 0);\r\n fbo.blitMsBuffersToTextures(false, 2);\r\n }\r\n this._needHiddenEdges = false;\r\n }\r\n\r\n this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture with the hidden edges to be read for the 2nd AO blur pass.\r\n this.renderAmbientOcclusion();\r\n this._needHiddenEdges = false;\r\n }\r\n\r\n protected renderPointClouds(commands: RenderCommands, compositeFlags: CompositeFlags) {\r\n const is3d = FrustumUniformType.Perspective === this.target.uniforms.frustum.type;\r\n // separate individual point clouds and get their point cloud settings\r\n const pointClouds: Array<SinglePointCloudData> = [];\r\n let pcs: PointCloudDisplaySettings | undefined;\r\n const cmds = commands.getCommands(RenderPass.PointClouds);\r\n let curPC: SinglePointCloudData | undefined;\r\n let pushDepth = 0;\r\n for (const cmd of cmds) {\r\n if (\"pushBranch\" === cmd.opcode) { // should be first command\r\n ++pushDepth;\r\n if (pushDepth === 1) {\r\n pcs = cmd.branch.branch.realityModelDisplaySettings?.pointCloud;\r\n this.target.uniforms.realityModel.pointCloud.updateRange(cmd.branch.branch.realityModelRange,\r\n this.target, cmd.branch.localToWorldTransform, is3d);\r\n pointClouds.push(curPC = { pcs, cmds: [cmd] });\r\n } else {\r\n assert(undefined !== curPC);\r\n curPC.cmds.push(cmd);\r\n }\r\n } else {\r\n if (\"popBranch\" === cmd.opcode)\r\n --pushDepth;\r\n assert(undefined !== curPC);\r\n curPC.cmds.push(cmd);\r\n }\r\n }\r\n\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fbo = (needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor));\r\n const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;\r\n const system = System.instance;\r\n const fbStack = system.frameBufferStack;\r\n\r\n this._readPickDataFromPingPong = false;\r\n\r\n for (const pc of pointClouds) {\r\n pcs = pc.pcs;\r\n let edlOn = pcs?.edlMode !== \"off\" && is3d;\r\n if (edlOn) {\r\n if (undefined === this._textures.hilite)\r\n edlOn = false;\r\n else {\r\n // create fbo on fly if not present, or has changed (from MS)\r\n // ###TODO consider not drawing point clouds to MS buffers, at least if EDL, it isn't worth the overhead.\r\n // would have to blit depth before draw, use depth for draw, then run shader to copy depth back to MSAA\r\n // at end, wherever color buf changed (test alpha, else discard)\r\n // this would also simplify this code considerably\r\n let drawColBufs;\r\n if (undefined !== this._fbos.edlDrawCol)\r\n drawColBufs = this._fbos.edlDrawCol.getColorTargets(useMsBuffers, 0);\r\n if (undefined === this._fbos.edlDrawCol || this._textures.hilite !== drawColBufs?.tex || this._textures.hiliteMsBuff !== drawColBufs.msBuf) {\r\n this._fbos.edlDrawCol = dispose(this._fbos.edlDrawCol);\r\n const filters = [GL.MultiSampling.Filter.Linear];\r\n if (useMsBuffers)\r\n this._fbos.edlDrawCol = FrameBuffer.create([this._textures.hilite], this._depth,\r\n useMsBuffers && this._textures.hiliteMsBuff ? [this._textures.hiliteMsBuff] : undefined, filters, this._depthMS);\r\n else\r\n this._fbos.edlDrawCol = FrameBuffer.create([this._textures.hilite], this._depth);\r\n }\r\n if (undefined === this._fbos.edlDrawCol)\r\n edlOn = false;\r\n else { // can draw EDL\r\n // first draw pointcloud to borrowed hilite texture(MS) and regular depth(MS) buffers\r\n fbStack.execute(this._fbos.edlDrawCol, true, useMsBuffers, () => {\r\n system.context.clearColor(0, 0, 0, 0);\r\n system.context.clear(GL.BufferBit.Color);\r\n system.applyRenderState(this.getRenderState(RenderPass.PointClouds));\r\n this.target.techniques.execute(this.target, pc.cmds, RenderPass.PointClouds);\r\n });\r\n if (useMsBuffers)\r\n this._fbos.edlDrawCol.blitMsBuffersToTextures(true, 0); // need to read the non-MS depth and hilite buffers\r\n\r\n // next process buffers to generate EDL (depth buffer is passed during init)\r\n this.target.beginPerfMetricRecord(\"Calc EDL\"); // ### todo keep? (probably)\r\n const sts = this.eyeDomeLighting.draw({\r\n edlMode: pc.pcs?.edlMode === \"full\" ? EDLMode.Full : EDLMode.On,\r\n edlFilter: !!pcs?.edlFilter,\r\n useMsBuffers,\r\n inputTex: this._textures.hilite,\r\n curFbo: fbo,\r\n });\r\n this.target.endPerfMetricRecord();\r\n if (!sts) {\r\n edlOn = false;\r\n }\r\n }\r\n }\r\n }\r\n if (!edlOn) {\r\n // draw the regular way\r\n fbStack.execute(fbo, true, useMsBuffers, () => {\r\n system.applyRenderState(this.getRenderState(RenderPass.PointClouds));\r\n this.target.techniques.execute(this.target, pc.cmds, RenderPass.PointClouds);\r\n });\r\n }\r\n }\r\n }\r\n\r\n protected renderForVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const fbStack = System.instance.frameBufferStack;\r\n\r\n if (renderForReadPixels || needAO) {\r\n this._readPickDataFromPingPong = true;\r\n fbStack.execute(needComposite ? expectDefined(this._fbos.opaqueAndCompositeAll) : expectDefined(this._fbos.opaqueAll), true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n } else {\r\n this._readPickDataFromPingPong = false;\r\n fbStack.execute(needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor), true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n }\r\n }\r\n\r\n protected renderIndexedClassifierForReadPixels(cmds: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, needComposite: boolean) {\r\n this._readPickDataFromPingPong = true;\r\n const fbo = (renderForIntersectingVolumes ? (needComposite ? expectDefined(this._fbos.idsAndZComposite) : expectDefined(this._fbos.idsAndZ))\r\n : (needComposite ? expectDefined(this._fbos.idsAndAltZComposite) : expectDefined(this._fbos.idsAndAltZ)));\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(state);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n });\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected clearTranslucent() {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.clearTranslucent), true, false, () => {\r\n const params = getDrawParams(this.target, expectDefined(this._geom.clearTranslucent));\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n\r\n protected renderTranslucent(commands: RenderCommands) {\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.translucent), true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n }\r\n\r\n protected getBackgroundFbo(needComposite: boolean): FrameBuffer {\r\n return needComposite ? expectDefined(this._fbos.opaqueAndCompositeColor) : expectDefined(this._fbos.opaqueColor);\r\n }\r\n\r\n protected pingPong() {\r\n if (expectDefined(this._fbos.opaqueAll).isMultisampled && this.useMsBuffers) {\r\n // If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.\r\n this._fbos.opaqueAll?.blitMsBuffersToTextures(false, 1);\r\n this._fbos.opaqueAll?.blitMsBuffersToTextures(false, 2);\r\n } else {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.pingPong), true, this.useMsBuffers, () => {\r\n const params = getDrawParams(this.target, expectDefined(this._geom.copyPickBuffers));\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n }\r\n\r\n public get antialiasSamples(): number { return this._antialiasSamples; }\r\n\r\n protected get useMsBuffers(): boolean { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }\r\n\r\n protected enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n\r\n protected disableVolumeClassifierFbos(): void {\r\n this._fbos.disableVolumeClassifier();\r\n }\r\n\r\n /** This function generates a texture that contains ambient occlusion information to be applied later. */\r\n protected renderAmbientOcclusion() {\r\n const system = System.instance;\r\n\r\n // Render unblurred ambient occlusion based on depth buffer\r\n let fbo = expectDefined(this._fbos.occlusion);\r\n this.target.beginPerfMetricRecord(\"Compute AO\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.occlusion));\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the X-blurred ambient occlusion based on unblurred ambient occlusion\r\n fbo = expectDefined(this._fbos.occlusionBlur);\r\n this.target.beginPerfMetricRecord(\"Blur AO X\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.occlusionXBlur));\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)\r\n fbo = expectDefined(this._fbos.occlusion);\r\n this.target.beginPerfMetricRecord(\"Blur AO Y\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.occlusionYBlur));\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n }\r\n\r\n public constructor(target: Target) {\r\n super(target);\r\n this._fbos = new FrameBuffers();\r\n this._geom = new Geometry();\r\n\r\n this._opaqueRenderState.flags.depthTest = true;\r\n\r\n this._pointCloudRenderState.flags.depthTest = true;\r\n\r\n this._translucentRenderState.flags.depthMask = false;\r\n this._translucentRenderState.flags.blend = this._translucentRenderState.flags.depthTest = true;\r\n this._translucentRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n this._hiliteRenderState.flags.depthMask = false;\r\n this._hiliteRenderState.flags.blend = true;\r\n this._hiliteRenderState.blend.functionDestRgb = GL.BlendFactor.One;\r\n this._hiliteRenderState.blend.functionDestAlpha = GL.BlendFactor.One;\r\n\r\n this._noDepthMaskRenderState.flags.depthMask = false;\r\n\r\n // Background map supports transparency, even when depth is off, which is mostly useless but should blend with background color / skybox.\r\n this._backgroundMapRenderState.flags.depthMask = false;\r\n this._backgroundMapRenderState.flags.blend = true;\r\n this._backgroundMapRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n // Can't write depth without enabling depth test - so make depth test always pass\r\n this._layerRenderState.flags.depthTest = true;\r\n this._layerRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._layerRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._depth)\r\n stats.addTextureAttachment(this._depth.bytesUsed);\r\n if (undefined !== this._depthMS)\r\n stats.addTextureAttachment(this._depthMS.bytesUsed);\r\n this._textures.collectStatistics(stats);\r\n this._geom.collectStatistics(stats);\r\n }\r\n\r\n public preDraw(): boolean {\r\n const rect = this.target.viewRect;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const includeOcclusion = this.target.wantAmbientOcclusion;\r\n const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);\r\n let wantAntialiasSamples = this.target.antialiasSamples <= 1 ? 1 : this.target.antialiasSamples;\r\n if (wantAntialiasSamples > System.instance.maxAntialiasSamples)\r\n wantAntialiasSamples = System.instance.maxAntialiasSamples;\r\n\r\n const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);\r\n\r\n // If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.\r\n if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {\r\n this._width = width;\r\n this._height = height;\r\n this._antialiasSamples = wantAntialiasSamples;\r\n\r\n // init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.\r\n if (!this.init()) {\r\n assert(false, \"Failed to initialize scene compositor\");\r\n return false;\r\n }\r\n } else if (this._antialiasSamples !== wantAntialiasSamples) {\r\n // Turn on or off multisampling. Rather than just re-initializing, we can save the\r\n // non multisampled textures & FBOs and just try to add or delete the multisampled ones.\r\n this._antialiasSamples = wantAntialiasSamples;\r\n if (wantVolumeClassifier && this._haveVolumeClassifier) {\r\n // Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on\r\n // and is staying on, just disable volume classifiers and let them get re-enabled later.\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil[Symbol.dispose]();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n if (includeOcclusion && this._includeOcclusion) {\r\n // Multisampling and AO buffers are also somewhat co-dependent, so if AO is on\r\n // and is staying on, just disable AO and let it get re-enabled later.\r\n this._geom.disableOcclusion();\r\n this._fbos.disableOcclusion();\r\n this._textures.disableOcclusion();\r\n this._includeOcclusion = false;\r\n }\r\n if (this._antialiasSamples > 1) {\r\n if (!this.enableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n } else {\r\n if (!this.disableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // Allocate or free ambient occlusion-related resources if necessary\r\n if (includeOcclusion !== this._includeOcclusion) {\r\n this._includeOcclusion = includeOcclusion;\r\n if (includeOcclusion) {\r\n if (!this._textures.enableOcclusion(width, height, this._antialiasSamples)) {\r\n assert(false, \"Failed to initialize occlusion textures\");\r\n return false;\r\n }\r\n if (!this._fbos.enableOcclusion(this._textures, expectDefined(this._depth), this._depthMS)) {\r\n assert(false, \"Failed to initialize occlusion frame buffers\");\r\n return false;\r\n }\r\n this._geom.enableOcclusion(this._textures, expectDefined(this._depth));\r\n } else {\r\n this._geom.disableOcclusion();\r\n this._fbos.disableOcclusion();\r\n this._textures.disableOcclusion();\r\n }\r\n }\r\n\r\n // Allocate or free volume classifier-related resources if necessary.\r\n if (wantVolumeClassifier !== this._haveVolumeClassifier) {\r\n if (wantVolumeClassifier) {\r\n this._vcAltDepthStencil = System.instance.createDepthBuffer(width, height) as TextureHandle;\r\n if (undefined !== this._depthMS)\r\n this._vcAltDepthStencilMS = System.instance.createDepthBuffer(width, height, this._antialiasSamples) as TextureHandle;\r\n\r\n if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS))\r\n return false;\r\n\r\n if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples))\r\n return false;\r\n\r\n if (!this._geom.enableVolumeClassifier(this._textures, expectDefined(this._depth)))\r\n return false;\r\n\r\n this.enableVolumeClassifierFbos(this._textures, expectDefined(this._depth), this._vcAltDepthStencil, this._depthMS, this._vcAltDepthStencilMS);\r\n this._haveVolumeClassifier = true;\r\n } else {\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil[Symbol.dispose]();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public draw(commands: RenderCommands) {\r\n if (!this.preDraw())\r\n return;\r\n\r\n const compositeFlags = commands.compositeFlags;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n\r\n // Clear output targets\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n this.target.beginPerfMetricRecord(\"Clear Opaque\");\r\n this.clearOpaque(needComposite);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"backgroundTime\"); // includes skybox\r\n\r\n // Render the background\r\n this.target.beginPerfMetricRecord(\"Render Background\");\r\n this.renderBackground(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the sky box\r\n this.target.beginPerfMetricRecord(\"Render Skybox\");\r\n this.renderSkyBox(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the background map graphics\r\n this.target.beginPerfMetricRecord(\"Render Background Map\");\r\n this.renderBackgroundMap(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"backgroundTime\");\r\n\r\n // Enable clipping\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\");\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render volume classification first so that we only classify the reality data\r\n this.target.frameStatsCollector.beginTime(\"classifiersTime\");\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\");\r\n this.renderVolumeClassification(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"classifiersTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n\r\n // Render layers\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render opaque geometry\r\n this.target.frameStatsCollector.beginTime(\"onRenderOpaqueTime\");\r\n IModelFrameLifecycle.onRenderOpaque.raiseEvent({\r\n commands,\r\n needComposite,\r\n compositeFlags,\r\n fbo: this.getBackgroundFbo(needComposite),\r\n frameBufferStack: System.instance.frameBufferStack,\r\n });\r\n this.target.frameStatsCollector.endTime(\"onRenderOpaqueTime\");\r\n\r\n // Render point cloud geometry with possible EDL\r\n this.target.beginPerfMetricRecord(\"Render PointClouds\");\r\n this.renderPointClouds(commands, compositeFlags);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render opaque geometry\r\n this.target.beginPerfMetricRecord(\"Render Opaque\");\r\n this.renderOpaque(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"translucentTime\");\r\n\r\n // Render translucent layers\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n if (needComposite) {\r\n expectDefined(this._geom.composite).update(compositeFlags);\r\n this.target.beginPerfMetricRecord(\"Render Translucent\");\r\n this.clearTranslucent();\r\n this.renderTranslucent(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n this.target.beginPerfMetricRecord(\"Render Hilite\");\r\n this.renderHilite(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.beginPerfMetricRecord(\"Composite\");\r\n this.composite();\r\n this.target.endPerfMetricRecord();\r\n } else\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n // Render overlay Layers\r\n this.target.frameStatsCollector.beginTime(\"overlaysTime\");\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\");\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"overlaysTime\");\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n public get fullHeight(): number { return this.target.viewRect.height; }\r\n\r\n public drawForReadPixels(commands: RenderCommands, sceneOverlays: GraphicList, worldOverlayDecorations: GraphicList | undefined, viewOverlayDecorations: GraphicList | undefined): void {\r\n this.target.beginPerfMetricRecord(\"Render Background\", true);\r\n if (!this.preDraw()) {\r\n this.target.endPerfMetricRecord(true); // End Render Background record if returning\r\n assert(false);\r\n return;\r\n }\r\n\r\n this.clearOpaque(false);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // On entry the RenderCommands has been initialized for all scene graphics and pickable decorations with the exception of world overlays.\r\n // It's possible we have no pickable scene graphics or decorations, but do have pickable world overlays.\r\n const haveRenderCommands = !commands.isEmpty;\r\n if (haveRenderCommands) {\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\", true);\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\", true);\r\n this.renderVolumeClassification(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // RenderPass.BackgroundMap is used only when depth is turned off for the map.\r\n // Ensure it draws before any opaque geometry (including layers), without depth.\r\n this.target.beginPerfMetricRecord(\"Render background map\", true);\r\n this.target.drawingBackgroundForReadPixels = true;\r\n this.renderLayers(commands, false, RenderPass.BackgroundMap);\r\n this.target.drawingBackgroundForReadPixels = false;\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // PointClouds are rendered in Opaque pass for readPixels\r\n this.target.beginPerfMetricRecord(\"Render Opaque\", true);\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n if (!sceneOverlays.length && !worldOverlayDecorations?.length && !viewOverlayDecorations?.length)\r\n return;\r\n\r\n // Now populate the opaque passes with any pickable world overlays\r\n this.target.beginPerfMetricRecord(\"Overlay Draws\", true);\r\n commands.initForPickOverlays(sceneOverlays, worldOverlayDecorations, viewOverlayDecorations);\r\n if (commands.isEmpty) {\r\n this.target.endPerfMetricRecord(true); // End Overlay Draws record if returning\r\n return;\r\n }\r\n\r\n // Clear the depth buffer so that overlay decorations win the depth test.\r\n // (If *only* overlays exist, then clearOpaque() above already took care of this).\r\n if (haveRenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(expectDefined(this._fbos.opaqueColor), true, this.useMsBuffers, () => {\r\n system.applyRenderState(RenderState.defaults);\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n // Render overlays as opaque into the pick buffers. Make sure we use the decoration state (to ignore symbology overrides, esp. the non-locatable flag).\r\n const decState = this.target.decorationsState;\r\n const vf = decState.viewFlags;\r\n if (vf.transparency)\r\n decState.viewFlags = vf.copy({ transparency: false });\r\n\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord();\r\n decState.viewFlags = vf;\r\n }\r\n\r\n public readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined {\r\n return PixelBuffer.create(rect, selector, this);\r\n }\r\n\r\n public readDepthAndOrder(rect: ViewRect): Uint8Array | undefined {\r\n return this.readFrameBuffer(rect, this._fbos.depthAndOrder);\r\n }\r\n\r\n public readFeatureIds(rect: ViewRect): Uint8Array | undefined {\r\n const tex = this._textures.featureId;\r\n if (undefined === tex)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([tex]);\r\n const result = this.readFrameBuffer(rect, fbo);\r\n\r\n dispose(fbo);\r\n\r\n return result;\r\n }\r\n\r\n public updateSolarShadows(context: SceneContext | undefined): void {\r\n this.solarShadowMap.update(context);\r\n }\r\n\r\n public get screenSpaceEffectFbo(): FrameBuffer {\r\n assert(undefined !== this._fbos.hilite);\r\n return this._fbos.hilite;\r\n }\r\n\r\n private readFrameBuffer(rect: ViewRect, fbo?: FrameBuffer): Uint8Array | undefined {\r\n if (undefined === fbo || !Debug.isValidFrameBuffer)\r\n return undefined;\r\n\r\n // NB: ViewRect origin at top-left; GL origin at bottom-left\r\n const bottom = this.fullHeight - rect.bottom;\r\n const gl = System.instance.context;\r\n const bytes = new Uint8Array(rect.width * rect.height * 4);\r\n let result: Uint8Array | undefined = bytes;\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n try {\r\n gl.readPixels(rect.left, bottom, rect.width, rect.height, gl.RGBA, gl.UNSIGNED_BYTE, bytes);\r\n } catch {\r\n result = undefined;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._depth\r\n && undefined === this._vcAltDepthStencil\r\n && !this._includeOcclusion\r\n && this._textures.isDisposed\r\n && this._fbos.isDisposed\r\n && this._geom.isDisposed\r\n && !this._haveVolumeClassifier\r\n && this.solarShadowMap.isDisposed\r\n && this.eyeDomeLighting.isDisposed;\r\n }\r\n\r\n public [Symbol.dispose]() {\r\n this.reset();\r\n dispose(this.solarShadowMap);\r\n dispose(this.eyeDomeLighting);\r\n }\r\n\r\n // Resets anything that depends on the dimensions of the render target.\r\n // Does *not* dispose the solar shadow map.\r\n private reset() {\r\n this._depth = dispose(this._depth);\r\n this._depthMS = dispose(this._depthMS);\r\n this._vcAltDepthStencil = dispose(this._vcAltDepthStencil);\r\n this._includeOcclusion = false;\r\n dispose(this._textures);\r\n dispose(this._fbos);\r\n dispose(this._geom);\r\n this._haveVolumeClassifier = false;\r\n this.eyeDomeLighting.reset();\r\n }\r\n\r\n private init(): boolean {\r\n this.reset();\r\n this._depth = System.instance.createDepthBuffer(this._width, this._height, 1);\r\n if (this._antialiasSamples > 1)\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n else\r\n this._depthMS = undefined;\r\n if (this._depth !== undefined) {\r\n return this._textures.init(this._width, this._height, this._antialiasSamples)\r\n && this._fbos.init(this._textures, this._depth, this._depthMS)\r\n && this._geom.init(this._textures)\r\n && this.eyeDomeLighting.init(this._width, this._height, this._depth);\r\n }\r\n return false;\r\n }\r\n\r\n protected enableMultiSampling(): boolean {\r\n // Assume that non-multisampled stuff is already allocated. Just need to add multisampled textures, buffers, & geometry.\r\n assert(undefined === this._depthMS && undefined !== this._depth);\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n if (undefined === this._depthMS)\r\n return false;\r\n\r\n if (!this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples))\r\n return false;\r\n\r\n assert(undefined !== this._depth && undefined !== this._depthMS);\r\n return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);\r\n }\r\n\r\n protected disableMultiSampling(): boolean {\r\n assert(undefined !== this._depth);\r\n if (!this._fbos.disableMultiSampling(this._textures, this._depth))\r\n return false;\r\n\r\n // Want to disable multisampling without deleting & reallocating other stuff.\r\n this._depthMS = dispose(this._depthMS);\r\n assert(undefined !== this._depth);\r\n return this._textures.disableMultiSampling();\r\n }\r\n\r\n private renderBackgroundMap(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.BackgroundMap);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.BackgroundMap));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.BackgroundMap);\r\n });\r\n }\r\n\r\n private renderSkyBox(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.SkyBox);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.SkyBox));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.SkyBox);\r\n });\r\n }\r\n\r\n private renderBackground(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.Background);\r\n if (0 === cmds.length)\r\n return;\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.Background));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Background);\r\n });\r\n }\r\n\r\n private createVolumeClassifierStates() {\r\n // If we have already created a branch state for use in rendering the volume classifiers we must at least swap out its symbology overrides for the current one.\r\n if (undefined !== this._vcBranchState) {\r\n this._vcBranchState.symbologyOverrides = this.target.uniforms.branch.top.symbologyOverrides;\r\n return;\r\n }\r\n\r\n // Create a BranchState and several RenderStates to use when drawing the classifier volumes.\r\n // The BranchState needs to be created every time in case the symbology overrides changes.\r\n // It is based off of the current state, but turns off unnecessary and unwanted options, lighting being the most important.\r\n const top = this.target.uniforms.branch.top;\r\n const viewFlags = top.viewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n lighting: false,\r\n forceSurfaceDiscard: false,\r\n hiddenEdges: false,\r\n visibleEdges: false,\r\n materials: false,\r\n textures: false,\r\n transparency: false,\r\n });\r\n\r\n this._vcBranchState = new BranchState({\r\n symbologyOverrides: top.symbologyOverrides,\r\n viewFlags,\r\n transform: Transform.createIdentity(),\r\n clipVolume: top.clipVolume,\r\n planarClassifier: top.planarClassifier,\r\n iModel: top.iModel,\r\n is3d: top.is3d,\r\n edgeSettings: top.edgeSettings,\r\n contourLine: top.contourLine,\r\n });\r\n\r\n this._vcSetStencilRenderState = new RenderState();\r\n this._vcCopyZRenderState = new RenderState();\r\n this._vcColorRenderState = new RenderState();\r\n this._vcBlendRenderState = new RenderState();\r\n this._vcPickDataRenderState = new RenderState();\r\n\r\n this._vcCopyZRenderState.flags.depthTest = true;\r\n this._vcCopyZRenderState.flags.depthMask = true;\r\n this._vcCopyZRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._vcCopyZRenderState.flags.colorWrite = true;\r\n this._vcCopyZRenderState.flags.stencilTest = true;\r\n this._vcCopyZRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero;\r\n\r\n this._vcSetStencilRenderState.flags.depthTest = true;\r\n this._vcSetStencilRenderState.flags.depthMask = false;\r\n this._vcSetStencilRenderState.flags.colorWrite = false;\r\n this._vcSetStencilRenderState.flags.stencilTest = true;\r\n this._vcSetStencilRenderState.depthFunc = GL.DepthFunc.LessOrEqual;\r\n this._vcSetStencilRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.frontOperation.zFail = GL.StencilOperation.IncrWrap;\r\n this._vcSetStencilRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.backOperation.zFail = GL.StencilOperation.DecrWrap;\r\n\r\n this._vcPickDataRenderState.flags.depthTest = false;\r\n this._vcPickDataRenderState.flags.depthMask = false;\r\n this._vcPickDataRenderState.flags.colorWrite = true;\r\n this._vcPickDataRenderState.flags.stencilTest = true;\r\n this._vcPickDataRenderState.flags.cull = true;\r\n this._vcPickDataRenderState.cullFace = GL.CullFace.Front;\r\n this._vcPickDataRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcPickDataRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n // Let all of the operations remain at Keep so that the stencil will remain in tact for the subsequent blend draw to the color buffer.\r\n\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.colorWrite = true;\r\n this._vcColorRenderState.flags.stencilTest = true;\r\n this._vcColorRenderState.cullFace = GL.CullFace.Front;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.flags.blend = true; // blend func and color will be set before using\r\n\r\n this._vcBlendRenderState.flags.depthTest = false;\r\n this._vcBlendRenderState.flags.depthMask = false;\r\n this._vcBlendRenderState.flags.colorWrite = true;\r\n this._vcBlendRenderState.flags.stencilTest = false;\r\n this._vcBlendRenderState.flags.blend = true;\r\n this._vcBlendRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n\r\n if (this._debugStencil > 0) {\r\n this._vcDebugRenderState = new RenderState();\r\n this._vcDebugRenderState.flags.depthTest = true;\r\n this._vcDebugRenderState.flags.blend = true;\r\n this._vcDebugRenderState.blend.setBlendFunc(GL.BlendFactor.OneMinusConstColor, GL.BlendFactor.ConstColor);\r\n this._vcDebugRenderState.blend.color = [0.67, 0.67, 0.67, 1.0];\r\n }\r\n }\r\n\r\n private setAllStencilOps(state: RenderState, op: GL.StencilOperation): void {\r\n state.stencil.frontOperation.fail = op;\r\n state.stencil.frontOperation.zFail = op;\r\n state.stencil.frontOperation.zPass = op;\r\n state.stencil.backOperation.fail = op;\r\n state.stencil.backOperation.zFail = op;\r\n state.stencil.backOperation.zPass = op;\r\n }\r\n\r\n private renderIndexedVolumeClassifier(cmdsByIndex: DrawCommands, needComposite: boolean) {\r\n // Set the stencil for the given classifier stencil volume.\r\n System.instance.frameBufferStack.execute(expectDefined(this._fbos.stencilSet), false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the pick data.\r\n this.renderIndexedClassifierForReadPixels(cmdsByIndex, expectDefined(this._vcPickDataRenderState), true, needComposite);\r\n }\r\n\r\n private renderVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n // Sometimes we need to render the classifier stencil volumes one at a time, if so draw them from the cmdsByIndex list\r\n const cmds = commands.getCommands(RenderPass.Classification);\r\n const cmdsByIndex = commands.getCommands(RenderPass.ClassificationByIndex);\r\n let numCmdsPerClassifier = 0;\r\n for (const cmd of cmdsByIndex) { // Figure out how many commands there are per index/primitive\r\n numCmdsPerClassifier++;\r\n if (\"drawPrimitive\" === cmd.opcode) {\r\n numCmdsPerClassifier += numCmdsPerClassifier - 1;\r\n break;\r\n }\r\n }\r\n const cmdsForVC = commands.getCommands(RenderPass.VolumeClassifiedRealityData);\r\n if (!this.target.activeVolumeClassifierProps || (renderForReadPixels && 0 === cmds.length) || 0 === cmdsForVC.length)\r\n return;\r\n\r\n let outsideFlags = this.target.activeVolumeClassifierProps.flags.outside;\r\n let insideFlags = this.target.activeVolumeClassifierProps.flags.inside;\r\n\r\n if (this.target.wantThematicDisplay) {\r\n if (outsideFlags !== SpatialClassifierOutsideDisplay.Off)\r\n outsideFlags = SpatialClassifierOutsideDisplay.On;\r\n if (insideFlags !== SpatialClassifierInsideDisplay.Off)\r\n insideFlags = SpatialClassifierInsideDisplay.On;\r\n }\r\n\r\n // Render the geometry which we are going to classify.\r\n this.renderForVolumeClassification(commands, compositeFlags, renderForReadPixels);\r\n\r\n this.createVolumeClassifierStates();\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fboColorAndZ = this.getBackgroundFbo(needComposite);\r\n\r\n if (this._debugStencil > 0) {\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n if (1 === this._debugStencil) {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.OpaqueGeneral));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n } else {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcDebugRenderState));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if (undefined === this._fbos.altZOnly || undefined === this._fbos.stencilSet)\r\n return;\r\n\r\n if (renderForReadPixels && this.target.vcSupportIntersectingVolumes) {\r\n // Clear the stencil.\r\n fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n });\r\n\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier)\r\n this.renderIndexedVolumeClassifier(cmdsByIndex.slice(i, i + numCmdsPerClassifier), needComposite);\r\n\r\n return;\r\n }\r\n\r\n const needOutsideDraw = SpatialClassifierOutsideDisplay.On !== outsideFlags;\r\n const needInsideDraw = SpatialClassifierInsideDisplay.On !== insideFlags;\r\n const doColorByElement = SpatialClassifierInsideDisplay.ElementColor === insideFlags || renderForReadPixels;\r\n const doColorByElementForIntersectingVolumes = this.target.vcSupportIntersectingVolumes;\r\n const needAltZ = (doColorByElement && !doColorByElementForIntersectingVolumes) || needOutsideDraw;\r\n let zOnlyFbo = this._fbos.stencilSet;\r\n let volClassBlendFbo = this._fbos.volClassCreateBlend;\r\n let volClassBlendReadZTexture = expectDefined(this._vcAltDepthStencil?.getHandle());\r\n let volClassBlendReadZTextureFbo = this._fbos.altZOnly;\r\n if (!needAltZ) {\r\n // Initialize the blend texture and the stencil.\r\n assert(undefined !== volClassBlendFbo);\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n System.instance.context.clearColor(0.0, 0.0, 0.0, 0.0);\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Color | GL.BufferBit.Stencil);\r\n });\r\n } else {\r\n // If we are doing color-by-element for the inside do not care about intersecting volumes or we need to color the outside\r\n // then we need to copy the Z buffer and set up a different zbuffer/stencil to render in.\r\n zOnlyFbo = this._fbos.altZOnly;\r\n volClassBlendFbo = this._fbos.volClassCreateBlendAltZ;\r\n assert(undefined !== volClassBlendFbo);\r\n volClassBlendReadZTexture = expectDefined(this._depth?.getHandle());\r\n volClassBlendReadZTextureFbo = this._fbos.stencilSet;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n // Copy the current Z into the Alt-Z. At the same time go ahead and clear the stencil and the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n System.instance.applyRenderState(expectDefined(this._vcCopyZRenderState));\r\n\r\n this.target.techniques.draw(getDrawParams(this.target, expectDefined(this._geom.volClassCopyZ))); // This method uses the EXT_frag_depth extension\r\n\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n this.target.popBranch();\r\n });\r\n }\r\n\r\n if (renderForReadPixels) {\r\n // Set the stencil for all of the classifier volumes.\r\n System.instance.frameBufferStack.execute(this._fbos.altZOnly, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n // After we create the stencil we need to clear the Z for the next step (so also must turn on z writing temporarily).\r\n expectDefined(this._vcSetStencilRenderState).flags.depthMask = true;\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n expectDefined(this._vcSetStencilRenderState).flags.depthMask = false;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n if (undefined === this._vcColorRenderState || undefined === this._vcBranchState) {\r\n throw new Error(\"this._vcColorRenderState or this._vcBranchState is undefined\");\r\n }\r\n this.target.pushState(this._vcBranchState);\r\n this._vcColorRenderState.flags.depthTest = true;\r\n this._vcColorRenderState.flags.depthMask = true;\r\n this._vcColorRenderState.flags.cull = true;\r\n this._vcColorRenderState.flags.blend = false;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ?.texture;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n this.renderIndexedClassifierForReadPixels(cmds, this._vcColorRenderState, false, needComposite);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.cull = false;\r\n this._vcColorRenderState.flags.blend = true;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n return;\r\n }\r\n\r\n if ((needOutsideDraw && cmds.length > 0) || (needInsideDraw && !(doColorByElement && doColorByElementForIntersectingVolumes))) {\r\n // Set the stencil using all of the volume classifiers. This will be used to do the outside and/or the inside if they need to be done.\r\n // If we are not modifying the outside and the inside is using color-by-element for intersecting volumes, then the stencil will get set later.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n }\r\n if (needOutsideDraw) {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n if (undefined === this._geom.volClassSetBlend || undefined === this._vcColorRenderState) {\r\n throw new Error(\"this._geom.volClassSetBlend or this._vcColorRenderState is undefined\");\r\n }\r\n this._geom.volClassSetBlend.boundaryType = BoundaryType.Outside;\r\n this._geom.volClassSetBlend.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.flags.blend = false;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.Equal; // temp swap the functions so we get what is not set in the stencil\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.Equal;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Keep); // don't clear the stencil since we'll use it again\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState.flags.blend = true;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Zero);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined); // unbind the depth buffer that we used as a texture as we'll need it as an output later\r\n });\r\n }\r\n if (needInsideDraw) {\r\n if (!doColorByElement) {\r\n // In this case our stencil is already set and it is all getting colored the same, so we can just draw with a viewport quad to color it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n if (undefined === this._geom.volClassSetBlend || undefined === this._vcColorRenderState) {\r\n throw new Error(\"this._geom.volClassSetBlend or this._vcColorRenderState is undefined\");\r\n }\r\n this._geom.volClassSetBlend.boundaryType = BoundaryType.Inside;\r\n this._geom.volClassSetBlend.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n } else if (doColorByElementForIntersectingVolumes) {\r\n // If we have intersecting classifier volumes, then we must stencil them individually to get their colors in the blend texture.\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier) {\r\n const nxtCmds = cmdsByIndex.slice(i, i + numCmdsPerClassifier);\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil. Just render the volume normally (us opaque pass), but use blending to modify the source alpha that gets written to the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n if (undefined === this._vcColorRenderState || undefined === this._vcBranchState) {\r\n throw new Error(\"this._vcColorRenderState or this._vcBranchState is undefined\");\r\n }\r\n this.target.pushState(this._vcBranchState);\r\n this._vcColorRenderState.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState.flags.cull = true;\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n this.target.activeVolumeClassifierTexture = undefined; // make sure this texture is undefined so we do not use the planar classification shader\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.OpaqueGeneral);\r\n this._vcColorRenderState.flags.cull = false;\r\n this.target.popBranch();\r\n });\r\n }\r\n } else {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n if (undefined === this._vcColorRenderState || undefined === this._vcBranchState) {\r\n throw new Error(\"this._vcColorRenderState or this._vcBranchState is undefined\");\r\n }\r\n // For coloring the inside by element color we will draw the inside using the the classifiers themselves.\r\n // To do this we need to first clear our Alt-Z. The shader will then test and write Z and will discard\r\n // anything that is in front of the reality model by reading the Z texture from the standard Z buffer (which has the reality mesh Z's in it).\r\n // What we end up with is the closest volume behind the terrain which works if the classifier volumes do not intersect.\r\n // Since we need the blend texture to have alpha in it, we will use blending just to modify the alpha that gets written.\r\n this.target.pushState(this._vcBranchState);\r\n this._vcColorRenderState.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState.flags.depthTest = true;\r\n this._vcColorRenderState.flags.depthMask = true;\r\n this._vcColorRenderState.flags.cull = true;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ?.texture;\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.cull = false;\r\n this.setAllStencilOps(this._vcColorRenderState, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n });\r\n }\r\n }\r\n\r\n // Handle the selected classifier volumes. Note though that if color-by-element is being used, then the selected volumes are already hilited\r\n // and this stage can be skipped. In order for this to work the list of commands needs to get reduced to only the ones which draw hilited volumes.\r\n // We cannot use the hillite shader to draw them since it doesn't handle logZ properly (it doesn't need to since it is only used elsewhere when Z write is turned off)\r\n // and we don't really want another whole set of hilite shaders just for this.\r\n const cmdsSelected = extractHilitedVolumeClassifierCommands(this.target.hilites, commands.getCommands(RenderPass.HiliteClassification));\r\n commands.replaceCommands(RenderPass.HiliteClassification, cmdsSelected); // replace the hilite command list for use in hilite pass as well.\r\n // if (cmdsSelected.length > 0 && insideFlags !== this.target.activeVolumeClassifierProps!.flags.selected) {\r\n if (!doColorByElement && cmdsSelected.length > 0 && insideFlags !== SpatialClassifierInsideDisplay.Hilite) { // assume selected ones are always hilited\r\n // Set the stencil using just the hilited volume classifiers.\r\n fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n if (needAltZ) {\r\n // If we are using the alternate Z then the stencil that goes with the original Z has not been cleared yet, so clear it here.\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n }\r\n\r\n this.target.techniques.execute(this.target, cmdsSelected, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._fbos.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n if (undefined === this._fbos.volClassCreateBlend) {\r\n throw new Error(\"this._fbos.volClassCreateBlend is undefined\");\r\n }\r\n fbStack.execute(this._fbos.volClassCreateBlend, false, this.useMsBuffers, () => {\r\n if (undefined === this._geom.volClassSetBlend || undefined === this._vcColorRenderState) {\r\n throw new Error(\"this._geom.volClassSetBlend or this._vcColorRenderState is undefined\");\r\n }\r\n this._geom.volClassSetBlend.boundaryType = BoundaryType.Selected;\r\n this._geom.volClassSetBlend.texture = expectDefined(this._vcAltDepthStencil?.getHandle()); // need to attach the alt depth instead of the real one since it is bound to the frame buffer\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n }\r\n\r\n // Now modify the color of the reality mesh by using the blend texture to blend with it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers) {\r\n volClassBlendFbo.blitMsBuffersToTextures(false); // make sure the volClassBlend texture that we are about to read has been blitted\r\n }\r\n\r\n fbStack.execute(fboColorAndZ, false, this.useMsBuffers, () => {\r\n if (undefined === this._vcBlendRenderState || undefined === this._geom.volClassBlend) {\r\n throw new Error(\"this._vcBlendRenderState or this._geom.volClassBlend is undefined\");\r\n }\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcBlendRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcBlendRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassBlend);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n\r\n // Process the flashed classifier if there is one.\r\n // Like the selected volumes, we do not need to do this step if we used by-element-color since the flashing is included in the element color.\r\n const flashedClassifierCmds = extractFlashedVolumeClassifierCommands(this.target.flashedId, cmdsByIndex, numCmdsPerClassifier);\r\n if (undefined !== flashedClassifierCmds && !doColorByElement) {\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n System.instance.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, RenderPass.OpaqueGeneral);\r\n this.target.popBranch();\r\n });\r\n\r\n // Process the stencil to flash the contents.\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n if (undefined === this._vcColorRenderState || undefined === this._geom.volClassColorStencil) {\r\n throw new Error(\"this._vcColorRenderState or this._geom.volClassColorStencil is undefined\");\r\n }\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState.blend.color = [1.0, 1.0, 1.0, this.target.flashIntensity * 0.2];\r\n this._vcColorRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcColorRenderState);\r\n const params = getDrawParams(this.target, this._geom.volClassColorStencil);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n });\r\n }\r\n }\r\n\r\n private renderHilite(commands: RenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(expectDefined(this._fbos.hilite), true, false, () => {\r\n // Clear the hilite buffer.\r\n system.context.clearColor(0, 0, 0, 0);\r\n system.context.clear(GL.BufferBit.Color);\r\n // Draw the normal hilite geometry.\r\n this.drawPass(commands, RenderPass.Hilite);\r\n });\r\n\r\n // Process planar classifiers\r\n const planarClassifierCmds = commands.getCommands(RenderPass.HilitePlanarClassification);\r\n if (0 !== planarClassifierCmds.length) {\r\n system.frameBufferStack.execute(expectDefined(this._fbos.hiliteUsingStencil), true, false, () => {\r\n system.applyRenderState(this._opaqueRenderState);\r\n this.target.techniques.execute(this.target, planarClassifierCmds, RenderPass.HilitePlanarClassification);\r\n });\r\n }\r\n\r\n // Process the volume classifiers.\r\n const vcHiliteCmds = commands.getCommands(RenderPass.HiliteClassification);\r\n if (0 !== vcHiliteCmds.length && undefined !== this._vcBranchState) {\r\n // Set the stencil for the given classifier stencil volume.\r\n system.frameBufferStack.execute(expectDefined(this._fbos.stencilSet), false, false, () => {\r\n this.target.pushState(expectDefined(this._vcBranchState));\r\n system.applyRenderState(expectDefined(this._vcSetStencilRenderState));\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the hilite data.\r\n system.frameBufferStack.execute(expectDefined(this._fbos.hiliteUsingStencil), true, false, () => {\r\n system.applyRenderState(expectDefined(this._vcPickDataRenderState));\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n });\r\n }\r\n }\r\n\r\n private composite() {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, expectDefined(this._geom.composite));\r\n this.target.techniques.draw(params);\r\n }\r\n\r\n protected getRenderState(pass: RenderPass): RenderState {\r\n switch (pass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n // NB: During pick, we don't want blending - it will mess up our pick buffer data and we don't care about the color data.\r\n // During normal draw, we don't use the pick buffers for anything, and we want color blending.\r\n // (We get away with this because surfaces always draw before their edges, and we're not depth-testing, so edges always draw atop surfaces without pick buffer testing).\r\n this._layerRenderState.flags.blend = !this.target.isReadPixelsInProgress;\r\n\r\n // Transparent non-overlay Layers are drawn between opaque and translucent passes. Test depth, don't write it, so that they blend with opaque.\r\n this._layerRenderState.flags.depthMask = RenderPass.TranslucentLayers !== pass;\r\n this._layerRenderState.depthFunc = (RenderPass.TranslucentLayers === pass) ? GL.DepthFunc.Default : GL.DepthFunc.Always;\r\n return this._layerRenderState;\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.HilitePlanarClassification:\r\n return this._opaqueRenderState;\r\n case RenderPass.Translucent:\r\n return this._translucentRenderState;\r\n case RenderPass.Hilite:\r\n return this._hiliteRenderState;\r\n case RenderPass.BackgroundMap:\r\n return this._backgroundMapRenderState;\r\n case RenderPass.PointClouds:\r\n return this._pointCloudRenderState;\r\n default:\r\n return this._noDepthMaskRenderState;\r\n }\r\n }\r\n\r\n protected drawPass(commands: RenderCommands, pass: RenderPass, pingPong: boolean = false, cmdPass: RenderPass = RenderPass.None) {\r\n const cmds = commands.getCommands(RenderPass.None !== cmdPass ? cmdPass : pass);\r\n if (0 === cmds.length) {\r\n return;\r\n } else if (pingPong) {\r\n this.pingPong();\r\n }\r\n\r\n System.instance.applyRenderState(this.getRenderState(pass));\r\n this.target.techniques.execute(this.target, cmds, pass);\r\n }\r\n}\r\n\r\ninterface SinglePointCloudData {\r\n pcs?: PointCloudDisplaySettings;\r\n cmds: DrawCommands;\r\n}\r\n"]}