@itwin/core-frontend 4.10.0-dev.18 → 4.10.0-dev.20

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 (86) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/common/WorkerProxy.d.ts +8 -4
  3. package/lib/cjs/common/WorkerProxy.d.ts.map +1 -1
  4. package/lib/cjs/common/WorkerProxy.js.map +1 -1
  5. package/lib/cjs/common/internal/render/OvrFlags.d.ts +4 -2
  6. package/lib/cjs/common/internal/render/OvrFlags.d.ts.map +1 -1
  7. package/lib/cjs/common/internal/render/OvrFlags.js.map +1 -1
  8. package/lib/cjs/render/GraphicBranch.d.ts +4 -0
  9. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  10. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  11. package/lib/cjs/render/RealityMeshGraphicParams.d.ts +1 -0
  12. package/lib/cjs/render/RealityMeshGraphicParams.d.ts.map +1 -1
  13. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
  14. package/lib/cjs/render/RenderSystem.d.ts +1 -1
  15. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  16. package/lib/cjs/render/RenderSystem.js +2 -2
  17. package/lib/cjs/render/RenderSystem.js.map +1 -1
  18. package/lib/cjs/render/webgl/BranchState.d.ts +5 -0
  19. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/BranchState.js +2 -0
  21. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  22. package/lib/cjs/render/webgl/BranchUniforms.d.ts +1 -0
  23. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/BranchUniforms.js +13 -0
  25. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  26. package/lib/cjs/render/webgl/EdgeSettings.js +1 -1
  27. package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
  28. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +1 -0
  29. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  30. package/lib/cjs/render/webgl/FeatureOverrides.js +45 -26
  31. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  32. package/lib/cjs/render/webgl/Graphic.d.ts +1 -0
  33. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/Graphic.js +1 -0
  35. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  36. package/lib/cjs/render/webgl/RealityMesh.js +1 -1
  37. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  38. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  39. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +17 -11
  40. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  41. package/lib/cjs/tile/map/MapTile.js +1 -1
  42. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  43. package/lib/esm/common/WorkerProxy.d.ts +8 -4
  44. package/lib/esm/common/WorkerProxy.d.ts.map +1 -1
  45. package/lib/esm/common/WorkerProxy.js.map +1 -1
  46. package/lib/esm/common/internal/render/OvrFlags.d.ts +4 -2
  47. package/lib/esm/common/internal/render/OvrFlags.d.ts.map +1 -1
  48. package/lib/esm/common/internal/render/OvrFlags.js.map +1 -1
  49. package/lib/esm/render/GraphicBranch.d.ts +4 -0
  50. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  51. package/lib/esm/render/GraphicBranch.js.map +1 -1
  52. package/lib/esm/render/RealityMeshGraphicParams.d.ts +1 -0
  53. package/lib/esm/render/RealityMeshGraphicParams.d.ts.map +1 -1
  54. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
  55. package/lib/esm/render/RenderSystem.d.ts +1 -1
  56. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  57. package/lib/esm/render/RenderSystem.js +2 -2
  58. package/lib/esm/render/RenderSystem.js.map +1 -1
  59. package/lib/esm/render/webgl/BranchState.d.ts +5 -0
  60. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  61. package/lib/esm/render/webgl/BranchState.js +2 -0
  62. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  63. package/lib/esm/render/webgl/BranchUniforms.d.ts +1 -0
  64. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  65. package/lib/esm/render/webgl/BranchUniforms.js +13 -0
  66. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  67. package/lib/esm/render/webgl/EdgeSettings.js +1 -1
  68. package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
  69. package/lib/esm/render/webgl/FeatureOverrides.d.ts +1 -0
  70. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  71. package/lib/esm/render/webgl/FeatureOverrides.js +45 -26
  72. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  73. package/lib/esm/render/webgl/Graphic.d.ts +1 -0
  74. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  75. package/lib/esm/render/webgl/Graphic.js +1 -0
  76. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  77. package/lib/esm/render/webgl/RealityMesh.js +1 -1
  78. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  79. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  80. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +17 -11
  81. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  82. package/lib/esm/tile/map/MapTile.js +1 -1
  83. package/lib/esm/tile/map/MapTile.js.map +1 -1
  84. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  85. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  86. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Pass, RenderOrder, TextureUnit } from \"../RenderFlags\";\nimport {\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariablePrecision, VariableType, VertexShaderBuilder,\n VertexShaderComponent,\n} from \"../ShaderBuilder\";\nimport { FeatureMode, TechniqueFlags } from \"../TechniqueFlags\";\nimport { addExtractNthBit, addEyeSpace, addUInt32s } from \"./Common\";\nimport { decodeDepthRgb, decodeUint24 } from \"./Decode\";\nimport { addWindowToTexCoords, assignFragColor, computeLinearDepth } from \"./Fragment\";\nimport { addLookupTable } from \"./LookupTable\";\nimport { addRenderPass } from \"./RenderPass\";\nimport { addAlpha, addLineWeight, replaceLineCode, replaceLineWeight } from \"./Vertex\";\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** @internal */\nexport const enum FeatureSymbologyOptions {\n None = 0,\n Weight = 1 << 0,\n LineCode = 1 << 1,\n HasOverrides = 1 << 2,\n Color = 1 << 3,\n Alpha = 1 << 4,\n\n Surface = HasOverrides | Color | Alpha,\n Point = HasOverrides | Color | Weight | Alpha,\n Linear = HasOverrides | Color | Weight | LineCode | Alpha,\n}\n\n/** @internal */\nexport function addOvrFlagConstants(builder: ShaderBuilder): void {\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\n builder.addBitFlagConstant(\"kOvrBit_Visibility\", 0);\n builder.addBitFlagConstant(\"kOvrBit_Rgb\", 1);\n builder.addBitFlagConstant(\"kOvrBit_Alpha\", 2);\n builder.addBitFlagConstant(\"kOvrBit_IgnoreMaterial\", 3);\n builder.addBitFlagConstant(\"kOvrBit_Flashed\", 4);\n builder.addBitFlagConstant(\"kOvrBit_NonLocatable\", 5);\n builder.addBitFlagConstant(\"kOvrBit_LineCode\", 6);\n builder.addBitFlagConstant(\"kOvrBit_Weight\", 7);\n\n // NB: We treat the 16-bit flags as 2 bytes - so subtract 8 from each of these bit indices.\n builder.addBitFlagConstant(\"kOvrBit_Hilited\", 0);\n builder.addBitFlagConstant(\"kOvrBit_Emphasized\", 1);\n builder.addBitFlagConstant(\"kOvrBit_ViewIndependentTransparency\", 2);\n builder.addBitFlagConstant(\"kOvrBit_InvisibleDuringPick\", 3);\n}\n\nconst computeLUTFeatureIndex = `g_featureAndMaterialIndex.xyz`;\nconst computeInstanceFeatureIndex = `g_isAreaPattern ? u_patternFeatureId : a_featureId`;\nfunction computeFeatureIndex(vertex: VertexShaderBuilder): string {\n if (vertex.usesInstancedGeometry) {\n vertex.addUniform(\"u_patternFeatureId\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_patternFeatureId\", (uniform, params) => {\n const id = params.geometry.asInstanced?.patternFeatureId;\n assert(undefined !== id);\n if (id)\n uniform.setUniform3fv(id);\n });\n });\n\n return `g_featureIndex = ${computeInstanceFeatureIndex};`;\n }\n\n return vertex.usesVertexTable ? `g_featureIndex = ${computeLUTFeatureIndex};` : \"\";\n}\nfunction getFeatureIndex(vertex: VertexShaderBuilder): string {\n return `\nfloat getFeatureIndex() {\n ${computeFeatureIndex(vertex)}\n return decodeUInt24(g_featureIndex);\n}\n`;\n}\n\nconst nthFeatureBitSet = `\nbool nthFeatureBitSet(float flags, uint n) {\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);\n}\n`;\n\nconst extractNthFeatureBit = `\nfloat extractNthFeatureBit(float flags, uint n) {\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n) ? 1.0 : 0.0;\n}\n`;\n\nconst computeFeatureTextureCoords = `\nvec2 computeFeatureTextureCoords() { return compute_feature_coords(getFeatureIndex()); }\n`;\n\nconst getFirstFeatureRgba = `\nvec4 getFirstFeatureRgba() {\n feature_texCoord = computeFeatureTextureCoords();\n return TEXTURE(u_featureLUT, feature_texCoord);\n}\n`;\n\nconst getSecondFeatureRgba = `\nvec4 getSecondFeatureRgba() {\n vec2 coord = feature_texCoord;\n coord.x += g_feature_stepX;\n return TEXTURE(u_featureLUT, coord);\n}\n`;\n\nconst computeLineWeight = `\nfloat computeLineWeight() {\n return linear_feature_overrides.x > 0.5 ? linear_feature_overrides.y : g_lineWeight;\n}\n`;\n\nconst computeLineCode = `\nfloat computeLineCode() {\n return linear_feature_overrides.z > 0.5 ? linear_feature_overrides.w : g_lineCode;\n}\n`;\n\nfunction addFeatureIndex(vert: VertexShaderBuilder): void {\n vert.addGlobal(\"g_featureIndex\", VariableType.Vec3);\n\n vert.addFunction(decodeUint24);\n vert.addFunction(getFeatureIndex(vert));\n}\n\n// Discards vertex if feature is invisible; or rendering opaque during translucent pass or vice-versa\n// (The latter occurs when some translucent feature is overridden to be opaque, or vice-versa)\nconst checkVertexDiscard = `\n if (feature_invisible)\n return true;\n\n bool hasAlpha = 1.0 == u_hasAlpha;\n if (feature_alpha > 0.0)\n hasAlpha = feature_alpha <= s_maxAlpha;\n\n int discardFlags = u_transparencyDiscardFlags;\n bool discardViewIndependentDuringOpaque = discardFlags >= 4;\n if (discardViewIndependentDuringOpaque)\n discardFlags = discardFlags - 4;\n\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\n bool discardTranslucentDuringOpaquePass = 1 == discardFlags || 3 == discardFlags || (feature_viewIndependentTransparency && discardViewIndependentDuringOpaque);\n if (isOpaquePass && !discardTranslucentDuringOpaquePass)\n return false;\n\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\n bool discardOpaqueDuringTranslucentPass = 2 == discardFlags || 3 == discardFlags;\n if (isTranslucentPass && !discardOpaqueDuringTranslucentPass)\n return false;\n\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\n`;\n\nfunction addTransparencyDiscardFlags(vert: VertexShaderBuilder) {\n // Even when transparency view flag is off, we need to allow features to override transparency, because it\n // is used when applying transparency threshold. However, we need to ensure we don't DISCARD transparent stuff during\n // opaque pass if transparency is off (see checkVertexDiscard). Especially important for transparency threshold and readPixels().\n // Also, if we override raster text to be opaque we must still draw it in the translucent pass.\n // Finally, if the transparency override is view-independent (i.e., ignores view flags and render mode) we want to discard it during opaque pass\n // unless we're reading pixels.\n // So we have a bit field:\n // 1: discard translucent during opaque.\n // 2: discard opaque during translucent.\n // 4: discard view-independent translucent during opaque.\n vert.addUniform(\"u_transparencyDiscardFlags\", VariableType.Int, (prog) => {\n prog.addGraphicUniform(\"u_transparencyDiscardFlags\", (uniform, params) => {\n let flags = 0;\n\n // Textured surfaces may render in both passes. If so, it's up to fragment shader to handle discard.\n const pass = params.geometry.getPass(params.target);\n if (!Pass.rendersOpaqueAndTranslucent(pass)) {\n // During readPixels() we force transparency off. Make sure to ignore a Branch that turns it back on.\n if (!params.target.isReadPixelsInProgress)\n flags = params.target.currentViewFlags.transparency ? 1 : 4;\n\n if (!params.geometry.alwaysRenderTranslucent)\n flags += 2;\n }\n\n uniform.setUniform1i(flags);\n });\n });\n}\n\nfunction addCommon(builder: ProgramBuilder, mode: FeatureMode, opts: FeatureSymbologyOptions, wantGlobalOvrFlags = true): boolean {\n if (FeatureMode.None === mode)\n return false;\n\n const vert = builder.vert;\n addFeatureIndex(vert);\n\n const haveOverrides = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.HasOverrides);\n if (!haveOverrides) {\n // For pick output we must compute g_featureIndex...\n if (FeatureMode.Pick === mode)\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureIndex(vert));\n\n return true;\n }\n\n const wantWeight = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Weight);\n const wantLineCode = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.LineCode);\n const wantColor = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Color);\n const wantAlpha = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Alpha);\n assert(wantColor || !wantAlpha);\n\n addExtractNthBit(vert);\n addOvrFlagConstants(vert);\n\n vert.addGlobal(\"linear_feature_overrides\", VariableType.Vec4, \"vec4(0.0)\");\n vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\n\n if (wantWeight || wantLineCode) {\n if (wantLineCode)\n replaceLineCode(vert, computeLineCode);\n\n if (wantWeight) {\n replaceLineWeight(vert, computeLineWeight);\n }\n }\n\n if (wantGlobalOvrFlags) {\n const bitmapType = VariableType.Uint;\n vert.addFunction(nthFeatureBitSet);\n vert.addFunction(extractNthFeatureBit);\n\n vert.addUniform(\"u_globalOvrFlags\", bitmapType, (prog) => {\n prog.addGraphicUniform(\"u_globalOvrFlags\", (uniform, params) => {\n let flags = 0.0;\n if (params.geometry.isEdge) {\n const settings = params.target.currentEdgeSettings;\n flags = settings.computeOvrFlags(params.renderPass, params.target.currentViewFlags);\n }\n\n if (!params.geometry.allowColorOverride)\n flags |= OvrFlags.Rgba;\n\n uniform.setUniformBitflags(flags);\n });\n });\n }\n\n addLookupTable(vert, \"feature\", \"2.0\");\n vert.addGlobal(\"feature_texCoord\", VariableType.Vec2);\n vert.addFunction(computeFeatureTextureCoords);\n vert.addFunction(getFirstFeatureRgba);\n\n vert.addUniform(\"u_featureLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_featureLUT\", (uniform, params) => {\n params.target.uniforms.batch.bindLUT(uniform);\n });\n });\n vert.addUniform(\"u_featureParams\", VariableType.Vec2, (prog) => {\n prog.addGraphicUniform(\"u_featureParams\", (uniform, params) => {\n params.target.uniforms.batch.bindLUTParams(uniform);\n });\n });\n\n if (wantColor) {\n vert.addFunction(getSecondFeatureRgba);\n if (wantAlpha) {\n addMaxAlpha(vert);\n addRenderPass(vert);\n addAlpha(vert);\n addTransparencyDiscardFlags(vert);\n\n vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\n }\n }\n\n return true;\n}\n\nexport function addMaxAlpha(builder: ShaderBuilder): void {\n const minTransparency = 15.0; // NB: See DisplayParams.getMinTransparency() - this must match!\n const maxAlpha = (255 - minTransparency) / 255;\n builder.addConstant(\"s_maxAlpha\", VariableType.Float, maxAlpha.toString());\n}\n\n/** @internal */\nfunction addEmphasisFlags(builder: ShaderBuilder): void {\n // Must be kept in sync with EmphasisFlags enum.\n builder.addBitFlagConstant(\"kEmphBit_Hilite\", 0);\n builder.addBitFlagConstant(\"kEmphBit_Emphasize\", 1);\n builder.addBitFlagConstant(\"kEmphBit_Flash\", 2);\n builder.addBitFlagConstant(\"kEmphBit_NonLocatable\", 3);\n builder.addConstant(\"kEmphFlag_Hilite\", VariableType.Float, \"1.0\");\n builder.addConstant(\"kEmphFlag_Emphasize\", VariableType.Float, \"2.0\");\n builder.addConstant(\"kEmphFlag_Flash\", VariableType.Float, \"4.0\");\n builder.addConstant(\"kEmphFlag_NonLocatable\", VariableType.Float, \"8.0\");\n}\n\nfunction addHiliteSettings(frag: FragmentShaderBuilder, wantFlashMode: boolean): void {\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\n params.target.uniforms.hilite.bindFeatureSettings(uniform);\n });\n });\n\n if (wantFlashMode) {\n frag.addUniform(\"u_flash_mode\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_flash_mode\", (uniform, params) => {\n uniform.setUniform1f(params.geometry.getFlashMode(params));\n });\n });\n }\n}\n\n// If feature is not hilited, discard it.\nconst checkVertexHiliteDiscard = \"return 0.0 == v_feature_hilited;\";\n\n// The result is a mask in which each pixel's r=1 if hilited and g=1 if emphasized (and not hilited).\nconst computeHiliteColor = `\n float flags = floor(v_feature_hilited + 0.5);\n float hilited = extractNthBit(flags, kEmphBit_Hilite);\n float emphasized = extractNthBit(flags, kEmphBit_Emphasize);\n return vec4(hilited, emphasized, 0.0, 0.0);\n`;\n\nconst computeSurfaceHiliteColor = `\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\n return vec4(0.0);\n${computeHiliteColor}`;\n\nconst computeHiliteOverrides = `\n vec4 value = getFirstFeatureRgba();\n float emphFlags = value.g * 256.0;\n v_feature_hilited = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\n`;\n\nconst computeHiliteOverridesWithWeight = `${computeHiliteOverrides}\n float flags = value.r * 256.0;\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\n value.a * 256.0,\n nthFeatureBitSet(flags, kOvrBit_LineCode),\n value.b * 256.0);\n`;\n\n/** @internal */\nexport function addSurfaceHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\n addHiliter(builder, wantWeight);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeSurfaceHiliteColor);\n}\n\n/** @internal */\nexport function addHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\n let opts = FeatureSymbologyOptions.HasOverrides;\n if (wantWeight)\n opts |= FeatureSymbologyOptions.Weight; // hiliter never needs line code or color...\n\n if (!addCommon(builder, FeatureMode.Overrides, opts, wantWeight))\n return;\n\n builder.addVarying(\"v_feature_hilited\", VariableType.Float);\n\n addEmphasisFlags(builder.vert);\n builder.vert.set(VertexShaderComponent.ComputeFeatureOverrides, wantWeight ? computeHiliteOverridesWithWeight : computeHiliteOverrides);\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexHiliteDiscard);\n\n addEmphasisFlags(builder.frag);\n addExtractNthBit(builder.frag);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n}\n\nfunction addSamplers(frag: FragmentShaderBuilder, testFeatureId: boolean) {\n if (testFeatureId) {\n frag.addUniform(\"u_pickFeatureId\", VariableType.Sampler2D, (prog) => {\n prog.addProgramUniform(\"u_pickFeatureId\", (uniform, params) => {\n params.target.compositor.featureIds.bindSampler(uniform, TextureUnit.PickFeatureId);\n });\n }, VariablePrecision.High);\n }\n\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\n prog.addProgramUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\n params.target.compositor.depthAndOrder.bindSampler(uniform, TextureUnit.PickDepthAndOrder);\n });\n }, VariablePrecision.High);\n}\n\n/** @internal */\nexport const readDepthAndOrder = `\nvec2 readDepthAndOrder(vec2 tc) {\n vec4 pdo = TEXTURE(u_pickDepthAndOrder, tc);\n float order = floor(pdo.x * 16.0 + 0.5);\n return vec2(order, decodeDepthRgb(pdo.yzw));\n}\n`;\n\nconst checkForEarlySurfaceDiscard = `\n float factor = float(u_renderPass <= kRenderPass_Translucent); // never discard during specific passes\n float term = 0.0;\n\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\n vec2 depthAndOrder = readDepthAndOrder(tc);\n\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\n term += float(depthAndOrder.x > u_renderOrder && abs(depthAndOrder.y - surfaceDepth) < 4.0e-5);\n return factor * term > 0.0;\n`;\n\nconst checkForEarlySurfaceDiscardWithFeatureID = `\n // No normals => unlt => reality model => no edges.\n if (u_renderPass > kRenderPass_Translucent || u_renderPass == kRenderPass_Layers || !u_surfaceFlags[kSurfaceBitIndex_HasNormals])\n return false;\n\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\n vec2 depthAndOrder = readDepthAndOrder(tc);\n\n if (depthAndOrder.x <= u_renderOrder)\n return false;\n\n // Calculate depthTolerance for letting edges show through their own surfaces\n float perspectiveFrustum = step(kFrustumType_Perspective, u_frustum.z);\n vec4 eyeDirAndWidthFactor = mix(vec4(0.0, 0.0, 1.0, u_pixelWidthFactor), vec4(normalize(-v_eyeSpace.xyz), -v_eyeSpace.z * u_pixelWidthFactor), perspectiveFrustum);\n vec3 eyeDir = eyeDirAndWidthFactor.xyz;\n float dtWidthFactor = eyeDirAndWidthFactor.w;\n\n // Compute depth tolerance based on angle of triangle to screen\n float isSilhouette = float(depthAndOrder.x == kRenderOrder_Silhouette);\n float dSq = dot(eyeDir, v_n);\n dSq *= 0.5 + 0.4 * (1.0 - isSilhouette);\n dSq = dSq * dSq;\n dSq = max(dSq, 0.0001);\n dSq = min(dSq, 0.999);\n\n float depthTolerance = dtWidthFactor * v_lineWeight * sqrt((1.0 - dSq) / dSq);\n depthTolerance *= 1.0 + .333 * isSilhouette;\n\n // Make sure stuff behind camera doesn't get pushed in front of it\n depthTolerance = max(depthTolerance, 0.0);\n\n // Convert depthTolerance from eye space to linear depth\n depthTolerance /= (u_frustum.y - u_frustum.x);\n\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\n float depthDelta = abs(depthAndOrder.y - surfaceDepth);\n if (depthDelta > depthTolerance)\n return false;\n\n // Does pick buffer contain same feature?\n vec4 featId = TEXTURE(u_pickFeatureId, tc);\n\n // Converting to ints to test since varying floats can be interpolated incorrectly\n ivec4 featId_i = ivec4(featId * 255.0 + 0.5);\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\n if (featId_i == feature_id_i)\n return true;\n\n // In 2d, display priority controls draw order of different elements.\n if (!u_checkInterElementDiscard)\n return false;\n\n // Use a tighter tolerance for two different elements since we're only fighting roundoff error.\n return depthDelta <= 4.0e-5;\n`;\n\n// This only adds the constants that are actually used in shader code.\nexport function addRenderOrderConstants(builder: ShaderBuilder) {\n builder.addConstant(\"kRenderOrder_BlankingRegion\", VariableType.Float, RenderOrder.BlankingRegion.toFixed(1));\n builder.addConstant(\"kRenderOrder_Linear\", VariableType.Float, RenderOrder.Linear.toFixed(1));\n builder.addConstant(\"kRenderOrder_Edge\", VariableType.Float, RenderOrder.Edge.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarEdge\", VariableType.Float, RenderOrder.PlanarEdge.toFixed(1));\n builder.addConstant(\"kRenderOrder_Silhouette\", VariableType.Float, RenderOrder.Silhouette.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarSilhouette\", VariableType.Float, RenderOrder.PlanarSilhouette.toFixed(1));\n builder.addConstant(\"kRenderOrder_UnlitSurface\", VariableType.Float, RenderOrder.UnlitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_LitSurface\", VariableType.Float, RenderOrder.LitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarUnlitSurface\", VariableType.Float, RenderOrder.PlanarUnlitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarLitSurface\", VariableType.Float, RenderOrder.PlanarLitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarBit\", VariableType.Float, RenderOrder.PlanarBit.toFixed(1));\n builder.addConstant(\"kRenderOrder_Background\", VariableType.Float, RenderOrder.Background.toFixed(1));\n}\n\n/** @internal */\nexport function addRenderOrder(builder: ShaderBuilder) {\n builder.addUniform(\"u_renderOrder\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_renderOrder\", (uniform, params) => {\n const order = params.target.drawingBackgroundForReadPixels ? RenderOrder.Background : params.geometry.renderOrder;\n uniform.setUniform1f(order);\n });\n });\n}\n\nexport function addPixelWidthFactor(builder: ShaderBuilder) {\n builder.addUniform(\"u_pixelWidthFactor\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_pixelWidthFactor\", (uniform, params) => {\n params.target.uniforms.bindPixelWidthFactor(uniform);\n });\n });\n}\n\nfunction addBatchId(builder: ShaderBuilder) {\n builder.addUniform(\"u_batch_id\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_batch_id\", (uniform, params) => {\n params.target.uniforms.batch.bindBatchId(uniform);\n });\n }, VariablePrecision.High);\n}\n\nconst computeIdVert = `v_feature_id = addUInt32s(u_batch_id, vec4(g_featureIndex, 0.0)) / 255.0;`;\nconst computeIdFrag = `\n vec4 featureIndex = vec4(floor(v_feature_index + 0.5), 0.0);\n feature_id = addUInt32s(u_batch_id, featureIndex) / 255.0;\n`;\n\n/** @internal */\nexport function addFeatureId(builder: ProgramBuilder, computeInFrag: boolean) {\n const vert = builder.vert;\n const frag = builder.frag;\n frag.addGlobal(\"feature_id\", VariableType.Vec4);\n if (!computeInFrag) {\n vert.addFunction(addUInt32s);\n addBatchId(vert);\n builder.addInlineComputedVarying(\"v_feature_id\", VariableType.Vec4, computeIdVert);\n\n frag.addInitializer(\"feature_id = v_feature_id;\");\n } else {\n frag.addFunction(addUInt32s);\n builder.addInlineComputedVarying(\"v_feature_index\", VariableType.Vec3, \"v_feature_index = g_featureIndex;\");\n\n addBatchId(frag);\n frag.addInitializer(computeIdFrag);\n }\n}\n\n// Discard vertex if transparency is less than the display style's transparency threshold, IFF the specific bit is set. The bit is set if:\n// - Solid Fill or Hidden Line mode; or\n// - Shaded mode and generating shadow map (sufficiently transparent surfaces receive but do not cast shadows).\nconst isBelowTransparencyThreshold = `\n return v_color.a < u_transparencyThreshold && u_surfaceFlags[kSurfaceBitIndex_TransparencyThreshold];\n`;\n\n/** @internal */\nexport function addSurfaceDiscard(builder: ProgramBuilder, flags: TechniqueFlags) {\n const feat = flags.featureMode;\n const isEdgeTestNeeded = flags.isEdgeTestNeeded;\n const isClassified = flags.isClassified;\n const computeIdInFrag = !flags.isTranslucent && 0 !== flags.isClassified && FeatureMode.Overrides === feat;\n\n const frag = builder.frag;\n const vert = builder.vert;\n\n vert.set(VertexShaderComponent.CheckForLateDiscard, isBelowTransparencyThreshold);\n vert.addUniform(\"u_transparencyThreshold\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_transparencyThreshold\", (uniform, params) => {\n uniform.setUniform1f(params.target.currentTransparencyThreshold);\n });\n });\n\n if (isEdgeTestNeeded) {\n addWindowToTexCoords(frag);\n\n if (!flags.isHilite)\n addEyeSpace(builder);\n\n if (FeatureMode.None === feat) {\n addSamplers(frag, false);\n frag.addFunction(computeLinearDepth);\n frag.addFunction(decodeDepthRgb);\n frag.addFunction(readDepthAndOrder);\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscard);\n } else {\n frag.addUniform(\"u_checkInterElementDiscard\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_checkInterElementDiscard\", (uniform, params) => {\n uniform.setUniform1i(params.target.uniforms.branch.top.is3d ? 1 : 0);\n });\n });\n\n addFeatureIndex(vert);\n addLineWeight(vert);\n\n addSamplers(frag, true);\n addRenderOrderConstants(frag);\n addPixelWidthFactor(frag);\n frag.addFunction(computeLinearDepth);\n frag.addFunction(decodeDepthRgb);\n frag.addFunction(readDepthAndOrder);\n\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscardWithFeatureID);\n\n builder.addInlineComputedVarying(\"v_lineWeight\", VariableType.Float, \"v_lineWeight = computeLineWeight();\");\n addFeatureId(builder, computeIdInFrag);\n }\n\n addRenderOrder(frag);\n addRenderPass(frag);\n } else if (isClassified && FeatureMode.None !== feat) {\n addFeatureIndex(vert);\n addFeatureId(builder, computeIdInFrag);\n\n if (!flags.isTranslucent)\n addRenderOrder(frag);\n }\n}\n\n// bool feature_invisible = false;\n// vec3 feature_rgb; // if not overridden, .r < 0; else rgb color override\n// float feature_alpha // alpha if overridden, else < 0\n// varying float v_feature_emphasis // bitmask - see kEmph_* constants\n// vec4 linear_feature_overrides; // x: weight overridden y: weight z: line code overridden w: line code\nconst computeFeatureOverrides = `\n feature_rgb = vec3(-1.0);\n feature_alpha = -1.0;\n vec4 value = getFirstFeatureRgba();\n\n float emphFlags = value.y * 256.0;\n if (nthFeatureBitSet(emphFlags, kOvrBit_InvisibleDuringPick)) {\n feature_invisible = true;\n return;\n }\n \n v_feature_emphasis = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\n\n float flags = value.x * 256.0;\n if (0.0 == flags)\n return; // nothing overridden for this feature\n\n bool nonLocatable = (u_shaderFlags[kShaderBit_IgnoreNonLocatable] ? nthFeatureBitSet(flags, kOvrBit_NonLocatable) : false);\n v_feature_emphasis += kEmphFlag_NonLocatable * float(nthFeatureBitSet(flags, kOvrBit_NonLocatable));\n bool invisible = nthFeatureBitSet(flags, kOvrBit_Visibility);\n feature_invisible = invisible || nonLocatable;\n if (feature_invisible)\n return;\n\n bool rgbOverridden = nthFeatureBitSet(flags, kOvrBit_Rgb);\n bool alphaOverridden = nthFeatureBitSet(flags, kOvrBit_Alpha);\n if (alphaOverridden || rgbOverridden) {\n vec4 rgba = getSecondFeatureRgba();\n if (rgbOverridden)\n feature_rgb = rgba.rgb;\n\n if (alphaOverridden) {\n feature_alpha = rgba.a;\n feature_viewIndependentTransparency = nthFeatureBitSet(emphFlags, kOvrBit_ViewIndependentTransparency);\n }\n }\n\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\n value.w * 256.0,\n nthFeatureBitSet(flags, kOvrBit_LineCode),\n value.z * 256.0);\n\n feature_ignore_material = nthFeatureBitSet(flags, kOvrBit_IgnoreMaterial);\n use_material = use_material && !feature_ignore_material;\n\n v_feature_emphasis += kEmphFlag_Flash * extractNthFeatureBit(flags, kOvrBit_Flashed);\n`;\n\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\n// feature_alpha = -1.0 if alpha not overridden for feature.\nconst applyFeatureColor = `\n vec3 rgb = mix(baseColor.rgb, feature_rgb.rgb, step(0.0, feature_rgb.r));\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\n return vec4(rgb, alpha);\n`;\n\n// feature_rgb.r = -1.0 if rgb color not overridden for feature, else mix based on u_overrrideColorMix.\n// feature_alpha = -1.0 if alpha not overridden for feature.\nexport const mixFeatureColor = `\n vec3 rgb = mix(baseColor.rgb, mix(baseColor.rgb, feature_rgb.rgb, u_overrideColorMix), step(0.0, feature_rgb.r));\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\n return vec4(rgb, alpha);\n `;\n\nconst applyFlash = `\n float flashHilite = floor(v_feature_emphasis + 0.5);\n return doApplyFlash(flashHilite, baseColor);\n`;\n\nconst doApplyFlash = `\nvec4 doApplyFlash(float flags, vec4 baseColor) {\n bool isFlashed = nthBitSet(flags, kEmphBit_Flash);\n bool isHilited = nthBitSet(flags, kEmphBit_Hilite);\n bool isEmphasized = !isHilited && nthBitSet(flags, kEmphBit_Emphasize);\n vec3 hiliteRgb = isEmphasized ? u_hilite_settings[1] : u_hilite_settings[0];\n\n isHilited = isEmphasized || isHilited;\n float hiliteRatio = isHilited ? (isEmphasized ? u_hilite_settings[2][1] : u_hilite_settings[2][0]) : 0.0;\n baseColor.rgb = mix(baseColor.rgb, hiliteRgb, hiliteRatio);\n\n const float maxBrighten = 0.2;\n float brighten = isFlashed ? u_flash_intensity * maxBrighten : 0.0;\n vec3 brightRgb = baseColor.rgb + brighten;\n\n const float maxTween = 0.75;\n float hiliteFraction = isFlashed ? u_flash_intensity * maxTween : 0.0;\n vec3 tweenRgb = baseColor.rgb * (1.0 - hiliteFraction);\n tweenRgb += u_hilite_settings[0] * hiliteFraction;\n\n return vec4(mix(tweenRgb, brightRgb, u_flash_mode), baseColor.a);\n}\n`;\n\nconst doClassifierFlash = `\nvec4 applyClassifierFlash(vec4 baseColor) {\n const float maxBrighten = 0.2;\n float brighten = u_flash_intensity * maxBrighten;\n vec3 brightRgb = baseColor.rgb + brighten;\n return vec4(brightRgb, baseColor.a);\n}\n`;\n\n/** @internal */\nexport function addClassifierFlash(frag: FragmentShaderBuilder): void {\n addFlashIntensity(frag);\n addHiliteSettings(frag, false);\n frag.addFunction(doClassifierFlash);\n}\n\nfunction addFlashIntensity(frag: FragmentShaderBuilder): void {\n frag.addUniform(\"u_flash_intensity\", VariableType.Float, (prog) => {\n prog.addProgramUniform(\"u_flash_intensity\", (uniform, params) => {\n uniform.setUniform1f(params.target.flashIntensity);\n });\n });\n}\n\nfunction addApplyFlash(frag: FragmentShaderBuilder) {\n addHiliteSettings(frag, true);\n addEmphasisFlags(frag);\n\n addExtractNthBit(frag);\n frag.addFunction(doApplyFlash);\n frag.set(FragmentShaderComponent.ApplyFlash, applyFlash);\n addFlashIntensity(frag);\n}\n\n/** @internal */\nexport function addFeatureSymbology(builder: ProgramBuilder, feat: FeatureMode, opts: FeatureSymbologyOptions): void {\n if (!addCommon(builder, feat, opts) || FeatureSymbologyOptions.None === opts)\n return;\n\n assert((FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color) === (opts & (FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color)));\n\n builder.addGlobal(\"feature_rgb\", VariableType.Vec3);\n builder.addGlobal(\"feature_alpha\", VariableType.Float);\n builder.addVarying(\"v_feature_emphasis\", VariableType.Float);\n\n const vert = builder.vert;\n vert.addGlobal(\"feature_invisible\", VariableType.Boolean, \"false\");\n vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\n\n addEmphasisFlags(vert);\n vert.addGlobal(\"use_material\", VariableType.Boolean, \"true\");\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureOverrides);\n vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\n\n addApplyFlash(builder.frag);\n}\n\n/** If we're running the hilite shader for a uniform feature, it follows that the feature must be hilited.\n * So the hilite shader simply needs to output '1' for every fragment.\n * @internal\n */\nexport function addUniformHiliter(builder: ProgramBuilder): void {\n builder.frag.addUniform(\"v_feature_hilited\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"v_feature_hilited\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\n });\n });\n\n addEmphasisFlags(builder.frag);\n addExtractNthBit(builder.frag);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n}\n\n/** For a uniform feature table, the feature ID output to pick buffers is equal to the batch ID.\n * The following symbology overrides are supported:\n * - Visibility - implcitly, because if the feature is invisible its geometry will never be drawn.\n * - Flash\n * - Hilite\n * - Color and Transparency- only for point clouds currently which set addFeatureColor to true.\n * This shader could be simplified, but want to share code with the non-uniform versions...hence uniforms/globals with \"v_\" prefix typically used for varyings on no prefix...\n * @internal\n */\nexport function addUniformFeatureSymbology(builder: ProgramBuilder, addFeatureColor: boolean): void {\n builder.vert.addGlobal(\"g_featureIndex\", VariableType.Vec3, \"vec3(0.0)\", true);\n\n builder.frag.addUniform(\"v_feature_emphasis\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"v_feature_emphasis\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\n });\n });\n\n if (addFeatureColor) {\n builder.vert.addUniform(\"feature_rgb\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"feature_rgb\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformColorOverride(uniform);\n });\n });\n\n builder.vert.addUniform(\"feature_alpha\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"feature_alpha\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformTransparencyOverride(uniform);\n });\n });\n\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\n addAlpha(builder.vert);\n addMaxAlpha(builder.vert);\n addRenderPass(builder.vert);\n addTransparencyDiscardFlags(builder.vert);\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\n } else {\n builder.vert.set(VertexShaderComponent.CheckForDiscard, \"return feature_invisible;\");\n }\n\n // Non-Locatable... Discard if picking\n builder.vert.addUniform(\"feature_invisible\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"feature_invisible\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformNonLocatable(uniform, params.target.drawNonLocatable);\n });\n });\n\n builder.vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\n\n addApplyFlash(builder.frag);\n}\n"]}
1
+ {"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Pass, RenderOrder, TextureUnit } from \"../RenderFlags\";\nimport {\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariablePrecision, VariableType, VertexShaderBuilder,\n VertexShaderComponent,\n} from \"../ShaderBuilder\";\nimport { FeatureMode, TechniqueFlags } from \"../TechniqueFlags\";\nimport { addExtractNthBit, addEyeSpace, addUInt32s } from \"./Common\";\nimport { decodeDepthRgb, decodeUint24 } from \"./Decode\";\nimport { addWindowToTexCoords, assignFragColor, computeLinearDepth } from \"./Fragment\";\nimport { addLookupTable } from \"./LookupTable\";\nimport { addRenderPass } from \"./RenderPass\";\nimport { addAlpha, addLineWeight, replaceLineCode, replaceLineWeight } from \"./Vertex\";\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** @internal */\nexport const enum FeatureSymbologyOptions {\n None = 0,\n Weight = 1 << 0,\n LineCode = 1 << 1,\n HasOverrides = 1 << 2,\n Color = 1 << 3,\n Alpha = 1 << 4,\n\n Surface = HasOverrides | Color | Alpha,\n Point = HasOverrides | Color | Weight | Alpha,\n Linear = HasOverrides | Color | Weight | LineCode | Alpha,\n}\n\n/** @internal */\nexport function addOvrFlagConstants(builder: ShaderBuilder): void {\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\n builder.addBitFlagConstant(\"kOvrBit_LineRgb\", 0);\n builder.addBitFlagConstant(\"kOvrBit_Rgb\", 1);\n builder.addBitFlagConstant(\"kOvrBit_Alpha\", 2);\n builder.addBitFlagConstant(\"kOvrBit_LineAlpha\", 3);\n builder.addBitFlagConstant(\"kOvrBit_Flashed\", 4);\n builder.addBitFlagConstant(\"kOvrBit_NonLocatable\", 5);\n builder.addBitFlagConstant(\"kOvrBit_LineCode\", 6);\n builder.addBitFlagConstant(\"kOvrBit_Weight\", 7);\n\n // NB: We treat the 16-bit flags as 2 bytes - so subtract 8 from each of these bit indices.\n builder.addBitFlagConstant(\"kOvrBit_Hilited\", 0);\n builder.addBitFlagConstant(\"kOvrBit_Emphasized\", 1);\n builder.addBitFlagConstant(\"kOvrBit_ViewIndependentTransparency\", 2);\n builder.addBitFlagConstant(\"kOvrBit_InvisibleDuringPick\", 3);\n builder.addBitFlagConstant(\"kOvrBit_Visibility\", 4);\n builder.addBitFlagConstant(\"kOvrBit_IgnoreMaterial\", 5);\n}\n\nconst computeLUTFeatureIndex = `g_featureAndMaterialIndex.xyz`;\nconst computeInstanceFeatureIndex = `g_isAreaPattern ? u_patternFeatureId : a_featureId`;\nfunction computeFeatureIndex(vertex: VertexShaderBuilder): string {\n if (vertex.usesInstancedGeometry) {\n vertex.addUniform(\"u_patternFeatureId\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_patternFeatureId\", (uniform, params) => {\n const id = params.geometry.asInstanced?.patternFeatureId;\n assert(undefined !== id);\n if (id)\n uniform.setUniform3fv(id);\n });\n });\n\n return `g_featureIndex = ${computeInstanceFeatureIndex};`;\n }\n\n return vertex.usesVertexTable ? `g_featureIndex = ${computeLUTFeatureIndex};` : \"\";\n}\nfunction getFeatureIndex(vertex: VertexShaderBuilder): string {\n return `\nfloat getFeatureIndex() {\n ${computeFeatureIndex(vertex)}\n return decodeUInt24(g_featureIndex);\n}\n`;\n}\n\nconst nthFeatureBitSet = `\nbool nthFeatureBitSet(float flags, uint n) {\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);\n}\n`;\n\nconst extractNthFeatureBit = `\nfloat extractNthFeatureBit(float flags, uint n) {\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n) ? 1.0 : 0.0;\n}\n`;\n\nconst computeFeatureTextureCoords = `\nvec2 computeFeatureTextureCoords() { return compute_feature_coords(getFeatureIndex()); }\n`;\n\nconst getFirstFeatureRgba = `\nvec4 getFirstFeatureRgba() {\n feature_texCoord = computeFeatureTextureCoords();\n return TEXTURE(u_featureLUT, feature_texCoord);\n}\n`;\n\nconst getSecondFeatureRgba = `\nvec4 getSecondFeatureRgba(bool isLinear) {\n vec2 coord = feature_texCoord;\n coord.x += g_feature_stepX * (isLinear ? 2.0 : 1.0);\n return TEXTURE(u_featureLUT, coord);\n}\n`;\n\nconst computeLineWeight = `\nfloat computeLineWeight() {\n return linear_feature_overrides.x > 0.5 ? linear_feature_overrides.y : g_lineWeight;\n}\n`;\n\nconst computeLineCode = `\nfloat computeLineCode() {\n return linear_feature_overrides.z > 0.5 ? linear_feature_overrides.w : g_lineCode;\n}\n`;\n\nfunction addFeatureIndex(vert: VertexShaderBuilder): void {\n vert.addGlobal(\"g_featureIndex\", VariableType.Vec3);\n\n vert.addFunction(decodeUint24);\n vert.addFunction(getFeatureIndex(vert));\n}\n\n// Discards vertex if feature is invisible; or rendering opaque during translucent pass or vice-versa\n// (The latter occurs when some translucent feature is overridden to be opaque, or vice-versa)\nconst checkVertexDiscard = `\n if (feature_invisible)\n return true;\n\n bool hasAlpha = 1.0 == u_hasAlpha;\n if (feature_alpha > 0.0)\n hasAlpha = feature_alpha <= s_maxAlpha;\n\n int discardFlags = u_transparencyDiscardFlags;\n bool discardViewIndependentDuringOpaque = discardFlags >= 4;\n if (discardViewIndependentDuringOpaque)\n discardFlags = discardFlags - 4;\n\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\n bool discardTranslucentDuringOpaquePass = 1 == discardFlags || 3 == discardFlags || (feature_viewIndependentTransparency && discardViewIndependentDuringOpaque);\n if (isOpaquePass && !discardTranslucentDuringOpaquePass)\n return false;\n\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\n bool discardOpaqueDuringTranslucentPass = 2 == discardFlags || 3 == discardFlags;\n if (isTranslucentPass && !discardOpaqueDuringTranslucentPass)\n return false;\n\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\n`;\n\nfunction addTransparencyDiscardFlags(vert: VertexShaderBuilder) {\n // Even when transparency view flag is off, we need to allow features to override transparency, because it\n // is used when applying transparency threshold. However, we need to ensure we don't DISCARD transparent stuff during\n // opaque pass if transparency is off (see checkVertexDiscard). Especially important for transparency threshold and readPixels().\n // Also, if we override raster text to be opaque we must still draw it in the translucent pass.\n // Finally, if the transparency override is view-independent (i.e., ignores view flags and render mode) we want to discard it during opaque pass\n // unless we're reading pixels.\n // So we have a bit field:\n // 1: discard translucent during opaque.\n // 2: discard opaque during translucent.\n // 4: discard view-independent translucent during opaque.\n vert.addUniform(\"u_transparencyDiscardFlags\", VariableType.Int, (prog) => {\n prog.addGraphicUniform(\"u_transparencyDiscardFlags\", (uniform, params) => {\n let flags = 0;\n\n // Textured surfaces may render in both passes. If so, it's up to fragment shader to handle discard.\n const pass = params.geometry.getPass(params.target);\n if (!Pass.rendersOpaqueAndTranslucent(pass)) {\n // During readPixels() we force transparency off. Make sure to ignore a Branch that turns it back on.\n if (!params.target.isReadPixelsInProgress)\n flags = params.target.currentViewFlags.transparency ? 1 : 4;\n\n if (!params.geometry.alwaysRenderTranslucent)\n flags += 2;\n }\n\n uniform.setUniform1i(flags);\n });\n });\n}\n\nfunction addCommon(builder: ProgramBuilder, mode: FeatureMode, opts: FeatureSymbologyOptions, wantGlobalOvrFlags = true): boolean {\n if (FeatureMode.None === mode)\n return false;\n\n const vert = builder.vert;\n addFeatureIndex(vert);\n\n const haveOverrides = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.HasOverrides);\n if (!haveOverrides) {\n // For pick output we must compute g_featureIndex...\n if (FeatureMode.Pick === mode)\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureIndex(vert));\n\n return true;\n }\n\n const wantWeight = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Weight);\n const wantLineCode = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.LineCode);\n const wantColor = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Color);\n const wantAlpha = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Alpha);\n assert(wantColor || !wantAlpha);\n\n addExtractNthBit(vert);\n addOvrFlagConstants(vert);\n\n vert.addGlobal(\"linear_feature_overrides\", VariableType.Vec4, \"vec4(0.0)\");\n vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\n\n if (wantWeight || wantLineCode) {\n if (wantLineCode)\n replaceLineCode(vert, computeLineCode);\n\n if (wantWeight) {\n replaceLineWeight(vert, computeLineWeight);\n }\n }\n\n if (wantGlobalOvrFlags) {\n const bitmapType = VariableType.Uint;\n vert.addFunction(nthFeatureBitSet);\n vert.addFunction(extractNthFeatureBit);\n\n vert.addUniform(\"u_globalOvrFlags\", bitmapType, (prog) => {\n prog.addGraphicUniform(\"u_globalOvrFlags\", (uniform, params) => {\n let flags = 0.0;\n if (params.geometry.isEdge) {\n const settings = params.target.currentEdgeSettings;\n flags = settings.computeOvrFlags(params.renderPass, params.target.currentViewFlags);\n }\n\n if (!params.geometry.allowColorOverride)\n flags |= OvrFlags.Rgba;\n\n uniform.setUniformBitflags(flags);\n });\n });\n }\n\n addLookupTable(vert, \"feature\", \"3.0\");\n vert.addGlobal(\"feature_texCoord\", VariableType.Vec2);\n vert.addFunction(computeFeatureTextureCoords);\n vert.addFunction(getFirstFeatureRgba);\n\n vert.addUniform(\"u_featureLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_featureLUT\", (uniform, params) => {\n params.target.uniforms.batch.bindLUT(uniform);\n });\n });\n vert.addUniform(\"u_featureParams\", VariableType.Vec2, (prog) => {\n prog.addGraphicUniform(\"u_featureParams\", (uniform, params) => {\n params.target.uniforms.batch.bindLUTParams(uniform);\n });\n });\n\n if (wantColor) {\n vert.addFunction(getSecondFeatureRgba);\n if (wantAlpha) {\n addMaxAlpha(vert);\n addRenderPass(vert);\n addAlpha(vert);\n addTransparencyDiscardFlags(vert);\n\n vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\n }\n }\n\n return true;\n}\n\nexport function addMaxAlpha(builder: ShaderBuilder): void {\n const minTransparency = 15.0; // NB: See DisplayParams.getMinTransparency() - this must match!\n const maxAlpha = (255 - minTransparency) / 255;\n builder.addConstant(\"s_maxAlpha\", VariableType.Float, maxAlpha.toString());\n}\n\n/** @internal */\nfunction addEmphasisFlags(builder: ShaderBuilder): void {\n // Must be kept in sync with EmphasisFlags enum.\n builder.addBitFlagConstant(\"kEmphBit_Hilite\", 0);\n builder.addBitFlagConstant(\"kEmphBit_Emphasize\", 1);\n builder.addBitFlagConstant(\"kEmphBit_Flash\", 2);\n builder.addBitFlagConstant(\"kEmphBit_NonLocatable\", 3);\n builder.addConstant(\"kEmphFlag_Hilite\", VariableType.Float, \"1.0\");\n builder.addConstant(\"kEmphFlag_Emphasize\", VariableType.Float, \"2.0\");\n builder.addConstant(\"kEmphFlag_Flash\", VariableType.Float, \"4.0\");\n builder.addConstant(\"kEmphFlag_NonLocatable\", VariableType.Float, \"8.0\");\n}\n\nfunction addHiliteSettings(frag: FragmentShaderBuilder, wantFlashMode: boolean): void {\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\n params.target.uniforms.hilite.bindFeatureSettings(uniform);\n });\n });\n\n if (wantFlashMode) {\n frag.addUniform(\"u_flash_mode\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_flash_mode\", (uniform, params) => {\n uniform.setUniform1f(params.geometry.getFlashMode(params));\n });\n });\n }\n}\n\n// If feature is not hilited, discard it.\nconst checkVertexHiliteDiscard = \"return 0.0 == v_feature_hilited;\";\n\n// The result is a mask in which each pixel's r=1 if hilited and g=1 if emphasized (and not hilited).\nconst computeHiliteColor = `\n float flags = floor(v_feature_hilited + 0.5);\n float hilited = extractNthBit(flags, kEmphBit_Hilite);\n float emphasized = extractNthBit(flags, kEmphBit_Emphasize);\n return vec4(hilited, emphasized, 0.0, 0.0);\n`;\n\nconst computeSurfaceHiliteColor = `\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\n return vec4(0.0);\n${computeHiliteColor}`;\n\nconst computeHiliteOverrides = `\n vec4 value = getFirstFeatureRgba();\n float emphFlags = value.g * 256.0;\n v_feature_hilited = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\n`;\n\nconst computeHiliteOverridesWithWeight = `${computeHiliteOverrides}\n float flags = value.r * 256.0;\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\n value.a * 256.0,\n nthFeatureBitSet(flags, kOvrBit_LineCode),\n value.b * 256.0);\n`;\n\n/** @internal */\nexport function addSurfaceHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\n addHiliter(builder, wantWeight);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeSurfaceHiliteColor);\n}\n\n/** @internal */\nexport function addHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\n let opts = FeatureSymbologyOptions.HasOverrides;\n if (wantWeight)\n opts |= FeatureSymbologyOptions.Weight; // hiliter never needs line code or color...\n\n if (!addCommon(builder, FeatureMode.Overrides, opts, wantWeight))\n return;\n\n builder.addVarying(\"v_feature_hilited\", VariableType.Float);\n\n addEmphasisFlags(builder.vert);\n builder.vert.set(VertexShaderComponent.ComputeFeatureOverrides, wantWeight ? computeHiliteOverridesWithWeight : computeHiliteOverrides);\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexHiliteDiscard);\n\n addEmphasisFlags(builder.frag);\n addExtractNthBit(builder.frag);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n}\n\nfunction addSamplers(frag: FragmentShaderBuilder, testFeatureId: boolean) {\n if (testFeatureId) {\n frag.addUniform(\"u_pickFeatureId\", VariableType.Sampler2D, (prog) => {\n prog.addProgramUniform(\"u_pickFeatureId\", (uniform, params) => {\n params.target.compositor.featureIds.bindSampler(uniform, TextureUnit.PickFeatureId);\n });\n }, VariablePrecision.High);\n }\n\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\n prog.addProgramUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\n params.target.compositor.depthAndOrder.bindSampler(uniform, TextureUnit.PickDepthAndOrder);\n });\n }, VariablePrecision.High);\n}\n\n/** @internal */\nexport const readDepthAndOrder = `\nvec2 readDepthAndOrder(vec2 tc) {\n vec4 pdo = TEXTURE(u_pickDepthAndOrder, tc);\n float order = floor(pdo.x * 16.0 + 0.5);\n return vec2(order, decodeDepthRgb(pdo.yzw));\n}\n`;\n\nconst checkForEarlySurfaceDiscard = `\n float factor = float(u_renderPass <= kRenderPass_Translucent); // never discard during specific passes\n float term = 0.0;\n\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\n vec2 depthAndOrder = readDepthAndOrder(tc);\n\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\n term += float(depthAndOrder.x > u_renderOrder && abs(depthAndOrder.y - surfaceDepth) < 4.0e-5);\n return factor * term > 0.0;\n`;\n\nconst checkForEarlySurfaceDiscardWithFeatureID = `\n // No normals => unlt => reality model => no edges.\n if (u_renderPass > kRenderPass_Translucent || u_renderPass == kRenderPass_Layers || !u_surfaceFlags[kSurfaceBitIndex_HasNormals])\n return false;\n\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\n vec2 depthAndOrder = readDepthAndOrder(tc);\n\n if (depthAndOrder.x <= u_renderOrder)\n return false;\n\n // Calculate depthTolerance for letting edges show through their own surfaces\n float perspectiveFrustum = step(kFrustumType_Perspective, u_frustum.z);\n vec4 eyeDirAndWidthFactor = mix(vec4(0.0, 0.0, 1.0, u_pixelWidthFactor), vec4(normalize(-v_eyeSpace.xyz), -v_eyeSpace.z * u_pixelWidthFactor), perspectiveFrustum);\n vec3 eyeDir = eyeDirAndWidthFactor.xyz;\n float dtWidthFactor = eyeDirAndWidthFactor.w;\n\n // Compute depth tolerance based on angle of triangle to screen\n float isSilhouette = float(depthAndOrder.x == kRenderOrder_Silhouette);\n float dSq = dot(eyeDir, v_n);\n dSq *= 0.5 + 0.4 * (1.0 - isSilhouette);\n dSq = dSq * dSq;\n dSq = max(dSq, 0.0001);\n dSq = min(dSq, 0.999);\n\n float depthTolerance = dtWidthFactor * v_lineWeight * sqrt((1.0 - dSq) / dSq);\n depthTolerance *= 1.0 + .333 * isSilhouette;\n\n // Make sure stuff behind camera doesn't get pushed in front of it\n depthTolerance = max(depthTolerance, 0.0);\n\n // Convert depthTolerance from eye space to linear depth\n depthTolerance /= (u_frustum.y - u_frustum.x);\n\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\n float depthDelta = abs(depthAndOrder.y - surfaceDepth);\n if (depthDelta > depthTolerance)\n return false;\n\n // Does pick buffer contain same feature?\n vec4 featId = TEXTURE(u_pickFeatureId, tc);\n\n // Converting to ints to test since varying floats can be interpolated incorrectly\n ivec4 featId_i = ivec4(featId * 255.0 + 0.5);\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\n if (featId_i == feature_id_i)\n return true;\n\n // In 2d, display priority controls draw order of different elements.\n if (!u_checkInterElementDiscard)\n return false;\n\n // Use a tighter tolerance for two different elements since we're only fighting roundoff error.\n return depthDelta <= 4.0e-5;\n`;\n\n// This only adds the constants that are actually used in shader code.\nexport function addRenderOrderConstants(builder: ShaderBuilder) {\n builder.addConstant(\"kRenderOrder_BlankingRegion\", VariableType.Float, RenderOrder.BlankingRegion.toFixed(1));\n builder.addConstant(\"kRenderOrder_Linear\", VariableType.Float, RenderOrder.Linear.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarLinear\", VariableType.Float, RenderOrder.PlanarLinear.toFixed(1));\n builder.addConstant(\"kRenderOrder_Edge\", VariableType.Float, RenderOrder.Edge.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarEdge\", VariableType.Float, RenderOrder.PlanarEdge.toFixed(1));\n builder.addConstant(\"kRenderOrder_Silhouette\", VariableType.Float, RenderOrder.Silhouette.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarSilhouette\", VariableType.Float, RenderOrder.PlanarSilhouette.toFixed(1));\n builder.addConstant(\"kRenderOrder_UnlitSurface\", VariableType.Float, RenderOrder.UnlitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_LitSurface\", VariableType.Float, RenderOrder.LitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarUnlitSurface\", VariableType.Float, RenderOrder.PlanarUnlitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarLitSurface\", VariableType.Float, RenderOrder.PlanarLitSurface.toFixed(1));\n builder.addConstant(\"kRenderOrder_PlanarBit\", VariableType.Float, RenderOrder.PlanarBit.toFixed(1));\n builder.addConstant(\"kRenderOrder_Background\", VariableType.Float, RenderOrder.Background.toFixed(1));\n}\n\n/** @internal */\nexport function addRenderOrder(builder: ShaderBuilder) {\n builder.addUniform(\"u_renderOrder\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_renderOrder\", (uniform, params) => {\n const order = params.target.drawingBackgroundForReadPixels ? RenderOrder.Background : params.geometry.renderOrder;\n uniform.setUniform1f(order);\n });\n });\n}\n\nexport function addPixelWidthFactor(builder: ShaderBuilder) {\n builder.addUniform(\"u_pixelWidthFactor\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_pixelWidthFactor\", (uniform, params) => {\n params.target.uniforms.bindPixelWidthFactor(uniform);\n });\n });\n}\n\nfunction addBatchId(builder: ShaderBuilder) {\n builder.addUniform(\"u_batch_id\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_batch_id\", (uniform, params) => {\n params.target.uniforms.batch.bindBatchId(uniform);\n });\n }, VariablePrecision.High);\n}\n\nconst computeIdVert = `v_feature_id = addUInt32s(u_batch_id, vec4(g_featureIndex, 0.0)) / 255.0;`;\nconst computeIdFrag = `\n vec4 featureIndex = vec4(floor(v_feature_index + 0.5), 0.0);\n feature_id = addUInt32s(u_batch_id, featureIndex) / 255.0;\n`;\n\n/** @internal */\nexport function addFeatureId(builder: ProgramBuilder, computeInFrag: boolean) {\n const vert = builder.vert;\n const frag = builder.frag;\n frag.addGlobal(\"feature_id\", VariableType.Vec4);\n if (!computeInFrag) {\n vert.addFunction(addUInt32s);\n addBatchId(vert);\n builder.addInlineComputedVarying(\"v_feature_id\", VariableType.Vec4, computeIdVert);\n\n frag.addInitializer(\"feature_id = v_feature_id;\");\n } else {\n frag.addFunction(addUInt32s);\n builder.addInlineComputedVarying(\"v_feature_index\", VariableType.Vec3, \"v_feature_index = g_featureIndex;\");\n\n addBatchId(frag);\n frag.addInitializer(computeIdFrag);\n }\n}\n\n// Discard vertex if transparency is less than the display style's transparency threshold, IFF the specific bit is set. The bit is set if:\n// - Solid Fill or Hidden Line mode; or\n// - Shaded mode and generating shadow map (sufficiently transparent surfaces receive but do not cast shadows).\nconst isBelowTransparencyThreshold = `\n return v_color.a < u_transparencyThreshold && u_surfaceFlags[kSurfaceBitIndex_TransparencyThreshold];\n`;\n\n/** @internal */\nexport function addSurfaceDiscard(builder: ProgramBuilder, flags: TechniqueFlags) {\n const feat = flags.featureMode;\n const isEdgeTestNeeded = flags.isEdgeTestNeeded;\n const isClassified = flags.isClassified;\n const computeIdInFrag = !flags.isTranslucent && 0 !== flags.isClassified && FeatureMode.Overrides === feat;\n\n const frag = builder.frag;\n const vert = builder.vert;\n\n vert.set(VertexShaderComponent.CheckForLateDiscard, isBelowTransparencyThreshold);\n vert.addUniform(\"u_transparencyThreshold\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_transparencyThreshold\", (uniform, params) => {\n uniform.setUniform1f(params.target.currentTransparencyThreshold);\n });\n });\n\n if (isEdgeTestNeeded) {\n addWindowToTexCoords(frag);\n\n if (!flags.isHilite)\n addEyeSpace(builder);\n\n if (FeatureMode.None === feat) {\n addSamplers(frag, false);\n frag.addFunction(computeLinearDepth);\n frag.addFunction(decodeDepthRgb);\n frag.addFunction(readDepthAndOrder);\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscard);\n } else {\n frag.addUniform(\"u_checkInterElementDiscard\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_checkInterElementDiscard\", (uniform, params) => {\n uniform.setUniform1i(params.target.uniforms.branch.top.is3d ? 1 : 0);\n });\n });\n\n addFeatureIndex(vert);\n addLineWeight(vert);\n\n addSamplers(frag, true);\n addRenderOrderConstants(frag);\n addPixelWidthFactor(frag);\n frag.addFunction(computeLinearDepth);\n frag.addFunction(decodeDepthRgb);\n frag.addFunction(readDepthAndOrder);\n\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscardWithFeatureID);\n\n builder.addInlineComputedVarying(\"v_lineWeight\", VariableType.Float, \"v_lineWeight = computeLineWeight();\");\n addFeatureId(builder, computeIdInFrag);\n }\n\n addRenderOrder(frag);\n addRenderPass(frag);\n } else if (isClassified && FeatureMode.None !== feat) {\n addFeatureIndex(vert);\n addFeatureId(builder, computeIdInFrag);\n\n if (!flags.isTranslucent)\n addRenderOrder(frag);\n }\n}\n\n// bool feature_invisible = false;\n// vec3 feature_rgb; // if not overridden, .r < 0; else rgb color override\n// float feature_alpha // alpha if overridden, else < 0\n// varying float v_feature_emphasis // bitmask - see kEmph_* constants\n// vec4 linear_feature_overrides; // x: weight overridden y: weight z: line code overridden w: line code\nconst computeFeatureOverrides = `\n feature_rgb = vec3(-1.0);\n feature_alpha = -1.0;\n vec4 value = getFirstFeatureRgba();\n\n float emphFlags = value.y * 256.0;\n if (nthFeatureBitSet(emphFlags, kOvrBit_InvisibleDuringPick)) {\n feature_invisible = true;\n return;\n }\n \n v_feature_emphasis = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\n\n float flags = value.x * 256.0;\n if (0.0 == flags && 0.0 == emphFlags)\n return; // nothing overridden for this feature\n\n bool nonLocatable = (u_shaderFlags[kShaderBit_IgnoreNonLocatable] ? nthFeatureBitSet(flags, kOvrBit_NonLocatable) : false);\n v_feature_emphasis += kEmphFlag_NonLocatable * float(nthFeatureBitSet(flags, kOvrBit_NonLocatable));\n bool invisible = nthFeatureBitSet(emphFlags, kOvrBit_Visibility);\n feature_invisible = invisible || nonLocatable;\n if (feature_invisible)\n return;\n\n bool isLinear = u_renderOrder == kRenderOrder_Linear || u_renderOrder == kRenderOrder_PlanarLinear || u_renderOrder == kRenderOrder_PlanarEdge;\n bool rgbOverridden = isLinear ? nthFeatureBitSet(flags, kOvrBit_LineRgb) : nthFeatureBitSet(flags, kOvrBit_Rgb);\n bool alphaOverridden = isLinear ? nthFeatureBitSet(flags, kOvrBit_LineAlpha) : nthFeatureBitSet(flags, kOvrBit_Alpha);\n if (alphaOverridden || rgbOverridden) {\n vec4 rgba = getSecondFeatureRgba(isLinear);\n if (rgbOverridden)\n feature_rgb = rgba.rgb;\n\n if (alphaOverridden) {\n feature_alpha = rgba.a;\n feature_viewIndependentTransparency = nthFeatureBitSet(emphFlags, kOvrBit_ViewIndependentTransparency);\n }\n }\n\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\n value.w * 256.0,\n nthFeatureBitSet(flags, kOvrBit_LineCode),\n value.z * 256.0);\n\n feature_ignore_material = nthFeatureBitSet(emphFlags, kOvrBit_IgnoreMaterial);\n use_material = use_material && !feature_ignore_material;\n\n v_feature_emphasis += kEmphFlag_Flash * extractNthFeatureBit(flags, kOvrBit_Flashed);\n`;\n\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\n// feature_alpha = -1.0 if alpha not overridden for feature.\nconst applyFeatureColor = `\n vec3 rgb = mix(baseColor.rgb, feature_rgb.rgb, step(0.0, feature_rgb.r));\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\n return vec4(rgb, alpha);\n`;\n\n// feature_rgb.r = -1.0 if rgb color not overridden for feature, else mix based on u_overrrideColorMix.\n// feature_alpha = -1.0 if alpha not overridden for feature.\nexport const mixFeatureColor = `\n vec3 rgb = mix(baseColor.rgb, mix(baseColor.rgb, feature_rgb.rgb, u_overrideColorMix), step(0.0, feature_rgb.r));\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\n return vec4(rgb, alpha);\n `;\n\nconst applyFlash = `\n float flashHilite = floor(v_feature_emphasis + 0.5);\n return doApplyFlash(flashHilite, baseColor);\n`;\n\nconst doApplyFlash = `\nvec4 doApplyFlash(float flags, vec4 baseColor) {\n bool isFlashed = nthBitSet(flags, kEmphBit_Flash);\n bool isHilited = nthBitSet(flags, kEmphBit_Hilite);\n bool isEmphasized = !isHilited && nthBitSet(flags, kEmphBit_Emphasize);\n vec3 hiliteRgb = isEmphasized ? u_hilite_settings[1] : u_hilite_settings[0];\n\n isHilited = isEmphasized || isHilited;\n float hiliteRatio = isHilited ? (isEmphasized ? u_hilite_settings[2][1] : u_hilite_settings[2][0]) : 0.0;\n baseColor.rgb = mix(baseColor.rgb, hiliteRgb, hiliteRatio);\n\n const float maxBrighten = 0.2;\n float brighten = isFlashed ? u_flash_intensity * maxBrighten : 0.0;\n vec3 brightRgb = baseColor.rgb + brighten;\n\n const float maxTween = 0.75;\n float hiliteFraction = isFlashed ? u_flash_intensity * maxTween : 0.0;\n vec3 tweenRgb = baseColor.rgb * (1.0 - hiliteFraction);\n tweenRgb += u_hilite_settings[0] * hiliteFraction;\n\n return vec4(mix(tweenRgb, brightRgb, u_flash_mode), baseColor.a);\n}\n`;\n\nconst doClassifierFlash = `\nvec4 applyClassifierFlash(vec4 baseColor) {\n const float maxBrighten = 0.2;\n float brighten = u_flash_intensity * maxBrighten;\n vec3 brightRgb = baseColor.rgb + brighten;\n return vec4(brightRgb, baseColor.a);\n}\n`;\n\n/** @internal */\nexport function addClassifierFlash(frag: FragmentShaderBuilder): void {\n addFlashIntensity(frag);\n addHiliteSettings(frag, false);\n frag.addFunction(doClassifierFlash);\n}\n\nfunction addFlashIntensity(frag: FragmentShaderBuilder): void {\n frag.addUniform(\"u_flash_intensity\", VariableType.Float, (prog) => {\n prog.addProgramUniform(\"u_flash_intensity\", (uniform, params) => {\n uniform.setUniform1f(params.target.flashIntensity);\n });\n });\n}\n\nfunction addApplyFlash(frag: FragmentShaderBuilder) {\n addHiliteSettings(frag, true);\n addEmphasisFlags(frag);\n\n addExtractNthBit(frag);\n frag.addFunction(doApplyFlash);\n frag.set(FragmentShaderComponent.ApplyFlash, applyFlash);\n addFlashIntensity(frag);\n}\n\n/** @internal */\nexport function addFeatureSymbology(builder: ProgramBuilder, feat: FeatureMode, opts: FeatureSymbologyOptions): void {\n if (!addCommon(builder, feat, opts) || FeatureSymbologyOptions.None === opts)\n return;\n\n assert((FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color) === (opts & (FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color)));\n\n builder.addGlobal(\"feature_rgb\", VariableType.Vec3);\n builder.addGlobal(\"feature_alpha\", VariableType.Float);\n builder.addVarying(\"v_feature_emphasis\", VariableType.Float);\n\n const vert = builder.vert;\n vert.addGlobal(\"feature_invisible\", VariableType.Boolean, \"false\");\n vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\n\n addEmphasisFlags(vert);\n vert.addGlobal(\"use_material\", VariableType.Boolean, \"true\");\n addRenderOrder(vert);\n addRenderOrderConstants(vert);\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureOverrides);\n vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\n\n addApplyFlash(builder.frag);\n}\n\n/** If we're running the hilite shader for a uniform feature, it follows that the feature must be hilited.\n * So the hilite shader simply needs to output '1' for every fragment.\n * @internal\n */\nexport function addUniformHiliter(builder: ProgramBuilder): void {\n builder.frag.addUniform(\"v_feature_hilited\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"v_feature_hilited\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\n });\n });\n\n addEmphasisFlags(builder.frag);\n addExtractNthBit(builder.frag);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n}\n\n/** For a uniform feature table, the feature ID output to pick buffers is equal to the batch ID.\n * The following symbology overrides are supported:\n * - Visibility - implcitly, because if the feature is invisible its geometry will never be drawn.\n * - Flash\n * - Hilite\n * - Color and Transparency- only for point clouds currently which set addFeatureColor to true.\n * This shader could be simplified, but want to share code with the non-uniform versions...hence uniforms/globals with \"v_\" prefix typically used for varyings on no prefix...\n * @internal\n */\nexport function addUniformFeatureSymbology(builder: ProgramBuilder, addFeatureColor: boolean): void {\n builder.vert.addGlobal(\"g_featureIndex\", VariableType.Vec3, \"vec3(0.0)\", true);\n\n builder.frag.addUniform(\"v_feature_emphasis\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"v_feature_emphasis\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\n });\n });\n\n if (addFeatureColor) {\n builder.vert.addUniform(\"feature_rgb\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"feature_rgb\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformColorOverride(uniform);\n });\n });\n\n builder.vert.addUniform(\"feature_alpha\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"feature_alpha\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformTransparencyOverride(uniform);\n });\n });\n\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\n addAlpha(builder.vert);\n addMaxAlpha(builder.vert);\n addRenderPass(builder.vert);\n addTransparencyDiscardFlags(builder.vert);\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\n } else {\n builder.vert.set(VertexShaderComponent.CheckForDiscard, \"return feature_invisible;\");\n }\n\n // Non-Locatable... Discard if picking\n builder.vert.addUniform(\"feature_invisible\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"feature_invisible\", (uniform, params) => {\n params.target.uniforms.batch.bindUniformNonLocatable(uniform, params.target.drawNonLocatable);\n });\n });\n\n builder.vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\n\n addApplyFlash(builder.frag);\n}\n"]}
@@ -415,7 +415,7 @@ export class MapTile extends RealityTile {
415
415
  return undefined;
416
416
  const textures = this.getDrapeTextures();
417
417
  const { baseColor, baseTransparent, layerClassifiers } = this.mapTree;
418
- const graphic = IModelApp.renderSystem.createRealityMeshGraphic({ realityMesh: geometry, projection: this.getProjection(), tileRectangle: this.rectangle, featureTable: PackedFeatureTable.pack(this.mapLoader.featureTable), tileId: this.contentId, baseColor, baseTransparent, textures, layerClassifiers }, true);
418
+ const graphic = IModelApp.renderSystem.createRealityMeshGraphic({ realityMesh: geometry, projection: this.getProjection(), tileRectangle: this.rectangle, featureTable: PackedFeatureTable.pack(this.mapLoader.featureTable), tileId: this.contentId, baseColor, baseTransparent, textures, layerClassifiers, disableClipStyle: true }, true);
419
419
  // If there are no layer classifiers then we can save this graphic for re-use. If layer classifiers exist they are regenerated based on view and we must collate them with the imagery.
420
420
  if (this.imageryIsReady && 0 === this.mapTree.layerClassifiers.size)
421
421
  this._graphic = graphic;
@@ -1 +1 @@
1
- {"version":3,"file":"MapTile.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTile.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { ColorByName, ColorDef, FrustumPlanes, GlobeMode, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\nimport { AxisOrder, BilinearPatch, ClipPlane, ClipPrimitive, ClipShape, ClipVector, Constant, ConvexClipPlaneSet, EllipsoidPatch, LongitudeLatitudeNumber, Matrix3d, Point3d, PolygonOps, Range1d, Range2d, Range3d, Ray3d, Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { GraphicBuilder } from \"../../render/GraphicBuilder\";\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\nimport { upsampleRealityMeshParams } from \"../../render/UpsampleRealityMeshParams\";\nimport { RenderGraphic } from \"../../render/RenderGraphic\";\nimport { RenderMemory } from \"../../render/RenderMemory\";\nimport { RenderSystem, RenderTerrainGeometry, TerrainTexture } from \"../../render/RenderSystem\";\nimport { ViewingSpace } from \"../../ViewingSpace\";\nimport {\n ImageryMapTile, MapCartoRectangle, MapTileLoader, MapTileTree, QuadId, RealityTile, RealityTileParams, Tile, TileContent, TileDrawArgs, TileGraphicType,\n TileLoadStatus, TileTreeLoadStatus, TraversalSelectionContext,\n} from \"../internal\";\n\n/** @internal */\nexport class PlanarTilePatch {\n constructor(public corners: Point3d[], public normal: Vector3d, private _chordHeight: number) {\n }\n\n public getRangeCorners(heightRange: Range1d, result: Point3d[]): Point3d[] {\n let index = 0;\n for (const corner of this.corners)\n corner.plusScaled(this.normal, heightRange.low - this._chordHeight, result[index++]);\n\n for (const corner of this.corners)\n corner.plusScaled(this.normal, heightRange.high + this._chordHeight, result[index++]);\n\n return result;\n }\n public getClipShape(): Point3d[] {\n return [this.corners[0], this.corners[1], this.corners[3], this.corners[2]];\n }\n}\n\n/** @internal */\nexport type TilePatch = PlanarTilePatch | EllipsoidPatch;\n\n/** Projects points within the rectangular region of a [[MapTile]] into 3d space.\n * @see [[MapTile.getProjection]] to obtain the projection for a [[MapTile]].\n * @public\n */\nexport abstract class MapTileProjection {\n /** The extents of the volume of space associated with the projected [[MapTile]]. */\n public abstract get localRange(): Range3d;\n /** @alpha */\n public abstract get transformFromLocal(): Transform;\n\n /** Given parametric coordinates in [0, 1] within the tile's rectangular region, and an elevation above the Earth,\n * compute the 3d position in space.\n */\n public abstract getPoint(u: number, v: number, height: number, result?: Point3d): Point3d;\n\n /** @alpha */\n public get ellipsoidPatch(): EllipsoidPatch | undefined { return undefined; }\n\n /** @alpha */\n public getGlobalPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\n const point = this.getPoint(u, v, z, result);\n return this.transformFromLocal.multiplyPoint3d(point, point);\n }\n}\n\n/** @alpha */\nclass EllipsoidProjection extends MapTileProjection {\n public transformFromLocal = Transform.createIdentity();\n public localRange: Range3d;\n constructor(private _patch: EllipsoidPatch, heightRange?: Range1d) {\n super();\n this.localRange = _patch.range();\n this.localRange.expandInPlace(heightRange ? (heightRange.high - heightRange.low) : 0);\n }\n private static _scratchAngles = LongitudeLatitudeNumber.createZero();\n private static _scratchRay = Ray3d.createZero();\n public getPoint(u: number, v: number, height: number, result?: Point3d): Point3d {\n const angles = this._patch.uvFractionToAngles(u, v, height, EllipsoidProjection._scratchAngles);\n const ray = this._patch.anglesToUnitNormalRay(angles, EllipsoidProjection._scratchRay);\n return Point3d.createFrom(ray!.origin, result);\n }\n public override get ellipsoidPatch() { return this._patch; }\n}\n\n/** @alpha */\nclass PlanarProjection extends MapTileProjection {\n private _bilinearPatch: BilinearPatch;\n public transformFromLocal: Transform;\n public localRange: Range3d;\n constructor(patch: PlanarTilePatch, heightRange?: Range1d) {\n super();\n this.transformFromLocal = Transform.createOriginAndMatrix(patch.corners[0], Matrix3d.createRigidHeadsUp(patch.normal, AxisOrder.ZYX));\n const planeCorners = this.transformFromLocal.multiplyInversePoint3dArray([patch.corners[0], patch.corners[1], patch.corners[2], patch.corners[3]])!;\n this.localRange = Range3d.createArray(planeCorners);\n this.localRange.low.z += heightRange ? heightRange.low : 0;\n this.localRange.high.z += heightRange ? heightRange.high : 0;\n this._bilinearPatch = new BilinearPatch(planeCorners[0], planeCorners[1], planeCorners[2], planeCorners[3]);\n }\n public getPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\n result = this._bilinearPatch.uvFractionToPoint(u, v, result);\n result.z += z;\n return result;\n }\n}\n\n/** @internal */\nexport interface TerrainTileContent extends TileContent {\n terrain?: {\n renderGeometry?: RenderTerrainGeometry;\n /** Used on leaves to support up-sampling. */\n mesh?: RealityMeshParams;\n };\n}\n\nconst scratchNormal = Vector3d.create();\nconst scratchViewZ = Vector3d.create();\nconst scratchPoint = Point3d.create();\nconst scratchClipPlanes = [ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint)];\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\n\n/** A [[Tile]] belonging to a [[MapTileTree]] representing a rectangular region of a map of the Earth.\n * @public\n */\nexport class MapTile extends RealityTile {\n private static _maxParentHeightDepth = 4;\n private _imageryTiles?: ImageryMapTile[];\n private _hiddenTiles?: ImageryMapTile[];\n private _highResolutionReplacementTiles?: ImageryMapTile[];\n /** @internal */\n public everLoaded = false; // If the tile is only required for availability metadata, load it once and then allow it to be unloaded.\n /** @internal */\n protected _heightRange: Range1d | undefined;\n /** @internal */\n protected _renderGeometry?: RenderTerrainGeometry;\n /** @internal */\n protected _mesh?: RealityMeshParams; // Primitive retained on leaves only for upsampling.\n /** @internal */\n public override get isReady(): boolean {\n return super.isReady && this.baseImageryIsReady;\n }\n\n /** @internal */\n public override get hasGraphics(): boolean {\n return this._renderGeometry !== undefined;\n }\n\n /** @internal */\n public get renderGeometry() { return this._renderGeometry; }\n /** @internal */\n public get mesh() { return this._mesh; }\n /** @internal */\n public get loadableTerrainTile() { return this.loadableTile as MapTile; }\n /** @internal */\n public get isPlanar(): boolean { return this._patch instanceof PlanarTilePatch; }\n /** @internal */\n public get imageryTiles(): ImageryMapTile[] | undefined { return this._imageryTiles; }\n /** List of selected tiles but are currently in hidden state (i.e. scale range visibility)\n * @internal\n */\n public get hiddenImageryTiles(): ImageryMapTile[] | undefined { return this._hiddenTiles; }\n\n /** List of leafs tiles that have been selected as a replacement for missing high resolution tiles.\n * When this list is non-empty this means we are past the maximum LOD available of the tile tree.\n * By using those tiles, you are likely to get a display where tiles looks pixelated..\n * in some cases this is preferred to have no tile at all.\n * @internal\n */\n public get highResolutionReplacementTiles(): ImageryMapTile[] | undefined { return this._highResolutionReplacementTiles; }\n\n /** The [[MapTileTree]] to which this tile belongs. */\n public readonly mapTree: MapTileTree;\n /** Uniquely identifies this tile within its [[mapTree]]. */\n public readonly quadId: QuadId;\n private _patch: TilePatch;\n /** The area of the surface of the Earth that this tile represents. */\n public readonly rectangle: MapCartoRectangle;\n /** @internal */\n protected _cornerRays?: Ray3d[];\n\n /** @internal */\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined) {\n super(params, mapTree);\n this.mapTree = mapTree;\n this.quadId = quadId;\n this._patch = patch;\n this.rectangle = rectangle;\n this._cornerRays = cornerRays;\n this._heightRange = heightRange?.clone();\n }\n\n /** @internal */\n public getRangeCorners(result: Point3d[]): Point3d[] {\n return this._patch instanceof PlanarTilePatch ? this._patch.getRangeCorners(this.heightRange!, result) : this.range.corners(result);\n }\n\n /** @internal */\n public override getSizeProjectionCorners(): Point3d[] | undefined {\n // Use only the first 4 corners -- On terrain tiles the height is initially exagerated to world height range which can cause excessive tile loading.\n const rangeCorners = this.getRangeCorners(scratchCorners);\n return rangeCorners.slice(0, 4);\n }\n\n /** @internal */\n public override markUsed(args: TileDrawArgs) {\n super.markUsed(args);\n if (this._imageryTiles)\n for (const imageryTile of this._imageryTiles)\n imageryTile.markUsed(args);\n }\n\n /** @internal */\n public override get graphicType() {\n if (this.mapTree.isOverlay)\n return TileGraphicType.Overlay;\n\n return (this.mapTree.useDepthBuffer || this._forceDepthBuffer) ? TileGraphicType.Scene : TileGraphicType.BackgroundMap;\n }\n\n /** @internal */\n public get mapLoader() { return this.realityRoot.loader as MapTileLoader; }\n /** @internal */\n public get isUpsampled() { return false; }\n\n /** @internal */\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\n if (0 === quadId.compare(this.quadId))\n return this;\n\n assert(quadId.level > this.quadId.level);\n if (quadId.level <= this.quadId.level)\n return undefined;\n\n if (this.children) {\n const shift = quadId.level - this.quadId.level - 1;\n const childRow = quadId.row >> shift;\n const childColumn = quadId.column >> shift;\n for (const child of this.children) {\n const mapChild = child as MapTile;\n const childQuadId = mapChild.quadId;\n if (childQuadId.row === childRow && childQuadId.column === childColumn)\n return mapChild.tileFromQuadId(quadId);\n }\n }\n\n return undefined;\n }\n\n private get _forceDepthBuffer() {\n // For large ellipsoidal globe tile force the depth buffer on to avoid anomalies at horizon.\n return this.mapTree.globeMode === GlobeMode.Ellipsoid && this.depth < 8;\n }\n\n /** @internal */\n public override addBoundingGraphic(builder: GraphicBuilder, color: ColorDef) {\n if (!this.isDisplayable)\n return;\n\n const heightRange = (this.heightRange === undefined) ? Range1d.createXX(-1, 1) : this.heightRange;\n const lows = [], highs = [], reorder = [0, 1, 3, 2, 0];\n const cornerRays = this._cornerRays!;\n if (this._patch instanceof PlanarTilePatch) {\n const normal = this._patch.normal;\n for (let i = 0; i < 5; i++) {\n const corner = this._patch.corners[reorder[i]];\n lows.push(corner.plusScaled(normal, heightRange.low));\n highs.push(corner.plusScaled(normal, heightRange.high));\n }\n } else {\n for (let i = 0; i < 5; i++) {\n const cornerRay = cornerRays[reorder[i]];\n lows.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.low));\n highs.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.high));\n }\n }\n\n builder.setSymbology(color, color, 1);\n builder.addLineString(lows);\n builder.addLineString(highs);\n for (let i = 0; i < 4; i++)\n builder.addLineString([lows[i], highs[i]]);\n\n const inColor = ColorDef.create(ColorByName.cornflowerBlue);\n const outColor = ColorDef.create(ColorByName.chartreuse);\n const transitionColor = ColorDef.create(ColorByName.aquamarine);\n\n const inPoints = [], outPoints = [], transitionPoints = [];\n\n for (const point of highs)\n if (this.mapTree.cartesianRange.containsPoint(point))\n inPoints.push(point);\n else if (this.mapTree.cartesianRange.distanceToPoint(point) < this.mapTree.cartesianTransitionDistance)\n transitionPoints.push(point);\n else\n outPoints.push(point);\n\n builder.setSymbology(inColor, inColor, 15);\n builder.addPointString(inPoints);\n builder.setSymbology(outColor, outColor, 15);\n builder.addPointString(outPoints);\n builder.setSymbology(transitionColor, transitionColor, 31);\n builder.addPointString(transitionPoints);\n }\n\n /** @internal */\n public override getContentClip(): ClipVector | undefined {\n const points = this.getClipShape();\n if (points.length < 3)\n return undefined;\n if (this.mapTree.globeMode === GlobeMode.Ellipsoid) {\n const normal = PolygonOps.areaNormal(points);\n const globeOrigin = this.mapTree.globeOrigin;\n const globeNormal = Vector3d.createStartEnd(globeOrigin, points[0]);\n const negate = normal.dotProduct(globeNormal) < 0;\n const clipPlanes = [];\n for (let i = 0; i < 4; i++) {\n const point = points[i];\n const clipNormal = globeOrigin.crossProductToPoints(point, points[(i + 1) % 4], scratchNormal);\n if (negate)\n clipNormal.negate(clipNormal);\n\n const clipPlane = ClipPlane.createNormalAndPoint(clipNormal, point, false, false, scratchClipPlanes[i]);\n if (clipPlane !== undefined) // Undefined at pole tiles...\n clipPlanes.push(clipPlane);\n }\n\n const planeSet = ConvexClipPlaneSet.createPlanes(clipPlanes);\n const clipPrimitive = ClipPrimitive.createCapture(planeSet);\n\n return ClipVector.createCapture([clipPrimitive]);\n } else {\n return ClipVector.createCapture([ClipShape.createShape(points)!]);\n }\n }\n\n /** @internal */\n public override setNotFound(): void {\n super.setNotFound();\n\n // For map tiles assume that an unfound tile implies descendants and siblings will also be unfound.\n if (undefined !== this.parent)\n this.parent.setLeaf();\n }\n\n /** @internal */\n public getGraphic(_system: RenderSystem, _texture: RenderTexture): RenderGraphic | undefined {\n return undefined;\n }\n\n /** For globe tiles displaying less then depth 2 appears distorted\n * @internal\n */\n public override get isDisplayable() {\n return this.mapTree.globeMode === GlobeMode.Ellipsoid ? (this.depth >= MapTileTree.minDisplayableDepth) : super.isDisplayable;\n }\n\n /** @internal */\n public override isOccluded(viewingSpace: ViewingSpace): boolean {\n if (undefined === this._cornerRays || this.mapTree.globeMode !== GlobeMode.Ellipsoid)\n return false;\n\n if (viewingSpace.eyePoint !== undefined) {\n if (!this.mapTree.pointAboveEllipsoid(viewingSpace.eyePoint))\n return false;\n\n for (const cornerNormal of this._cornerRays) {\n const eyeNormal = Vector3d.createStartEnd(viewingSpace.eyePoint, cornerNormal.origin, scratchNormal);\n eyeNormal.normalizeInPlace();\n if (eyeNormal.dotProduct(cornerNormal.direction) < .01)\n return false;\n }\n } else {\n const viewZ = viewingSpace.rotation.getRow(2, scratchViewZ);\n for (const cornerNormal of this._cornerRays)\n if (cornerNormal.direction.dotProduct(viewZ) > 0)\n return false;\n }\n\n return true;\n }\n\n /** @internal */\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\n const mapTree = this.mapTree;\n const childLevel = this.quadId.level + 1;\n const rowCount = mapTree.sourceTilingScheme.getNumberOfYChildrenAtLevel(childLevel);\n const columnCount = mapTree.sourceTilingScheme.getNumberOfXChildrenAtLevel(childLevel);\n\n const resolveChildren = (children: Tile[]) => {\n const childrenRange = Range3d.createNull();\n for (const child of children)\n childrenRange.extendRange(child.range);\n\n if (!this.range.containsRange(childrenRange))\n this.range.extendRange(childrenRange);\n\n resolve(children);\n };\n\n if (mapTree.doCreateGlobeChildren(this)) {\n this.createGlobeChildren(columnCount, rowCount, resolveChildren);\n return;\n }\n\n const resolvePlanarChildren = (childCorners: Point3d[][]) => {\n const level = this.quadId.level + 1;\n const column = this.quadId.column * 2;\n const row = this.quadId.row * 2;\n const children = [];\n const childrenAreLeaves = (this.depth + 1) === mapTree.loader.maxDepth;\n const globeMode = this.mapTree.globeMode;\n for (let j = 0; j < rowCount; j++) {\n for (let i = 0; i < columnCount; i++) {\n const quadId = new QuadId(level, column + i, row + j);\n const corners = childCorners[j * columnCount + i];\n const rectangle = mapTree.getTileRectangle(quadId);\n const normal = PolygonOps.areaNormal([corners[0], corners[1], corners[3], corners[2]]);\n normal.normalizeInPlace();\n\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\n const diagonal = Math.max(corners[0].distance(corners[3]), corners[1].distance(corners[2])) / 2.0;\n const chordHeight = globeMode === GlobeMode.Ellipsoid ? Math.sqrt(diagonal * diagonal + Constant.earthRadiusWGS84.equator * Constant.earthRadiusWGS84.equator) - Constant.earthRadiusWGS84.equator : 0.0;\n const rangeCorners = MapTile.computeRangeCorners(corners, normal, chordHeight, undefined, heightRange);\n const range = Range3d.createArray(rangeCorners);\n const child = this.mapTree.createPlanarChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: childrenAreLeaves }, quadId, corners, normal, rectangle, chordHeight, heightRange);\n if (child)\n children.push(child);\n }\n }\n\n resolveChildren(children);\n };\n\n mapTree.getPlanarChildCorners(this, columnCount, rowCount, resolvePlanarChildren);\n }\n\n private createGlobeChildren(columnCount: number, rowCount: number, resolve: (children: MapTile[]) => void) {\n const level = this.quadId.level + 1;\n const column = this.quadId.column * 2;\n const row = this.quadId.row * 2;\n const mapTree = this.mapTree;\n const children = [];\n\n for (let j = 0; j < rowCount; j++) {\n for (let i = 0; i < columnCount; i++) {\n const quadId = new QuadId(level, column + i, row + j);\n const angleSweep = quadId.getAngleSweep(mapTree.sourceTilingScheme);\n const ellipsoidPatch = EllipsoidPatch.createCapture(this.mapTree.earthEllipsoid, angleSweep.longitude, angleSweep.latitude);\n const range = ellipsoidPatch.range();\n const rectangle = mapTree.getTileRectangle(quadId);\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\n if (undefined !== heightRange)\n range.expandInPlace(heightRange.high - heightRange.low);\n\n children.push(this.mapTree.createGlobeChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: false }, quadId, range.corners(), rectangle, ellipsoidPatch, heightRange));\n }\n }\n\n resolve(children);\n return children;\n }\n\n /** @internal */\n public static computeRangeCorners(corners: Point3d[], normal: Vector3d, chordHeight: number, result?: Point3d[], heightRange?: Range1d) {\n if (result === undefined) {\n result = [];\n for (let i = 0; i < 8; i++)\n result.push(Point3d.create());\n }\n\n let index = 0;\n assert(corners.length === 4);\n const deltaLow = normal.scale(- chordHeight + (heightRange ? heightRange.low : 0));\n const deltaHigh = normal.scale(chordHeight + (heightRange ? heightRange.high : 0));\n\n for (const corner of corners)\n corner.plus(deltaLow, result[index++]);\n\n for (const corner of corners)\n corner.plus(deltaHigh, result[index++]);\n\n return result;\n }\n\n /** @internal */\n public override isRegionCulled(args: TileDrawArgs): boolean {\n return this.isContentCulled(args);\n }\n\n /** @internal */\n public override isContentCulled(args: TileDrawArgs): boolean {\n return FrustumPlanes.Containment.Outside === args.frustumPlanes.computeContainment(this.getRangeCorners(scratchCorners));\n }\n\n /** @internal */\n public clearLayers() {\n this.clearImageryTiles();\n this._graphic = undefined;\n if (this.children)\n for (const child of this.children)\n (child as MapTile).clearLayers();\n }\n\n private clearImageryTiles() {\n if (this._imageryTiles) {\n this._imageryTiles.forEach((tile) => tile.releaseMapTileUsage());\n this._imageryTiles = undefined;\n }\n if (this._hiddenTiles) {\n this._hiddenTiles = undefined;\n }\n if (this._highResolutionReplacementTiles) {\n this._highResolutionReplacementTiles = undefined;\n }\n }\n\n /** @internal */\n public override produceGraphics(): RenderGraphic | undefined {\n if (undefined !== this._graphic && this.imageryIsReady)\n return this._graphic;\n\n const geometry = this.renderGeometry;\n if (undefined === geometry)\n return undefined;\n\n const textures = this.getDrapeTextures();\n const { baseColor, baseTransparent, layerClassifiers } = this.mapTree;\n const graphic = IModelApp.renderSystem.createRealityMeshGraphic({ realityMesh: geometry, projection: this.getProjection(), tileRectangle: this.rectangle, featureTable: PackedFeatureTable.pack(this.mapLoader.featureTable), tileId: this.contentId, baseColor, baseTransparent, textures, layerClassifiers }, true);\n\n // If there are no layer classifiers then we can save this graphic for re-use. If layer classifiers exist they are regenerated based on view and we must collate them with the imagery.\n if (this.imageryIsReady && 0 === this.mapTree.layerClassifiers.size)\n this._graphic = graphic;\n\n return graphic;\n }\n\n /** @internal */\n public getClipShape(): Point3d[] {\n return (this._patch instanceof PlanarTilePatch) ? this._patch.getClipShape() : [this._cornerRays![0].origin, this._cornerRays![1].origin, this._cornerRays![3].origin, this._cornerRays![2].origin];\n }\n\n /** @internal */\n protected override _collectStatistics(stats: RenderMemory.Statistics): void {\n super._collectStatistics(stats);\n\n this._renderGeometry?.collectStatistics(stats);\n if (this._mesh) {\n stats.addTerrain(this._mesh.indices.byteLength\n + this._mesh.positions.points.byteLength\n + this._mesh.uvs.points.byteLength\n + (this._mesh.normals ? this._mesh.normals.byteLength : 0),\n );\n }\n }\n\n /** Height range is along with the tile corners to detect if tile intersects view frustum.\n * Range will be single value fo ron-terrain tiles -- if terrain tile is not loaded it will\n * inherit height from ancestors.\n * @internal\n */\n public get heightRange(): Range1d | undefined {\n if (undefined !== this._heightRange)\n return this._heightRange;\n\n for (let parent = this.parent; undefined !== parent; parent = parent.parent) {\n const mapParent = parent as MapTile;\n if (undefined !== mapParent._heightRange)\n return mapParent._heightRange;\n }\n\n assert(false);\n return Range1d.createNull();\n }\n\n /** @internal */\n public get mapTilingScheme() {\n return this.mapTree.sourceTilingScheme;\n }\n\n /** Adjust the minimum and maximum elevations of the terrain within this tile. */\n public adjustHeights(minHeight: number, maxHeight: number) {\n if (undefined === this._heightRange)\n this._heightRange = Range1d.createXX(minHeight, maxHeight);\n else {\n this._heightRange.low = Math.max(this.heightRange!.low, minHeight);\n this._heightRange.high = Math.min(this.heightRange!.high, maxHeight);\n }\n\n if (this.rangeCorners && this._patch instanceof PlanarTilePatch)\n this._patch.getRangeCorners(this.heightRange!, this.rangeCorners);\n }\n\n /** Obtain a [[MapTileProjection]] to project positions within this tile's area into 3d space. */\n public getProjection(heightRange?: Range1d): MapTileProjection {\n return this._patch instanceof PlanarTilePatch ? new PlanarProjection(this._patch, heightRange) : new EllipsoidProjection(this._patch, heightRange);\n }\n\n /** @internal */\n public get baseImageryIsReady(): boolean {\n if (undefined !== this.mapTree.baseColor || 0 === this.mapTree.layerImageryTrees.length)\n return true;\n\n if (undefined === this._imageryTiles)\n return false;\n\n const baseTreeId = this.mapTree.layerImageryTrees[0].tree.modelId;\n return this._imageryTiles.every((imageryTile) => imageryTile.imageryTree.modelId !== baseTreeId || imageryTile.isReady);\n }\n\n /** @internal */\n public get imageryIsReady(): boolean {\n if (undefined === this._imageryTiles)\n return 0 === this.mapTree.layerImageryTrees.length;\n\n return this._imageryTiles.every((tile) => tile.isReady);\n }\n\n /** Select secondary (imagery) tiles\n * @internal\n */\n public override selectSecondaryTiles(args: TileDrawArgs, context: TraversalSelectionContext) {\n if (0 === this.mapTree.layerImageryTrees.length || this.imageryIsReady)\n return;\n\n this.clearImageryTiles();\n this._imageryTiles = new Array<ImageryMapTile>();\n this._hiddenTiles = new Array<ImageryMapTile>();\n this._highResolutionReplacementTiles = new Array<ImageryMapTile>();\n for (const layerImageryTree of this.mapTree.layerImageryTrees) {\n let tmpTiles = new Array<ImageryMapTile>();\n const tmpLeafTiles = new Array<ImageryMapTile>();\n if (TileTreeLoadStatus.Loaded !== layerImageryTree.tree.selectCartoDrapeTiles(tmpTiles, tmpLeafTiles, this, args)) {\n this._imageryTiles = undefined;\n return;\n }\n\n // When the base layer is zoomed-in beyond it's max resolution,\n // we display leaf tiles and stretched them if needed.\n // We don't want the same behavior non-base layers, in the case,\n // the layer will simply disappear past its max resolution.\n // Note: Replacement leaf tiles are kept as a mean to determine which\n // imagery tree has reached it's maximum zoom level.\n if (layerImageryTree.baseImageryLayer) {\n tmpTiles = [...tmpTiles, ...tmpLeafTiles];\n } else {\n this._highResolutionReplacementTiles = [...this._highResolutionReplacementTiles, ...tmpLeafTiles];\n }\n\n // MapTileTree might include a non-visible imagery tree, we need to check for that.\n if (layerImageryTree.settings.visible && !layerImageryTree.settings.allSubLayersInvisible) {\n for (const imageryTile of tmpTiles) {\n imageryTile.markMapTileUsage();\n if (imageryTile.isReady)\n args.markReady(imageryTile);\n else\n context.missing.push(imageryTile);\n this._imageryTiles.push(imageryTile);\n }\n } else {\n // Even though those selected imagery tile are not visible,\n // we keep track of them for scale range reporting.\n for (const imageryTile of tmpTiles) {\n this._hiddenTiles.push(imageryTile);\n }\n }\n }\n }\n\n private static _scratchRectangle1 = MapCartoRectangle.createZero();\n private static _scratchRectangle2 = MapCartoRectangle.createZero();\n\n /** The height range for terrain tiles is not known until the tiles are unloaded. We use \"ApproximateTerrainHeight\" for first 6 levels but below\n * that the tiles inherit height range from parents. This is problematic as tiles with large height range will be unnecessarily selected as\n * they apparently intersect view frustum. To avoid this force loading of terrain tiles if they exceed \"_maxParentHightDepth\".\n * @internal\n */\n protected override forceSelectRealityTile(): boolean {\n let parentHeightDepth = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n for (let parent: MapTile = this; parent !== undefined && parent._heightRange === undefined; parent = parent.parent as MapTile)\n parentHeightDepth++;\n\n return parentHeightDepth > MapTile._maxParentHeightDepth;\n }\n\n /** @internal */\n protected override minimumVisibleFactor(): number {\n // if minimumVisibleFactor is more than 0, it stops parents from loading when children are not ready, to fill in gaps\n return 0.0;\n }\n\n private static _scratchThisDiagonal = Vector2d.create();\n private static _scratchDrapeDiagonal = Vector2d.create();\n\n /** @internal */\n public getDrapeTextures(): TerrainTexture[] | undefined {\n if (undefined === this._imageryTiles)\n return undefined;\n\n const drapeTextures: TerrainTexture[] = [];\n const thisRectangle = this.loadableTerrainTile.rectangle;\n const thisDiagonal = thisRectangle.diagonal(MapTile._scratchThisDiagonal);\n const bordersNorthPole = this.quadId.bordersNorthPole(this.mapTree.sourceTilingScheme);\n const bordersSouthPole = this.quadId.bordersSouthPole(this.mapTree.sourceTilingScheme);\n for (const imageryTile of this._imageryTiles) {\n if (imageryTile.texture) {\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, imageryTile.rectangle));\n\n if ((bordersNorthPole && imageryTile.quadId.bordersNorthPole(imageryTile.tilingScheme) && imageryTile.rectangle.high.y < thisRectangle.high.y) ||\n (bordersSouthPole && imageryTile.quadId.bordersSouthPole(imageryTile.tilingScheme) && imageryTile.rectangle.low.y > thisRectangle.low.y)) {\n // Add separate texture stretching last sliver of tile imagery to cover pole.\n const sliverRectangle = imageryTile.rectangle.clone(MapTile._scratchRectangle1);\n const clipRectangle = thisRectangle.clone(MapTile._scratchRectangle2);\n const sliverHeight = sliverRectangle.high.y - sliverRectangle.low.y;\n\n if (bordersSouthPole) {\n clipRectangle.high.y = sliverRectangle.low.y;\n sliverRectangle.low.y = thisRectangle.low.y;\n sliverRectangle.high.y += 1 / sliverHeight;\n } else {\n clipRectangle.low.y = sliverRectangle.high.y;\n sliverRectangle.high.y = thisRectangle.high.y;\n sliverRectangle.low.y -= 1 / sliverHeight;\n }\n\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, sliverRectangle, clipRectangle));\n }\n } else {\n for (let parent = imageryTile.parent; undefined !== parent; parent = parent.parent) {\n const mapTile = parent as ImageryMapTile;\n if (mapTile.texture) {\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, mapTile, mapTile.rectangle, imageryTile.rectangle));\n break;\n }\n }\n }\n }\n\n return drapeTextures.length > 0 ? drapeTextures : undefined;\n }\n\n private static _scratchIntersectRange = Range2d.createNull();\n\n private computeDrapeTexture(thisRectangle: Range2d, thisDiagonal: Vector2d, imageryTile: ImageryMapTile, drapeRectangle: Range2d, clipRectangle?: Range2d): TerrainTexture {\n assert(imageryTile.texture !== undefined);\n\n // Compute transformation from the terrain tile texture coordinates (0-1) to the drape tile texture coordinates.\n const drapeDiagonal = drapeRectangle.diagonal(MapTile._scratchDrapeDiagonal);\n const translate = Vector2d.create((thisRectangle.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (thisRectangle.low.y - drapeRectangle.low.y) / drapeDiagonal.y);\n const scale = Vector2d.create(thisDiagonal.x / drapeDiagonal.x, thisDiagonal.y / drapeDiagonal.y);\n const featureIndex = this.mapLoader.getFeatureIndex(imageryTile.imageryTree.modelId);\n let clipRect;\n if (undefined !== clipRectangle) {\n const intersect = clipRectangle.intersect(drapeRectangle, MapTile._scratchIntersectRange);\n assert(!intersect.isNull);\n clipRect = Range2d.createXYXY((intersect.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.low.y - drapeRectangle.low.y) / drapeDiagonal.y, (intersect.high.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.high.y - drapeRectangle.low.y) / drapeDiagonal.y);\n }\n\n const imageryModelId = imageryTile.tree.modelId;\n return new TerrainTexture(imageryTile.texture, featureIndex, scale, translate, drapeRectangle, this.mapTree.getLayerIndex(imageryModelId), this.mapTree.getLayerTransparency(imageryModelId), clipRect);\n }\n\n /** @internal */\n public override setContent(content: TerrainTileContent): void {\n\n if (this.quadId.level < this.maxDepth) {\n const childIds = this.quadId.getChildIds();\n for (const childId of childIds) {\n if (!this.mapLoader.isTileAvailable(childId)) {\n this._mesh = content.terrain?.mesh; // If a child is unavailable retain mesh for upsampling.\n break;\n }\n }\n }\n\n if (this.mapTree.produceGeometry) {\n const iModelTransform = this.mapTree.iModelTransform;\n const geometryTransform = content.terrain?.renderGeometry?.transform;\n const transform = geometryTransform ? iModelTransform.multiplyTransformTransform(geometryTransform) : iModelTransform;\n const polyface = content.terrain?.mesh ? RealityMeshParams.toPolyface(content.terrain.mesh, { transform }) : undefined;\n this._geometry = polyface ? { polyfaces: [polyface] } : undefined;\n\n } else {\n dispose(this._renderGeometry);\n this._renderGeometry = content.terrain?.renderGeometry;\n }\n\n this.everLoaded = true;\n\n if (undefined !== content.contentRange)\n this._contentRange = content.contentRange;\n\n this.setIsReady();\n }\n\n /** @internal */\n public override freeMemory(): void {\n // ###TODO MapTiles and ImageryMapTiles share resources and don't currently interact well with TileAdmin.freeMemory(). Opt out for now.\n }\n\n /** @internal */\n public override disposeContents() {\n super.disposeContents();\n this._renderGeometry = dispose(this._renderGeometry);\n this.clearImageryTiles();\n // Note - don't dispose of mesh - these should only ever exist on terrain leaf tile and are required by children. Let garbage collector handle them.\n }\n}\n\n/** A child tile that has no content of its own available. It instead produces content by up-sampling the content of an ancestor tile.\n * @internal\n */\nexport class UpsampledMapTile extends MapTile {\n /** The ancestor tile whose content will be up-sampled. */\n private readonly _loadableTile: MapTile;\n\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined, loadableTile: MapTile) {\n super(params, mapTree, quadId, patch, rectangle, heightRange, cornerRays);\n this._loadableTile = loadableTile;\n }\n\n public override get isUpsampled() { return true; }\n public override get isEmpty() { return false; }\n public override get loadableTile(): RealityTile { return this._loadableTile; }\n\n private upsampleFromParent() {\n const parent = this.loadableTerrainTile;\n const parentMesh = parent.mesh;\n if (undefined === parentMesh) {\n return undefined;\n }\n const thisId = this.quadId, parentId = parent.quadId;\n const levelDelta = thisId.level - parentId.level;\n const thisColumn = thisId.column - (parentId.column << levelDelta);\n const thisRow = thisId.row - (parentId.row << levelDelta);\n const scale = 1.0 / (1 << levelDelta);\n const parentParameterRange = Range2d.createXYXY(scale * thisColumn, scale * thisRow, scale * (thisColumn + 1), scale * (thisRow + 1));\n const upsample = upsampleRealityMeshParams(parentMesh, parentParameterRange);\n this.adjustHeights(upsample.heightRange.low, upsample.heightRange.high);\n return upsample;\n }\n\n public override get renderGeometry() {\n if (undefined === this._renderGeometry) {\n const upsample = this.upsampleFromParent();\n const projection = this.loadableTerrainTile.getProjection(this.heightRange);\n if (upsample)\n this._renderGeometry = IModelApp.renderSystem.createTerrainMesh(upsample.mesh, projection.transformFromLocal, true);\n }\n return this._renderGeometry;\n }\n\n public override get isLoading(): boolean { return this.loadableTile.isLoading; }\n public override get isQueued(): boolean { return this.loadableTile.isQueued; }\n public override get isNotFound(): boolean { return this.loadableTile.isNotFound; }\n public override get isReady(): boolean { return (this._renderGeometry !== undefined || this.loadableTile.loadStatus === TileLoadStatus.Ready) && this.baseImageryIsReady; }\n\n public override markUsed(args: TileDrawArgs): void {\n args.markUsed(this);\n args.markUsed(this.loadableTile);\n }\n}\n"]}
1
+ {"version":3,"file":"MapTile.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTile.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { ColorByName, ColorDef, FrustumPlanes, GlobeMode, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\nimport { AxisOrder, BilinearPatch, ClipPlane, ClipPrimitive, ClipShape, ClipVector, Constant, ConvexClipPlaneSet, EllipsoidPatch, LongitudeLatitudeNumber, Matrix3d, Point3d, PolygonOps, Range1d, Range2d, Range3d, Ray3d, Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { GraphicBuilder } from \"../../render/GraphicBuilder\";\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\nimport { upsampleRealityMeshParams } from \"../../render/UpsampleRealityMeshParams\";\nimport { RenderGraphic } from \"../../render/RenderGraphic\";\nimport { RenderMemory } from \"../../render/RenderMemory\";\nimport { RenderSystem, RenderTerrainGeometry, TerrainTexture } from \"../../render/RenderSystem\";\nimport { ViewingSpace } from \"../../ViewingSpace\";\nimport {\n ImageryMapTile, MapCartoRectangle, MapTileLoader, MapTileTree, QuadId, RealityTile, RealityTileParams, Tile, TileContent, TileDrawArgs, TileGraphicType,\n TileLoadStatus, TileTreeLoadStatus, TraversalSelectionContext,\n} from \"../internal\";\n\n/** @internal */\nexport class PlanarTilePatch {\n constructor(public corners: Point3d[], public normal: Vector3d, private _chordHeight: number) {\n }\n\n public getRangeCorners(heightRange: Range1d, result: Point3d[]): Point3d[] {\n let index = 0;\n for (const corner of this.corners)\n corner.plusScaled(this.normal, heightRange.low - this._chordHeight, result[index++]);\n\n for (const corner of this.corners)\n corner.plusScaled(this.normal, heightRange.high + this._chordHeight, result[index++]);\n\n return result;\n }\n public getClipShape(): Point3d[] {\n return [this.corners[0], this.corners[1], this.corners[3], this.corners[2]];\n }\n}\n\n/** @internal */\nexport type TilePatch = PlanarTilePatch | EllipsoidPatch;\n\n/** Projects points within the rectangular region of a [[MapTile]] into 3d space.\n * @see [[MapTile.getProjection]] to obtain the projection for a [[MapTile]].\n * @public\n */\nexport abstract class MapTileProjection {\n /** The extents of the volume of space associated with the projected [[MapTile]]. */\n public abstract get localRange(): Range3d;\n /** @alpha */\n public abstract get transformFromLocal(): Transform;\n\n /** Given parametric coordinates in [0, 1] within the tile's rectangular region, and an elevation above the Earth,\n * compute the 3d position in space.\n */\n public abstract getPoint(u: number, v: number, height: number, result?: Point3d): Point3d;\n\n /** @alpha */\n public get ellipsoidPatch(): EllipsoidPatch | undefined { return undefined; }\n\n /** @alpha */\n public getGlobalPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\n const point = this.getPoint(u, v, z, result);\n return this.transformFromLocal.multiplyPoint3d(point, point);\n }\n}\n\n/** @alpha */\nclass EllipsoidProjection extends MapTileProjection {\n public transformFromLocal = Transform.createIdentity();\n public localRange: Range3d;\n constructor(private _patch: EllipsoidPatch, heightRange?: Range1d) {\n super();\n this.localRange = _patch.range();\n this.localRange.expandInPlace(heightRange ? (heightRange.high - heightRange.low) : 0);\n }\n private static _scratchAngles = LongitudeLatitudeNumber.createZero();\n private static _scratchRay = Ray3d.createZero();\n public getPoint(u: number, v: number, height: number, result?: Point3d): Point3d {\n const angles = this._patch.uvFractionToAngles(u, v, height, EllipsoidProjection._scratchAngles);\n const ray = this._patch.anglesToUnitNormalRay(angles, EllipsoidProjection._scratchRay);\n return Point3d.createFrom(ray!.origin, result);\n }\n public override get ellipsoidPatch() { return this._patch; }\n}\n\n/** @alpha */\nclass PlanarProjection extends MapTileProjection {\n private _bilinearPatch: BilinearPatch;\n public transformFromLocal: Transform;\n public localRange: Range3d;\n constructor(patch: PlanarTilePatch, heightRange?: Range1d) {\n super();\n this.transformFromLocal = Transform.createOriginAndMatrix(patch.corners[0], Matrix3d.createRigidHeadsUp(patch.normal, AxisOrder.ZYX));\n const planeCorners = this.transformFromLocal.multiplyInversePoint3dArray([patch.corners[0], patch.corners[1], patch.corners[2], patch.corners[3]])!;\n this.localRange = Range3d.createArray(planeCorners);\n this.localRange.low.z += heightRange ? heightRange.low : 0;\n this.localRange.high.z += heightRange ? heightRange.high : 0;\n this._bilinearPatch = new BilinearPatch(planeCorners[0], planeCorners[1], planeCorners[2], planeCorners[3]);\n }\n public getPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\n result = this._bilinearPatch.uvFractionToPoint(u, v, result);\n result.z += z;\n return result;\n }\n}\n\n/** @internal */\nexport interface TerrainTileContent extends TileContent {\n terrain?: {\n renderGeometry?: RenderTerrainGeometry;\n /** Used on leaves to support up-sampling. */\n mesh?: RealityMeshParams;\n };\n}\n\nconst scratchNormal = Vector3d.create();\nconst scratchViewZ = Vector3d.create();\nconst scratchPoint = Point3d.create();\nconst scratchClipPlanes = [ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint)];\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\n\n/** A [[Tile]] belonging to a [[MapTileTree]] representing a rectangular region of a map of the Earth.\n * @public\n */\nexport class MapTile extends RealityTile {\n private static _maxParentHeightDepth = 4;\n private _imageryTiles?: ImageryMapTile[];\n private _hiddenTiles?: ImageryMapTile[];\n private _highResolutionReplacementTiles?: ImageryMapTile[];\n /** @internal */\n public everLoaded = false; // If the tile is only required for availability metadata, load it once and then allow it to be unloaded.\n /** @internal */\n protected _heightRange: Range1d | undefined;\n /** @internal */\n protected _renderGeometry?: RenderTerrainGeometry;\n /** @internal */\n protected _mesh?: RealityMeshParams; // Primitive retained on leaves only for upsampling.\n /** @internal */\n public override get isReady(): boolean {\n return super.isReady && this.baseImageryIsReady;\n }\n\n /** @internal */\n public override get hasGraphics(): boolean {\n return this._renderGeometry !== undefined;\n }\n\n /** @internal */\n public get renderGeometry() { return this._renderGeometry; }\n /** @internal */\n public get mesh() { return this._mesh; }\n /** @internal */\n public get loadableTerrainTile() { return this.loadableTile as MapTile; }\n /** @internal */\n public get isPlanar(): boolean { return this._patch instanceof PlanarTilePatch; }\n /** @internal */\n public get imageryTiles(): ImageryMapTile[] | undefined { return this._imageryTiles; }\n /** List of selected tiles but are currently in hidden state (i.e. scale range visibility)\n * @internal\n */\n public get hiddenImageryTiles(): ImageryMapTile[] | undefined { return this._hiddenTiles; }\n\n /** List of leafs tiles that have been selected as a replacement for missing high resolution tiles.\n * When this list is non-empty this means we are past the maximum LOD available of the tile tree.\n * By using those tiles, you are likely to get a display where tiles looks pixelated..\n * in some cases this is preferred to have no tile at all.\n * @internal\n */\n public get highResolutionReplacementTiles(): ImageryMapTile[] | undefined { return this._highResolutionReplacementTiles; }\n\n /** The [[MapTileTree]] to which this tile belongs. */\n public readonly mapTree: MapTileTree;\n /** Uniquely identifies this tile within its [[mapTree]]. */\n public readonly quadId: QuadId;\n private _patch: TilePatch;\n /** The area of the surface of the Earth that this tile represents. */\n public readonly rectangle: MapCartoRectangle;\n /** @internal */\n protected _cornerRays?: Ray3d[];\n\n /** @internal */\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined) {\n super(params, mapTree);\n this.mapTree = mapTree;\n this.quadId = quadId;\n this._patch = patch;\n this.rectangle = rectangle;\n this._cornerRays = cornerRays;\n this._heightRange = heightRange?.clone();\n }\n\n /** @internal */\n public getRangeCorners(result: Point3d[]): Point3d[] {\n return this._patch instanceof PlanarTilePatch ? this._patch.getRangeCorners(this.heightRange!, result) : this.range.corners(result);\n }\n\n /** @internal */\n public override getSizeProjectionCorners(): Point3d[] | undefined {\n // Use only the first 4 corners -- On terrain tiles the height is initially exagerated to world height range which can cause excessive tile loading.\n const rangeCorners = this.getRangeCorners(scratchCorners);\n return rangeCorners.slice(0, 4);\n }\n\n /** @internal */\n public override markUsed(args: TileDrawArgs) {\n super.markUsed(args);\n if (this._imageryTiles)\n for (const imageryTile of this._imageryTiles)\n imageryTile.markUsed(args);\n }\n\n /** @internal */\n public override get graphicType() {\n if (this.mapTree.isOverlay)\n return TileGraphicType.Overlay;\n\n return (this.mapTree.useDepthBuffer || this._forceDepthBuffer) ? TileGraphicType.Scene : TileGraphicType.BackgroundMap;\n }\n\n /** @internal */\n public get mapLoader() { return this.realityRoot.loader as MapTileLoader; }\n /** @internal */\n public get isUpsampled() { return false; }\n\n /** @internal */\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\n if (0 === quadId.compare(this.quadId))\n return this;\n\n assert(quadId.level > this.quadId.level);\n if (quadId.level <= this.quadId.level)\n return undefined;\n\n if (this.children) {\n const shift = quadId.level - this.quadId.level - 1;\n const childRow = quadId.row >> shift;\n const childColumn = quadId.column >> shift;\n for (const child of this.children) {\n const mapChild = child as MapTile;\n const childQuadId = mapChild.quadId;\n if (childQuadId.row === childRow && childQuadId.column === childColumn)\n return mapChild.tileFromQuadId(quadId);\n }\n }\n\n return undefined;\n }\n\n private get _forceDepthBuffer() {\n // For large ellipsoidal globe tile force the depth buffer on to avoid anomalies at horizon.\n return this.mapTree.globeMode === GlobeMode.Ellipsoid && this.depth < 8;\n }\n\n /** @internal */\n public override addBoundingGraphic(builder: GraphicBuilder, color: ColorDef) {\n if (!this.isDisplayable)\n return;\n\n const heightRange = (this.heightRange === undefined) ? Range1d.createXX(-1, 1) : this.heightRange;\n const lows = [], highs = [], reorder = [0, 1, 3, 2, 0];\n const cornerRays = this._cornerRays!;\n if (this._patch instanceof PlanarTilePatch) {\n const normal = this._patch.normal;\n for (let i = 0; i < 5; i++) {\n const corner = this._patch.corners[reorder[i]];\n lows.push(corner.plusScaled(normal, heightRange.low));\n highs.push(corner.plusScaled(normal, heightRange.high));\n }\n } else {\n for (let i = 0; i < 5; i++) {\n const cornerRay = cornerRays[reorder[i]];\n lows.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.low));\n highs.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.high));\n }\n }\n\n builder.setSymbology(color, color, 1);\n builder.addLineString(lows);\n builder.addLineString(highs);\n for (let i = 0; i < 4; i++)\n builder.addLineString([lows[i], highs[i]]);\n\n const inColor = ColorDef.create(ColorByName.cornflowerBlue);\n const outColor = ColorDef.create(ColorByName.chartreuse);\n const transitionColor = ColorDef.create(ColorByName.aquamarine);\n\n const inPoints = [], outPoints = [], transitionPoints = [];\n\n for (const point of highs)\n if (this.mapTree.cartesianRange.containsPoint(point))\n inPoints.push(point);\n else if (this.mapTree.cartesianRange.distanceToPoint(point) < this.mapTree.cartesianTransitionDistance)\n transitionPoints.push(point);\n else\n outPoints.push(point);\n\n builder.setSymbology(inColor, inColor, 15);\n builder.addPointString(inPoints);\n builder.setSymbology(outColor, outColor, 15);\n builder.addPointString(outPoints);\n builder.setSymbology(transitionColor, transitionColor, 31);\n builder.addPointString(transitionPoints);\n }\n\n /** @internal */\n public override getContentClip(): ClipVector | undefined {\n const points = this.getClipShape();\n if (points.length < 3)\n return undefined;\n if (this.mapTree.globeMode === GlobeMode.Ellipsoid) {\n const normal = PolygonOps.areaNormal(points);\n const globeOrigin = this.mapTree.globeOrigin;\n const globeNormal = Vector3d.createStartEnd(globeOrigin, points[0]);\n const negate = normal.dotProduct(globeNormal) < 0;\n const clipPlanes = [];\n for (let i = 0; i < 4; i++) {\n const point = points[i];\n const clipNormal = globeOrigin.crossProductToPoints(point, points[(i + 1) % 4], scratchNormal);\n if (negate)\n clipNormal.negate(clipNormal);\n\n const clipPlane = ClipPlane.createNormalAndPoint(clipNormal, point, false, false, scratchClipPlanes[i]);\n if (clipPlane !== undefined) // Undefined at pole tiles...\n clipPlanes.push(clipPlane);\n }\n\n const planeSet = ConvexClipPlaneSet.createPlanes(clipPlanes);\n const clipPrimitive = ClipPrimitive.createCapture(planeSet);\n\n return ClipVector.createCapture([clipPrimitive]);\n } else {\n return ClipVector.createCapture([ClipShape.createShape(points)!]);\n }\n }\n\n /** @internal */\n public override setNotFound(): void {\n super.setNotFound();\n\n // For map tiles assume that an unfound tile implies descendants and siblings will also be unfound.\n if (undefined !== this.parent)\n this.parent.setLeaf();\n }\n\n /** @internal */\n public getGraphic(_system: RenderSystem, _texture: RenderTexture): RenderGraphic | undefined {\n return undefined;\n }\n\n /** For globe tiles displaying less then depth 2 appears distorted\n * @internal\n */\n public override get isDisplayable() {\n return this.mapTree.globeMode === GlobeMode.Ellipsoid ? (this.depth >= MapTileTree.minDisplayableDepth) : super.isDisplayable;\n }\n\n /** @internal */\n public override isOccluded(viewingSpace: ViewingSpace): boolean {\n if (undefined === this._cornerRays || this.mapTree.globeMode !== GlobeMode.Ellipsoid)\n return false;\n\n if (viewingSpace.eyePoint !== undefined) {\n if (!this.mapTree.pointAboveEllipsoid(viewingSpace.eyePoint))\n return false;\n\n for (const cornerNormal of this._cornerRays) {\n const eyeNormal = Vector3d.createStartEnd(viewingSpace.eyePoint, cornerNormal.origin, scratchNormal);\n eyeNormal.normalizeInPlace();\n if (eyeNormal.dotProduct(cornerNormal.direction) < .01)\n return false;\n }\n } else {\n const viewZ = viewingSpace.rotation.getRow(2, scratchViewZ);\n for (const cornerNormal of this._cornerRays)\n if (cornerNormal.direction.dotProduct(viewZ) > 0)\n return false;\n }\n\n return true;\n }\n\n /** @internal */\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\n const mapTree = this.mapTree;\n const childLevel = this.quadId.level + 1;\n const rowCount = mapTree.sourceTilingScheme.getNumberOfYChildrenAtLevel(childLevel);\n const columnCount = mapTree.sourceTilingScheme.getNumberOfXChildrenAtLevel(childLevel);\n\n const resolveChildren = (children: Tile[]) => {\n const childrenRange = Range3d.createNull();\n for (const child of children)\n childrenRange.extendRange(child.range);\n\n if (!this.range.containsRange(childrenRange))\n this.range.extendRange(childrenRange);\n\n resolve(children);\n };\n\n if (mapTree.doCreateGlobeChildren(this)) {\n this.createGlobeChildren(columnCount, rowCount, resolveChildren);\n return;\n }\n\n const resolvePlanarChildren = (childCorners: Point3d[][]) => {\n const level = this.quadId.level + 1;\n const column = this.quadId.column * 2;\n const row = this.quadId.row * 2;\n const children = [];\n const childrenAreLeaves = (this.depth + 1) === mapTree.loader.maxDepth;\n const globeMode = this.mapTree.globeMode;\n for (let j = 0; j < rowCount; j++) {\n for (let i = 0; i < columnCount; i++) {\n const quadId = new QuadId(level, column + i, row + j);\n const corners = childCorners[j * columnCount + i];\n const rectangle = mapTree.getTileRectangle(quadId);\n const normal = PolygonOps.areaNormal([corners[0], corners[1], corners[3], corners[2]]);\n normal.normalizeInPlace();\n\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\n const diagonal = Math.max(corners[0].distance(corners[3]), corners[1].distance(corners[2])) / 2.0;\n const chordHeight = globeMode === GlobeMode.Ellipsoid ? Math.sqrt(diagonal * diagonal + Constant.earthRadiusWGS84.equator * Constant.earthRadiusWGS84.equator) - Constant.earthRadiusWGS84.equator : 0.0;\n const rangeCorners = MapTile.computeRangeCorners(corners, normal, chordHeight, undefined, heightRange);\n const range = Range3d.createArray(rangeCorners);\n const child = this.mapTree.createPlanarChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: childrenAreLeaves }, quadId, corners, normal, rectangle, chordHeight, heightRange);\n if (child)\n children.push(child);\n }\n }\n\n resolveChildren(children);\n };\n\n mapTree.getPlanarChildCorners(this, columnCount, rowCount, resolvePlanarChildren);\n }\n\n private createGlobeChildren(columnCount: number, rowCount: number, resolve: (children: MapTile[]) => void) {\n const level = this.quadId.level + 1;\n const column = this.quadId.column * 2;\n const row = this.quadId.row * 2;\n const mapTree = this.mapTree;\n const children = [];\n\n for (let j = 0; j < rowCount; j++) {\n for (let i = 0; i < columnCount; i++) {\n const quadId = new QuadId(level, column + i, row + j);\n const angleSweep = quadId.getAngleSweep(mapTree.sourceTilingScheme);\n const ellipsoidPatch = EllipsoidPatch.createCapture(this.mapTree.earthEllipsoid, angleSweep.longitude, angleSweep.latitude);\n const range = ellipsoidPatch.range();\n const rectangle = mapTree.getTileRectangle(quadId);\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\n if (undefined !== heightRange)\n range.expandInPlace(heightRange.high - heightRange.low);\n\n children.push(this.mapTree.createGlobeChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: false }, quadId, range.corners(), rectangle, ellipsoidPatch, heightRange));\n }\n }\n\n resolve(children);\n return children;\n }\n\n /** @internal */\n public static computeRangeCorners(corners: Point3d[], normal: Vector3d, chordHeight: number, result?: Point3d[], heightRange?: Range1d) {\n if (result === undefined) {\n result = [];\n for (let i = 0; i < 8; i++)\n result.push(Point3d.create());\n }\n\n let index = 0;\n assert(corners.length === 4);\n const deltaLow = normal.scale(- chordHeight + (heightRange ? heightRange.low : 0));\n const deltaHigh = normal.scale(chordHeight + (heightRange ? heightRange.high : 0));\n\n for (const corner of corners)\n corner.plus(deltaLow, result[index++]);\n\n for (const corner of corners)\n corner.plus(deltaHigh, result[index++]);\n\n return result;\n }\n\n /** @internal */\n public override isRegionCulled(args: TileDrawArgs): boolean {\n return this.isContentCulled(args);\n }\n\n /** @internal */\n public override isContentCulled(args: TileDrawArgs): boolean {\n return FrustumPlanes.Containment.Outside === args.frustumPlanes.computeContainment(this.getRangeCorners(scratchCorners));\n }\n\n /** @internal */\n public clearLayers() {\n this.clearImageryTiles();\n this._graphic = undefined;\n if (this.children)\n for (const child of this.children)\n (child as MapTile).clearLayers();\n }\n\n private clearImageryTiles() {\n if (this._imageryTiles) {\n this._imageryTiles.forEach((tile) => tile.releaseMapTileUsage());\n this._imageryTiles = undefined;\n }\n if (this._hiddenTiles) {\n this._hiddenTiles = undefined;\n }\n if (this._highResolutionReplacementTiles) {\n this._highResolutionReplacementTiles = undefined;\n }\n }\n\n /** @internal */\n public override produceGraphics(): RenderGraphic | undefined {\n if (undefined !== this._graphic && this.imageryIsReady)\n return this._graphic;\n\n const geometry = this.renderGeometry;\n if (undefined === geometry)\n return undefined;\n\n const textures = this.getDrapeTextures();\n const { baseColor, baseTransparent, layerClassifiers } = this.mapTree;\n const graphic = IModelApp.renderSystem.createRealityMeshGraphic({ realityMesh: geometry, projection: this.getProjection(), tileRectangle: this.rectangle, featureTable: PackedFeatureTable.pack(this.mapLoader.featureTable), tileId: this.contentId, baseColor, baseTransparent, textures, layerClassifiers, disableClipStyle: true }, true);\n\n // If there are no layer classifiers then we can save this graphic for re-use. If layer classifiers exist they are regenerated based on view and we must collate them with the imagery.\n if (this.imageryIsReady && 0 === this.mapTree.layerClassifiers.size)\n this._graphic = graphic;\n\n return graphic;\n }\n\n /** @internal */\n public getClipShape(): Point3d[] {\n return (this._patch instanceof PlanarTilePatch) ? this._patch.getClipShape() : [this._cornerRays![0].origin, this._cornerRays![1].origin, this._cornerRays![3].origin, this._cornerRays![2].origin];\n }\n\n /** @internal */\n protected override _collectStatistics(stats: RenderMemory.Statistics): void {\n super._collectStatistics(stats);\n\n this._renderGeometry?.collectStatistics(stats);\n if (this._mesh) {\n stats.addTerrain(this._mesh.indices.byteLength\n + this._mesh.positions.points.byteLength\n + this._mesh.uvs.points.byteLength\n + (this._mesh.normals ? this._mesh.normals.byteLength : 0),\n );\n }\n }\n\n /** Height range is along with the tile corners to detect if tile intersects view frustum.\n * Range will be single value fo ron-terrain tiles -- if terrain tile is not loaded it will\n * inherit height from ancestors.\n * @internal\n */\n public get heightRange(): Range1d | undefined {\n if (undefined !== this._heightRange)\n return this._heightRange;\n\n for (let parent = this.parent; undefined !== parent; parent = parent.parent) {\n const mapParent = parent as MapTile;\n if (undefined !== mapParent._heightRange)\n return mapParent._heightRange;\n }\n\n assert(false);\n return Range1d.createNull();\n }\n\n /** @internal */\n public get mapTilingScheme() {\n return this.mapTree.sourceTilingScheme;\n }\n\n /** Adjust the minimum and maximum elevations of the terrain within this tile. */\n public adjustHeights(minHeight: number, maxHeight: number) {\n if (undefined === this._heightRange)\n this._heightRange = Range1d.createXX(minHeight, maxHeight);\n else {\n this._heightRange.low = Math.max(this.heightRange!.low, minHeight);\n this._heightRange.high = Math.min(this.heightRange!.high, maxHeight);\n }\n\n if (this.rangeCorners && this._patch instanceof PlanarTilePatch)\n this._patch.getRangeCorners(this.heightRange!, this.rangeCorners);\n }\n\n /** Obtain a [[MapTileProjection]] to project positions within this tile's area into 3d space. */\n public getProjection(heightRange?: Range1d): MapTileProjection {\n return this._patch instanceof PlanarTilePatch ? new PlanarProjection(this._patch, heightRange) : new EllipsoidProjection(this._patch, heightRange);\n }\n\n /** @internal */\n public get baseImageryIsReady(): boolean {\n if (undefined !== this.mapTree.baseColor || 0 === this.mapTree.layerImageryTrees.length)\n return true;\n\n if (undefined === this._imageryTiles)\n return false;\n\n const baseTreeId = this.mapTree.layerImageryTrees[0].tree.modelId;\n return this._imageryTiles.every((imageryTile) => imageryTile.imageryTree.modelId !== baseTreeId || imageryTile.isReady);\n }\n\n /** @internal */\n public get imageryIsReady(): boolean {\n if (undefined === this._imageryTiles)\n return 0 === this.mapTree.layerImageryTrees.length;\n\n return this._imageryTiles.every((tile) => tile.isReady);\n }\n\n /** Select secondary (imagery) tiles\n * @internal\n */\n public override selectSecondaryTiles(args: TileDrawArgs, context: TraversalSelectionContext) {\n if (0 === this.mapTree.layerImageryTrees.length || this.imageryIsReady)\n return;\n\n this.clearImageryTiles();\n this._imageryTiles = new Array<ImageryMapTile>();\n this._hiddenTiles = new Array<ImageryMapTile>();\n this._highResolutionReplacementTiles = new Array<ImageryMapTile>();\n for (const layerImageryTree of this.mapTree.layerImageryTrees) {\n let tmpTiles = new Array<ImageryMapTile>();\n const tmpLeafTiles = new Array<ImageryMapTile>();\n if (TileTreeLoadStatus.Loaded !== layerImageryTree.tree.selectCartoDrapeTiles(tmpTiles, tmpLeafTiles, this, args)) {\n this._imageryTiles = undefined;\n return;\n }\n\n // When the base layer is zoomed-in beyond it's max resolution,\n // we display leaf tiles and stretched them if needed.\n // We don't want the same behavior non-base layers, in the case,\n // the layer will simply disappear past its max resolution.\n // Note: Replacement leaf tiles are kept as a mean to determine which\n // imagery tree has reached it's maximum zoom level.\n if (layerImageryTree.baseImageryLayer) {\n tmpTiles = [...tmpTiles, ...tmpLeafTiles];\n } else {\n this._highResolutionReplacementTiles = [...this._highResolutionReplacementTiles, ...tmpLeafTiles];\n }\n\n // MapTileTree might include a non-visible imagery tree, we need to check for that.\n if (layerImageryTree.settings.visible && !layerImageryTree.settings.allSubLayersInvisible) {\n for (const imageryTile of tmpTiles) {\n imageryTile.markMapTileUsage();\n if (imageryTile.isReady)\n args.markReady(imageryTile);\n else\n context.missing.push(imageryTile);\n this._imageryTiles.push(imageryTile);\n }\n } else {\n // Even though those selected imagery tile are not visible,\n // we keep track of them for scale range reporting.\n for (const imageryTile of tmpTiles) {\n this._hiddenTiles.push(imageryTile);\n }\n }\n }\n }\n\n private static _scratchRectangle1 = MapCartoRectangle.createZero();\n private static _scratchRectangle2 = MapCartoRectangle.createZero();\n\n /** The height range for terrain tiles is not known until the tiles are unloaded. We use \"ApproximateTerrainHeight\" for first 6 levels but below\n * that the tiles inherit height range from parents. This is problematic as tiles with large height range will be unnecessarily selected as\n * they apparently intersect view frustum. To avoid this force loading of terrain tiles if they exceed \"_maxParentHightDepth\".\n * @internal\n */\n protected override forceSelectRealityTile(): boolean {\n let parentHeightDepth = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n for (let parent: MapTile = this; parent !== undefined && parent._heightRange === undefined; parent = parent.parent as MapTile)\n parentHeightDepth++;\n\n return parentHeightDepth > MapTile._maxParentHeightDepth;\n }\n\n /** @internal */\n protected override minimumVisibleFactor(): number {\n // if minimumVisibleFactor is more than 0, it stops parents from loading when children are not ready, to fill in gaps\n return 0.0;\n }\n\n private static _scratchThisDiagonal = Vector2d.create();\n private static _scratchDrapeDiagonal = Vector2d.create();\n\n /** @internal */\n public getDrapeTextures(): TerrainTexture[] | undefined {\n if (undefined === this._imageryTiles)\n return undefined;\n\n const drapeTextures: TerrainTexture[] = [];\n const thisRectangle = this.loadableTerrainTile.rectangle;\n const thisDiagonal = thisRectangle.diagonal(MapTile._scratchThisDiagonal);\n const bordersNorthPole = this.quadId.bordersNorthPole(this.mapTree.sourceTilingScheme);\n const bordersSouthPole = this.quadId.bordersSouthPole(this.mapTree.sourceTilingScheme);\n for (const imageryTile of this._imageryTiles) {\n if (imageryTile.texture) {\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, imageryTile.rectangle));\n\n if ((bordersNorthPole && imageryTile.quadId.bordersNorthPole(imageryTile.tilingScheme) && imageryTile.rectangle.high.y < thisRectangle.high.y) ||\n (bordersSouthPole && imageryTile.quadId.bordersSouthPole(imageryTile.tilingScheme) && imageryTile.rectangle.low.y > thisRectangle.low.y)) {\n // Add separate texture stretching last sliver of tile imagery to cover pole.\n const sliverRectangle = imageryTile.rectangle.clone(MapTile._scratchRectangle1);\n const clipRectangle = thisRectangle.clone(MapTile._scratchRectangle2);\n const sliverHeight = sliverRectangle.high.y - sliverRectangle.low.y;\n\n if (bordersSouthPole) {\n clipRectangle.high.y = sliverRectangle.low.y;\n sliverRectangle.low.y = thisRectangle.low.y;\n sliverRectangle.high.y += 1 / sliverHeight;\n } else {\n clipRectangle.low.y = sliverRectangle.high.y;\n sliverRectangle.high.y = thisRectangle.high.y;\n sliverRectangle.low.y -= 1 / sliverHeight;\n }\n\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, sliverRectangle, clipRectangle));\n }\n } else {\n for (let parent = imageryTile.parent; undefined !== parent; parent = parent.parent) {\n const mapTile = parent as ImageryMapTile;\n if (mapTile.texture) {\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, mapTile, mapTile.rectangle, imageryTile.rectangle));\n break;\n }\n }\n }\n }\n\n return drapeTextures.length > 0 ? drapeTextures : undefined;\n }\n\n private static _scratchIntersectRange = Range2d.createNull();\n\n private computeDrapeTexture(thisRectangle: Range2d, thisDiagonal: Vector2d, imageryTile: ImageryMapTile, drapeRectangle: Range2d, clipRectangle?: Range2d): TerrainTexture {\n assert(imageryTile.texture !== undefined);\n\n // Compute transformation from the terrain tile texture coordinates (0-1) to the drape tile texture coordinates.\n const drapeDiagonal = drapeRectangle.diagonal(MapTile._scratchDrapeDiagonal);\n const translate = Vector2d.create((thisRectangle.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (thisRectangle.low.y - drapeRectangle.low.y) / drapeDiagonal.y);\n const scale = Vector2d.create(thisDiagonal.x / drapeDiagonal.x, thisDiagonal.y / drapeDiagonal.y);\n const featureIndex = this.mapLoader.getFeatureIndex(imageryTile.imageryTree.modelId);\n let clipRect;\n if (undefined !== clipRectangle) {\n const intersect = clipRectangle.intersect(drapeRectangle, MapTile._scratchIntersectRange);\n assert(!intersect.isNull);\n clipRect = Range2d.createXYXY((intersect.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.low.y - drapeRectangle.low.y) / drapeDiagonal.y, (intersect.high.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.high.y - drapeRectangle.low.y) / drapeDiagonal.y);\n }\n\n const imageryModelId = imageryTile.tree.modelId;\n return new TerrainTexture(imageryTile.texture, featureIndex, scale, translate, drapeRectangle, this.mapTree.getLayerIndex(imageryModelId), this.mapTree.getLayerTransparency(imageryModelId), clipRect);\n }\n\n /** @internal */\n public override setContent(content: TerrainTileContent): void {\n\n if (this.quadId.level < this.maxDepth) {\n const childIds = this.quadId.getChildIds();\n for (const childId of childIds) {\n if (!this.mapLoader.isTileAvailable(childId)) {\n this._mesh = content.terrain?.mesh; // If a child is unavailable retain mesh for upsampling.\n break;\n }\n }\n }\n\n if (this.mapTree.produceGeometry) {\n const iModelTransform = this.mapTree.iModelTransform;\n const geometryTransform = content.terrain?.renderGeometry?.transform;\n const transform = geometryTransform ? iModelTransform.multiplyTransformTransform(geometryTransform) : iModelTransform;\n const polyface = content.terrain?.mesh ? RealityMeshParams.toPolyface(content.terrain.mesh, { transform }) : undefined;\n this._geometry = polyface ? { polyfaces: [polyface] } : undefined;\n\n } else {\n dispose(this._renderGeometry);\n this._renderGeometry = content.terrain?.renderGeometry;\n }\n\n this.everLoaded = true;\n\n if (undefined !== content.contentRange)\n this._contentRange = content.contentRange;\n\n this.setIsReady();\n }\n\n /** @internal */\n public override freeMemory(): void {\n // ###TODO MapTiles and ImageryMapTiles share resources and don't currently interact well with TileAdmin.freeMemory(). Opt out for now.\n }\n\n /** @internal */\n public override disposeContents() {\n super.disposeContents();\n this._renderGeometry = dispose(this._renderGeometry);\n this.clearImageryTiles();\n // Note - don't dispose of mesh - these should only ever exist on terrain leaf tile and are required by children. Let garbage collector handle them.\n }\n}\n\n/** A child tile that has no content of its own available. It instead produces content by up-sampling the content of an ancestor tile.\n * @internal\n */\nexport class UpsampledMapTile extends MapTile {\n /** The ancestor tile whose content will be up-sampled. */\n private readonly _loadableTile: MapTile;\n\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined, loadableTile: MapTile) {\n super(params, mapTree, quadId, patch, rectangle, heightRange, cornerRays);\n this._loadableTile = loadableTile;\n }\n\n public override get isUpsampled() { return true; }\n public override get isEmpty() { return false; }\n public override get loadableTile(): RealityTile { return this._loadableTile; }\n\n private upsampleFromParent() {\n const parent = this.loadableTerrainTile;\n const parentMesh = parent.mesh;\n if (undefined === parentMesh) {\n return undefined;\n }\n const thisId = this.quadId, parentId = parent.quadId;\n const levelDelta = thisId.level - parentId.level;\n const thisColumn = thisId.column - (parentId.column << levelDelta);\n const thisRow = thisId.row - (parentId.row << levelDelta);\n const scale = 1.0 / (1 << levelDelta);\n const parentParameterRange = Range2d.createXYXY(scale * thisColumn, scale * thisRow, scale * (thisColumn + 1), scale * (thisRow + 1));\n const upsample = upsampleRealityMeshParams(parentMesh, parentParameterRange);\n this.adjustHeights(upsample.heightRange.low, upsample.heightRange.high);\n return upsample;\n }\n\n public override get renderGeometry() {\n if (undefined === this._renderGeometry) {\n const upsample = this.upsampleFromParent();\n const projection = this.loadableTerrainTile.getProjection(this.heightRange);\n if (upsample)\n this._renderGeometry = IModelApp.renderSystem.createTerrainMesh(upsample.mesh, projection.transformFromLocal, true);\n }\n return this._renderGeometry;\n }\n\n public override get isLoading(): boolean { return this.loadableTile.isLoading; }\n public override get isQueued(): boolean { return this.loadableTile.isQueued; }\n public override get isNotFound(): boolean { return this.loadableTile.isNotFound; }\n public override get isReady(): boolean { return (this._renderGeometry !== undefined || this.loadableTile.loadStatus === TileLoadStatus.Ready) && this.baseImageryIsReady; }\n\n public override markUsed(args: TileDrawArgs): void {\n args.markUsed(this);\n args.markUsed(this.loadableTile);\n }\n}\n"]}